Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/uyu423/r2curl
Node.js Request Wrapper (axios, fetch, ..) to cURL Command String
https://github.com/uyu423/r2curl
axios curl
Last synced: 2 months ago
JSON representation
Node.js Request Wrapper (axios, fetch, ..) to cURL Command String
- Host: GitHub
- URL: https://github.com/uyu423/r2curl
- Owner: uyu423
- License: mit
- Created: 2019-04-24T09:25:58.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T05:09:34.000Z (about 2 years ago)
- Last Synced: 2024-10-16T14:18:11.283Z (3 months ago)
- Topics: axios, curl
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/r2curl
- Size: 1.08 MB
- Stars: 33
- Watchers: 3
- Forks: 5
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# r2curl
[![npm version](https://badge.fury.io/js/r2curl.svg)](https://badge.fury.io/js/r2curl) [![Download Status](https://img.shields.io/npm/dw/r2curl.svg)](https://npmcharts.com/compare/r2curl?minimal=true) [![Github Star](https://img.shields.io/github/stars/uyu423/r2curl.svg?style=popout)](https://github.com/uyu423/r2curl) [![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php) [![CircleCI](https://circleci.com/gh/uyu423/r2curl.svg?style=svg)](https://circleci.com/gh/uyu423/r2curl) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/f74cdea970d44550a0bff9319e467256)](https://www.codacy.com/app/uyu423/r2curl?utm_source=github.com&utm_medium=referral&utm_content=uyu423/r2curl&utm_campaign=Badge_Grade) [![Code Climate](https://codeclimate.com/github/uyu423/r2curl.svg)](https://codeclimate.com/github/uyu423/r2curl) [![Test Coverage](https://api.codeclimate.com/v1/badges/bb19fbd2394b545aefb2/test_coverage)](https://codeclimate.com/github/uyu423/r2curl/test_coverage)
## Background
- [r2curl](https://github.com/uyu423/r2curl) was inspired by [@delirius325/axios-curlirize](https://github.com/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](https://www.npmjs.com/package/node-fetch) or [request](https://www.npmjs.com/package/request).## Roadmap
- [x] [axios](https://www.npmjs.com/package/axios)
- [x] AxiosRequestConfig
- [x] AxiosResposne
- [ ] [node-fetch](https://www.npmjs.com/package/node-fetch)
- [ ] [request](https://www.npmjs.com/package/request)
- [ ] ...## Install
```bash
npm install r2curl --save
```## Usage
### axios
#### `AxiosResponse`
```typescript
// 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`
```typescript
// 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
- update soon (target 0.2.0)
- see [github project board](https://github.com/uyu423/r2curl/projects/1)### request
- update soon (target 0.2.0)
- see [github project board](https://github.com/uyu423/r2curl/projects/1)## More `r2curl` Options
### `option.quote`
- Determines the type of quota around the body and uri.
- default is `single````typescript
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.```typescript
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.```typescript
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}\''
```