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

0.2.4 • Public • Published

r2curl

npm version Download Status Github Star MIT Licence CircleCI Codacy Badge Code Climate Test Coverage

Background

  • r2curl was inspired by @delirius325/axios-curlirize.
  • axios-curlirize is very convenient. but works as a middleware for axios, and I think this part is black box logic
    • it contains potentially asynchronous concurrency issues and difficult-to-manage elements.
  • So I created a new 'Request to cURL' package that is completely independent of the dependencies of axios.

Feature

  • Generates cURL commands completely independently from the outside of the request wrapper package.
  • Provides additional options involved in generating the cURL command.
  • It will be updated soon to be available in packages like node-fetch or request.

Roadmap

Install

npm install r2curl --save

Usage

axios

AxiosResponse

// if js, const r2curl = require('r2curl');
import r2curl from 'r2curl';
 
const response = await axios.get('https://google.com');
const curl = r2curl(response);
 
console.log(curl);
// stdout "curl -X GET 'https://google.com' -H 'Accept:application/json, text/plain, */*' -H 'User-Agent:axios/0.18.0'"

AxiosRequestConfig

// if js, const r2curl = require('r2curl');
import r2curl from 'r2curl';
 
// config as AxiosRequestConfig
const config = {
  url: 'https://google.com',
  method: 'POST',
  data: {
    caller: 'curl tester',
  },
  headers: {
    'Content-Type': 'application/json',
  },
};
 
const curl = r2curl(reqeustConfig);
console.log(curl);
// stdout `curl -X POST 'https://google.com' -H 'Content-Type:application/json' --data '{"caller":"curl tester"}'`
 
const response = await axios.request(config);

node-fetch

request

More r2curl Options

option.quote

  • Determines the type of quota around the body and uri.
  • default is single
import r2curl from 'r2curl';
 
// option as IR2CurlOptions.ts
const option = {
  /** Determines the type of quota around the body and uri. */
  quote: 'double',
};
 
const curl = r2curl(requestConfig, option);
console.log(curl); 

option.defaultContentType

  • Determines the default Content-Type header value for POST and PUT requests.
  • default is application/json; charset=utf-8
  • Type is (enum) HTTP_HEADER_CONTENT_TYPE | string | false;
  • If you give (boolean) false to defaultContentType, you can disable Content-Type Header.
import r2curl, { HTTP_HEADER_CONTENT_TYPE } from 'r2curl';
 
// const optionUsingEnum = {
//   defaultContentType: HTTP_HEADER_CONTENT_TYPE.TEXT,
// };
const option = {
  defaultContentType: 'application/json5',
}
const request: AxiosRequestConfig = { url: 'https://google.com', method: 'POST' };
 
const curl = r2curl(config, option);
console.log(curl); 
// output: curl -X POST 'https://google.com' -H 'Content-Type:application/json5

option.forceBody

  • Accept Body all HTTP Method.
  • By default, Body is not allowed in GET and DELETE methods.
  • However, some services such as ElasticSearch should be able to use the Body as a GET method. At this point, use this option to activate the Body.
import r2curl from 'r2curl';
 
const config: AxiosRequestConfig = {
  url: 'https://google.com',
  method: 'GET',
  data: {
    caller: 'https://github.com/uyu423/r2curl',
    sorry: true,
  },
};
 
const option = {
  forceBody: true,
}
 
const curl = r2curl(config, option);
// output: 'curl -X GET \'https://google.com\' --data \'{"caller":"https://github.com/uyu423/r2curl","sorry":true}\''

Readme

Keywords

Package Sidebar

Install

npm i r2curl

Weekly Downloads

2,221

Version

0.2.4

License

MIT

Unpacked Size

32.1 kB

Total Files

31

Last publish

Collaborators

  • uyu423