jin-curlize
TypeScript icon, indicating that this package has built-in type declarations

1.6.1 • Public • Published

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

Name Requirement Description
prettify require Apply prettifing. Add newline and backslash add on line-ending
indent optional Only work on prettify set true, make space size
disableFollowRedirect optional If set true, remove --location option from command
changeHeaderKey optional change header key case. eg. content-type to Content-Type
replacer.querystring optional replacer for querystring
replacer.body optional replacer for body
replacer.header optional replacer for header

createAxiosFromFastify3

Name Requirement Description
changeHeaderKey optional change header key case. eg. content-type to Content-Type
replacer.querystring optional replacer for querystring
replacer.body optional replacer for body
replacer.header optional replacer 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.

Readme

Keywords

none

Package Sidebar

Install

npm i jin-curlize

Weekly Downloads

75

Version

1.6.1

License

MIT

Unpacked Size

102 kB

Total Files

8

Last publish

Collaborators

  • jooni