node-formidable / formidable

The most used, flexible, fast and streaming parser for multipart form data. Supports uploading to serverless environments, AWS S3, Azure, GCP or the filesystem. Used in production.
MIT License
7k stars 680 forks source link

Make multipart parser less dependent on NodeJS #956

Open jimmywarting opened 8 months ago

jimmywarting commented 8 months ago

I would like to use the parser in basically all env. Node, deno, bun, even browser. however it's so dependent upon NodeJS stuff.

I would like to make a feature request to make it less dependent on NodeJS. meaning: remove node:buffer and node:stream

Buffer could be replaced with Uint8Array and the transformer could be replaced with something that's is iterable

There is no reason why the parser couldn't or should not work with both a node:stream or a web stream coming from a ReadableStream. they are both iterable. and both yields uint8array.

so instead of feeding/piping in data into the parser then i would suggest that it takes a iterable and read the stream.

new MultipartParser(boundary, body)

and the parser would then do something like

for await (const uint8_chunk of body) {
  ...
}
tunnckoCore commented 3 months ago

Hey @jimmywarting! Yeah, i had that version somewhere, it's just the parser, which exposes a function. It's practically the same as your fork.

At one point i thought to make scoped packages. I even think i have mini-formidable or something like that.

The reason i not done much in the past year is that they merged Busboy into the Node core and this kinda killed my enthusiasm. But i regularly see that people are still massively using formidable with 9m+ downloads per week so..

tunnckoCore commented 3 months ago

@jimmywarting here it is https://www.npmjs.com/package/formidable-mini a thin compat layer for Formidable.

Also just the parser https://www.npmjs.com/package/formidable-parser