Spaces:
Runtime error
Runtime error
const WritableStream = require('node:stream').Writable | |
const { inherits } = require('node:util') | |
const Dicer = require('../deps/dicer/lib/Dicer') | |
const MultipartParser = require('./types/multipart') | |
const UrlencodedParser = require('./types/urlencoded') | |
const parseParams = require('./utils/parseParams') | |
function Busboy (opts) { | |
if (!(this instanceof Busboy)) { return new Busboy(opts) } | |
if (typeof opts !== 'object') { | |
throw new TypeError('Busboy expected an options-Object.') | |
} | |
if (typeof opts.headers !== 'object') { | |
throw new TypeError('Busboy expected an options-Object with headers-attribute.') | |
} | |
if (typeof opts.headers['content-type'] !== 'string') { | |
throw new TypeError('Missing Content-Type-header.') | |
} | |
const { | |
headers, | |
...streamOptions | |
} = opts | |
this.opts = { | |
autoDestroy: false, | |
...streamOptions | |
} | |
WritableStream.call(this, this.opts) | |
this._done = false | |
this._parser = this.getParserByHeaders(headers) | |
this._finished = false | |
} | |
inherits(Busboy, WritableStream) | |
Busboy.prototype.emit = function (ev) { | |
if (ev === 'finish') { | |
if (!this._done) { | |
this._parser?.end() | |
return | |
} else if (this._finished) { | |
return | |
} | |
this._finished = true | |
} | |
WritableStream.prototype.emit.apply(this, arguments) | |
} | |
Busboy.prototype.getParserByHeaders = function (headers) { | |
const parsed = parseParams(headers['content-type']) | |
const cfg = { | |
defCharset: this.opts.defCharset, | |
fileHwm: this.opts.fileHwm, | |
headers, | |
highWaterMark: this.opts.highWaterMark, | |
isPartAFile: this.opts.isPartAFile, | |
limits: this.opts.limits, | |
parsedConType: parsed, | |
preservePath: this.opts.preservePath | |
} | |
if (MultipartParser.detect.test(parsed[0])) { | |
return new MultipartParser(this, cfg) | |
} | |
if (UrlencodedParser.detect.test(parsed[0])) { | |
return new UrlencodedParser(this, cfg) | |
} | |
throw new Error('Unsupported Content-Type.') | |
} | |
Busboy.prototype._write = function (chunk, encoding, cb) { | |
this._parser.write(chunk, cb) | |
} | |
module.exports = Busboy | |
module.exports.default = Busboy | |
module.exports.Busboy = Busboy | |
module.exports.Dicer = Dicer | |