@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
46 lines (45 loc) • 1.16 kB
JavaScript
import f from "formidable";
import { Writable as c } from "node:stream";
import p from "../../utils/non-nullable.mjs";
import F from "../containers/incoming-body.mjs";
import d from "../containers/incoming-file.mjs";
async function S(m, o) {
const n = {}, [r, t] = await f({
maxTotalFileSize: 104857600,
maxFileSize: 10485760,
maxFiles: 10,
allowEmptyFiles: !1,
maxFieldsSize: 5242880,
maxFields: o?.fieldsLimit,
filename: () => crypto.randomUUID(),
// Custom write stream to collect file chunks in memory
fileWriteStreamHandler: (a) => {
const i = [];
return new c({
write(e, u, s) {
i.push(e), s();
},
final(e) {
n[a.newFilename] = Buffer.concat(i), e();
}
});
}
}).parse(m), l = p(
Object.entries(t).map(
([a, i]) => i?.map((e) => new d({
key: a,
name: e.newFilename,
originalName: e.originalFilename ?? "",
mimeType: e.mimetype ?? "application/octet-stream",
buffer: n[e.newFilename]
}))
)
).flat();
return {
body: new F(r),
files: l
};
}
export {
S as default
};