Skip to content

Build a form without headache

License

Notifications You must be signed in to change notification settings

Eomm/form-auto-content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

43 Commits

form-auto-content

Build StatusJavaScript Style Guide

Build a form payload without caring if it should be application/x-www-form-urlencoded or multipart/form-data. It works with Fastify and 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:

{payload: Stream,// the data Streamheaders: {}// a JSON with the `content-type` field set}

x-www-form-urlencoded

constformAutoContent=require('form-auto-content')constmyForm=formAutoContent({field1: 'value1',field2: ['value2','value2.2']// array are supported too!!})myForm.payload// Stream of the string in application/x-www-form-urlencoded formatmyForm.headers// JSON with the `content-type` field set

multipart/form-data

constformAutoContent=require('form-auto-content')constmyForm=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 formatmyForm.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!

constformAutoContent=require('form-auto-content')constoption={payload: 'body',headers: 'head'}constmyCustomForm=formAutoContent({field1: 'value1',field2: ['value2','value2.2']// array are supported too!!},option)myForm.body// Stream of the string in application/x-www-form-urlencoded formatmyForm.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.

importformAutoContentfrom'form-auto-content';

When an options object is provided, the result types will be accurately inferred:

importformAutoContentfrom'form-auto-content';constoption={payload: 'body',headers: 'head',forceMultiPart: true,}asconst;constmyCustomForm=formAutoContent({field1: 'value1',field2: ['value2']},option);myCustomForm.body// okmyCustomForm.head// okmyCustomForm.payload// Typescript error: property 'payload' does not exists in type...

License

Licensed under MIT.

About

Build a form without headache

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Contributors 6