Detalhes do pacote

form-data

form-data475.7mMIT4.0.4

A library to create readable "multipart/form-data" streams. Can be used to submit forms and file uploads to other web applications.

readme (leia-me)

Form-Data NPM Module Join the chat at https://gitter.im/form-data/form-data

A library to create readable "multipart/form-data" streams. Can be used to submit forms and file uploads to other web applications.

The API of this library is inspired by the XMLHttpRequest-2 FormData Interface.

Linux Build MacOS Build Windows Build

Coverage Status Dependency Status

Install

npm install --save form-data

Usage

In this example we are constructing a form with 3 fields that contain a string, a buffer and a file stream.

var FormData = require('form-data');
var fs = require('fs');

var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

Also you can use http-response stream:

var FormData = require('form-data');
var http = require('http');

var form = new FormData();

http.request('http://nodejs.org/images/logo.png', function (response) {
  form.append('my_field', 'my value');
  form.append('my_buffer', new Buffer(10));
  form.append('my_logo', response);
});

Or @mikeal's request stream:

var FormData = require('form-data');
var request = require('request');

var form = new FormData();

form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_logo', request('http://nodejs.org/images/logo.png'));

In order to submit this form to a web application, call submit(url, [callback]) method:

form.submit('http://example.org/', function (err, res) {
  // res – response object (http.IncomingMessage)  //
  res.resume();
});

For more advanced request manipulations submit() method returns http.ClientRequest object, or you can choose from one of the alternative submission methods.

Custom options

You can provide custom options, such as maxDataSize:

var FormData = require('form-data');

var form = new FormData({ maxDataSize: 20971520 });
form.append('my_field', 'my value');
form.append('my_buffer', /* something big */);

List of available options could be found in combined-stream

Alternative submission methods

You can use node's http client interface:

var http = require('http');

var request = http.request({
  method: 'post',
  host: 'example.org',
  path: '/upload',
  headers: form.getHeaders()
});

form.pipe(request);

request.on('response', function (res) {
  console.log(res.statusCode);
});

Or if you would prefer the 'Content-Length' header to be set for you:

form.submit('example.org/upload', function (err, res) {
  console.log(res.statusCode);
});

To use custom headers and pre-known length in parts:

var CRLF = '\r\n';
var form = new FormData();

var options = {
  header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,
  knownLength: 1
};

form.append('my_buffer', buffer, options);

form.submit('http://example.com/', function (err, res) {
  if (err) throw err;
  console.log('Done');
});

Form-Data can recognize and fetch all the required information from common types of streams (fs.readStream, http.response and mikeal's request), for some other types of streams you'd need to provide "file"-related information manually:

someModule.stream(function (err, stdout, stderr) {
  if (err) throw err;

  var form = new FormData();

  form.append('file', stdout, {
    filename: 'unicycle.jpg', // ... or:
    filepath: 'photos/toys/unicycle.jpg',
    contentType: 'image/jpeg',
    knownLength: 19806
  });

  form.submit('http://example.com/', function (err, res) {
    if (err) throw err;
    console.log('Done');
  });
});

The filepath property overrides filename and may contain a relative path. This is typically used when uploading multiple files from a directory.

For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to form.submit() as first parameter:

form.submit({
  host: 'example.com',
  path: '/probably.php?extra=params',
  auth: 'username:password'
}, function (err, res) {
  console.log(res.statusCode);
});

In case you need to also send custom HTTP headers with the POST request, you can use the headers key in first parameter of form.submit():

form.submit({
  host: 'example.com',
  path: '/surelynot.php',
  headers: { 'x-test-header': 'test-header-value' }
}, function (err, res) {
  console.log(res.statusCode);
});

Methods

Void append( String field, Mixed value [, Mixed options] )

Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.

var form = new FormData();
form.append('my_string', 'my value');
form.append('my_integer', 1);
form.append('my_boolean', true);
form.append('my_buffer', new Buffer(10));
form.append('my_array_as_json', JSON.stringify(['bird', 'cute']));

You may provide a string for options, or an object.

// Set filename by providing a string for options
form.append('my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg');

// provide an object.
form.append('my_file', fs.createReadStream('/foo/bar.jpg'), { filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806 });

Headers getHeaders( [Headers userHeaders] )

This method adds the correct content-type header to the provided array of userHeaders.

String getBoundary()

Return the boundary of the formData. By default, the boundary consists of 26 - followed by 24 numbers for example:

--------------------------515890814546601021194782

Void setBoundary(String boundary)

Set the boundary string, overriding the default behavior described above.

Note: The boundary must be unique and may not appear in the data.

Buffer getBuffer()

Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.

var form = new FormData();
form.append('my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]));
form.append('my_file', fs.readFileSync('/foo/bar.jpg'));

axios.post('https://example.com/path/to/api', form.getBuffer(), form.getHeaders());

Note: Because the output is of type Buffer, you can only append types that are accepted by Buffer: string, Buffer, ArrayBuffer, Array, or Array-like Object. A ReadStream for example will result in an error.

Integer getLengthSync()

Same as getLength but synchronous.

Note: getLengthSync doesn't calculate streams length.

Integer getLength(function callback )

Returns the Content-Length async. The callback is used to handle errors and continue once the length has been calculated

this.getLength(function (err, length) {
  if (err) {
    this._error(err);
    return;
  }

  // add content length
  request.setHeader('Content-Length', length);

  ...
}.bind(this));

Boolean hasKnownLength()

Checks if the length of added values is known.

Request submit(params, function callback )

Submit the form to a web application.

var form = new FormData();
form.append('my_string', 'Hello World');

form.submit('http://example.com/', function (err, res) {
  // res – response object (http.IncomingMessage)  //
  res.resume();
} );

String toString()

Returns the form data as a string. Don't use this if you are sending files or buffers, use getBuffer() instead.

Integration with other libraries

Request

Form submission using request:

var formData = {
  my_field: 'my_value',
  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
};

request.post({url:'http://service.com/upload', formData: formData}, function (err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
});

For more details see request readme.

node-fetch

You can also submit a form using node-fetch:

var form = new FormData();

form.append('a', 1);

fetch('http://example.com', { method: 'POST', body: form })
    .then(function (res) {
        return res.json();
    }).then(function (json) {
        console.log(json);
    });

axios

In Node.js you can post a file using axios:

const form = new FormData();
const stream = fs.createReadStream(PATH_TO_FILE);

form.append('image', stream);

// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
const formHeaders = form.getHeaders();

axios.post('http://example.com', form, {
  headers: {
    ...formHeaders,
  },
})
  .then(response => response)
  .catch(error => error)

Notes

  • getLengthSync() method DOESN'T calculate length for streams, use knownLength options as workaround.
  • getLength(cb) will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using knownLength).
  • submit will not add content-length if form length is unknown or not calculable.
  • Starting version 2.x FormData has dropped support for node@0.10.x.
  • Starting version 3.x FormData has dropped support for node@4.x.

License

Form-Data is released under the MIT license.

changelog (log de mudanças)

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

v4.0.4 - 2025-07-16

Commits

  • [meta] add auto-changelog 811f682
  • [Tests] handle predict-v8-randomness failures in node < 17 and node > 23 1d11a76
  • [Fix] Switch to using crypto random for boundary values 3d17230
  • [Tests] fix linting errors 5e34080
  • [meta] actually ensure the readme backup isn’t published 316c82b
  • [Dev Deps] update @ljharb/eslint-config 58c25d7
  • [meta] fix readme capitalization 2300ca1

v4.0.3 - 2025-06-05

Fixed

  • [Fix] append: avoid a crash on nullish values #577

Commits

  • [eslint] use a shared config 426ba9a
  • [eslint] fix some spacing issues 2094191
  • [Refactor] use hasown 81ab41b
  • [Fix] validate boundary type in setBoundary() method 8d8e469
  • [Tests] add tests to check the behavior of getBoundary with non-strings 837b8a1
  • [Dev Deps] remove unused deps 870e4e6
  • [meta] remove local commit hooks e6e83cc
  • [Dev Deps] update eslint 4066fd6
  • [meta] fix scripts to use prepublishOnly c4bbb13

v4.0.2 - 2025-02-14

Merged

  • [Fix] set Symbol.toStringTag when available #573
  • [Fix] set Symbol.toStringTag when available #573
  • fix (npmignore): ignore temporary build files #532
  • fix (npmignore): ignore temporary build files #532

Fixed

  • [Fix] set Symbol.toStringTag when available (#573) #396
  • [Fix] set Symbol.toStringTag when available (#573) #396
  • [Fix] set Symbol.toStringTag when available #396

Commits

  • Merge tags v2.5.3 and v3.0.3 92613b9
  • [Tests] migrate from travis to GHA 806eda7
  • [Tests] migrate from travis to GHA 8fdb3bc
  • [Refactor] use Object.prototype.hasOwnProperty.call 7fecefe
  • [Refactor] use Object.prototype.hasOwnProperty.call 6e682d4
  • [Refactor] use Object.prototype.hasOwnProperty.call df3c1e6
  • [Dev Deps] update @types/node, browserify, coveralls, cross-spawn, eslint, formidable, in-publish, pkgfiles, pre-commit, puppeteer, request, tape, typescript 8261fcb
  • [Dev Deps] update @types/node, browserify, coveralls, cross-spawn, eslint, formidable, in-publish, pkgfiles, pre-commit, puppeteer, request, tape, typescript fb66cb7
  • [Dev Deps] update @types/node, browserify, coveralls, eslint, formidable, in-publish, phantomjs-prebuilt, pkgfiles, pre-commit, request, tape, typescript 819f6b7
  • [eslint] clean up ignores 3217b3d
  • [eslint] clean up ignores 3a9d480
  • [Fix] Buffer.from and Buffer.alloc require node 4+ c499f76
  • Only apps should have lockfiles b82f590
  • Only apps should have lockfiles b170ee2
  • [Deps] update combined-stream, mime-types 6b1ca1d
  • [Dev Deps] pin request which via tough-cookie ^2.4 depends on psl e5df7f2
  • [Deps] update mime-types 5a5bafe
  • Bumped version 2.5.3 9457283
  • [Dev Deps] pin request which via tough-cookie ^2.4 depends on psl 9dbe192
  • Merge tags v2.5.2 and v3.0.2 d53265d
  • Bumped version 2.5.2 7020dd4
  • [Dev Deps] downgrade cross-spawn 3fc1a9b
  • fix: move util.isArray to Array.isArray (#564) edb555a
  • fix: move util.isArray to Array.isArray (#564) 10418d1

v4.0.1 - 2024-10-10

Commits

  • [Tests] migrate from travis to GHA 757b4e3
  • [eslint] clean up ignores e8f0d80
  • fix (npmignore): ignore temporary build files 335ad19
  • fix: move util.isArray to Array.isArray 440d3be

v4.0.0 - 2021-02-15

Merged

  • Handle custom stream #382

Commits

v3.0.3 - 2025-02-14

Merged

  • [Fix] set Symbol.toStringTag when available #573

Fixed

  • [Fix] set Symbol.toStringTag when available (#573) #396

Commits

  • [Refactor] use Object.prototype.hasOwnProperty.call 7fecefe
  • [Dev Deps] update @types/node, browserify, coveralls, cross-spawn, eslint, formidable, in-publish, pkgfiles, pre-commit, puppeteer, request, tape, typescript 8261fcb
  • Only apps should have lockfiles b82f590
  • [Dev Deps] pin request which via tough-cookie ^2.4 depends on psl e5df7f2
  • [Deps] update mime-types 5a5bafe

v3.0.2 - 2024-10-10

Merged

  • fix (npmignore): ignore temporary build files #532

Commits

  • [Tests] migrate from travis to GHA 8fdb3bc
  • [eslint] clean up ignores 3217b3d
  • fix: move util.isArray to Array.isArray (#564) edb555a

v3.0.1 - 2021-02-15

Merged

  • Fix typo: ads -> adds #451

Commits

  • feat: add setBoundary method 55d90ce

v3.0.0 - 2019-11-05

Merged

  • Update Readme.md #449
  • Update package.json #448
  • fix memory leak #447
  • form-data: Replaced PhantomJS Dependency #442
  • Fix constructor options in Typescript definitions #446
  • Fix the getHeaders method signatures #434
  • Update combined-stream (fixes #422) #424

Fixed

  • Merge pull request #424 from botgram/update-combined-stream #422
  • Update combined-stream (fixes #422) #422

Commits

  • Add readable stream options to constructor type 80c8f74
  • Fixed: getHeaders method signatures f4ca7f8
  • Pass options to constructor if not used with new 4bde68e
  • Make userHeaders optional 2b4e478

v2.5.3 - 2025-02-14

Merged

  • [Fix] set Symbol.toStringTag when available #573

Fixed

  • [Fix] set Symbol.toStringTag when available (#573) #396

Commits

  • [Refactor] use Object.prototype.hasOwnProperty.call 6e682d4
  • [Dev Deps] update @types/node, browserify, coveralls, eslint, formidable, in-publish, phantomjs-prebuilt, pkgfiles, pre-commit, request, tape, typescript 819f6b7
  • Only apps should have lockfiles b170ee2
  • [Deps] update combined-stream, mime-types 6b1ca1d
  • Bumped version 2.5.3 9457283
  • [Dev Deps] pin request which via tough-cookie ^2.4 depends on psl 9dbe192

v2.5.2 - 2024-10-10

Merged

  • fix (npmignore): ignore temporary build files #532

Commits

  • [Tests] migrate from travis to GHA 806eda7
  • [eslint] clean up ignores 3a9d480
  • [Fix] Buffer.from and Buffer.alloc require node 4+ c499f76
  • Bumped version 2.5.2 7020dd4
  • [Dev Deps] downgrade cross-spawn 3fc1a9b
  • fix: move util.isArray to Array.isArray (#564) 10418d1

v2.5.1 - 2019-08-28

Merged

  • Fix error in callback signatures #435
  • -Fixed: Eerror in the documentations as indicated in #439 #440
  • Add constructor options to TypeScript defs #437

Commits

  • Add remaining combined-stream options to typedef 4d41a32
  • Bumped version 2.5.1 8ce81f5
  • Bump rimraf to 2.7.1 a6bc2d4

v2.5.0 - 2019-07-03

Merged

    • Added: public methods with information and examples to readme #429
  • chore: move @types/node to devDep #431
  • Switched windows tests from AppVeyor to Travis #430
  • feat(typings): migrate TS typings #427 #428
  • enhance the method of path.basename, handle undefined case #421

Commits

    • Added: public methods with information and examples to the readme file. 21323f3
  • feat(typings): migrate TS typings a3c0142
  • Switched to Travis Windows from Appveyor fc61c73
    • Fixed: rendering of subheaders e93ed8d
  • Updated deps and readme e3d8628
  • Updated dependencies 19add50
  • Bumped version to 2.5.0 905f173
    • Fixed: filesize is not a valid option? knownLength should be used for streams d88f912
  • Bump notion of modern node to node8 508b626
  • enhance the method of path.basename faaa68a

v2.4.0 - 2019-06-19

Merged

  • Added "getBuffer" method and updated certificates #419
  • docs(readme): add axios integration document #425
  • Allow newer versions of combined-stream #402

Commits

v2.3.2 - 2018-02-13

Merged

  • Pulling in fixed combined-stream #379

Commits

  • All the dev dependencies are breaking in old versions of node :'( c7dba6a
  • Updated badges 19b6c7a
  • Try tests in node@4 872a326
  • Pull in final version 9d44871

v2.3.1 - 2017-08-24

Commits

  • Updated readme with custom options example 8e0a569
  • Added support (tests) for node 8 d1d6f4a

v2.3.0 - 2017-08-24

Merged

  • Added custom options support #368
  • Allow form.submit with url string param to use https #249
  • Proper header production #357
  • Fix wrong MIME type in example #285

Commits

  • allow form.submit with url string param to use https c0390dc
  • update tests for url parsing eec0e80
  • Uses for in to assign properties instead of Object.assign f6854ed
  • Adds test to check for option override 61762f2
  • Removes the 2mb maxDataSize limitation dc171c3
  • Ignore .DS_Store e8a05d3

v2.2.0 - 2017-06-11

Merged

  • Filename can be a nested path #355

Commits

v2.1.4 - 2017-04-08

2.1.3 - 2017-04-08

v2.1.3 - 2017-04-08

Merged

  • toString should output '[object FormData]' #346

v2.1.2 - 2016-11-07

Merged

  • 271 Added check for self and window objects + tests #282

Commits

  • Added check for self and window objects + tests c99e4ec

v2.1.1 - 2016-10-03

Merged

  • Bumped dependencies. #270
  • Update browser.js shim to use self instead of window #267
  • Boilerplate code rediction #265
  • eslint@3.7.0 #266

Commits

  • code duplicates removed e9239fb
  • Changed according to requests aa99246
  • chore(package): update eslint to version 3.7.0 090a859

v2.1.0 - 2016-09-25

Merged

  • Added hasKnownLength public method #263

Commits

  • Added hasKnownLength public method 655b959

v2.0.0 - 2016-09-16

Merged

  • Replaced async with asynckit #258
  • Pre-release house cleaning #247

Commits

  • Replaced async with asynckit. Modernized 1749b78
  • Ignore .bak files c08190a
  • Trying to be more chatty. :) c79eabb

v1.0.0 - 2016-08-26

Merged

  • Allow custom header fields to be set as an object. #190
  • v1.0.0-rc4 #182
  • Avoid undefined variable reference in older browsers #176
  • More housecleaning #164
  • More cleanup #159
  • Added windows testing. Some cleanup. #158
  • Housecleaning. Added test coverage. #156
  • Second iteration of cleanup. #145

Commits

v1.0.0-rc4 - 2016-03-15

Merged

  • Housecleaning, preparing for the release #144
  • lib: emit error when failing to get length #127
  • Cleaning up for Codacity 2. #143
  • Cleaned up codacity concerns. #142
  • Should throw type error without new operator. #129

Commits

  • More cleanup 94b6565
  • Shuffling things around 3c2f172
  • Second iteration of cleanup. 347c88e
  • Housecleaning c335610
  • More housecleaning f573321
  • Trying to make far run on windows. + cleanup e426dfc
  • Playing with appveyor c9458a7
  • Updated dev dependencies. ceebe88
  • Replaced win-spawn with cross-spawn 405a69e
  • Updated readme badges. 12f282a
  • Making paths windows friendly. f4bddc5
  • [WIP] trying things for greater sanity 8ad1f02
  • Bending under Codacy bfff3bb
  • Another attempt to make windows friendly f3eb628
  • Updated dependencies. f73996e
  • Missed travis changes. 67ee79f
  • Restructured badges. 48444a1
  • Add similar type error as the browser for attempting to use form-data without new. 5711320
  • Took out codeclimate-test-reporter a7e0c65
  • One more 8e84cff

v1.0.0-rc3 - 2015-07-29

Merged

  • House cleaning. Added pre-commit. #140
  • Allow custom content-type without setting a filename. #138
  • Add node-fetch to alternative submission methods. #132
  • Update dependencies #130
  • Switching to container based TravisCI #136
  • Default content-type to 'application/octect-stream' #128
  • Allow filename as third option of .append #125

Commits

  • Allow custom content-type without setting a filename c8a77cc
  • Fixed ranged test. a5ac58c
  • Allow filename as third option of #append d081005
  • Allow custom content-type without setting a filename 8cb9709

v1.0.0-rc2 - 2015-07-21

Merged

  • 109 Append proper line break #123

  • Add shim for browser (browserify/webpack). #122
  • Update license field #115

Commits

v1.0.0-rc1 - 2015-06-13

Merged

  • v1.0.0-rc1 #114
  • Updated test targets #102
  • Remove duplicate plus sign #94

Commits

  • Made https test local. Updated deps. afe1959
  • Proper self-signed ssl 4d5ec50
  • Update HTTPS handling for modern days 2c11b01
  • Made tests more local 09633fa
  • Auto create tmp folder for Formidable 28714b7
  • remove duplicate plus sign 36e09c6

0.2 - 2014-12-06

Merged

  • Bumped version #96
  • Replace mime library. #95
  • 71 Respect bytes range in a read stream. #73

0.1.4 - 2014-06-23

Merged

  • Updated version. #76
  • 71 Respect bytes range in a read stream. #75

0.1.3 - 2014-06-17

Merged

  • Updated versions. #69
  • Added custom headers support #60
  • Added test for Request. Small fixes. #56

Commits

  • Added test for the custom header functionality bd50685
  • Documented custom headers option 77a024a
  • Removed 0.6 support. aee8dce

0.1.2 - 2013-10-02

Merged

  • Fixed default https port assignment, added tests. #52
  • 45 Added tests for multi-submit. Updated readme. #49

  • 47 return request from .submit() #48

Commits

0.1.1 - 2013-08-21

Merged

  • Added license type and reference to package.json #46

Commits

0.1.0 - 2013-07-08

Merged

  • Update master to 0.1.0 #44
  • 0.1.0 - Added error handling. Streamlined edge cases behavior. #43
  • Pointed badges back to mothership. #39
  • Updated node-fake to support 0.11 tests. #37
  • Updated tests to play nice with 0.10 #36
  • 32 Added .npmignore #34

  • Spring cleaning #30

Commits

  • Added error handling. Streamlined edge cases behavior. 4da496e
  • Made tests more deterministic. 7fc009b
  • Fixed styling. d373b41
  • 40 Updated Readme.md regarding getLengthSync() efb373f

  • Updated readme. 527e3a6

0.0.10 - 2013-05-08

Commits

  • Updated tests to play nice with 0.10. 932b39b
  • Added dependency tracking. 3131d7f

0.0.9 - 2013-04-29

Merged

  • Custom params for form.submit() should cover most edge cases. #22
  • Updated Readme and version number. #20
  • Allow custom headers and pre-known length in parts #17
  • Bumped version number. #12
  • Fix for #10 #11
  • Bumped version number. #8
  • Added support for https destination, http-response and mikeal's request streams. #7
  • Updated git url. #6
  • Version bump. #5
  • Changes to support custom content-type and getLengthSync. #4
  • make .submit(url) use host from url, not 'localhost' #2
  • Make package.json JSON #1

Fixed

  • Add MIT license #14

Commits

  • Spring cleaning. 850ba1b
  • Added custom request params to form.submit(). Made tests more stable. de3502f
  • Basic form (no files) working 6ffdc34
  • Got initial test to pass 9a59d08
  • Implement initial getLength 9060c91
  • Make getLength work with file streams 6f6b1e9
  • Implemented a simplistic submit() function 41e9cc1
  • added test for custom headers and content-length in parts (felixge/node-form-data/17) b16d14e
  • Fixed code styling. 5847424
  • 29 Added custom filename and content-type options to support identity-less streams. adf8b4a

  • Initial Readme and package.json 8c744e5
  • allow append() to completely override header and boundary 3fb2ad4
  • Syntax highlighting ab3a6a5
  • Updated Readme.md de8f441
  • Added examples to Readme file. c406ac9
  • pass options.knownLength to set length at beginning, w/o waiting for async size calculation e2ac039
  • Updated dependencies and added test command. 09bd7cd
  • Bumped version. Updated readme. 4581140
  • Test runner 1707ebb
  • Added .npmignore, bumped version. 2e033e0
  • FormData.prototype.append takes and passes along options (for header) b519203
  • Make package.json JSON bf1b58d
  • Add dependencies to package.json 7413d0b
  • Add convenient submit() interface 55855e4
  • Fix content type 08b6ae3
  • Combatting travis rvm calls. 409adfd
  • Fixed Issue #2 b3a5d66
  • Fix for #10. bab70b9
  • Trying workarounds for formidable - 0.6 "love". 25782a3
  • change whitespace to conform with felixge's style guide 9fa34f4
  • Add async to deps b7d1a6b
  • typo 7860a9c
  • Bumped version. fa36c1b
  • Updated .gitignore de567bd
  • Don't rely on resume() being called by pipe 1deae47
  • One more wrong content type 28f166d
  • Another typo b959b6a
  • Typo 698fa0a
  • Being simply dumb. b614db8
  • Fixed typo in the filename. 30af6be