1.6.1 • Published 3 months ago

jin-curlize v1.6.1

Weekly downloads
23
License
MIT
Repository
github
Last release
3 months ago

jin-curlize

ts Download Status Github Star Github Issues NPM version License ci codecov code style: prettier

jin-curlize create curl command from FastifyRequest.

Why?

  1. automatic create curl command from FastifyRequest
  2. Quickly retry error request
  3. Support querystring, header, body replacer

Table of Contents

How to works?

jin-curlize create curl command from FastifyRequest. URL, querystirng, header create using IncomingMessage in FastifyRequest. For example,

  • IncomingMessage.IncomingHttpHeaders to --header option
  • IncomingMessage.url to querystring and href

But IncomingMessage is already ended ReadableStream in FastifyReqest. So body create using FastifyRequest.body.

flowchart LR
    IMH[IncomingMessage.IncomingHttpHeaders] --> JC[jin-curlize]
    IMU[IncomingMessage.url] --> JC
    FB[FastifyRequest.body] --> JC
    JC --> C[curl command]
    JC --> A[AxiosRequestConfig]

Usage

create curl command

import fastify from 'fastify';
import { createFromFastify3 } from 'jin-curlize';

const server = fastify({
  logger: {
    transport: {
      target: 'pino-pretty',
    },
    serializers: {
      res(reply) {
        return {
          statusCode: reply.statusCode,
        };
      },
      req(request) {
        return {
          method: request.method,
          url: request.url,
          path: request.routerPath,
          parameters: request.params,
          headers: request.headers,
          curl: createFromFastify3(request, { prettify: false }),
        };
      },
    },
  },
});

server.listen({ host: '0.0.0.0', port: 3000 });

create axios request configuration

import fastify from 'fastify';
import { createAxiosFromFastify3 } from 'jin-curlize';

const fastify = fastify({
  logger: {
    transport: {
      target: 'pino-pretty',
    },
    serializers: {
      res(reply) {
        return {
          statusCode: reply.statusCode,
        };
      },
      req(request) {
        return {
          method: request.method,
          url: request.url,
          path: request.routerPath,
          parameters: request.params,
          headers: request.headers,
          axios: JSON.stringify(createAxiosFromFastify3(request)),
        };
      },
    },
  },
});

server.listen({ host: '0.0.0.0', port: 3000 });

Example

Axios Request

await axios.request({
  method: 'post',
  url: `http://localhost:3000/post-form`,
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  data: querystring.stringify({
    name: 'ironman',
    ability: ['energy repulsor', 'supersonic flight'],
  }),
});

Create command

curl -X POST 'http://localhost:3000/post-form' --header 'content-type: application/x-www-form-urlencoded' --data name='ironman' --data ability='energy repulsor' --data ability='supersonic flight'

Options

createFromFastify3

NameRequirementDescription
prettifyrequireApply prettifing. Add newline and backslash add on line-ending
indentoptionalOnly work on prettify set true, make space size
disableFollowRedirectoptionalIf set true, remove --location option from command
changeHeaderKeyoptionalchange header key case. eg. content-type to Content-Type
replacer.querystringoptionalreplacer for querystring
replacer.bodyoptionalreplacer for body
replacer.headeroptionalreplacer for header

createAxiosFromFastify3

NameRequirementDescription
changeHeaderKeyoptionalchange header key case. eg. content-type to Content-Type
replacer.querystringoptionalreplacer for querystring
replacer.bodyoptionalreplacer for body
replacer.headeroptionalreplacer for header

How do I add x-request-id?

jin-axios-curlize

If you want that curl command generate from AxiosRequest, use jin-axios-curlize package.

1.6.1

3 months ago

1.6.0

3 months ago

1.5.1

4 months ago

1.5.0

6 months ago

1.4.0

6 months ago

1.2.0

10 months ago

1.0.2

11 months ago

1.1.0

11 months ago

1.0.1

11 months ago

1.0.0

11 months ago

1.3.1

10 months ago

1.3.0

10 months ago

0.5.0

3 years ago