https://github.com/eomm/form-auto-content
Build a form without headache
https://github.com/eomm/form-auto-content
form hacktoberfest multipart-formdata upload x-www-form-urlencoded
Last synced: about 1 month ago
JSON representation
Build a form without headache
- Host: GitHub
- URL: https://github.com/eomm/form-auto-content
- Owner: Eomm
- License: mit
- Created: 2020-05-02T08:21:43.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-01-06T23:37:35.000Z (5 months ago)
- Last Synced: 2025-04-02T11:05:36.269Z (about 2 months ago)
- Topics: form, hacktoberfest, multipart-formdata, upload, x-www-form-urlencoded
- Language: JavaScript
- Homepage:
- Size: 40 KB
- Stars: 23
- Watchers: 2
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# form-auto-content
[](https://github.com/Eomm/form-auto-content/actions)
[](https://standardjs.com)Build a form payload without caring if it should be `application/x-www-form-urlencoded` or `multipart/form-data`.
It works with [`Fastify`](https://github.com/fastify/fastify/) and [`light-my-request`](https://github.com/fastify/light-my-request/) too!## Install
```
npm install form-auto-content
```## Usage
This module will transform your JSON to a payload ready to submit to an HTTP server!
The autosense feature will check if there is a `stream` or a `buffer` as input and it will act accordingly returning a `multipart/form-data` stream; otherwise it will create a `x-www-form-urlencoded` string.The module return a JSON like this:
```js
{
payload: Stream, // the data Stream
headers: {} // a JSON with the `content-type` field set
}
```### `x-www-form-urlencoded`
```js
const formAutoContent = require('form-auto-content')const myForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2'] // array are supported too!!
})myForm.payload // Stream of the string in application/x-www-form-urlencoded format
myForm.headers // JSON with the `content-type` field set
```### `multipart/form-data`
```js
const formAutoContent = require('form-auto-content')const myForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2'], // array are supported too!!
myFile: fs.createReadStream('the-file.xml'),
multipleFiles: [fs.createReadStream('file1.xml'), fs.createReadStream('file2.xml')],
wowBuffer: Buffer.from('a long string'),// the file options are supported too:
myRenamedFile: {
value: fs.createReadStream('./foo.md'),
options: {
filename: 'bar.md',
contentType: 'text/markdown'
}
},
// also in arrays!
renamedArray: [
{
value: fs.createReadStream('./one.json'),
options: { filename: 'foo.json' }
},
{
value: fs.createReadStream('./two.json'),
options: { filename: 'bar.json' }
}
]
})myForm.payload // Stream in multipart/form-data format
myForm.headers // JSON with the `content-type` field set to multipart/form-data
```## Options
To customize the output field names, add an extra option object with the `payload` and `headers` string!
```js
const formAutoContent = require('form-auto-content')const option = { payload: 'body', headers: 'head' }
const myCustomForm = formAutoContent({
field1: 'value1',
field2: ['value2', 'value2.2'] // array are supported too!!
}, option)myForm.body // Stream of the string in application/x-www-form-urlencoded format
myForm.head // JSON with the `content-type` field set
```## Typescript
This module ships with a handwritten TypeScript declaration file for TS support. The declaration exports a single function.
```ts
import formAutoContent from 'form-auto-content';
```When an options object is provided, the result types will be accurately inferred:
```ts
import formAutoContent from 'form-auto-content';const option = {
payload: 'body',
headers: 'head',
forceMultiPart: true,
} as const;const myCustomForm = formAutoContent({
field1: 'value1',
field2: ['value2']
}, option);myCustomForm.body // ok
myCustomForm.head // okmyCustomForm.payload // Typescript error: property 'payload' does not exists in type...
```## License
Licensed under [MIT](./LICENSE).