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 | |