Bump undici from 5.28.4 to 5.28.5 (#1205)
* Bump undici from 5.28.4 to 5.28.5 Bumps [undici](https://github.com/nodejs/undici) from 5.28.4 to 5.28.5. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5) --- updated-dependencies: - dependency-name: undici dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * fix for check-dist and license failures * npm run updates --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Aparna Jyothi <aparnajyothi-y@github.com>
This commit is contained in:
		
							parent
							
								
									574f09a9fa
								
							
						
					
					
						commit
						1d0ff469b7
					
				
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@fastify/busboy.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@fastify/busboy.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/undici.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/undici.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3075
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3075
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							| @ -45581,1428 +45581,6 @@ exports.newPipeline = newPipeline; | |||||||
| //# sourceMappingURL=index.js.map
 | //# sourceMappingURL=index.js.map
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 2856: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const WritableStream = (__nccwpck_require__(4492).Writable) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| 
 |  | ||||||
| const StreamSearch = __nccwpck_require__(8534) |  | ||||||
| 
 |  | ||||||
| const PartStream = __nccwpck_require__(8710) |  | ||||||
| const HeaderParser = __nccwpck_require__(333) |  | ||||||
| 
 |  | ||||||
| const DASH = 45 |  | ||||||
| const B_ONEDASH = Buffer.from('-') |  | ||||||
| const B_CRLF = Buffer.from('\r\n') |  | ||||||
| const EMPTY_FN = function () {} |  | ||||||
| 
 |  | ||||||
| function Dicer (cfg) { |  | ||||||
|   if (!(this instanceof Dicer)) { return new Dicer(cfg) } |  | ||||||
|   WritableStream.call(this, cfg) |  | ||||||
| 
 |  | ||||||
|   if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } |  | ||||||
| 
 |  | ||||||
|   if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } |  | ||||||
| 
 |  | ||||||
|   this._headerFirst = cfg.headerFirst |  | ||||||
| 
 |  | ||||||
|   this._dashes = 0 |  | ||||||
|   this._parts = 0 |  | ||||||
|   this._finished = false |  | ||||||
|   this._realFinish = false |  | ||||||
|   this._isPreamble = true |  | ||||||
|   this._justMatched = false |  | ||||||
|   this._firstWrite = true |  | ||||||
|   this._inHeader = true |  | ||||||
|   this._part = undefined |  | ||||||
|   this._cb = undefined |  | ||||||
|   this._ignoreData = false |  | ||||||
|   this._partOpts = { highWaterMark: cfg.partHwm } |  | ||||||
|   this._pause = false |  | ||||||
| 
 |  | ||||||
|   const self = this |  | ||||||
|   this._hparser = new HeaderParser(cfg) |  | ||||||
|   this._hparser.on('header', function (header) { |  | ||||||
|     self._inHeader = false |  | ||||||
|     self._part.emit('header', header) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| inherits(Dicer, WritableStream) |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.emit = function (ev) { |  | ||||||
|   if (ev === 'finish' && !this._realFinish) { |  | ||||||
|     if (!this._finished) { |  | ||||||
|       const self = this |  | ||||||
|       process.nextTick(function () { |  | ||||||
|         self.emit('error', new Error('Unexpected end of multipart data')) |  | ||||||
|         if (self._part && !self._ignoreData) { |  | ||||||
|           const type = (self._isPreamble ? 'Preamble' : 'Part') |  | ||||||
|           self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) |  | ||||||
|           self._part.push(null) |  | ||||||
|           process.nextTick(function () { |  | ||||||
|             self._realFinish = true |  | ||||||
|             self.emit('finish') |  | ||||||
|             self._realFinish = false |  | ||||||
|           }) |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
|         self._realFinish = true |  | ||||||
|         self.emit('finish') |  | ||||||
|         self._realFinish = false |  | ||||||
|       }) |  | ||||||
|     } |  | ||||||
|   } else { WritableStream.prototype.emit.apply(this, arguments) } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._write = function (data, encoding, cb) { |  | ||||||
|   // ignore unexpected data (e.g. extra trailer data after finished)
 |  | ||||||
|   if (!this._hparser && !this._bparser) { return cb() } |  | ||||||
| 
 |  | ||||||
|   if (this._headerFirst && this._isPreamble) { |  | ||||||
|     if (!this._part) { |  | ||||||
|       this._part = new PartStream(this._partOpts) |  | ||||||
|       if (this._events.preamble) { this.emit('preamble', this._part) } else { this._ignore() } |  | ||||||
|     } |  | ||||||
|     const r = this._hparser.push(data) |  | ||||||
|     if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // allows for "easier" testing
 |  | ||||||
|   if (this._firstWrite) { |  | ||||||
|     this._bparser.push(B_CRLF) |  | ||||||
|     this._firstWrite = false |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this._bparser.push(data) |  | ||||||
| 
 |  | ||||||
|   if (this._pause) { this._cb = cb } else { cb() } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.reset = function () { |  | ||||||
|   this._part = undefined |  | ||||||
|   this._bparser = undefined |  | ||||||
|   this._hparser = undefined |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.setBoundary = function (boundary) { |  | ||||||
|   const self = this |  | ||||||
|   this._bparser = new StreamSearch('\r\n--' + boundary) |  | ||||||
|   this._bparser.on('info', function (isMatch, data, start, end) { |  | ||||||
|     self._oninfo(isMatch, data, start, end) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._ignore = function () { |  | ||||||
|   if (this._part && !this._ignoreData) { |  | ||||||
|     this._ignoreData = true |  | ||||||
|     this._part.on('error', EMPTY_FN) |  | ||||||
|     // we must perform some kind of read on the stream even though we are
 |  | ||||||
|     // ignoring the data, otherwise node's Readable stream will not emit 'end'
 |  | ||||||
|     // after pushing null to the stream
 |  | ||||||
|     this._part.resume() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._oninfo = function (isMatch, data, start, end) { |  | ||||||
|   let buf; const self = this; let i = 0; let r; let shouldWriteMore = true |  | ||||||
| 
 |  | ||||||
|   if (!this._part && this._justMatched && data) { |  | ||||||
|     while (this._dashes < 2 && (start + i) < end) { |  | ||||||
|       if (data[start + i] === DASH) { |  | ||||||
|         ++i |  | ||||||
|         ++this._dashes |  | ||||||
|       } else { |  | ||||||
|         if (this._dashes) { buf = B_ONEDASH } |  | ||||||
|         this._dashes = 0 |  | ||||||
|         break |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     if (this._dashes === 2) { |  | ||||||
|       if ((start + i) < end && this._events.trailer) { this.emit('trailer', data.slice(start + i, end)) } |  | ||||||
|       this.reset() |  | ||||||
|       this._finished = true |  | ||||||
|       // no more parts will be added
 |  | ||||||
|       if (self._parts === 0) { |  | ||||||
|         self._realFinish = true |  | ||||||
|         self.emit('finish') |  | ||||||
|         self._realFinish = false |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     if (this._dashes) { return } |  | ||||||
|   } |  | ||||||
|   if (this._justMatched) { this._justMatched = false } |  | ||||||
|   if (!this._part) { |  | ||||||
|     this._part = new PartStream(this._partOpts) |  | ||||||
|     this._part._read = function (n) { |  | ||||||
|       self._unpause() |  | ||||||
|     } |  | ||||||
|     if (this._isPreamble && this._events.preamble) { this.emit('preamble', this._part) } else if (this._isPreamble !== true && this._events.part) { this.emit('part', this._part) } else { this._ignore() } |  | ||||||
|     if (!this._isPreamble) { this._inHeader = true } |  | ||||||
|   } |  | ||||||
|   if (data && start < end && !this._ignoreData) { |  | ||||||
|     if (this._isPreamble || !this._inHeader) { |  | ||||||
|       if (buf) { shouldWriteMore = this._part.push(buf) } |  | ||||||
|       shouldWriteMore = this._part.push(data.slice(start, end)) |  | ||||||
|       if (!shouldWriteMore) { this._pause = true } |  | ||||||
|     } else if (!this._isPreamble && this._inHeader) { |  | ||||||
|       if (buf) { this._hparser.push(buf) } |  | ||||||
|       r = this._hparser.push(data.slice(start, end)) |  | ||||||
|       if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (isMatch) { |  | ||||||
|     this._hparser.reset() |  | ||||||
|     if (this._isPreamble) { this._isPreamble = false } else { |  | ||||||
|       if (start !== end) { |  | ||||||
|         ++this._parts |  | ||||||
|         this._part.on('end', function () { |  | ||||||
|           if (--self._parts === 0) { |  | ||||||
|             if (self._finished) { |  | ||||||
|               self._realFinish = true |  | ||||||
|               self.emit('finish') |  | ||||||
|               self._realFinish = false |  | ||||||
|             } else { |  | ||||||
|               self._unpause() |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     this._part.push(null) |  | ||||||
|     this._part = undefined |  | ||||||
|     this._ignoreData = false |  | ||||||
|     this._justMatched = true |  | ||||||
|     this._dashes = 0 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._unpause = function () { |  | ||||||
|   if (!this._pause) { return } |  | ||||||
| 
 |  | ||||||
|   this._pause = false |  | ||||||
|   if (this._cb) { |  | ||||||
|     const cb = this._cb |  | ||||||
|     this._cb = undefined |  | ||||||
|     cb() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = Dicer |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 333: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const EventEmitter = (__nccwpck_require__(5673).EventEmitter) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const StreamSearch = __nccwpck_require__(8534) |  | ||||||
| 
 |  | ||||||
| const B_DCRLF = Buffer.from('\r\n\r\n') |  | ||||||
| const RE_CRLF = /\r\n/g |  | ||||||
| const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex
 |  | ||||||
| 
 |  | ||||||
| function HeaderParser (cfg) { |  | ||||||
|   EventEmitter.call(this) |  | ||||||
| 
 |  | ||||||
|   cfg = cfg || {} |  | ||||||
|   const self = this |  | ||||||
|   this.nread = 0 |  | ||||||
|   this.maxed = false |  | ||||||
|   this.npairs = 0 |  | ||||||
|   this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) |  | ||||||
|   this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.header = {} |  | ||||||
|   this.finished = false |  | ||||||
|   this.ss = new StreamSearch(B_DCRLF) |  | ||||||
|   this.ss.on('info', function (isMatch, data, start, end) { |  | ||||||
|     if (data && !self.maxed) { |  | ||||||
|       if (self.nread + end - start >= self.maxHeaderSize) { |  | ||||||
|         end = self.maxHeaderSize - self.nread + start |  | ||||||
|         self.nread = self.maxHeaderSize |  | ||||||
|         self.maxed = true |  | ||||||
|       } else { self.nread += (end - start) } |  | ||||||
| 
 |  | ||||||
|       self.buffer += data.toString('binary', start, end) |  | ||||||
|     } |  | ||||||
|     if (isMatch) { self._finish() } |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| inherits(HeaderParser, EventEmitter) |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype.push = function (data) { |  | ||||||
|   const r = this.ss.push(data) |  | ||||||
|   if (this.finished) { return r } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype.reset = function () { |  | ||||||
|   this.finished = false |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.header = {} |  | ||||||
|   this.ss.reset() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype._finish = function () { |  | ||||||
|   if (this.buffer) { this._parseHeader() } |  | ||||||
|   this.ss.matches = this.ss.maxMatches |  | ||||||
|   const header = this.header |  | ||||||
|   this.header = {} |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.finished = true |  | ||||||
|   this.nread = this.npairs = 0 |  | ||||||
|   this.maxed = false |  | ||||||
|   this.emit('header', header) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype._parseHeader = function () { |  | ||||||
|   if (this.npairs === this.maxHeaderPairs) { return } |  | ||||||
| 
 |  | ||||||
|   const lines = this.buffer.split(RE_CRLF) |  | ||||||
|   const len = lines.length |  | ||||||
|   let m, h |  | ||||||
| 
 |  | ||||||
|   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (lines[i].length === 0) { continue } |  | ||||||
|     if (lines[i][0] === '\t' || lines[i][0] === ' ') { |  | ||||||
|       // folded header content
 |  | ||||||
|       // RFC2822 says to just remove the CRLF and not the whitespace following
 |  | ||||||
|       // it, so we follow the RFC and include the leading whitespace ...
 |  | ||||||
|       if (h) { |  | ||||||
|         this.header[h][this.header[h].length - 1] += lines[i] |  | ||||||
|         continue |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const posColon = lines[i].indexOf(':') |  | ||||||
|     if ( |  | ||||||
|       posColon === -1 || |  | ||||||
|       posColon === 0 |  | ||||||
|     ) { |  | ||||||
|       return |  | ||||||
|     } |  | ||||||
|     m = RE_HDR.exec(lines[i]) |  | ||||||
|     h = m[1].toLowerCase() |  | ||||||
|     this.header[h] = this.header[h] || [] |  | ||||||
|     this.header[h].push((m[2] || '')) |  | ||||||
|     if (++this.npairs === this.maxHeaderPairs) { break } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = HeaderParser |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 8710: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| const ReadableStream = (__nccwpck_require__(4492).Readable) |  | ||||||
| 
 |  | ||||||
| function PartStream (opts) { |  | ||||||
|   ReadableStream.call(this, opts) |  | ||||||
| } |  | ||||||
| inherits(PartStream, ReadableStream) |  | ||||||
| 
 |  | ||||||
| PartStream.prototype._read = function (n) {} |  | ||||||
| 
 |  | ||||||
| module.exports = PartStream |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 8534: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Copyright Brian White. All rights reserved. |  | ||||||
|  * |  | ||||||
|  * @see https://github.com/mscdex/streamsearch
 |  | ||||||
|  * |  | ||||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  * of this software and associated documentation files (the "Software"), to |  | ||||||
|  * deal in the Software without restriction, including without limitation the |  | ||||||
|  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |  | ||||||
|  * sell copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  * furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  * The above copyright notice and this permission notice shall be included in |  | ||||||
|  * all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |  | ||||||
|  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |  | ||||||
|  * IN THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation |  | ||||||
|  * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
 |  | ||||||
|  */ |  | ||||||
| const EventEmitter = (__nccwpck_require__(5673).EventEmitter) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| 
 |  | ||||||
| function SBMH (needle) { |  | ||||||
|   if (typeof needle === 'string') { |  | ||||||
|     needle = Buffer.from(needle) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (!Buffer.isBuffer(needle)) { |  | ||||||
|     throw new TypeError('The needle has to be a String or a Buffer.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   const needleLength = needle.length |  | ||||||
| 
 |  | ||||||
|   if (needleLength === 0) { |  | ||||||
|     throw new Error('The needle cannot be an empty String/Buffer.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (needleLength > 256) { |  | ||||||
|     throw new Error('The needle cannot have a length bigger than 256.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.maxMatches = Infinity |  | ||||||
|   this.matches = 0 |  | ||||||
| 
 |  | ||||||
|   this._occ = new Array(256) |  | ||||||
|     .fill(needleLength) // Initialize occurrence table.
 |  | ||||||
|   this._lookbehind_size = 0 |  | ||||||
|   this._needle = needle |  | ||||||
|   this._bufpos = 0 |  | ||||||
| 
 |  | ||||||
|   this._lookbehind = Buffer.alloc(needleLength) |  | ||||||
| 
 |  | ||||||
|   // Populate occurrence table with analysis of the needle,
 |  | ||||||
|   // ignoring last letter.
 |  | ||||||
|   for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     this._occ[needle[i]] = needleLength - 1 - i |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| inherits(SBMH, EventEmitter) |  | ||||||
| 
 |  | ||||||
| SBMH.prototype.reset = function () { |  | ||||||
|   this._lookbehind_size = 0 |  | ||||||
|   this.matches = 0 |  | ||||||
|   this._bufpos = 0 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype.push = function (chunk, pos) { |  | ||||||
|   if (!Buffer.isBuffer(chunk)) { |  | ||||||
|     chunk = Buffer.from(chunk, 'binary') |  | ||||||
|   } |  | ||||||
|   const chlen = chunk.length |  | ||||||
|   this._bufpos = pos || 0 |  | ||||||
|   let r |  | ||||||
|   while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } |  | ||||||
|   return r |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_feed = function (data) { |  | ||||||
|   const len = data.length |  | ||||||
|   const needle = this._needle |  | ||||||
|   const needleLength = needle.length |  | ||||||
|   const lastNeedleChar = needle[needleLength - 1] |  | ||||||
| 
 |  | ||||||
|   // Positive: points to a position in `data`
 |  | ||||||
|   //           pos == 3 points to data[3]
 |  | ||||||
|   // Negative: points to a position in the lookbehind buffer
 |  | ||||||
|   //           pos == -2 points to lookbehind[lookbehind_size - 2]
 |  | ||||||
|   let pos = -this._lookbehind_size |  | ||||||
|   let ch |  | ||||||
| 
 |  | ||||||
|   if (pos < 0) { |  | ||||||
|     // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
 |  | ||||||
|     // search with character lookup code that considers both the
 |  | ||||||
|     // lookbehind buffer and the current round's haystack data.
 |  | ||||||
|     //
 |  | ||||||
|     // Loop until
 |  | ||||||
|     //   there is a match.
 |  | ||||||
|     // or until
 |  | ||||||
|     //   we've moved past the position that requires the
 |  | ||||||
|     //   lookbehind buffer. In this case we switch to the
 |  | ||||||
|     //   optimized loop.
 |  | ||||||
|     // or until
 |  | ||||||
|     //   the character to look at lies outside the haystack.
 |  | ||||||
|     while (pos < 0 && pos <= len - needleLength) { |  | ||||||
|       ch = this._sbmh_lookup_char(data, pos + needleLength - 1) |  | ||||||
| 
 |  | ||||||
|       if ( |  | ||||||
|         ch === lastNeedleChar && |  | ||||||
|         this._sbmh_memcmp(data, pos, needleLength - 1) |  | ||||||
|       ) { |  | ||||||
|         this._lookbehind_size = 0 |  | ||||||
|         ++this.matches |  | ||||||
|         this.emit('info', true) |  | ||||||
| 
 |  | ||||||
|         return (this._bufpos = pos + needleLength) |  | ||||||
|       } |  | ||||||
|       pos += this._occ[ch] |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // No match.
 |  | ||||||
| 
 |  | ||||||
|     if (pos < 0) { |  | ||||||
|       // There's too few data for Boyer-Moore-Horspool to run,
 |  | ||||||
|       // so let's use a different algorithm to skip as much as
 |  | ||||||
|       // we can.
 |  | ||||||
|       // Forward pos until
 |  | ||||||
|       //   the trailing part of lookbehind + data
 |  | ||||||
|       //   looks like the beginning of the needle
 |  | ||||||
|       // or until
 |  | ||||||
|       //   pos == 0
 |  | ||||||
|       while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (pos >= 0) { |  | ||||||
|       // Discard lookbehind buffer.
 |  | ||||||
|       this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) |  | ||||||
|       this._lookbehind_size = 0 |  | ||||||
|     } else { |  | ||||||
|       // Cut off part of the lookbehind buffer that has
 |  | ||||||
|       // been processed and append the entire haystack
 |  | ||||||
|       // into it.
 |  | ||||||
|       const bytesToCutOff = this._lookbehind_size + pos |  | ||||||
|       if (bytesToCutOff > 0) { |  | ||||||
|         // The cut off data is guaranteed not to contain the needle.
 |  | ||||||
|         this.emit('info', false, this._lookbehind, 0, bytesToCutOff) |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, |  | ||||||
|         this._lookbehind_size - bytesToCutOff) |  | ||||||
|       this._lookbehind_size -= bytesToCutOff |  | ||||||
| 
 |  | ||||||
|       data.copy(this._lookbehind, this._lookbehind_size) |  | ||||||
|       this._lookbehind_size += len |  | ||||||
| 
 |  | ||||||
|       this._bufpos = len |  | ||||||
|       return len |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   pos += (pos >= 0) * this._bufpos |  | ||||||
| 
 |  | ||||||
|   // Lookbehind buffer is now empty. We only need to check if the
 |  | ||||||
|   // needle is in the haystack.
 |  | ||||||
|   if (data.indexOf(needle, pos) !== -1) { |  | ||||||
|     pos = data.indexOf(needle, pos) |  | ||||||
|     ++this.matches |  | ||||||
|     if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } |  | ||||||
| 
 |  | ||||||
|     return (this._bufpos = pos + needleLength) |  | ||||||
|   } else { |  | ||||||
|     pos = len - needleLength |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // There was no match. If there's trailing haystack data that we cannot
 |  | ||||||
|   // match yet using the Boyer-Moore-Horspool algorithm (because the trailing
 |  | ||||||
|   // data is less than the needle size) then match using a modified
 |  | ||||||
|   // algorithm that starts matching from the beginning instead of the end.
 |  | ||||||
|   // Whatever trailing data is left after running this algorithm is added to
 |  | ||||||
|   // the lookbehind buffer.
 |  | ||||||
|   while ( |  | ||||||
|     pos < len && |  | ||||||
|     ( |  | ||||||
|       data[pos] !== needle[0] || |  | ||||||
|       ( |  | ||||||
|         (Buffer.compare( |  | ||||||
|           data.subarray(pos, pos + len - pos), |  | ||||||
|           needle.subarray(0, len - pos) |  | ||||||
|         ) !== 0) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
|   ) { |  | ||||||
|     ++pos |  | ||||||
|   } |  | ||||||
|   if (pos < len) { |  | ||||||
|     data.copy(this._lookbehind, 0, pos, pos + (len - pos)) |  | ||||||
|     this._lookbehind_size = len - pos |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // Everything until pos is guaranteed not to contain needle data.
 |  | ||||||
|   if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } |  | ||||||
| 
 |  | ||||||
|   this._bufpos = len |  | ||||||
|   return len |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_lookup_char = function (data, pos) { |  | ||||||
|   return (pos < 0) |  | ||||||
|     ? this._lookbehind[this._lookbehind_size + pos] |  | ||||||
|     : data[pos] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_memcmp = function (data, pos, len) { |  | ||||||
|   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } |  | ||||||
|   } |  | ||||||
|   return true |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = SBMH |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 3438: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const WritableStream = (__nccwpck_require__(4492).Writable) |  | ||||||
| const { inherits } = __nccwpck_require__(7261) |  | ||||||
| const Dicer = __nccwpck_require__(2856) |  | ||||||
| 
 |  | ||||||
| const MultipartParser = __nccwpck_require__(415) |  | ||||||
| const UrlencodedParser = __nccwpck_require__(6780) |  | ||||||
| const parseParams = __nccwpck_require__(4426) |  | ||||||
| 
 |  | ||||||
| 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 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 415: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // TODO:
 |  | ||||||
| //  * support 1 nested multipart level
 |  | ||||||
| //    (see second multipart example here:
 |  | ||||||
| //     http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data)
 |  | ||||||
| //  * support limits.fieldNameSize
 |  | ||||||
| //     -- this will require modifications to utils.parseParams
 |  | ||||||
| 
 |  | ||||||
| const { Readable } = __nccwpck_require__(4492) |  | ||||||
| const { inherits } = __nccwpck_require__(7261) |  | ||||||
| 
 |  | ||||||
| const Dicer = __nccwpck_require__(2856) |  | ||||||
| 
 |  | ||||||
| const parseParams = __nccwpck_require__(4426) |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| const basename = __nccwpck_require__(496) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const RE_BOUNDARY = /^boundary$/i |  | ||||||
| const RE_FIELD = /^form-data$/i |  | ||||||
| const RE_CHARSET = /^charset$/i |  | ||||||
| const RE_FILENAME = /^filename$/i |  | ||||||
| const RE_NAME = /^name$/i |  | ||||||
| 
 |  | ||||||
| Multipart.detect = /^multipart\/form-data/i |  | ||||||
| function Multipart (boy, cfg) { |  | ||||||
|   let i |  | ||||||
|   let len |  | ||||||
|   const self = this |  | ||||||
|   let boundary |  | ||||||
|   const limits = cfg.limits |  | ||||||
|   const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) |  | ||||||
|   const parsedConType = cfg.parsedConType || [] |  | ||||||
|   const defCharset = cfg.defCharset || 'utf8' |  | ||||||
|   const preservePath = cfg.preservePath |  | ||||||
|   const fileOpts = { highWaterMark: cfg.fileHwm } |  | ||||||
| 
 |  | ||||||
|   for (i = 0, len = parsedConType.length; i < len; ++i) { |  | ||||||
|     if (Array.isArray(parsedConType[i]) && |  | ||||||
|       RE_BOUNDARY.test(parsedConType[i][0])) { |  | ||||||
|       boundary = parsedConType[i][1] |  | ||||||
|       break |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function checkFinished () { |  | ||||||
|     if (nends === 0 && finished && !boy._done) { |  | ||||||
|       finished = false |  | ||||||
|       self.end() |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } |  | ||||||
| 
 |  | ||||||
|   const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) |  | ||||||
|   const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) |  | ||||||
|   const filesLimit = getLimit(limits, 'files', Infinity) |  | ||||||
|   const fieldsLimit = getLimit(limits, 'fields', Infinity) |  | ||||||
|   const partsLimit = getLimit(limits, 'parts', Infinity) |  | ||||||
|   const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) |  | ||||||
|   const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) |  | ||||||
| 
 |  | ||||||
|   let nfiles = 0 |  | ||||||
|   let nfields = 0 |  | ||||||
|   let nends = 0 |  | ||||||
|   let curFile |  | ||||||
|   let curField |  | ||||||
|   let finished = false |  | ||||||
| 
 |  | ||||||
|   this._needDrain = false |  | ||||||
|   this._pause = false |  | ||||||
|   this._cb = undefined |  | ||||||
|   this._nparts = 0 |  | ||||||
|   this._boy = boy |  | ||||||
| 
 |  | ||||||
|   const parserCfg = { |  | ||||||
|     boundary, |  | ||||||
|     maxHeaderPairs: headerPairsLimit, |  | ||||||
|     maxHeaderSize: headerSizeLimit, |  | ||||||
|     partHwm: fileOpts.highWaterMark, |  | ||||||
|     highWaterMark: cfg.highWaterMark |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.parser = new Dicer(parserCfg) |  | ||||||
|   this.parser.on('drain', function () { |  | ||||||
|     self._needDrain = false |  | ||||||
|     if (self._cb && !self._pause) { |  | ||||||
|       const cb = self._cb |  | ||||||
|       self._cb = undefined |  | ||||||
|       cb() |  | ||||||
|     } |  | ||||||
|   }).on('part', function onPart (part) { |  | ||||||
|     if (++self._nparts > partsLimit) { |  | ||||||
|       self.parser.removeListener('part', onPart) |  | ||||||
|       self.parser.on('part', skipPart) |  | ||||||
|       boy.hitPartsLimit = true |  | ||||||
|       boy.emit('partsLimit') |  | ||||||
|       return skipPart(part) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let
 |  | ||||||
|     // us emit 'end' early since we know the part has ended if we are already
 |  | ||||||
|     // seeing the next part
 |  | ||||||
|     if (curField) { |  | ||||||
|       const field = curField |  | ||||||
|       field.emit('end') |  | ||||||
|       field.removeAllListeners('end') |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     part.on('header', function (header) { |  | ||||||
|       let contype |  | ||||||
|       let fieldname |  | ||||||
|       let parsed |  | ||||||
|       let charset |  | ||||||
|       let encoding |  | ||||||
|       let filename |  | ||||||
|       let nsize = 0 |  | ||||||
| 
 |  | ||||||
|       if (header['content-type']) { |  | ||||||
|         parsed = parseParams(header['content-type'][0]) |  | ||||||
|         if (parsed[0]) { |  | ||||||
|           contype = parsed[0].toLowerCase() |  | ||||||
|           for (i = 0, len = parsed.length; i < len; ++i) { |  | ||||||
|             if (RE_CHARSET.test(parsed[i][0])) { |  | ||||||
|               charset = parsed[i][1].toLowerCase() |  | ||||||
|               break |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (contype === undefined) { contype = 'text/plain' } |  | ||||||
|       if (charset === undefined) { charset = defCharset } |  | ||||||
| 
 |  | ||||||
|       if (header['content-disposition']) { |  | ||||||
|         parsed = parseParams(header['content-disposition'][0]) |  | ||||||
|         if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } |  | ||||||
|         for (i = 0, len = parsed.length; i < len; ++i) { |  | ||||||
|           if (RE_NAME.test(parsed[i][0])) { |  | ||||||
|             fieldname = parsed[i][1] |  | ||||||
|           } else if (RE_FILENAME.test(parsed[i][0])) { |  | ||||||
|             filename = parsed[i][1] |  | ||||||
|             if (!preservePath) { filename = basename(filename) } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } else { return skipPart(part) } |  | ||||||
| 
 |  | ||||||
|       if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } |  | ||||||
| 
 |  | ||||||
|       let onData, |  | ||||||
|         onEnd |  | ||||||
| 
 |  | ||||||
|       if (isPartAFile(fieldname, contype, filename)) { |  | ||||||
|         // file/binary field
 |  | ||||||
|         if (nfiles === filesLimit) { |  | ||||||
|           if (!boy.hitFilesLimit) { |  | ||||||
|             boy.hitFilesLimit = true |  | ||||||
|             boy.emit('filesLimit') |  | ||||||
|           } |  | ||||||
|           return skipPart(part) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nfiles |  | ||||||
| 
 |  | ||||||
|         if (!boy._events.file) { |  | ||||||
|           self.parser._ignore() |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nends |  | ||||||
|         const file = new FileStream(fileOpts) |  | ||||||
|         curFile = file |  | ||||||
|         file.on('end', function () { |  | ||||||
|           --nends |  | ||||||
|           self._pause = false |  | ||||||
|           checkFinished() |  | ||||||
|           if (self._cb && !self._needDrain) { |  | ||||||
|             const cb = self._cb |  | ||||||
|             self._cb = undefined |  | ||||||
|             cb() |  | ||||||
|           } |  | ||||||
|         }) |  | ||||||
|         file._read = function (n) { |  | ||||||
|           if (!self._pause) { return } |  | ||||||
|           self._pause = false |  | ||||||
|           if (self._cb && !self._needDrain) { |  | ||||||
|             const cb = self._cb |  | ||||||
|             self._cb = undefined |  | ||||||
|             cb() |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         boy.emit('file', fieldname, file, filename, encoding, contype) |  | ||||||
| 
 |  | ||||||
|         onData = function (data) { |  | ||||||
|           if ((nsize += data.length) > fileSizeLimit) { |  | ||||||
|             const extralen = fileSizeLimit - nsize + data.length |  | ||||||
|             if (extralen > 0) { file.push(data.slice(0, extralen)) } |  | ||||||
|             file.truncated = true |  | ||||||
|             file.bytesRead = fileSizeLimit |  | ||||||
|             part.removeAllListeners('data') |  | ||||||
|             file.emit('limit') |  | ||||||
|             return |  | ||||||
|           } else if (!file.push(data)) { self._pause = true } |  | ||||||
| 
 |  | ||||||
|           file.bytesRead = nsize |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         onEnd = function () { |  | ||||||
|           curFile = undefined |  | ||||||
|           file.push(null) |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         // non-file field
 |  | ||||||
|         if (nfields === fieldsLimit) { |  | ||||||
|           if (!boy.hitFieldsLimit) { |  | ||||||
|             boy.hitFieldsLimit = true |  | ||||||
|             boy.emit('fieldsLimit') |  | ||||||
|           } |  | ||||||
|           return skipPart(part) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nfields |  | ||||||
|         ++nends |  | ||||||
|         let buffer = '' |  | ||||||
|         let truncated = false |  | ||||||
|         curField = part |  | ||||||
| 
 |  | ||||||
|         onData = function (data) { |  | ||||||
|           if ((nsize += data.length) > fieldSizeLimit) { |  | ||||||
|             const extralen = (fieldSizeLimit - (nsize - data.length)) |  | ||||||
|             buffer += data.toString('binary', 0, extralen) |  | ||||||
|             truncated = true |  | ||||||
|             part.removeAllListeners('data') |  | ||||||
|           } else { buffer += data.toString('binary') } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         onEnd = function () { |  | ||||||
|           curField = undefined |  | ||||||
|           if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } |  | ||||||
|           boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) |  | ||||||
|           --nends |  | ||||||
|           checkFinished() |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become |  | ||||||
|          broken. Streams2/streams3 is a huge black box of confusion, but |  | ||||||
|          somehow overriding the sync state seems to fix things again (and still |  | ||||||
|          seems to work for previous node versions). |  | ||||||
|       */ |  | ||||||
|       part._readableState.sync = false |  | ||||||
| 
 |  | ||||||
|       part.on('data', onData) |  | ||||||
|       part.on('end', onEnd) |  | ||||||
|     }).on('error', function (err) { |  | ||||||
|       if (curFile) { curFile.emit('error', err) } |  | ||||||
|     }) |  | ||||||
|   }).on('error', function (err) { |  | ||||||
|     boy.emit('error', err) |  | ||||||
|   }).on('finish', function () { |  | ||||||
|     finished = true |  | ||||||
|     checkFinished() |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Multipart.prototype.write = function (chunk, cb) { |  | ||||||
|   const r = this.parser.write(chunk) |  | ||||||
|   if (r && !this._pause) { |  | ||||||
|     cb() |  | ||||||
|   } else { |  | ||||||
|     this._needDrain = !r |  | ||||||
|     this._cb = cb |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Multipart.prototype.end = function () { |  | ||||||
|   const self = this |  | ||||||
| 
 |  | ||||||
|   if (self.parser.writable) { |  | ||||||
|     self.parser.end() |  | ||||||
|   } else if (!self._boy._done) { |  | ||||||
|     process.nextTick(function () { |  | ||||||
|       self._boy._done = true |  | ||||||
|       self._boy.emit('finish') |  | ||||||
|     }) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function skipPart (part) { |  | ||||||
|   part.resume() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function FileStream (opts) { |  | ||||||
|   Readable.call(this, opts) |  | ||||||
| 
 |  | ||||||
|   this.bytesRead = 0 |  | ||||||
| 
 |  | ||||||
|   this.truncated = false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| inherits(FileStream, Readable) |  | ||||||
| 
 |  | ||||||
| FileStream.prototype._read = function (n) {} |  | ||||||
| 
 |  | ||||||
| module.exports = Multipart |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 6780: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const Decoder = __nccwpck_require__(9730) |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const RE_CHARSET = /^charset$/i |  | ||||||
| 
 |  | ||||||
| UrlEncoded.detect = /^application\/x-www-form-urlencoded/i |  | ||||||
| function UrlEncoded (boy, cfg) { |  | ||||||
|   const limits = cfg.limits |  | ||||||
|   const parsedConType = cfg.parsedConType |  | ||||||
|   this.boy = boy |  | ||||||
| 
 |  | ||||||
|   this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) |  | ||||||
|   this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) |  | ||||||
|   this.fieldsLimit = getLimit(limits, 'fields', Infinity) |  | ||||||
| 
 |  | ||||||
|   let charset |  | ||||||
|   for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (Array.isArray(parsedConType[i]) && |  | ||||||
|         RE_CHARSET.test(parsedConType[i][0])) { |  | ||||||
|       charset = parsedConType[i][1].toLowerCase() |  | ||||||
|       break |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (charset === undefined) { charset = cfg.defCharset || 'utf8' } |  | ||||||
| 
 |  | ||||||
|   this.decoder = new Decoder() |  | ||||||
|   this.charset = charset |  | ||||||
|   this._fields = 0 |  | ||||||
|   this._state = 'key' |  | ||||||
|   this._checkingBytes = true |  | ||||||
|   this._bytesKey = 0 |  | ||||||
|   this._bytesVal = 0 |  | ||||||
|   this._key = '' |  | ||||||
|   this._val = '' |  | ||||||
|   this._keyTrunc = false |  | ||||||
|   this._valTrunc = false |  | ||||||
|   this._hitLimit = false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| UrlEncoded.prototype.write = function (data, cb) { |  | ||||||
|   if (this._fields === this.fieldsLimit) { |  | ||||||
|     if (!this.boy.hitFieldsLimit) { |  | ||||||
|       this.boy.hitFieldsLimit = true |  | ||||||
|       this.boy.emit('fieldsLimit') |  | ||||||
|     } |  | ||||||
|     return cb() |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   let idxeq; let idxamp; let i; let p = 0; const len = data.length |  | ||||||
| 
 |  | ||||||
|   while (p < len) { |  | ||||||
|     if (this._state === 'key') { |  | ||||||
|       idxeq = idxamp = undefined |  | ||||||
|       for (i = p; i < len; ++i) { |  | ||||||
|         if (!this._checkingBytes) { ++p } |  | ||||||
|         if (data[i] === 0x3D/* = */) { |  | ||||||
|           idxeq = i |  | ||||||
|           break |  | ||||||
|         } else if (data[i] === 0x26/* & */) { |  | ||||||
|           idxamp = i |  | ||||||
|           break |  | ||||||
|         } |  | ||||||
|         if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { |  | ||||||
|           this._hitLimit = true |  | ||||||
|           break |  | ||||||
|         } else if (this._checkingBytes) { ++this._bytesKey } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (idxeq !== undefined) { |  | ||||||
|         // key with assignment
 |  | ||||||
|         if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } |  | ||||||
|         this._state = 'val' |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._val = '' |  | ||||||
|         this._bytesVal = 0 |  | ||||||
|         this._valTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         p = idxeq + 1 |  | ||||||
|       } else if (idxamp !== undefined) { |  | ||||||
|         // key with no assignment
 |  | ||||||
|         ++this._fields |  | ||||||
|         let key; const keyTrunc = this._keyTrunc |  | ||||||
|         if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._key = '' |  | ||||||
|         this._bytesKey = 0 |  | ||||||
|         this._keyTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         if (key.length) { |  | ||||||
|           this.boy.emit('field', decodeText(key, 'binary', this.charset), |  | ||||||
|             '', |  | ||||||
|             keyTrunc, |  | ||||||
|             false) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         p = idxamp + 1 |  | ||||||
|         if (this._fields === this.fieldsLimit) { return cb() } |  | ||||||
|       } else if (this._hitLimit) { |  | ||||||
|         // we may not have hit the actual limit if there are encoded bytes...
 |  | ||||||
|         if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } |  | ||||||
|         p = i |  | ||||||
|         if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { |  | ||||||
|           // yep, we actually did hit the limit
 |  | ||||||
|           this._checkingBytes = false |  | ||||||
|           this._keyTrunc = true |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } |  | ||||||
|         p = len |  | ||||||
|       } |  | ||||||
|     } else { |  | ||||||
|       idxamp = undefined |  | ||||||
|       for (i = p; i < len; ++i) { |  | ||||||
|         if (!this._checkingBytes) { ++p } |  | ||||||
|         if (data[i] === 0x26/* & */) { |  | ||||||
|           idxamp = i |  | ||||||
|           break |  | ||||||
|         } |  | ||||||
|         if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { |  | ||||||
|           this._hitLimit = true |  | ||||||
|           break |  | ||||||
|         } else if (this._checkingBytes) { ++this._bytesVal } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (idxamp !== undefined) { |  | ||||||
|         ++this._fields |  | ||||||
|         if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } |  | ||||||
|         this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|           decodeText(this._val, 'binary', this.charset), |  | ||||||
|           this._keyTrunc, |  | ||||||
|           this._valTrunc) |  | ||||||
|         this._state = 'key' |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._key = '' |  | ||||||
|         this._bytesKey = 0 |  | ||||||
|         this._keyTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         p = idxamp + 1 |  | ||||||
|         if (this._fields === this.fieldsLimit) { return cb() } |  | ||||||
|       } else if (this._hitLimit) { |  | ||||||
|         // we may not have hit the actual limit if there are encoded bytes...
 |  | ||||||
|         if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } |  | ||||||
|         p = i |  | ||||||
|         if ((this._val === '' && this.fieldSizeLimit === 0) || |  | ||||||
|             (this._bytesVal = this._val.length) === this.fieldSizeLimit) { |  | ||||||
|           // yep, we actually did hit the limit
 |  | ||||||
|           this._checkingBytes = false |  | ||||||
|           this._valTrunc = true |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } |  | ||||||
|         p = len |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| UrlEncoded.prototype.end = function () { |  | ||||||
|   if (this.boy._done) { return } |  | ||||||
| 
 |  | ||||||
|   if (this._state === 'key' && this._key.length > 0) { |  | ||||||
|     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|       '', |  | ||||||
|       this._keyTrunc, |  | ||||||
|       false) |  | ||||||
|   } else if (this._state === 'val') { |  | ||||||
|     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|       decodeText(this._val, 'binary', this.charset), |  | ||||||
|       this._keyTrunc, |  | ||||||
|       this._valTrunc) |  | ||||||
|   } |  | ||||||
|   this.boy._done = true |  | ||||||
|   this.boy.emit('finish') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = UrlEncoded |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9730: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const RE_PLUS = /\+/g |  | ||||||
| 
 |  | ||||||
| const HEX = [ |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| function Decoder () { |  | ||||||
|   this.buffer = undefined |  | ||||||
| } |  | ||||||
| Decoder.prototype.write = function (str) { |  | ||||||
|   // Replace '+' with ' ' before decoding
 |  | ||||||
|   str = str.replace(RE_PLUS, ' ') |  | ||||||
|   let res = '' |  | ||||||
|   let i = 0; let p = 0; const len = str.length |  | ||||||
|   for (; i < len; ++i) { |  | ||||||
|     if (this.buffer !== undefined) { |  | ||||||
|       if (!HEX[str.charCodeAt(i)]) { |  | ||||||
|         res += '%' + this.buffer |  | ||||||
|         this.buffer = undefined |  | ||||||
|         --i // retry character
 |  | ||||||
|       } else { |  | ||||||
|         this.buffer += str[i] |  | ||||||
|         ++p |  | ||||||
|         if (this.buffer.length === 2) { |  | ||||||
|           res += String.fromCharCode(parseInt(this.buffer, 16)) |  | ||||||
|           this.buffer = undefined |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } else if (str[i] === '%') { |  | ||||||
|       if (i > p) { |  | ||||||
|         res += str.substring(p, i) |  | ||||||
|         p = i |  | ||||||
|       } |  | ||||||
|       this.buffer = '' |  | ||||||
|       ++p |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (p < len && this.buffer === undefined) { res += str.substring(p) } |  | ||||||
|   return res |  | ||||||
| } |  | ||||||
| Decoder.prototype.reset = function () { |  | ||||||
|   this.buffer = undefined |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = Decoder |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 496: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module.exports = function basename (path) { |  | ||||||
|   if (typeof path !== 'string') { return '' } |  | ||||||
|   for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var
 |  | ||||||
|     switch (path.charCodeAt(i)) { |  | ||||||
|       case 0x2F: // '/'
 |  | ||||||
|       case 0x5C: // '\'
 |  | ||||||
|         path = path.slice(i + 1) |  | ||||||
|         return (path === '..' || path === '.' ? '' : path) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return (path === '..' || path === '.' ? '' : path) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9136: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // Node has always utf-8
 |  | ||||||
| const utf8Decoder = new TextDecoder('utf-8') |  | ||||||
| const textDecoders = new Map([ |  | ||||||
|   ['utf-8', utf8Decoder], |  | ||||||
|   ['utf8', utf8Decoder] |  | ||||||
| ]) |  | ||||||
| 
 |  | ||||||
| function decodeText (text, textEncoding, destEncoding) { |  | ||||||
|   if (text) { |  | ||||||
|     if (textDecoders.has(destEncoding)) { |  | ||||||
|       try { |  | ||||||
|         return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding)) |  | ||||||
|       } catch (e) { } |  | ||||||
|     } else { |  | ||||||
|       try { |  | ||||||
|         textDecoders.set(destEncoding, new TextDecoder(destEncoding)) |  | ||||||
|         return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding)) |  | ||||||
|       } catch (e) { } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return text |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = decodeText |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9692: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module.exports = function getLimit (limits, name, defaultLimit) { |  | ||||||
|   if ( |  | ||||||
|     !limits || |  | ||||||
|     limits[name] === undefined || |  | ||||||
|     limits[name] === null |  | ||||||
|   ) { return defaultLimit } |  | ||||||
| 
 |  | ||||||
|   if ( |  | ||||||
|     typeof limits[name] !== 'number' || |  | ||||||
|     isNaN(limits[name]) |  | ||||||
|   ) { throw new TypeError('Limit ' + name + ' is not a valid number') } |  | ||||||
| 
 |  | ||||||
|   return limits[name] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 4426: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| 
 |  | ||||||
| const RE_ENCODED = /%([a-fA-F0-9]{2})/g |  | ||||||
| 
 |  | ||||||
| function encodedReplacer (match, byte) { |  | ||||||
|   return String.fromCharCode(parseInt(byte, 16)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function parseParams (str) { |  | ||||||
|   const res = [] |  | ||||||
|   let state = 'key' |  | ||||||
|   let charset = '' |  | ||||||
|   let inquote = false |  | ||||||
|   let escaping = false |  | ||||||
|   let p = 0 |  | ||||||
|   let tmp = '' |  | ||||||
| 
 |  | ||||||
|   for (var i = 0, len = str.length; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     const char = str[i] |  | ||||||
|     if (char === '\\' && inquote) { |  | ||||||
|       if (escaping) { escaping = false } else { |  | ||||||
|         escaping = true |  | ||||||
|         continue |  | ||||||
|       } |  | ||||||
|     } else if (char === '"') { |  | ||||||
|       if (!escaping) { |  | ||||||
|         if (inquote) { |  | ||||||
|           inquote = false |  | ||||||
|           state = 'key' |  | ||||||
|         } else { inquote = true } |  | ||||||
|         continue |  | ||||||
|       } else { escaping = false } |  | ||||||
|     } else { |  | ||||||
|       if (escaping && inquote) { tmp += '\\' } |  | ||||||
|       escaping = false |  | ||||||
|       if ((state === 'charset' || state === 'lang') && char === "'") { |  | ||||||
|         if (state === 'charset') { |  | ||||||
|           state = 'lang' |  | ||||||
|           charset = tmp.substring(1) |  | ||||||
|         } else { state = 'value' } |  | ||||||
|         tmp = '' |  | ||||||
|         continue |  | ||||||
|       } else if (state === 'key' && |  | ||||||
|         (char === '*' || char === '=') && |  | ||||||
|         res.length) { |  | ||||||
|         if (char === '*') { state = 'charset' } else { state = 'value' } |  | ||||||
|         res[p] = [tmp, undefined] |  | ||||||
|         tmp = '' |  | ||||||
|         continue |  | ||||||
|       } else if (!inquote && char === ';') { |  | ||||||
|         state = 'key' |  | ||||||
|         if (charset) { |  | ||||||
|           if (tmp.length) { |  | ||||||
|             tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), |  | ||||||
|               'binary', |  | ||||||
|               charset) |  | ||||||
|           } |  | ||||||
|           charset = '' |  | ||||||
|         } else if (tmp.length) { |  | ||||||
|           tmp = decodeText(tmp, 'binary', 'utf8') |  | ||||||
|         } |  | ||||||
|         if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } |  | ||||||
|         tmp = '' |  | ||||||
|         ++p |  | ||||||
|         continue |  | ||||||
|       } else if (!inquote && (char === ' ' || char === '\t')) { continue } |  | ||||||
|     } |  | ||||||
|     tmp += char |  | ||||||
|   } |  | ||||||
|   if (charset && tmp.length) { |  | ||||||
|     tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), |  | ||||||
|       'binary', |  | ||||||
|       charset) |  | ||||||
|   } else if (tmp) { |  | ||||||
|     tmp = decodeText(tmp, 'binary', 'utf8') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (res[p] === undefined) { |  | ||||||
|     if (tmp) { res[p] = tmp } |  | ||||||
|   } else { res[p][1] = tmp } |  | ||||||
| 
 |  | ||||||
|   return res |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = parseParams |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 7171: | /***/ 7171: | ||||||
| @ -70947,7 +69525,7 @@ module.exports = Dispatcher | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const Busboy = __nccwpck_require__(3438) | const Busboy = __nccwpck_require__(727) | ||||||
| const util = __nccwpck_require__(3983) | const util = __nccwpck_require__(3983) | ||||||
| const { | const { | ||||||
|   ReadableStreamFrom, |   ReadableStreamFrom, | ||||||
| @ -70969,6 +69547,14 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(9830) | |||||||
| const { File: UndiciFile } = __nccwpck_require__(8511) | const { File: UndiciFile } = __nccwpck_require__(8511) | ||||||
| const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) | const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) | ||||||
| 
 | 
 | ||||||
|  | let random | ||||||
|  | try { | ||||||
|  |   const crypto = __nccwpck_require__(6005) | ||||||
|  |   random = (max) => crypto.randomInt(0, max) | ||||||
|  | } catch { | ||||||
|  |   random = (max) => Math.floor(Math.random(max)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| let ReadableStream = globalThis.ReadableStream | let ReadableStream = globalThis.ReadableStream | ||||||
| 
 | 
 | ||||||
| /** @type {globalThis['File']} */ | /** @type {globalThis['File']} */ | ||||||
| @ -71054,7 +69640,7 @@ function extractBody (object, keepalive = false) { | |||||||
|     // Set source to a copy of the bytes held by object.
 |     // Set source to a copy of the bytes held by object.
 | ||||||
|     source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) |     source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) | ||||||
|   } else if (util.isFormDataLike(object)) { |   } else if (util.isFormDataLike(object)) { | ||||||
|     const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` |     const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` | ||||||
|     const prefix = `--${boundary}\r\nContent-Disposition: form-data` |     const prefix = `--${boundary}\r\nContent-Disposition: form-data` | ||||||
| 
 | 
 | ||||||
|     /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ |     /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ | ||||||
| @ -88012,7 +86598,7 @@ module.exports.implForWrapper = function (wrapper) { | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 8186: | /***/ 333: | ||||||
| /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { | /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| // Generated by CoffeeScript 1.12.7
 | // Generated by CoffeeScript 1.12.7
 | ||||||
| @ -89130,7 +87716,7 @@ module.exports.implForWrapper = function (wrapper) { | |||||||
| 
 | 
 | ||||||
|   XMLElement = __nccwpck_require__(9437); |   XMLElement = __nccwpck_require__(9437); | ||||||
| 
 | 
 | ||||||
|   XMLCData = __nccwpck_require__(8186); |   XMLCData = __nccwpck_require__(333); | ||||||
| 
 | 
 | ||||||
|   XMLComment = __nccwpck_require__(4407); |   XMLComment = __nccwpck_require__(4407); | ||||||
| 
 | 
 | ||||||
| @ -90105,7 +88691,7 @@ module.exports.implForWrapper = function (wrapper) { | |||||||
|       this.baseURI = null; |       this.baseURI = null; | ||||||
|       if (!XMLElement) { |       if (!XMLElement) { | ||||||
|         XMLElement = __nccwpck_require__(9437); |         XMLElement = __nccwpck_require__(9437); | ||||||
|         XMLCData = __nccwpck_require__(8186); |         XMLCData = __nccwpck_require__(333); | ||||||
|         XMLComment = __nccwpck_require__(4407); |         XMLComment = __nccwpck_require__(4407); | ||||||
|         XMLDeclaration = __nccwpck_require__(6364); |         XMLDeclaration = __nccwpck_require__(6364); | ||||||
|         XMLDocType = __nccwpck_require__(1801); |         XMLDocType = __nccwpck_require__(1801); | ||||||
| @ -91546,7 +90132,7 @@ module.exports.implForWrapper = function (wrapper) { | |||||||
| 
 | 
 | ||||||
|   XMLDocType = __nccwpck_require__(1801); |   XMLDocType = __nccwpck_require__(1801); | ||||||
| 
 | 
 | ||||||
|   XMLCData = __nccwpck_require__(8186); |   XMLCData = __nccwpck_require__(333); | ||||||
| 
 | 
 | ||||||
|   XMLComment = __nccwpck_require__(4407); |   XMLComment = __nccwpck_require__(4407); | ||||||
| 
 | 
 | ||||||
| @ -92685,6 +91271,14 @@ module.exports = require("net"); | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
|  | /***/ 6005: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | module.exports = require("node:crypto"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
| /***/ 5673: | /***/ 5673: | ||||||
| /***/ ((module) => { | /***/ ((module) => { | ||||||
| 
 | 
 | ||||||
| @ -92827,6 +91421,1631 @@ module.exports = require("worker_threads"); | |||||||
| "use strict"; | "use strict"; | ||||||
| module.exports = require("zlib"); | module.exports = require("zlib"); | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2960: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const WritableStream = (__nccwpck_require__(4492).Writable) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | 
 | ||||||
|  | const StreamSearch = __nccwpck_require__(1142) | ||||||
|  | 
 | ||||||
|  | const PartStream = __nccwpck_require__(1620) | ||||||
|  | const HeaderParser = __nccwpck_require__(2032) | ||||||
|  | 
 | ||||||
|  | const DASH = 45 | ||||||
|  | const B_ONEDASH = Buffer.from('-') | ||||||
|  | const B_CRLF = Buffer.from('\r\n') | ||||||
|  | const EMPTY_FN = function () {} | ||||||
|  | 
 | ||||||
|  | function Dicer (cfg) { | ||||||
|  |   if (!(this instanceof Dicer)) { return new Dicer(cfg) } | ||||||
|  |   WritableStream.call(this, cfg) | ||||||
|  | 
 | ||||||
|  |   if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } | ||||||
|  | 
 | ||||||
|  |   if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } | ||||||
|  | 
 | ||||||
|  |   this._headerFirst = cfg.headerFirst | ||||||
|  | 
 | ||||||
|  |   this._dashes = 0 | ||||||
|  |   this._parts = 0 | ||||||
|  |   this._finished = false | ||||||
|  |   this._realFinish = false | ||||||
|  |   this._isPreamble = true | ||||||
|  |   this._justMatched = false | ||||||
|  |   this._firstWrite = true | ||||||
|  |   this._inHeader = true | ||||||
|  |   this._part = undefined | ||||||
|  |   this._cb = undefined | ||||||
|  |   this._ignoreData = false | ||||||
|  |   this._partOpts = { highWaterMark: cfg.partHwm } | ||||||
|  |   this._pause = false | ||||||
|  | 
 | ||||||
|  |   const self = this | ||||||
|  |   this._hparser = new HeaderParser(cfg) | ||||||
|  |   this._hparser.on('header', function (header) { | ||||||
|  |     self._inHeader = false | ||||||
|  |     self._part.emit('header', header) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | inherits(Dicer, WritableStream) | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.emit = function (ev) { | ||||||
|  |   if (ev === 'finish' && !this._realFinish) { | ||||||
|  |     if (!this._finished) { | ||||||
|  |       const self = this | ||||||
|  |       process.nextTick(function () { | ||||||
|  |         self.emit('error', new Error('Unexpected end of multipart data')) | ||||||
|  |         if (self._part && !self._ignoreData) { | ||||||
|  |           const type = (self._isPreamble ? 'Preamble' : 'Part') | ||||||
|  |           self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) | ||||||
|  |           self._part.push(null) | ||||||
|  |           process.nextTick(function () { | ||||||
|  |             self._realFinish = true | ||||||
|  |             self.emit('finish') | ||||||
|  |             self._realFinish = false | ||||||
|  |           }) | ||||||
|  |           return | ||||||
|  |         } | ||||||
|  |         self._realFinish = true | ||||||
|  |         self.emit('finish') | ||||||
|  |         self._realFinish = false | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } else { WritableStream.prototype.emit.apply(this, arguments) } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._write = function (data, encoding, cb) { | ||||||
|  |   // ignore unexpected data (e.g. extra trailer data after finished)
 | ||||||
|  |   if (!this._hparser && !this._bparser) { return cb() } | ||||||
|  | 
 | ||||||
|  |   if (this._headerFirst && this._isPreamble) { | ||||||
|  |     if (!this._part) { | ||||||
|  |       this._part = new PartStream(this._partOpts) | ||||||
|  |       if (this.listenerCount('preamble') !== 0) { this.emit('preamble', this._part) } else { this._ignore() } | ||||||
|  |     } | ||||||
|  |     const r = this._hparser.push(data) | ||||||
|  |     if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // allows for "easier" testing
 | ||||||
|  |   if (this._firstWrite) { | ||||||
|  |     this._bparser.push(B_CRLF) | ||||||
|  |     this._firstWrite = false | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this._bparser.push(data) | ||||||
|  | 
 | ||||||
|  |   if (this._pause) { this._cb = cb } else { cb() } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.reset = function () { | ||||||
|  |   this._part = undefined | ||||||
|  |   this._bparser = undefined | ||||||
|  |   this._hparser = undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.setBoundary = function (boundary) { | ||||||
|  |   const self = this | ||||||
|  |   this._bparser = new StreamSearch('\r\n--' + boundary) | ||||||
|  |   this._bparser.on('info', function (isMatch, data, start, end) { | ||||||
|  |     self._oninfo(isMatch, data, start, end) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._ignore = function () { | ||||||
|  |   if (this._part && !this._ignoreData) { | ||||||
|  |     this._ignoreData = true | ||||||
|  |     this._part.on('error', EMPTY_FN) | ||||||
|  |     // we must perform some kind of read on the stream even though we are
 | ||||||
|  |     // ignoring the data, otherwise node's Readable stream will not emit 'end'
 | ||||||
|  |     // after pushing null to the stream
 | ||||||
|  |     this._part.resume() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._oninfo = function (isMatch, data, start, end) { | ||||||
|  |   let buf; const self = this; let i = 0; let r; let shouldWriteMore = true | ||||||
|  | 
 | ||||||
|  |   if (!this._part && this._justMatched && data) { | ||||||
|  |     while (this._dashes < 2 && (start + i) < end) { | ||||||
|  |       if (data[start + i] === DASH) { | ||||||
|  |         ++i | ||||||
|  |         ++this._dashes | ||||||
|  |       } else { | ||||||
|  |         if (this._dashes) { buf = B_ONEDASH } | ||||||
|  |         this._dashes = 0 | ||||||
|  |         break | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (this._dashes === 2) { | ||||||
|  |       if ((start + i) < end && this.listenerCount('trailer') !== 0) { this.emit('trailer', data.slice(start + i, end)) } | ||||||
|  |       this.reset() | ||||||
|  |       this._finished = true | ||||||
|  |       // no more parts will be added
 | ||||||
|  |       if (self._parts === 0) { | ||||||
|  |         self._realFinish = true | ||||||
|  |         self.emit('finish') | ||||||
|  |         self._realFinish = false | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (this._dashes) { return } | ||||||
|  |   } | ||||||
|  |   if (this._justMatched) { this._justMatched = false } | ||||||
|  |   if (!this._part) { | ||||||
|  |     this._part = new PartStream(this._partOpts) | ||||||
|  |     this._part._read = function (n) { | ||||||
|  |       self._unpause() | ||||||
|  |     } | ||||||
|  |     if (this._isPreamble && this.listenerCount('preamble') !== 0) { | ||||||
|  |       this.emit('preamble', this._part) | ||||||
|  |     } else if (this._isPreamble !== true && this.listenerCount('part') !== 0) { | ||||||
|  |       this.emit('part', this._part) | ||||||
|  |     } else { | ||||||
|  |       this._ignore() | ||||||
|  |     } | ||||||
|  |     if (!this._isPreamble) { this._inHeader = true } | ||||||
|  |   } | ||||||
|  |   if (data && start < end && !this._ignoreData) { | ||||||
|  |     if (this._isPreamble || !this._inHeader) { | ||||||
|  |       if (buf) { shouldWriteMore = this._part.push(buf) } | ||||||
|  |       shouldWriteMore = this._part.push(data.slice(start, end)) | ||||||
|  |       if (!shouldWriteMore) { this._pause = true } | ||||||
|  |     } else if (!this._isPreamble && this._inHeader) { | ||||||
|  |       if (buf) { this._hparser.push(buf) } | ||||||
|  |       r = this._hparser.push(data.slice(start, end)) | ||||||
|  |       if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (isMatch) { | ||||||
|  |     this._hparser.reset() | ||||||
|  |     if (this._isPreamble) { this._isPreamble = false } else { | ||||||
|  |       if (start !== end) { | ||||||
|  |         ++this._parts | ||||||
|  |         this._part.on('end', function () { | ||||||
|  |           if (--self._parts === 0) { | ||||||
|  |             if (self._finished) { | ||||||
|  |               self._realFinish = true | ||||||
|  |               self.emit('finish') | ||||||
|  |               self._realFinish = false | ||||||
|  |             } else { | ||||||
|  |               self._unpause() | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     this._part.push(null) | ||||||
|  |     this._part = undefined | ||||||
|  |     this._ignoreData = false | ||||||
|  |     this._justMatched = true | ||||||
|  |     this._dashes = 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._unpause = function () { | ||||||
|  |   if (!this._pause) { return } | ||||||
|  | 
 | ||||||
|  |   this._pause = false | ||||||
|  |   if (this._cb) { | ||||||
|  |     const cb = this._cb | ||||||
|  |     this._cb = undefined | ||||||
|  |     cb() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = Dicer | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2032: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const EventEmitter = (__nccwpck_require__(5673).EventEmitter) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const StreamSearch = __nccwpck_require__(1142) | ||||||
|  | 
 | ||||||
|  | const B_DCRLF = Buffer.from('\r\n\r\n') | ||||||
|  | const RE_CRLF = /\r\n/g | ||||||
|  | const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex
 | ||||||
|  | 
 | ||||||
|  | function HeaderParser (cfg) { | ||||||
|  |   EventEmitter.call(this) | ||||||
|  | 
 | ||||||
|  |   cfg = cfg || {} | ||||||
|  |   const self = this | ||||||
|  |   this.nread = 0 | ||||||
|  |   this.maxed = false | ||||||
|  |   this.npairs = 0 | ||||||
|  |   this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) | ||||||
|  |   this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.header = {} | ||||||
|  |   this.finished = false | ||||||
|  |   this.ss = new StreamSearch(B_DCRLF) | ||||||
|  |   this.ss.on('info', function (isMatch, data, start, end) { | ||||||
|  |     if (data && !self.maxed) { | ||||||
|  |       if (self.nread + end - start >= self.maxHeaderSize) { | ||||||
|  |         end = self.maxHeaderSize - self.nread + start | ||||||
|  |         self.nread = self.maxHeaderSize | ||||||
|  |         self.maxed = true | ||||||
|  |       } else { self.nread += (end - start) } | ||||||
|  | 
 | ||||||
|  |       self.buffer += data.toString('binary', start, end) | ||||||
|  |     } | ||||||
|  |     if (isMatch) { self._finish() } | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | inherits(HeaderParser, EventEmitter) | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype.push = function (data) { | ||||||
|  |   const r = this.ss.push(data) | ||||||
|  |   if (this.finished) { return r } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype.reset = function () { | ||||||
|  |   this.finished = false | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.header = {} | ||||||
|  |   this.ss.reset() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype._finish = function () { | ||||||
|  |   if (this.buffer) { this._parseHeader() } | ||||||
|  |   this.ss.matches = this.ss.maxMatches | ||||||
|  |   const header = this.header | ||||||
|  |   this.header = {} | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.finished = true | ||||||
|  |   this.nread = this.npairs = 0 | ||||||
|  |   this.maxed = false | ||||||
|  |   this.emit('header', header) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype._parseHeader = function () { | ||||||
|  |   if (this.npairs === this.maxHeaderPairs) { return } | ||||||
|  | 
 | ||||||
|  |   const lines = this.buffer.split(RE_CRLF) | ||||||
|  |   const len = lines.length | ||||||
|  |   let m, h | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (lines[i].length === 0) { continue } | ||||||
|  |     if (lines[i][0] === '\t' || lines[i][0] === ' ') { | ||||||
|  |       // folded header content
 | ||||||
|  |       // RFC2822 says to just remove the CRLF and not the whitespace following
 | ||||||
|  |       // it, so we follow the RFC and include the leading whitespace ...
 | ||||||
|  |       if (h) { | ||||||
|  |         this.header[h][this.header[h].length - 1] += lines[i] | ||||||
|  |         continue | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const posColon = lines[i].indexOf(':') | ||||||
|  |     if ( | ||||||
|  |       posColon === -1 || | ||||||
|  |       posColon === 0 | ||||||
|  |     ) { | ||||||
|  |       return | ||||||
|  |     } | ||||||
|  |     m = RE_HDR.exec(lines[i]) | ||||||
|  |     h = m[1].toLowerCase() | ||||||
|  |     this.header[h] = this.header[h] || [] | ||||||
|  |     this.header[h].push((m[2] || '')) | ||||||
|  |     if (++this.npairs === this.maxHeaderPairs) { break } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = HeaderParser | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1620: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | const ReadableStream = (__nccwpck_require__(4492).Readable) | ||||||
|  | 
 | ||||||
|  | function PartStream (opts) { | ||||||
|  |   ReadableStream.call(this, opts) | ||||||
|  | } | ||||||
|  | inherits(PartStream, ReadableStream) | ||||||
|  | 
 | ||||||
|  | PartStream.prototype._read = function (n) {} | ||||||
|  | 
 | ||||||
|  | module.exports = PartStream | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1142: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Copyright Brian White. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * @see https://github.com/mscdex/streamsearch
 | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to | ||||||
|  |  * deal in the Software without restriction, including without limitation the | ||||||
|  |  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||||||
|  |  * sell copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||||||
|  |  * IN THE SOFTWARE. | ||||||
|  |  * | ||||||
|  |  * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation | ||||||
|  |  * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
 | ||||||
|  |  */ | ||||||
|  | const EventEmitter = (__nccwpck_require__(5673).EventEmitter) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | 
 | ||||||
|  | function SBMH (needle) { | ||||||
|  |   if (typeof needle === 'string') { | ||||||
|  |     needle = Buffer.from(needle) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (!Buffer.isBuffer(needle)) { | ||||||
|  |     throw new TypeError('The needle has to be a String or a Buffer.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   const needleLength = needle.length | ||||||
|  | 
 | ||||||
|  |   if (needleLength === 0) { | ||||||
|  |     throw new Error('The needle cannot be an empty String/Buffer.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (needleLength > 256) { | ||||||
|  |     throw new Error('The needle cannot have a length bigger than 256.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.maxMatches = Infinity | ||||||
|  |   this.matches = 0 | ||||||
|  | 
 | ||||||
|  |   this._occ = new Array(256) | ||||||
|  |     .fill(needleLength) // Initialize occurrence table.
 | ||||||
|  |   this._lookbehind_size = 0 | ||||||
|  |   this._needle = needle | ||||||
|  |   this._bufpos = 0 | ||||||
|  | 
 | ||||||
|  |   this._lookbehind = Buffer.alloc(needleLength) | ||||||
|  | 
 | ||||||
|  |   // Populate occurrence table with analysis of the needle,
 | ||||||
|  |   // ignoring last letter.
 | ||||||
|  |   for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     this._occ[needle[i]] = needleLength - 1 - i | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | inherits(SBMH, EventEmitter) | ||||||
|  | 
 | ||||||
|  | SBMH.prototype.reset = function () { | ||||||
|  |   this._lookbehind_size = 0 | ||||||
|  |   this.matches = 0 | ||||||
|  |   this._bufpos = 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype.push = function (chunk, pos) { | ||||||
|  |   if (!Buffer.isBuffer(chunk)) { | ||||||
|  |     chunk = Buffer.from(chunk, 'binary') | ||||||
|  |   } | ||||||
|  |   const chlen = chunk.length | ||||||
|  |   this._bufpos = pos || 0 | ||||||
|  |   let r | ||||||
|  |   while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } | ||||||
|  |   return r | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_feed = function (data) { | ||||||
|  |   const len = data.length | ||||||
|  |   const needle = this._needle | ||||||
|  |   const needleLength = needle.length | ||||||
|  |   const lastNeedleChar = needle[needleLength - 1] | ||||||
|  | 
 | ||||||
|  |   // Positive: points to a position in `data`
 | ||||||
|  |   //           pos == 3 points to data[3]
 | ||||||
|  |   // Negative: points to a position in the lookbehind buffer
 | ||||||
|  |   //           pos == -2 points to lookbehind[lookbehind_size - 2]
 | ||||||
|  |   let pos = -this._lookbehind_size | ||||||
|  |   let ch | ||||||
|  | 
 | ||||||
|  |   if (pos < 0) { | ||||||
|  |     // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
 | ||||||
|  |     // search with character lookup code that considers both the
 | ||||||
|  |     // lookbehind buffer and the current round's haystack data.
 | ||||||
|  |     //
 | ||||||
|  |     // Loop until
 | ||||||
|  |     //   there is a match.
 | ||||||
|  |     // or until
 | ||||||
|  |     //   we've moved past the position that requires the
 | ||||||
|  |     //   lookbehind buffer. In this case we switch to the
 | ||||||
|  |     //   optimized loop.
 | ||||||
|  |     // or until
 | ||||||
|  |     //   the character to look at lies outside the haystack.
 | ||||||
|  |     while (pos < 0 && pos <= len - needleLength) { | ||||||
|  |       ch = this._sbmh_lookup_char(data, pos + needleLength - 1) | ||||||
|  | 
 | ||||||
|  |       if ( | ||||||
|  |         ch === lastNeedleChar && | ||||||
|  |         this._sbmh_memcmp(data, pos, needleLength - 1) | ||||||
|  |       ) { | ||||||
|  |         this._lookbehind_size = 0 | ||||||
|  |         ++this.matches | ||||||
|  |         this.emit('info', true) | ||||||
|  | 
 | ||||||
|  |         return (this._bufpos = pos + needleLength) | ||||||
|  |       } | ||||||
|  |       pos += this._occ[ch] | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // No match.
 | ||||||
|  | 
 | ||||||
|  |     if (pos < 0) { | ||||||
|  |       // There's too few data for Boyer-Moore-Horspool to run,
 | ||||||
|  |       // so let's use a different algorithm to skip as much as
 | ||||||
|  |       // we can.
 | ||||||
|  |       // Forward pos until
 | ||||||
|  |       //   the trailing part of lookbehind + data
 | ||||||
|  |       //   looks like the beginning of the needle
 | ||||||
|  |       // or until
 | ||||||
|  |       //   pos == 0
 | ||||||
|  |       while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (pos >= 0) { | ||||||
|  |       // Discard lookbehind buffer.
 | ||||||
|  |       this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) | ||||||
|  |       this._lookbehind_size = 0 | ||||||
|  |     } else { | ||||||
|  |       // Cut off part of the lookbehind buffer that has
 | ||||||
|  |       // been processed and append the entire haystack
 | ||||||
|  |       // into it.
 | ||||||
|  |       const bytesToCutOff = this._lookbehind_size + pos | ||||||
|  |       if (bytesToCutOff > 0) { | ||||||
|  |         // The cut off data is guaranteed not to contain the needle.
 | ||||||
|  |         this.emit('info', false, this._lookbehind, 0, bytesToCutOff) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, | ||||||
|  |         this._lookbehind_size - bytesToCutOff) | ||||||
|  |       this._lookbehind_size -= bytesToCutOff | ||||||
|  | 
 | ||||||
|  |       data.copy(this._lookbehind, this._lookbehind_size) | ||||||
|  |       this._lookbehind_size += len | ||||||
|  | 
 | ||||||
|  |       this._bufpos = len | ||||||
|  |       return len | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   pos += (pos >= 0) * this._bufpos | ||||||
|  | 
 | ||||||
|  |   // Lookbehind buffer is now empty. We only need to check if the
 | ||||||
|  |   // needle is in the haystack.
 | ||||||
|  |   if (data.indexOf(needle, pos) !== -1) { | ||||||
|  |     pos = data.indexOf(needle, pos) | ||||||
|  |     ++this.matches | ||||||
|  |     if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } | ||||||
|  | 
 | ||||||
|  |     return (this._bufpos = pos + needleLength) | ||||||
|  |   } else { | ||||||
|  |     pos = len - needleLength | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // There was no match. If there's trailing haystack data that we cannot
 | ||||||
|  |   // match yet using the Boyer-Moore-Horspool algorithm (because the trailing
 | ||||||
|  |   // data is less than the needle size) then match using a modified
 | ||||||
|  |   // algorithm that starts matching from the beginning instead of the end.
 | ||||||
|  |   // Whatever trailing data is left after running this algorithm is added to
 | ||||||
|  |   // the lookbehind buffer.
 | ||||||
|  |   while ( | ||||||
|  |     pos < len && | ||||||
|  |     ( | ||||||
|  |       data[pos] !== needle[0] || | ||||||
|  |       ( | ||||||
|  |         (Buffer.compare( | ||||||
|  |           data.subarray(pos, pos + len - pos), | ||||||
|  |           needle.subarray(0, len - pos) | ||||||
|  |         ) !== 0) | ||||||
|  |       ) | ||||||
|  |     ) | ||||||
|  |   ) { | ||||||
|  |     ++pos | ||||||
|  |   } | ||||||
|  |   if (pos < len) { | ||||||
|  |     data.copy(this._lookbehind, 0, pos, pos + (len - pos)) | ||||||
|  |     this._lookbehind_size = len - pos | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // Everything until pos is guaranteed not to contain needle data.
 | ||||||
|  |   if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } | ||||||
|  | 
 | ||||||
|  |   this._bufpos = len | ||||||
|  |   return len | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_lookup_char = function (data, pos) { | ||||||
|  |   return (pos < 0) | ||||||
|  |     ? this._lookbehind[this._lookbehind_size + pos] | ||||||
|  |     : data[pos] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_memcmp = function (data, pos, len) { | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } | ||||||
|  |   } | ||||||
|  |   return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = SBMH | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 727: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const WritableStream = (__nccwpck_require__(4492).Writable) | ||||||
|  | const { inherits } = __nccwpck_require__(7261) | ||||||
|  | const Dicer = __nccwpck_require__(2960) | ||||||
|  | 
 | ||||||
|  | const MultipartParser = __nccwpck_require__(2183) | ||||||
|  | const UrlencodedParser = __nccwpck_require__(8306) | ||||||
|  | const parseParams = __nccwpck_require__(1854) | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2183: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // TODO:
 | ||||||
|  | //  * support 1 nested multipart level
 | ||||||
|  | //    (see second multipart example here:
 | ||||||
|  | //     http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data)
 | ||||||
|  | //  * support limits.fieldNameSize
 | ||||||
|  | //     -- this will require modifications to utils.parseParams
 | ||||||
|  | 
 | ||||||
|  | const { Readable } = __nccwpck_require__(4492) | ||||||
|  | const { inherits } = __nccwpck_require__(7261) | ||||||
|  | 
 | ||||||
|  | const Dicer = __nccwpck_require__(2960) | ||||||
|  | 
 | ||||||
|  | const parseParams = __nccwpck_require__(1854) | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | const basename = __nccwpck_require__(8647) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const RE_BOUNDARY = /^boundary$/i | ||||||
|  | const RE_FIELD = /^form-data$/i | ||||||
|  | const RE_CHARSET = /^charset$/i | ||||||
|  | const RE_FILENAME = /^filename$/i | ||||||
|  | const RE_NAME = /^name$/i | ||||||
|  | 
 | ||||||
|  | Multipart.detect = /^multipart\/form-data/i | ||||||
|  | function Multipart (boy, cfg) { | ||||||
|  |   let i | ||||||
|  |   let len | ||||||
|  |   const self = this | ||||||
|  |   let boundary | ||||||
|  |   const limits = cfg.limits | ||||||
|  |   const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) | ||||||
|  |   const parsedConType = cfg.parsedConType || [] | ||||||
|  |   const defCharset = cfg.defCharset || 'utf8' | ||||||
|  |   const preservePath = cfg.preservePath | ||||||
|  |   const fileOpts = { highWaterMark: cfg.fileHwm } | ||||||
|  | 
 | ||||||
|  |   for (i = 0, len = parsedConType.length; i < len; ++i) { | ||||||
|  |     if (Array.isArray(parsedConType[i]) && | ||||||
|  |       RE_BOUNDARY.test(parsedConType[i][0])) { | ||||||
|  |       boundary = parsedConType[i][1] | ||||||
|  |       break | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function checkFinished () { | ||||||
|  |     if (nends === 0 && finished && !boy._done) { | ||||||
|  |       finished = false | ||||||
|  |       self.end() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } | ||||||
|  | 
 | ||||||
|  |   const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) | ||||||
|  |   const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) | ||||||
|  |   const filesLimit = getLimit(limits, 'files', Infinity) | ||||||
|  |   const fieldsLimit = getLimit(limits, 'fields', Infinity) | ||||||
|  |   const partsLimit = getLimit(limits, 'parts', Infinity) | ||||||
|  |   const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) | ||||||
|  |   const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) | ||||||
|  | 
 | ||||||
|  |   let nfiles = 0 | ||||||
|  |   let nfields = 0 | ||||||
|  |   let nends = 0 | ||||||
|  |   let curFile | ||||||
|  |   let curField | ||||||
|  |   let finished = false | ||||||
|  | 
 | ||||||
|  |   this._needDrain = false | ||||||
|  |   this._pause = false | ||||||
|  |   this._cb = undefined | ||||||
|  |   this._nparts = 0 | ||||||
|  |   this._boy = boy | ||||||
|  | 
 | ||||||
|  |   const parserCfg = { | ||||||
|  |     boundary, | ||||||
|  |     maxHeaderPairs: headerPairsLimit, | ||||||
|  |     maxHeaderSize: headerSizeLimit, | ||||||
|  |     partHwm: fileOpts.highWaterMark, | ||||||
|  |     highWaterMark: cfg.highWaterMark | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.parser = new Dicer(parserCfg) | ||||||
|  |   this.parser.on('drain', function () { | ||||||
|  |     self._needDrain = false | ||||||
|  |     if (self._cb && !self._pause) { | ||||||
|  |       const cb = self._cb | ||||||
|  |       self._cb = undefined | ||||||
|  |       cb() | ||||||
|  |     } | ||||||
|  |   }).on('part', function onPart (part) { | ||||||
|  |     if (++self._nparts > partsLimit) { | ||||||
|  |       self.parser.removeListener('part', onPart) | ||||||
|  |       self.parser.on('part', skipPart) | ||||||
|  |       boy.hitPartsLimit = true | ||||||
|  |       boy.emit('partsLimit') | ||||||
|  |       return skipPart(part) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let
 | ||||||
|  |     // us emit 'end' early since we know the part has ended if we are already
 | ||||||
|  |     // seeing the next part
 | ||||||
|  |     if (curField) { | ||||||
|  |       const field = curField | ||||||
|  |       field.emit('end') | ||||||
|  |       field.removeAllListeners('end') | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     part.on('header', function (header) { | ||||||
|  |       let contype | ||||||
|  |       let fieldname | ||||||
|  |       let parsed | ||||||
|  |       let charset | ||||||
|  |       let encoding | ||||||
|  |       let filename | ||||||
|  |       let nsize = 0 | ||||||
|  | 
 | ||||||
|  |       if (header['content-type']) { | ||||||
|  |         parsed = parseParams(header['content-type'][0]) | ||||||
|  |         if (parsed[0]) { | ||||||
|  |           contype = parsed[0].toLowerCase() | ||||||
|  |           for (i = 0, len = parsed.length; i < len; ++i) { | ||||||
|  |             if (RE_CHARSET.test(parsed[i][0])) { | ||||||
|  |               charset = parsed[i][1].toLowerCase() | ||||||
|  |               break | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (contype === undefined) { contype = 'text/plain' } | ||||||
|  |       if (charset === undefined) { charset = defCharset } | ||||||
|  | 
 | ||||||
|  |       if (header['content-disposition']) { | ||||||
|  |         parsed = parseParams(header['content-disposition'][0]) | ||||||
|  |         if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } | ||||||
|  |         for (i = 0, len = parsed.length; i < len; ++i) { | ||||||
|  |           if (RE_NAME.test(parsed[i][0])) { | ||||||
|  |             fieldname = parsed[i][1] | ||||||
|  |           } else if (RE_FILENAME.test(parsed[i][0])) { | ||||||
|  |             filename = parsed[i][1] | ||||||
|  |             if (!preservePath) { filename = basename(filename) } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } else { return skipPart(part) } | ||||||
|  | 
 | ||||||
|  |       if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } | ||||||
|  | 
 | ||||||
|  |       let onData, | ||||||
|  |         onEnd | ||||||
|  | 
 | ||||||
|  |       if (isPartAFile(fieldname, contype, filename)) { | ||||||
|  |         // file/binary field
 | ||||||
|  |         if (nfiles === filesLimit) { | ||||||
|  |           if (!boy.hitFilesLimit) { | ||||||
|  |             boy.hitFilesLimit = true | ||||||
|  |             boy.emit('filesLimit') | ||||||
|  |           } | ||||||
|  |           return skipPart(part) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nfiles | ||||||
|  | 
 | ||||||
|  |         if (boy.listenerCount('file') === 0) { | ||||||
|  |           self.parser._ignore() | ||||||
|  |           return | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nends | ||||||
|  |         const file = new FileStream(fileOpts) | ||||||
|  |         curFile = file | ||||||
|  |         file.on('end', function () { | ||||||
|  |           --nends | ||||||
|  |           self._pause = false | ||||||
|  |           checkFinished() | ||||||
|  |           if (self._cb && !self._needDrain) { | ||||||
|  |             const cb = self._cb | ||||||
|  |             self._cb = undefined | ||||||
|  |             cb() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |         file._read = function (n) { | ||||||
|  |           if (!self._pause) { return } | ||||||
|  |           self._pause = false | ||||||
|  |           if (self._cb && !self._needDrain) { | ||||||
|  |             const cb = self._cb | ||||||
|  |             self._cb = undefined | ||||||
|  |             cb() | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         boy.emit('file', fieldname, file, filename, encoding, contype) | ||||||
|  | 
 | ||||||
|  |         onData = function (data) { | ||||||
|  |           if ((nsize += data.length) > fileSizeLimit) { | ||||||
|  |             const extralen = fileSizeLimit - nsize + data.length | ||||||
|  |             if (extralen > 0) { file.push(data.slice(0, extralen)) } | ||||||
|  |             file.truncated = true | ||||||
|  |             file.bytesRead = fileSizeLimit | ||||||
|  |             part.removeAllListeners('data') | ||||||
|  |             file.emit('limit') | ||||||
|  |             return | ||||||
|  |           } else if (!file.push(data)) { self._pause = true } | ||||||
|  | 
 | ||||||
|  |           file.bytesRead = nsize | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         onEnd = function () { | ||||||
|  |           curFile = undefined | ||||||
|  |           file.push(null) | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         // non-file field
 | ||||||
|  |         if (nfields === fieldsLimit) { | ||||||
|  |           if (!boy.hitFieldsLimit) { | ||||||
|  |             boy.hitFieldsLimit = true | ||||||
|  |             boy.emit('fieldsLimit') | ||||||
|  |           } | ||||||
|  |           return skipPart(part) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nfields | ||||||
|  |         ++nends | ||||||
|  |         let buffer = '' | ||||||
|  |         let truncated = false | ||||||
|  |         curField = part | ||||||
|  | 
 | ||||||
|  |         onData = function (data) { | ||||||
|  |           if ((nsize += data.length) > fieldSizeLimit) { | ||||||
|  |             const extralen = (fieldSizeLimit - (nsize - data.length)) | ||||||
|  |             buffer += data.toString('binary', 0, extralen) | ||||||
|  |             truncated = true | ||||||
|  |             part.removeAllListeners('data') | ||||||
|  |           } else { buffer += data.toString('binary') } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         onEnd = function () { | ||||||
|  |           curField = undefined | ||||||
|  |           if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } | ||||||
|  |           boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) | ||||||
|  |           --nends | ||||||
|  |           checkFinished() | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become | ||||||
|  |          broken. Streams2/streams3 is a huge black box of confusion, but | ||||||
|  |          somehow overriding the sync state seems to fix things again (and still | ||||||
|  |          seems to work for previous node versions). | ||||||
|  |       */ | ||||||
|  |       part._readableState.sync = false | ||||||
|  | 
 | ||||||
|  |       part.on('data', onData) | ||||||
|  |       part.on('end', onEnd) | ||||||
|  |     }).on('error', function (err) { | ||||||
|  |       if (curFile) { curFile.emit('error', err) } | ||||||
|  |     }) | ||||||
|  |   }).on('error', function (err) { | ||||||
|  |     boy.emit('error', err) | ||||||
|  |   }).on('finish', function () { | ||||||
|  |     finished = true | ||||||
|  |     checkFinished() | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Multipart.prototype.write = function (chunk, cb) { | ||||||
|  |   const r = this.parser.write(chunk) | ||||||
|  |   if (r && !this._pause) { | ||||||
|  |     cb() | ||||||
|  |   } else { | ||||||
|  |     this._needDrain = !r | ||||||
|  |     this._cb = cb | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Multipart.prototype.end = function () { | ||||||
|  |   const self = this | ||||||
|  | 
 | ||||||
|  |   if (self.parser.writable) { | ||||||
|  |     self.parser.end() | ||||||
|  |   } else if (!self._boy._done) { | ||||||
|  |     process.nextTick(function () { | ||||||
|  |       self._boy._done = true | ||||||
|  |       self._boy.emit('finish') | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function skipPart (part) { | ||||||
|  |   part.resume() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function FileStream (opts) { | ||||||
|  |   Readable.call(this, opts) | ||||||
|  | 
 | ||||||
|  |   this.bytesRead = 0 | ||||||
|  | 
 | ||||||
|  |   this.truncated = false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inherits(FileStream, Readable) | ||||||
|  | 
 | ||||||
|  | FileStream.prototype._read = function (n) {} | ||||||
|  | 
 | ||||||
|  | module.exports = Multipart | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8306: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const Decoder = __nccwpck_require__(7100) | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const RE_CHARSET = /^charset$/i | ||||||
|  | 
 | ||||||
|  | UrlEncoded.detect = /^application\/x-www-form-urlencoded/i | ||||||
|  | function UrlEncoded (boy, cfg) { | ||||||
|  |   const limits = cfg.limits | ||||||
|  |   const parsedConType = cfg.parsedConType | ||||||
|  |   this.boy = boy | ||||||
|  | 
 | ||||||
|  |   this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) | ||||||
|  |   this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) | ||||||
|  |   this.fieldsLimit = getLimit(limits, 'fields', Infinity) | ||||||
|  | 
 | ||||||
|  |   let charset | ||||||
|  |   for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (Array.isArray(parsedConType[i]) && | ||||||
|  |         RE_CHARSET.test(parsedConType[i][0])) { | ||||||
|  |       charset = parsedConType[i][1].toLowerCase() | ||||||
|  |       break | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (charset === undefined) { charset = cfg.defCharset || 'utf8' } | ||||||
|  | 
 | ||||||
|  |   this.decoder = new Decoder() | ||||||
|  |   this.charset = charset | ||||||
|  |   this._fields = 0 | ||||||
|  |   this._state = 'key' | ||||||
|  |   this._checkingBytes = true | ||||||
|  |   this._bytesKey = 0 | ||||||
|  |   this._bytesVal = 0 | ||||||
|  |   this._key = '' | ||||||
|  |   this._val = '' | ||||||
|  |   this._keyTrunc = false | ||||||
|  |   this._valTrunc = false | ||||||
|  |   this._hitLimit = false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | UrlEncoded.prototype.write = function (data, cb) { | ||||||
|  |   if (this._fields === this.fieldsLimit) { | ||||||
|  |     if (!this.boy.hitFieldsLimit) { | ||||||
|  |       this.boy.hitFieldsLimit = true | ||||||
|  |       this.boy.emit('fieldsLimit') | ||||||
|  |     } | ||||||
|  |     return cb() | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   let idxeq; let idxamp; let i; let p = 0; const len = data.length | ||||||
|  | 
 | ||||||
|  |   while (p < len) { | ||||||
|  |     if (this._state === 'key') { | ||||||
|  |       idxeq = idxamp = undefined | ||||||
|  |       for (i = p; i < len; ++i) { | ||||||
|  |         if (!this._checkingBytes) { ++p } | ||||||
|  |         if (data[i] === 0x3D/* = */) { | ||||||
|  |           idxeq = i | ||||||
|  |           break | ||||||
|  |         } else if (data[i] === 0x26/* & */) { | ||||||
|  |           idxamp = i | ||||||
|  |           break | ||||||
|  |         } | ||||||
|  |         if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { | ||||||
|  |           this._hitLimit = true | ||||||
|  |           break | ||||||
|  |         } else if (this._checkingBytes) { ++this._bytesKey } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (idxeq !== undefined) { | ||||||
|  |         // key with assignment
 | ||||||
|  |         if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } | ||||||
|  |         this._state = 'val' | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._val = '' | ||||||
|  |         this._bytesVal = 0 | ||||||
|  |         this._valTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         p = idxeq + 1 | ||||||
|  |       } else if (idxamp !== undefined) { | ||||||
|  |         // key with no assignment
 | ||||||
|  |         ++this._fields | ||||||
|  |         let key; const keyTrunc = this._keyTrunc | ||||||
|  |         if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._key = '' | ||||||
|  |         this._bytesKey = 0 | ||||||
|  |         this._keyTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         if (key.length) { | ||||||
|  |           this.boy.emit('field', decodeText(key, 'binary', this.charset), | ||||||
|  |             '', | ||||||
|  |             keyTrunc, | ||||||
|  |             false) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         p = idxamp + 1 | ||||||
|  |         if (this._fields === this.fieldsLimit) { return cb() } | ||||||
|  |       } else if (this._hitLimit) { | ||||||
|  |         // we may not have hit the actual limit if there are encoded bytes...
 | ||||||
|  |         if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } | ||||||
|  |         p = i | ||||||
|  |         if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { | ||||||
|  |           // yep, we actually did hit the limit
 | ||||||
|  |           this._checkingBytes = false | ||||||
|  |           this._keyTrunc = true | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } | ||||||
|  |         p = len | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       idxamp = undefined | ||||||
|  |       for (i = p; i < len; ++i) { | ||||||
|  |         if (!this._checkingBytes) { ++p } | ||||||
|  |         if (data[i] === 0x26/* & */) { | ||||||
|  |           idxamp = i | ||||||
|  |           break | ||||||
|  |         } | ||||||
|  |         if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { | ||||||
|  |           this._hitLimit = true | ||||||
|  |           break | ||||||
|  |         } else if (this._checkingBytes) { ++this._bytesVal } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (idxamp !== undefined) { | ||||||
|  |         ++this._fields | ||||||
|  |         if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } | ||||||
|  |         this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |           decodeText(this._val, 'binary', this.charset), | ||||||
|  |           this._keyTrunc, | ||||||
|  |           this._valTrunc) | ||||||
|  |         this._state = 'key' | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._key = '' | ||||||
|  |         this._bytesKey = 0 | ||||||
|  |         this._keyTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         p = idxamp + 1 | ||||||
|  |         if (this._fields === this.fieldsLimit) { return cb() } | ||||||
|  |       } else if (this._hitLimit) { | ||||||
|  |         // we may not have hit the actual limit if there are encoded bytes...
 | ||||||
|  |         if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } | ||||||
|  |         p = i | ||||||
|  |         if ((this._val === '' && this.fieldSizeLimit === 0) || | ||||||
|  |             (this._bytesVal = this._val.length) === this.fieldSizeLimit) { | ||||||
|  |           // yep, we actually did hit the limit
 | ||||||
|  |           this._checkingBytes = false | ||||||
|  |           this._valTrunc = true | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } | ||||||
|  |         p = len | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   cb() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | UrlEncoded.prototype.end = function () { | ||||||
|  |   if (this.boy._done) { return } | ||||||
|  | 
 | ||||||
|  |   if (this._state === 'key' && this._key.length > 0) { | ||||||
|  |     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |       '', | ||||||
|  |       this._keyTrunc, | ||||||
|  |       false) | ||||||
|  |   } else if (this._state === 'val') { | ||||||
|  |     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |       decodeText(this._val, 'binary', this.charset), | ||||||
|  |       this._keyTrunc, | ||||||
|  |       this._valTrunc) | ||||||
|  |   } | ||||||
|  |   this.boy._done = true | ||||||
|  |   this.boy.emit('finish') | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = UrlEncoded | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 7100: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const RE_PLUS = /\+/g | ||||||
|  | 
 | ||||||
|  | const HEX = [ | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | function Decoder () { | ||||||
|  |   this.buffer = undefined | ||||||
|  | } | ||||||
|  | Decoder.prototype.write = function (str) { | ||||||
|  |   // Replace '+' with ' ' before decoding
 | ||||||
|  |   str = str.replace(RE_PLUS, ' ') | ||||||
|  |   let res = '' | ||||||
|  |   let i = 0; let p = 0; const len = str.length | ||||||
|  |   for (; i < len; ++i) { | ||||||
|  |     if (this.buffer !== undefined) { | ||||||
|  |       if (!HEX[str.charCodeAt(i)]) { | ||||||
|  |         res += '%' + this.buffer | ||||||
|  |         this.buffer = undefined | ||||||
|  |         --i // retry character
 | ||||||
|  |       } else { | ||||||
|  |         this.buffer += str[i] | ||||||
|  |         ++p | ||||||
|  |         if (this.buffer.length === 2) { | ||||||
|  |           res += String.fromCharCode(parseInt(this.buffer, 16)) | ||||||
|  |           this.buffer = undefined | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } else if (str[i] === '%') { | ||||||
|  |       if (i > p) { | ||||||
|  |         res += str.substring(p, i) | ||||||
|  |         p = i | ||||||
|  |       } | ||||||
|  |       this.buffer = '' | ||||||
|  |       ++p | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (p < len && this.buffer === undefined) { res += str.substring(p) } | ||||||
|  |   return res | ||||||
|  | } | ||||||
|  | Decoder.prototype.reset = function () { | ||||||
|  |   this.buffer = undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = Decoder | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8647: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | module.exports = function basename (path) { | ||||||
|  |   if (typeof path !== 'string') { return '' } | ||||||
|  |   for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var
 | ||||||
|  |     switch (path.charCodeAt(i)) { | ||||||
|  |       case 0x2F: // '/'
 | ||||||
|  |       case 0x5C: // '\'
 | ||||||
|  |         path = path.slice(i + 1) | ||||||
|  |         return (path === '..' || path === '.' ? '' : path) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return (path === '..' || path === '.' ? '' : path) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 4619: | ||||||
|  | /***/ (function(module) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // Node has always utf-8
 | ||||||
|  | const utf8Decoder = new TextDecoder('utf-8') | ||||||
|  | const textDecoders = new Map([ | ||||||
|  |   ['utf-8', utf8Decoder], | ||||||
|  |   ['utf8', utf8Decoder] | ||||||
|  | ]) | ||||||
|  | 
 | ||||||
|  | function getDecoder (charset) { | ||||||
|  |   let lc | ||||||
|  |   while (true) { | ||||||
|  |     switch (charset) { | ||||||
|  |       case 'utf-8': | ||||||
|  |       case 'utf8': | ||||||
|  |         return decoders.utf8 | ||||||
|  |       case 'latin1': | ||||||
|  |       case 'ascii': // TODO: Make these a separate, strict decoder?
 | ||||||
|  |       case 'us-ascii': | ||||||
|  |       case 'iso-8859-1': | ||||||
|  |       case 'iso8859-1': | ||||||
|  |       case 'iso88591': | ||||||
|  |       case 'iso_8859-1': | ||||||
|  |       case 'windows-1252': | ||||||
|  |       case 'iso_8859-1:1987': | ||||||
|  |       case 'cp1252': | ||||||
|  |       case 'x-cp1252': | ||||||
|  |         return decoders.latin1 | ||||||
|  |       case 'utf16le': | ||||||
|  |       case 'utf-16le': | ||||||
|  |       case 'ucs2': | ||||||
|  |       case 'ucs-2': | ||||||
|  |         return decoders.utf16le | ||||||
|  |       case 'base64': | ||||||
|  |         return decoders.base64 | ||||||
|  |       default: | ||||||
|  |         if (lc === undefined) { | ||||||
|  |           lc = true | ||||||
|  |           charset = charset.toLowerCase() | ||||||
|  |           continue | ||||||
|  |         } | ||||||
|  |         return decoders.other.bind(charset) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const decoders = { | ||||||
|  |   utf8: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.utf8Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   latin1: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       return data | ||||||
|  |     } | ||||||
|  |     return data.latin1Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   utf16le: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.ucs2Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   base64: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.base64Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   other: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (textDecoders.has(this.toString())) { | ||||||
|  |       try { | ||||||
|  |         return textDecoders.get(this).decode(data) | ||||||
|  |       } catch {} | ||||||
|  |     } | ||||||
|  |     return typeof data === 'string' | ||||||
|  |       ? data | ||||||
|  |       : data.toString() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function decodeText (text, sourceEncoding, destEncoding) { | ||||||
|  |   if (text) { | ||||||
|  |     return getDecoder(destEncoding)(text, sourceEncoding) | ||||||
|  |   } | ||||||
|  |   return text | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = decodeText | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1467: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | module.exports = function getLimit (limits, name, defaultLimit) { | ||||||
|  |   if ( | ||||||
|  |     !limits || | ||||||
|  |     limits[name] === undefined || | ||||||
|  |     limits[name] === null | ||||||
|  |   ) { return defaultLimit } | ||||||
|  | 
 | ||||||
|  |   if ( | ||||||
|  |     typeof limits[name] !== 'number' || | ||||||
|  |     isNaN(limits[name]) | ||||||
|  |   ) { throw new TypeError('Limit ' + name + ' is not a valid number') } | ||||||
|  | 
 | ||||||
|  |   return limits[name] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1854: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | /* eslint-disable object-property-newline */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | 
 | ||||||
|  | const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g | ||||||
|  | 
 | ||||||
|  | const EncodedLookup = { | ||||||
|  |   '%00': '\x00', '%01': '\x01', '%02': '\x02', '%03': '\x03', '%04': '\x04', | ||||||
|  |   '%05': '\x05', '%06': '\x06', '%07': '\x07', '%08': '\x08', '%09': '\x09', | ||||||
|  |   '%0a': '\x0a', '%0A': '\x0a', '%0b': '\x0b', '%0B': '\x0b', '%0c': '\x0c', | ||||||
|  |   '%0C': '\x0c', '%0d': '\x0d', '%0D': '\x0d', '%0e': '\x0e', '%0E': '\x0e', | ||||||
|  |   '%0f': '\x0f', '%0F': '\x0f', '%10': '\x10', '%11': '\x11', '%12': '\x12', | ||||||
|  |   '%13': '\x13', '%14': '\x14', '%15': '\x15', '%16': '\x16', '%17': '\x17', | ||||||
|  |   '%18': '\x18', '%19': '\x19', '%1a': '\x1a', '%1A': '\x1a', '%1b': '\x1b', | ||||||
|  |   '%1B': '\x1b', '%1c': '\x1c', '%1C': '\x1c', '%1d': '\x1d', '%1D': '\x1d', | ||||||
|  |   '%1e': '\x1e', '%1E': '\x1e', '%1f': '\x1f', '%1F': '\x1f', '%20': '\x20', | ||||||
|  |   '%21': '\x21', '%22': '\x22', '%23': '\x23', '%24': '\x24', '%25': '\x25', | ||||||
|  |   '%26': '\x26', '%27': '\x27', '%28': '\x28', '%29': '\x29', '%2a': '\x2a', | ||||||
|  |   '%2A': '\x2a', '%2b': '\x2b', '%2B': '\x2b', '%2c': '\x2c', '%2C': '\x2c', | ||||||
|  |   '%2d': '\x2d', '%2D': '\x2d', '%2e': '\x2e', '%2E': '\x2e', '%2f': '\x2f', | ||||||
|  |   '%2F': '\x2f', '%30': '\x30', '%31': '\x31', '%32': '\x32', '%33': '\x33', | ||||||
|  |   '%34': '\x34', '%35': '\x35', '%36': '\x36', '%37': '\x37', '%38': '\x38', | ||||||
|  |   '%39': '\x39', '%3a': '\x3a', '%3A': '\x3a', '%3b': '\x3b', '%3B': '\x3b', | ||||||
|  |   '%3c': '\x3c', '%3C': '\x3c', '%3d': '\x3d', '%3D': '\x3d', '%3e': '\x3e', | ||||||
|  |   '%3E': '\x3e', '%3f': '\x3f', '%3F': '\x3f', '%40': '\x40', '%41': '\x41', | ||||||
|  |   '%42': '\x42', '%43': '\x43', '%44': '\x44', '%45': '\x45', '%46': '\x46', | ||||||
|  |   '%47': '\x47', '%48': '\x48', '%49': '\x49', '%4a': '\x4a', '%4A': '\x4a', | ||||||
|  |   '%4b': '\x4b', '%4B': '\x4b', '%4c': '\x4c', '%4C': '\x4c', '%4d': '\x4d', | ||||||
|  |   '%4D': '\x4d', '%4e': '\x4e', '%4E': '\x4e', '%4f': '\x4f', '%4F': '\x4f', | ||||||
|  |   '%50': '\x50', '%51': '\x51', '%52': '\x52', '%53': '\x53', '%54': '\x54', | ||||||
|  |   '%55': '\x55', '%56': '\x56', '%57': '\x57', '%58': '\x58', '%59': '\x59', | ||||||
|  |   '%5a': '\x5a', '%5A': '\x5a', '%5b': '\x5b', '%5B': '\x5b', '%5c': '\x5c', | ||||||
|  |   '%5C': '\x5c', '%5d': '\x5d', '%5D': '\x5d', '%5e': '\x5e', '%5E': '\x5e', | ||||||
|  |   '%5f': '\x5f', '%5F': '\x5f', '%60': '\x60', '%61': '\x61', '%62': '\x62', | ||||||
|  |   '%63': '\x63', '%64': '\x64', '%65': '\x65', '%66': '\x66', '%67': '\x67', | ||||||
|  |   '%68': '\x68', '%69': '\x69', '%6a': '\x6a', '%6A': '\x6a', '%6b': '\x6b', | ||||||
|  |   '%6B': '\x6b', '%6c': '\x6c', '%6C': '\x6c', '%6d': '\x6d', '%6D': '\x6d', | ||||||
|  |   '%6e': '\x6e', '%6E': '\x6e', '%6f': '\x6f', '%6F': '\x6f', '%70': '\x70', | ||||||
|  |   '%71': '\x71', '%72': '\x72', '%73': '\x73', '%74': '\x74', '%75': '\x75', | ||||||
|  |   '%76': '\x76', '%77': '\x77', '%78': '\x78', '%79': '\x79', '%7a': '\x7a', | ||||||
|  |   '%7A': '\x7a', '%7b': '\x7b', '%7B': '\x7b', '%7c': '\x7c', '%7C': '\x7c', | ||||||
|  |   '%7d': '\x7d', '%7D': '\x7d', '%7e': '\x7e', '%7E': '\x7e', '%7f': '\x7f', | ||||||
|  |   '%7F': '\x7f', '%80': '\x80', '%81': '\x81', '%82': '\x82', '%83': '\x83', | ||||||
|  |   '%84': '\x84', '%85': '\x85', '%86': '\x86', '%87': '\x87', '%88': '\x88', | ||||||
|  |   '%89': '\x89', '%8a': '\x8a', '%8A': '\x8a', '%8b': '\x8b', '%8B': '\x8b', | ||||||
|  |   '%8c': '\x8c', '%8C': '\x8c', '%8d': '\x8d', '%8D': '\x8d', '%8e': '\x8e', | ||||||
|  |   '%8E': '\x8e', '%8f': '\x8f', '%8F': '\x8f', '%90': '\x90', '%91': '\x91', | ||||||
|  |   '%92': '\x92', '%93': '\x93', '%94': '\x94', '%95': '\x95', '%96': '\x96', | ||||||
|  |   '%97': '\x97', '%98': '\x98', '%99': '\x99', '%9a': '\x9a', '%9A': '\x9a', | ||||||
|  |   '%9b': '\x9b', '%9B': '\x9b', '%9c': '\x9c', '%9C': '\x9c', '%9d': '\x9d', | ||||||
|  |   '%9D': '\x9d', '%9e': '\x9e', '%9E': '\x9e', '%9f': '\x9f', '%9F': '\x9f', | ||||||
|  |   '%a0': '\xa0', '%A0': '\xa0', '%a1': '\xa1', '%A1': '\xa1', '%a2': '\xa2', | ||||||
|  |   '%A2': '\xa2', '%a3': '\xa3', '%A3': '\xa3', '%a4': '\xa4', '%A4': '\xa4', | ||||||
|  |   '%a5': '\xa5', '%A5': '\xa5', '%a6': '\xa6', '%A6': '\xa6', '%a7': '\xa7', | ||||||
|  |   '%A7': '\xa7', '%a8': '\xa8', '%A8': '\xa8', '%a9': '\xa9', '%A9': '\xa9', | ||||||
|  |   '%aa': '\xaa', '%Aa': '\xaa', '%aA': '\xaa', '%AA': '\xaa', '%ab': '\xab', | ||||||
|  |   '%Ab': '\xab', '%aB': '\xab', '%AB': '\xab', '%ac': '\xac', '%Ac': '\xac', | ||||||
|  |   '%aC': '\xac', '%AC': '\xac', '%ad': '\xad', '%Ad': '\xad', '%aD': '\xad', | ||||||
|  |   '%AD': '\xad', '%ae': '\xae', '%Ae': '\xae', '%aE': '\xae', '%AE': '\xae', | ||||||
|  |   '%af': '\xaf', '%Af': '\xaf', '%aF': '\xaf', '%AF': '\xaf', '%b0': '\xb0', | ||||||
|  |   '%B0': '\xb0', '%b1': '\xb1', '%B1': '\xb1', '%b2': '\xb2', '%B2': '\xb2', | ||||||
|  |   '%b3': '\xb3', '%B3': '\xb3', '%b4': '\xb4', '%B4': '\xb4', '%b5': '\xb5', | ||||||
|  |   '%B5': '\xb5', '%b6': '\xb6', '%B6': '\xb6', '%b7': '\xb7', '%B7': '\xb7', | ||||||
|  |   '%b8': '\xb8', '%B8': '\xb8', '%b9': '\xb9', '%B9': '\xb9', '%ba': '\xba', | ||||||
|  |   '%Ba': '\xba', '%bA': '\xba', '%BA': '\xba', '%bb': '\xbb', '%Bb': '\xbb', | ||||||
|  |   '%bB': '\xbb', '%BB': '\xbb', '%bc': '\xbc', '%Bc': '\xbc', '%bC': '\xbc', | ||||||
|  |   '%BC': '\xbc', '%bd': '\xbd', '%Bd': '\xbd', '%bD': '\xbd', '%BD': '\xbd', | ||||||
|  |   '%be': '\xbe', '%Be': '\xbe', '%bE': '\xbe', '%BE': '\xbe', '%bf': '\xbf', | ||||||
|  |   '%Bf': '\xbf', '%bF': '\xbf', '%BF': '\xbf', '%c0': '\xc0', '%C0': '\xc0', | ||||||
|  |   '%c1': '\xc1', '%C1': '\xc1', '%c2': '\xc2', '%C2': '\xc2', '%c3': '\xc3', | ||||||
|  |   '%C3': '\xc3', '%c4': '\xc4', '%C4': '\xc4', '%c5': '\xc5', '%C5': '\xc5', | ||||||
|  |   '%c6': '\xc6', '%C6': '\xc6', '%c7': '\xc7', '%C7': '\xc7', '%c8': '\xc8', | ||||||
|  |   '%C8': '\xc8', '%c9': '\xc9', '%C9': '\xc9', '%ca': '\xca', '%Ca': '\xca', | ||||||
|  |   '%cA': '\xca', '%CA': '\xca', '%cb': '\xcb', '%Cb': '\xcb', '%cB': '\xcb', | ||||||
|  |   '%CB': '\xcb', '%cc': '\xcc', '%Cc': '\xcc', '%cC': '\xcc', '%CC': '\xcc', | ||||||
|  |   '%cd': '\xcd', '%Cd': '\xcd', '%cD': '\xcd', '%CD': '\xcd', '%ce': '\xce', | ||||||
|  |   '%Ce': '\xce', '%cE': '\xce', '%CE': '\xce', '%cf': '\xcf', '%Cf': '\xcf', | ||||||
|  |   '%cF': '\xcf', '%CF': '\xcf', '%d0': '\xd0', '%D0': '\xd0', '%d1': '\xd1', | ||||||
|  |   '%D1': '\xd1', '%d2': '\xd2', '%D2': '\xd2', '%d3': '\xd3', '%D3': '\xd3', | ||||||
|  |   '%d4': '\xd4', '%D4': '\xd4', '%d5': '\xd5', '%D5': '\xd5', '%d6': '\xd6', | ||||||
|  |   '%D6': '\xd6', '%d7': '\xd7', '%D7': '\xd7', '%d8': '\xd8', '%D8': '\xd8', | ||||||
|  |   '%d9': '\xd9', '%D9': '\xd9', '%da': '\xda', '%Da': '\xda', '%dA': '\xda', | ||||||
|  |   '%DA': '\xda', '%db': '\xdb', '%Db': '\xdb', '%dB': '\xdb', '%DB': '\xdb', | ||||||
|  |   '%dc': '\xdc', '%Dc': '\xdc', '%dC': '\xdc', '%DC': '\xdc', '%dd': '\xdd', | ||||||
|  |   '%Dd': '\xdd', '%dD': '\xdd', '%DD': '\xdd', '%de': '\xde', '%De': '\xde', | ||||||
|  |   '%dE': '\xde', '%DE': '\xde', '%df': '\xdf', '%Df': '\xdf', '%dF': '\xdf', | ||||||
|  |   '%DF': '\xdf', '%e0': '\xe0', '%E0': '\xe0', '%e1': '\xe1', '%E1': '\xe1', | ||||||
|  |   '%e2': '\xe2', '%E2': '\xe2', '%e3': '\xe3', '%E3': '\xe3', '%e4': '\xe4', | ||||||
|  |   '%E4': '\xe4', '%e5': '\xe5', '%E5': '\xe5', '%e6': '\xe6', '%E6': '\xe6', | ||||||
|  |   '%e7': '\xe7', '%E7': '\xe7', '%e8': '\xe8', '%E8': '\xe8', '%e9': '\xe9', | ||||||
|  |   '%E9': '\xe9', '%ea': '\xea', '%Ea': '\xea', '%eA': '\xea', '%EA': '\xea', | ||||||
|  |   '%eb': '\xeb', '%Eb': '\xeb', '%eB': '\xeb', '%EB': '\xeb', '%ec': '\xec', | ||||||
|  |   '%Ec': '\xec', '%eC': '\xec', '%EC': '\xec', '%ed': '\xed', '%Ed': '\xed', | ||||||
|  |   '%eD': '\xed', '%ED': '\xed', '%ee': '\xee', '%Ee': '\xee', '%eE': '\xee', | ||||||
|  |   '%EE': '\xee', '%ef': '\xef', '%Ef': '\xef', '%eF': '\xef', '%EF': '\xef', | ||||||
|  |   '%f0': '\xf0', '%F0': '\xf0', '%f1': '\xf1', '%F1': '\xf1', '%f2': '\xf2', | ||||||
|  |   '%F2': '\xf2', '%f3': '\xf3', '%F3': '\xf3', '%f4': '\xf4', '%F4': '\xf4', | ||||||
|  |   '%f5': '\xf5', '%F5': '\xf5', '%f6': '\xf6', '%F6': '\xf6', '%f7': '\xf7', | ||||||
|  |   '%F7': '\xf7', '%f8': '\xf8', '%F8': '\xf8', '%f9': '\xf9', '%F9': '\xf9', | ||||||
|  |   '%fa': '\xfa', '%Fa': '\xfa', '%fA': '\xfa', '%FA': '\xfa', '%fb': '\xfb', | ||||||
|  |   '%Fb': '\xfb', '%fB': '\xfb', '%FB': '\xfb', '%fc': '\xfc', '%Fc': '\xfc', | ||||||
|  |   '%fC': '\xfc', '%FC': '\xfc', '%fd': '\xfd', '%Fd': '\xfd', '%fD': '\xfd', | ||||||
|  |   '%FD': '\xfd', '%fe': '\xfe', '%Fe': '\xfe', '%fE': '\xfe', '%FE': '\xfe', | ||||||
|  |   '%ff': '\xff', '%Ff': '\xff', '%fF': '\xff', '%FF': '\xff' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function encodedReplacer (match) { | ||||||
|  |   return EncodedLookup[match] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const STATE_KEY = 0 | ||||||
|  | const STATE_VALUE = 1 | ||||||
|  | const STATE_CHARSET = 2 | ||||||
|  | const STATE_LANG = 3 | ||||||
|  | 
 | ||||||
|  | function parseParams (str) { | ||||||
|  |   const res = [] | ||||||
|  |   let state = STATE_KEY | ||||||
|  |   let charset = '' | ||||||
|  |   let inquote = false | ||||||
|  |   let escaping = false | ||||||
|  |   let p = 0 | ||||||
|  |   let tmp = '' | ||||||
|  |   const len = str.length | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     const char = str[i] | ||||||
|  |     if (char === '\\' && inquote) { | ||||||
|  |       if (escaping) { escaping = false } else { | ||||||
|  |         escaping = true | ||||||
|  |         continue | ||||||
|  |       } | ||||||
|  |     } else if (char === '"') { | ||||||
|  |       if (!escaping) { | ||||||
|  |         if (inquote) { | ||||||
|  |           inquote = false | ||||||
|  |           state = STATE_KEY | ||||||
|  |         } else { inquote = true } | ||||||
|  |         continue | ||||||
|  |       } else { escaping = false } | ||||||
|  |     } else { | ||||||
|  |       if (escaping && inquote) { tmp += '\\' } | ||||||
|  |       escaping = false | ||||||
|  |       if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") { | ||||||
|  |         if (state === STATE_CHARSET) { | ||||||
|  |           state = STATE_LANG | ||||||
|  |           charset = tmp.substring(1) | ||||||
|  |         } else { state = STATE_VALUE } | ||||||
|  |         tmp = '' | ||||||
|  |         continue | ||||||
|  |       } else if (state === STATE_KEY && | ||||||
|  |         (char === '*' || char === '=') && | ||||||
|  |         res.length) { | ||||||
|  |         state = char === '*' | ||||||
|  |           ? STATE_CHARSET | ||||||
|  |           : STATE_VALUE | ||||||
|  |         res[p] = [tmp, undefined] | ||||||
|  |         tmp = '' | ||||||
|  |         continue | ||||||
|  |       } else if (!inquote && char === ';') { | ||||||
|  |         state = STATE_KEY | ||||||
|  |         if (charset) { | ||||||
|  |           if (tmp.length) { | ||||||
|  |             tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), | ||||||
|  |               'binary', | ||||||
|  |               charset) | ||||||
|  |           } | ||||||
|  |           charset = '' | ||||||
|  |         } else if (tmp.length) { | ||||||
|  |           tmp = decodeText(tmp, 'binary', 'utf8') | ||||||
|  |         } | ||||||
|  |         if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } | ||||||
|  |         tmp = '' | ||||||
|  |         ++p | ||||||
|  |         continue | ||||||
|  |       } else if (!inquote && (char === ' ' || char === '\t')) { continue } | ||||||
|  |     } | ||||||
|  |     tmp += char | ||||||
|  |   } | ||||||
|  |   if (charset && tmp.length) { | ||||||
|  |     tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), | ||||||
|  |       'binary', | ||||||
|  |       charset) | ||||||
|  |   } else if (tmp) { | ||||||
|  |     tmp = decodeText(tmp, 'binary', 'utf8') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (res[p] === undefined) { | ||||||
|  |     if (tmp) { res[p] = tmp } | ||||||
|  |   } else { res[p][1] = tmp } | ||||||
|  | 
 | ||||||
|  |   return res | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = parseParams | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 9167: | /***/ 9167: | ||||||
|  | |||||||
							
								
								
									
										3075
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3075
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -48428,1428 +48428,6 @@ exports.newPipeline = newPipeline; | |||||||
| //# sourceMappingURL=index.js.map
 | //# sourceMappingURL=index.js.map
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 2856: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const WritableStream = (__nccwpck_require__(4492).Writable) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| 
 |  | ||||||
| const StreamSearch = __nccwpck_require__(8534) |  | ||||||
| 
 |  | ||||||
| const PartStream = __nccwpck_require__(8710) |  | ||||||
| const HeaderParser = __nccwpck_require__(333) |  | ||||||
| 
 |  | ||||||
| const DASH = 45 |  | ||||||
| const B_ONEDASH = Buffer.from('-') |  | ||||||
| const B_CRLF = Buffer.from('\r\n') |  | ||||||
| const EMPTY_FN = function () {} |  | ||||||
| 
 |  | ||||||
| function Dicer (cfg) { |  | ||||||
|   if (!(this instanceof Dicer)) { return new Dicer(cfg) } |  | ||||||
|   WritableStream.call(this, cfg) |  | ||||||
| 
 |  | ||||||
|   if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } |  | ||||||
| 
 |  | ||||||
|   if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } |  | ||||||
| 
 |  | ||||||
|   this._headerFirst = cfg.headerFirst |  | ||||||
| 
 |  | ||||||
|   this._dashes = 0 |  | ||||||
|   this._parts = 0 |  | ||||||
|   this._finished = false |  | ||||||
|   this._realFinish = false |  | ||||||
|   this._isPreamble = true |  | ||||||
|   this._justMatched = false |  | ||||||
|   this._firstWrite = true |  | ||||||
|   this._inHeader = true |  | ||||||
|   this._part = undefined |  | ||||||
|   this._cb = undefined |  | ||||||
|   this._ignoreData = false |  | ||||||
|   this._partOpts = { highWaterMark: cfg.partHwm } |  | ||||||
|   this._pause = false |  | ||||||
| 
 |  | ||||||
|   const self = this |  | ||||||
|   this._hparser = new HeaderParser(cfg) |  | ||||||
|   this._hparser.on('header', function (header) { |  | ||||||
|     self._inHeader = false |  | ||||||
|     self._part.emit('header', header) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| inherits(Dicer, WritableStream) |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.emit = function (ev) { |  | ||||||
|   if (ev === 'finish' && !this._realFinish) { |  | ||||||
|     if (!this._finished) { |  | ||||||
|       const self = this |  | ||||||
|       process.nextTick(function () { |  | ||||||
|         self.emit('error', new Error('Unexpected end of multipart data')) |  | ||||||
|         if (self._part && !self._ignoreData) { |  | ||||||
|           const type = (self._isPreamble ? 'Preamble' : 'Part') |  | ||||||
|           self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) |  | ||||||
|           self._part.push(null) |  | ||||||
|           process.nextTick(function () { |  | ||||||
|             self._realFinish = true |  | ||||||
|             self.emit('finish') |  | ||||||
|             self._realFinish = false |  | ||||||
|           }) |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
|         self._realFinish = true |  | ||||||
|         self.emit('finish') |  | ||||||
|         self._realFinish = false |  | ||||||
|       }) |  | ||||||
|     } |  | ||||||
|   } else { WritableStream.prototype.emit.apply(this, arguments) } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._write = function (data, encoding, cb) { |  | ||||||
|   // ignore unexpected data (e.g. extra trailer data after finished)
 |  | ||||||
|   if (!this._hparser && !this._bparser) { return cb() } |  | ||||||
| 
 |  | ||||||
|   if (this._headerFirst && this._isPreamble) { |  | ||||||
|     if (!this._part) { |  | ||||||
|       this._part = new PartStream(this._partOpts) |  | ||||||
|       if (this._events.preamble) { this.emit('preamble', this._part) } else { this._ignore() } |  | ||||||
|     } |  | ||||||
|     const r = this._hparser.push(data) |  | ||||||
|     if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // allows for "easier" testing
 |  | ||||||
|   if (this._firstWrite) { |  | ||||||
|     this._bparser.push(B_CRLF) |  | ||||||
|     this._firstWrite = false |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this._bparser.push(data) |  | ||||||
| 
 |  | ||||||
|   if (this._pause) { this._cb = cb } else { cb() } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.reset = function () { |  | ||||||
|   this._part = undefined |  | ||||||
|   this._bparser = undefined |  | ||||||
|   this._hparser = undefined |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype.setBoundary = function (boundary) { |  | ||||||
|   const self = this |  | ||||||
|   this._bparser = new StreamSearch('\r\n--' + boundary) |  | ||||||
|   this._bparser.on('info', function (isMatch, data, start, end) { |  | ||||||
|     self._oninfo(isMatch, data, start, end) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._ignore = function () { |  | ||||||
|   if (this._part && !this._ignoreData) { |  | ||||||
|     this._ignoreData = true |  | ||||||
|     this._part.on('error', EMPTY_FN) |  | ||||||
|     // we must perform some kind of read on the stream even though we are
 |  | ||||||
|     // ignoring the data, otherwise node's Readable stream will not emit 'end'
 |  | ||||||
|     // after pushing null to the stream
 |  | ||||||
|     this._part.resume() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._oninfo = function (isMatch, data, start, end) { |  | ||||||
|   let buf; const self = this; let i = 0; let r; let shouldWriteMore = true |  | ||||||
| 
 |  | ||||||
|   if (!this._part && this._justMatched && data) { |  | ||||||
|     while (this._dashes < 2 && (start + i) < end) { |  | ||||||
|       if (data[start + i] === DASH) { |  | ||||||
|         ++i |  | ||||||
|         ++this._dashes |  | ||||||
|       } else { |  | ||||||
|         if (this._dashes) { buf = B_ONEDASH } |  | ||||||
|         this._dashes = 0 |  | ||||||
|         break |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     if (this._dashes === 2) { |  | ||||||
|       if ((start + i) < end && this._events.trailer) { this.emit('trailer', data.slice(start + i, end)) } |  | ||||||
|       this.reset() |  | ||||||
|       this._finished = true |  | ||||||
|       // no more parts will be added
 |  | ||||||
|       if (self._parts === 0) { |  | ||||||
|         self._realFinish = true |  | ||||||
|         self.emit('finish') |  | ||||||
|         self._realFinish = false |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     if (this._dashes) { return } |  | ||||||
|   } |  | ||||||
|   if (this._justMatched) { this._justMatched = false } |  | ||||||
|   if (!this._part) { |  | ||||||
|     this._part = new PartStream(this._partOpts) |  | ||||||
|     this._part._read = function (n) { |  | ||||||
|       self._unpause() |  | ||||||
|     } |  | ||||||
|     if (this._isPreamble && this._events.preamble) { this.emit('preamble', this._part) } else if (this._isPreamble !== true && this._events.part) { this.emit('part', this._part) } else { this._ignore() } |  | ||||||
|     if (!this._isPreamble) { this._inHeader = true } |  | ||||||
|   } |  | ||||||
|   if (data && start < end && !this._ignoreData) { |  | ||||||
|     if (this._isPreamble || !this._inHeader) { |  | ||||||
|       if (buf) { shouldWriteMore = this._part.push(buf) } |  | ||||||
|       shouldWriteMore = this._part.push(data.slice(start, end)) |  | ||||||
|       if (!shouldWriteMore) { this._pause = true } |  | ||||||
|     } else if (!this._isPreamble && this._inHeader) { |  | ||||||
|       if (buf) { this._hparser.push(buf) } |  | ||||||
|       r = this._hparser.push(data.slice(start, end)) |  | ||||||
|       if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (isMatch) { |  | ||||||
|     this._hparser.reset() |  | ||||||
|     if (this._isPreamble) { this._isPreamble = false } else { |  | ||||||
|       if (start !== end) { |  | ||||||
|         ++this._parts |  | ||||||
|         this._part.on('end', function () { |  | ||||||
|           if (--self._parts === 0) { |  | ||||||
|             if (self._finished) { |  | ||||||
|               self._realFinish = true |  | ||||||
|               self.emit('finish') |  | ||||||
|               self._realFinish = false |  | ||||||
|             } else { |  | ||||||
|               self._unpause() |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     this._part.push(null) |  | ||||||
|     this._part = undefined |  | ||||||
|     this._ignoreData = false |  | ||||||
|     this._justMatched = true |  | ||||||
|     this._dashes = 0 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Dicer.prototype._unpause = function () { |  | ||||||
|   if (!this._pause) { return } |  | ||||||
| 
 |  | ||||||
|   this._pause = false |  | ||||||
|   if (this._cb) { |  | ||||||
|     const cb = this._cb |  | ||||||
|     this._cb = undefined |  | ||||||
|     cb() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = Dicer |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 333: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const EventEmitter = (__nccwpck_require__(5673).EventEmitter) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const StreamSearch = __nccwpck_require__(8534) |  | ||||||
| 
 |  | ||||||
| const B_DCRLF = Buffer.from('\r\n\r\n') |  | ||||||
| const RE_CRLF = /\r\n/g |  | ||||||
| const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex
 |  | ||||||
| 
 |  | ||||||
| function HeaderParser (cfg) { |  | ||||||
|   EventEmitter.call(this) |  | ||||||
| 
 |  | ||||||
|   cfg = cfg || {} |  | ||||||
|   const self = this |  | ||||||
|   this.nread = 0 |  | ||||||
|   this.maxed = false |  | ||||||
|   this.npairs = 0 |  | ||||||
|   this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) |  | ||||||
|   this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.header = {} |  | ||||||
|   this.finished = false |  | ||||||
|   this.ss = new StreamSearch(B_DCRLF) |  | ||||||
|   this.ss.on('info', function (isMatch, data, start, end) { |  | ||||||
|     if (data && !self.maxed) { |  | ||||||
|       if (self.nread + end - start >= self.maxHeaderSize) { |  | ||||||
|         end = self.maxHeaderSize - self.nread + start |  | ||||||
|         self.nread = self.maxHeaderSize |  | ||||||
|         self.maxed = true |  | ||||||
|       } else { self.nread += (end - start) } |  | ||||||
| 
 |  | ||||||
|       self.buffer += data.toString('binary', start, end) |  | ||||||
|     } |  | ||||||
|     if (isMatch) { self._finish() } |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| inherits(HeaderParser, EventEmitter) |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype.push = function (data) { |  | ||||||
|   const r = this.ss.push(data) |  | ||||||
|   if (this.finished) { return r } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype.reset = function () { |  | ||||||
|   this.finished = false |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.header = {} |  | ||||||
|   this.ss.reset() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype._finish = function () { |  | ||||||
|   if (this.buffer) { this._parseHeader() } |  | ||||||
|   this.ss.matches = this.ss.maxMatches |  | ||||||
|   const header = this.header |  | ||||||
|   this.header = {} |  | ||||||
|   this.buffer = '' |  | ||||||
|   this.finished = true |  | ||||||
|   this.nread = this.npairs = 0 |  | ||||||
|   this.maxed = false |  | ||||||
|   this.emit('header', header) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| HeaderParser.prototype._parseHeader = function () { |  | ||||||
|   if (this.npairs === this.maxHeaderPairs) { return } |  | ||||||
| 
 |  | ||||||
|   const lines = this.buffer.split(RE_CRLF) |  | ||||||
|   const len = lines.length |  | ||||||
|   let m, h |  | ||||||
| 
 |  | ||||||
|   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (lines[i].length === 0) { continue } |  | ||||||
|     if (lines[i][0] === '\t' || lines[i][0] === ' ') { |  | ||||||
|       // folded header content
 |  | ||||||
|       // RFC2822 says to just remove the CRLF and not the whitespace following
 |  | ||||||
|       // it, so we follow the RFC and include the leading whitespace ...
 |  | ||||||
|       if (h) { |  | ||||||
|         this.header[h][this.header[h].length - 1] += lines[i] |  | ||||||
|         continue |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const posColon = lines[i].indexOf(':') |  | ||||||
|     if ( |  | ||||||
|       posColon === -1 || |  | ||||||
|       posColon === 0 |  | ||||||
|     ) { |  | ||||||
|       return |  | ||||||
|     } |  | ||||||
|     m = RE_HDR.exec(lines[i]) |  | ||||||
|     h = m[1].toLowerCase() |  | ||||||
|     this.header[h] = this.header[h] || [] |  | ||||||
|     this.header[h].push((m[2] || '')) |  | ||||||
|     if (++this.npairs === this.maxHeaderPairs) { break } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = HeaderParser |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 8710: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| const ReadableStream = (__nccwpck_require__(4492).Readable) |  | ||||||
| 
 |  | ||||||
| function PartStream (opts) { |  | ||||||
|   ReadableStream.call(this, opts) |  | ||||||
| } |  | ||||||
| inherits(PartStream, ReadableStream) |  | ||||||
| 
 |  | ||||||
| PartStream.prototype._read = function (n) {} |  | ||||||
| 
 |  | ||||||
| module.exports = PartStream |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 8534: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Copyright Brian White. All rights reserved. |  | ||||||
|  * |  | ||||||
|  * @see https://github.com/mscdex/streamsearch
 |  | ||||||
|  * |  | ||||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  * of this software and associated documentation files (the "Software"), to |  | ||||||
|  * deal in the Software without restriction, including without limitation the |  | ||||||
|  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |  | ||||||
|  * sell copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  * furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  * The above copyright notice and this permission notice shall be included in |  | ||||||
|  * all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |  | ||||||
|  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |  | ||||||
|  * IN THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation |  | ||||||
|  * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
 |  | ||||||
|  */ |  | ||||||
| const EventEmitter = (__nccwpck_require__(5673).EventEmitter) |  | ||||||
| const inherits = (__nccwpck_require__(7261).inherits) |  | ||||||
| 
 |  | ||||||
| function SBMH (needle) { |  | ||||||
|   if (typeof needle === 'string') { |  | ||||||
|     needle = Buffer.from(needle) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (!Buffer.isBuffer(needle)) { |  | ||||||
|     throw new TypeError('The needle has to be a String or a Buffer.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   const needleLength = needle.length |  | ||||||
| 
 |  | ||||||
|   if (needleLength === 0) { |  | ||||||
|     throw new Error('The needle cannot be an empty String/Buffer.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (needleLength > 256) { |  | ||||||
|     throw new Error('The needle cannot have a length bigger than 256.') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.maxMatches = Infinity |  | ||||||
|   this.matches = 0 |  | ||||||
| 
 |  | ||||||
|   this._occ = new Array(256) |  | ||||||
|     .fill(needleLength) // Initialize occurrence table.
 |  | ||||||
|   this._lookbehind_size = 0 |  | ||||||
|   this._needle = needle |  | ||||||
|   this._bufpos = 0 |  | ||||||
| 
 |  | ||||||
|   this._lookbehind = Buffer.alloc(needleLength) |  | ||||||
| 
 |  | ||||||
|   // Populate occurrence table with analysis of the needle,
 |  | ||||||
|   // ignoring last letter.
 |  | ||||||
|   for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     this._occ[needle[i]] = needleLength - 1 - i |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| inherits(SBMH, EventEmitter) |  | ||||||
| 
 |  | ||||||
| SBMH.prototype.reset = function () { |  | ||||||
|   this._lookbehind_size = 0 |  | ||||||
|   this.matches = 0 |  | ||||||
|   this._bufpos = 0 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype.push = function (chunk, pos) { |  | ||||||
|   if (!Buffer.isBuffer(chunk)) { |  | ||||||
|     chunk = Buffer.from(chunk, 'binary') |  | ||||||
|   } |  | ||||||
|   const chlen = chunk.length |  | ||||||
|   this._bufpos = pos || 0 |  | ||||||
|   let r |  | ||||||
|   while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } |  | ||||||
|   return r |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_feed = function (data) { |  | ||||||
|   const len = data.length |  | ||||||
|   const needle = this._needle |  | ||||||
|   const needleLength = needle.length |  | ||||||
|   const lastNeedleChar = needle[needleLength - 1] |  | ||||||
| 
 |  | ||||||
|   // Positive: points to a position in `data`
 |  | ||||||
|   //           pos == 3 points to data[3]
 |  | ||||||
|   // Negative: points to a position in the lookbehind buffer
 |  | ||||||
|   //           pos == -2 points to lookbehind[lookbehind_size - 2]
 |  | ||||||
|   let pos = -this._lookbehind_size |  | ||||||
|   let ch |  | ||||||
| 
 |  | ||||||
|   if (pos < 0) { |  | ||||||
|     // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
 |  | ||||||
|     // search with character lookup code that considers both the
 |  | ||||||
|     // lookbehind buffer and the current round's haystack data.
 |  | ||||||
|     //
 |  | ||||||
|     // Loop until
 |  | ||||||
|     //   there is a match.
 |  | ||||||
|     // or until
 |  | ||||||
|     //   we've moved past the position that requires the
 |  | ||||||
|     //   lookbehind buffer. In this case we switch to the
 |  | ||||||
|     //   optimized loop.
 |  | ||||||
|     // or until
 |  | ||||||
|     //   the character to look at lies outside the haystack.
 |  | ||||||
|     while (pos < 0 && pos <= len - needleLength) { |  | ||||||
|       ch = this._sbmh_lookup_char(data, pos + needleLength - 1) |  | ||||||
| 
 |  | ||||||
|       if ( |  | ||||||
|         ch === lastNeedleChar && |  | ||||||
|         this._sbmh_memcmp(data, pos, needleLength - 1) |  | ||||||
|       ) { |  | ||||||
|         this._lookbehind_size = 0 |  | ||||||
|         ++this.matches |  | ||||||
|         this.emit('info', true) |  | ||||||
| 
 |  | ||||||
|         return (this._bufpos = pos + needleLength) |  | ||||||
|       } |  | ||||||
|       pos += this._occ[ch] |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // No match.
 |  | ||||||
| 
 |  | ||||||
|     if (pos < 0) { |  | ||||||
|       // There's too few data for Boyer-Moore-Horspool to run,
 |  | ||||||
|       // so let's use a different algorithm to skip as much as
 |  | ||||||
|       // we can.
 |  | ||||||
|       // Forward pos until
 |  | ||||||
|       //   the trailing part of lookbehind + data
 |  | ||||||
|       //   looks like the beginning of the needle
 |  | ||||||
|       // or until
 |  | ||||||
|       //   pos == 0
 |  | ||||||
|       while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (pos >= 0) { |  | ||||||
|       // Discard lookbehind buffer.
 |  | ||||||
|       this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) |  | ||||||
|       this._lookbehind_size = 0 |  | ||||||
|     } else { |  | ||||||
|       // Cut off part of the lookbehind buffer that has
 |  | ||||||
|       // been processed and append the entire haystack
 |  | ||||||
|       // into it.
 |  | ||||||
|       const bytesToCutOff = this._lookbehind_size + pos |  | ||||||
|       if (bytesToCutOff > 0) { |  | ||||||
|         // The cut off data is guaranteed not to contain the needle.
 |  | ||||||
|         this.emit('info', false, this._lookbehind, 0, bytesToCutOff) |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, |  | ||||||
|         this._lookbehind_size - bytesToCutOff) |  | ||||||
|       this._lookbehind_size -= bytesToCutOff |  | ||||||
| 
 |  | ||||||
|       data.copy(this._lookbehind, this._lookbehind_size) |  | ||||||
|       this._lookbehind_size += len |  | ||||||
| 
 |  | ||||||
|       this._bufpos = len |  | ||||||
|       return len |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   pos += (pos >= 0) * this._bufpos |  | ||||||
| 
 |  | ||||||
|   // Lookbehind buffer is now empty. We only need to check if the
 |  | ||||||
|   // needle is in the haystack.
 |  | ||||||
|   if (data.indexOf(needle, pos) !== -1) { |  | ||||||
|     pos = data.indexOf(needle, pos) |  | ||||||
|     ++this.matches |  | ||||||
|     if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } |  | ||||||
| 
 |  | ||||||
|     return (this._bufpos = pos + needleLength) |  | ||||||
|   } else { |  | ||||||
|     pos = len - needleLength |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // There was no match. If there's trailing haystack data that we cannot
 |  | ||||||
|   // match yet using the Boyer-Moore-Horspool algorithm (because the trailing
 |  | ||||||
|   // data is less than the needle size) then match using a modified
 |  | ||||||
|   // algorithm that starts matching from the beginning instead of the end.
 |  | ||||||
|   // Whatever trailing data is left after running this algorithm is added to
 |  | ||||||
|   // the lookbehind buffer.
 |  | ||||||
|   while ( |  | ||||||
|     pos < len && |  | ||||||
|     ( |  | ||||||
|       data[pos] !== needle[0] || |  | ||||||
|       ( |  | ||||||
|         (Buffer.compare( |  | ||||||
|           data.subarray(pos, pos + len - pos), |  | ||||||
|           needle.subarray(0, len - pos) |  | ||||||
|         ) !== 0) |  | ||||||
|       ) |  | ||||||
|     ) |  | ||||||
|   ) { |  | ||||||
|     ++pos |  | ||||||
|   } |  | ||||||
|   if (pos < len) { |  | ||||||
|     data.copy(this._lookbehind, 0, pos, pos + (len - pos)) |  | ||||||
|     this._lookbehind_size = len - pos |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // Everything until pos is guaranteed not to contain needle data.
 |  | ||||||
|   if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } |  | ||||||
| 
 |  | ||||||
|   this._bufpos = len |  | ||||||
|   return len |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_lookup_char = function (data, pos) { |  | ||||||
|   return (pos < 0) |  | ||||||
|     ? this._lookbehind[this._lookbehind_size + pos] |  | ||||||
|     : data[pos] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| SBMH.prototype._sbmh_memcmp = function (data, pos, len) { |  | ||||||
|   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } |  | ||||||
|   } |  | ||||||
|   return true |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = SBMH |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 3438: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const WritableStream = (__nccwpck_require__(4492).Writable) |  | ||||||
| const { inherits } = __nccwpck_require__(7261) |  | ||||||
| const Dicer = __nccwpck_require__(2856) |  | ||||||
| 
 |  | ||||||
| const MultipartParser = __nccwpck_require__(415) |  | ||||||
| const UrlencodedParser = __nccwpck_require__(6780) |  | ||||||
| const parseParams = __nccwpck_require__(4426) |  | ||||||
| 
 |  | ||||||
| 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 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 415: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // TODO:
 |  | ||||||
| //  * support 1 nested multipart level
 |  | ||||||
| //    (see second multipart example here:
 |  | ||||||
| //     http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data)
 |  | ||||||
| //  * support limits.fieldNameSize
 |  | ||||||
| //     -- this will require modifications to utils.parseParams
 |  | ||||||
| 
 |  | ||||||
| const { Readable } = __nccwpck_require__(4492) |  | ||||||
| const { inherits } = __nccwpck_require__(7261) |  | ||||||
| 
 |  | ||||||
| const Dicer = __nccwpck_require__(2856) |  | ||||||
| 
 |  | ||||||
| const parseParams = __nccwpck_require__(4426) |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| const basename = __nccwpck_require__(496) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const RE_BOUNDARY = /^boundary$/i |  | ||||||
| const RE_FIELD = /^form-data$/i |  | ||||||
| const RE_CHARSET = /^charset$/i |  | ||||||
| const RE_FILENAME = /^filename$/i |  | ||||||
| const RE_NAME = /^name$/i |  | ||||||
| 
 |  | ||||||
| Multipart.detect = /^multipart\/form-data/i |  | ||||||
| function Multipart (boy, cfg) { |  | ||||||
|   let i |  | ||||||
|   let len |  | ||||||
|   const self = this |  | ||||||
|   let boundary |  | ||||||
|   const limits = cfg.limits |  | ||||||
|   const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) |  | ||||||
|   const parsedConType = cfg.parsedConType || [] |  | ||||||
|   const defCharset = cfg.defCharset || 'utf8' |  | ||||||
|   const preservePath = cfg.preservePath |  | ||||||
|   const fileOpts = { highWaterMark: cfg.fileHwm } |  | ||||||
| 
 |  | ||||||
|   for (i = 0, len = parsedConType.length; i < len; ++i) { |  | ||||||
|     if (Array.isArray(parsedConType[i]) && |  | ||||||
|       RE_BOUNDARY.test(parsedConType[i][0])) { |  | ||||||
|       boundary = parsedConType[i][1] |  | ||||||
|       break |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function checkFinished () { |  | ||||||
|     if (nends === 0 && finished && !boy._done) { |  | ||||||
|       finished = false |  | ||||||
|       self.end() |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } |  | ||||||
| 
 |  | ||||||
|   const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) |  | ||||||
|   const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) |  | ||||||
|   const filesLimit = getLimit(limits, 'files', Infinity) |  | ||||||
|   const fieldsLimit = getLimit(limits, 'fields', Infinity) |  | ||||||
|   const partsLimit = getLimit(limits, 'parts', Infinity) |  | ||||||
|   const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) |  | ||||||
|   const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) |  | ||||||
| 
 |  | ||||||
|   let nfiles = 0 |  | ||||||
|   let nfields = 0 |  | ||||||
|   let nends = 0 |  | ||||||
|   let curFile |  | ||||||
|   let curField |  | ||||||
|   let finished = false |  | ||||||
| 
 |  | ||||||
|   this._needDrain = false |  | ||||||
|   this._pause = false |  | ||||||
|   this._cb = undefined |  | ||||||
|   this._nparts = 0 |  | ||||||
|   this._boy = boy |  | ||||||
| 
 |  | ||||||
|   const parserCfg = { |  | ||||||
|     boundary, |  | ||||||
|     maxHeaderPairs: headerPairsLimit, |  | ||||||
|     maxHeaderSize: headerSizeLimit, |  | ||||||
|     partHwm: fileOpts.highWaterMark, |  | ||||||
|     highWaterMark: cfg.highWaterMark |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.parser = new Dicer(parserCfg) |  | ||||||
|   this.parser.on('drain', function () { |  | ||||||
|     self._needDrain = false |  | ||||||
|     if (self._cb && !self._pause) { |  | ||||||
|       const cb = self._cb |  | ||||||
|       self._cb = undefined |  | ||||||
|       cb() |  | ||||||
|     } |  | ||||||
|   }).on('part', function onPart (part) { |  | ||||||
|     if (++self._nparts > partsLimit) { |  | ||||||
|       self.parser.removeListener('part', onPart) |  | ||||||
|       self.parser.on('part', skipPart) |  | ||||||
|       boy.hitPartsLimit = true |  | ||||||
|       boy.emit('partsLimit') |  | ||||||
|       return skipPart(part) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let
 |  | ||||||
|     // us emit 'end' early since we know the part has ended if we are already
 |  | ||||||
|     // seeing the next part
 |  | ||||||
|     if (curField) { |  | ||||||
|       const field = curField |  | ||||||
|       field.emit('end') |  | ||||||
|       field.removeAllListeners('end') |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     part.on('header', function (header) { |  | ||||||
|       let contype |  | ||||||
|       let fieldname |  | ||||||
|       let parsed |  | ||||||
|       let charset |  | ||||||
|       let encoding |  | ||||||
|       let filename |  | ||||||
|       let nsize = 0 |  | ||||||
| 
 |  | ||||||
|       if (header['content-type']) { |  | ||||||
|         parsed = parseParams(header['content-type'][0]) |  | ||||||
|         if (parsed[0]) { |  | ||||||
|           contype = parsed[0].toLowerCase() |  | ||||||
|           for (i = 0, len = parsed.length; i < len; ++i) { |  | ||||||
|             if (RE_CHARSET.test(parsed[i][0])) { |  | ||||||
|               charset = parsed[i][1].toLowerCase() |  | ||||||
|               break |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (contype === undefined) { contype = 'text/plain' } |  | ||||||
|       if (charset === undefined) { charset = defCharset } |  | ||||||
| 
 |  | ||||||
|       if (header['content-disposition']) { |  | ||||||
|         parsed = parseParams(header['content-disposition'][0]) |  | ||||||
|         if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } |  | ||||||
|         for (i = 0, len = parsed.length; i < len; ++i) { |  | ||||||
|           if (RE_NAME.test(parsed[i][0])) { |  | ||||||
|             fieldname = parsed[i][1] |  | ||||||
|           } else if (RE_FILENAME.test(parsed[i][0])) { |  | ||||||
|             filename = parsed[i][1] |  | ||||||
|             if (!preservePath) { filename = basename(filename) } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } else { return skipPart(part) } |  | ||||||
| 
 |  | ||||||
|       if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } |  | ||||||
| 
 |  | ||||||
|       let onData, |  | ||||||
|         onEnd |  | ||||||
| 
 |  | ||||||
|       if (isPartAFile(fieldname, contype, filename)) { |  | ||||||
|         // file/binary field
 |  | ||||||
|         if (nfiles === filesLimit) { |  | ||||||
|           if (!boy.hitFilesLimit) { |  | ||||||
|             boy.hitFilesLimit = true |  | ||||||
|             boy.emit('filesLimit') |  | ||||||
|           } |  | ||||||
|           return skipPart(part) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nfiles |  | ||||||
| 
 |  | ||||||
|         if (!boy._events.file) { |  | ||||||
|           self.parser._ignore() |  | ||||||
|           return |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nends |  | ||||||
|         const file = new FileStream(fileOpts) |  | ||||||
|         curFile = file |  | ||||||
|         file.on('end', function () { |  | ||||||
|           --nends |  | ||||||
|           self._pause = false |  | ||||||
|           checkFinished() |  | ||||||
|           if (self._cb && !self._needDrain) { |  | ||||||
|             const cb = self._cb |  | ||||||
|             self._cb = undefined |  | ||||||
|             cb() |  | ||||||
|           } |  | ||||||
|         }) |  | ||||||
|         file._read = function (n) { |  | ||||||
|           if (!self._pause) { return } |  | ||||||
|           self._pause = false |  | ||||||
|           if (self._cb && !self._needDrain) { |  | ||||||
|             const cb = self._cb |  | ||||||
|             self._cb = undefined |  | ||||||
|             cb() |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         boy.emit('file', fieldname, file, filename, encoding, contype) |  | ||||||
| 
 |  | ||||||
|         onData = function (data) { |  | ||||||
|           if ((nsize += data.length) > fileSizeLimit) { |  | ||||||
|             const extralen = fileSizeLimit - nsize + data.length |  | ||||||
|             if (extralen > 0) { file.push(data.slice(0, extralen)) } |  | ||||||
|             file.truncated = true |  | ||||||
|             file.bytesRead = fileSizeLimit |  | ||||||
|             part.removeAllListeners('data') |  | ||||||
|             file.emit('limit') |  | ||||||
|             return |  | ||||||
|           } else if (!file.push(data)) { self._pause = true } |  | ||||||
| 
 |  | ||||||
|           file.bytesRead = nsize |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         onEnd = function () { |  | ||||||
|           curFile = undefined |  | ||||||
|           file.push(null) |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         // non-file field
 |  | ||||||
|         if (nfields === fieldsLimit) { |  | ||||||
|           if (!boy.hitFieldsLimit) { |  | ||||||
|             boy.hitFieldsLimit = true |  | ||||||
|             boy.emit('fieldsLimit') |  | ||||||
|           } |  | ||||||
|           return skipPart(part) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ++nfields |  | ||||||
|         ++nends |  | ||||||
|         let buffer = '' |  | ||||||
|         let truncated = false |  | ||||||
|         curField = part |  | ||||||
| 
 |  | ||||||
|         onData = function (data) { |  | ||||||
|           if ((nsize += data.length) > fieldSizeLimit) { |  | ||||||
|             const extralen = (fieldSizeLimit - (nsize - data.length)) |  | ||||||
|             buffer += data.toString('binary', 0, extralen) |  | ||||||
|             truncated = true |  | ||||||
|             part.removeAllListeners('data') |  | ||||||
|           } else { buffer += data.toString('binary') } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         onEnd = function () { |  | ||||||
|           curField = undefined |  | ||||||
|           if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } |  | ||||||
|           boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) |  | ||||||
|           --nends |  | ||||||
|           checkFinished() |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become |  | ||||||
|          broken. Streams2/streams3 is a huge black box of confusion, but |  | ||||||
|          somehow overriding the sync state seems to fix things again (and still |  | ||||||
|          seems to work for previous node versions). |  | ||||||
|       */ |  | ||||||
|       part._readableState.sync = false |  | ||||||
| 
 |  | ||||||
|       part.on('data', onData) |  | ||||||
|       part.on('end', onEnd) |  | ||||||
|     }).on('error', function (err) { |  | ||||||
|       if (curFile) { curFile.emit('error', err) } |  | ||||||
|     }) |  | ||||||
|   }).on('error', function (err) { |  | ||||||
|     boy.emit('error', err) |  | ||||||
|   }).on('finish', function () { |  | ||||||
|     finished = true |  | ||||||
|     checkFinished() |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Multipart.prototype.write = function (chunk, cb) { |  | ||||||
|   const r = this.parser.write(chunk) |  | ||||||
|   if (r && !this._pause) { |  | ||||||
|     cb() |  | ||||||
|   } else { |  | ||||||
|     this._needDrain = !r |  | ||||||
|     this._cb = cb |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Multipart.prototype.end = function () { |  | ||||||
|   const self = this |  | ||||||
| 
 |  | ||||||
|   if (self.parser.writable) { |  | ||||||
|     self.parser.end() |  | ||||||
|   } else if (!self._boy._done) { |  | ||||||
|     process.nextTick(function () { |  | ||||||
|       self._boy._done = true |  | ||||||
|       self._boy.emit('finish') |  | ||||||
|     }) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function skipPart (part) { |  | ||||||
|   part.resume() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function FileStream (opts) { |  | ||||||
|   Readable.call(this, opts) |  | ||||||
| 
 |  | ||||||
|   this.bytesRead = 0 |  | ||||||
| 
 |  | ||||||
|   this.truncated = false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| inherits(FileStream, Readable) |  | ||||||
| 
 |  | ||||||
| FileStream.prototype._read = function (n) {} |  | ||||||
| 
 |  | ||||||
| module.exports = Multipart |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 6780: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const Decoder = __nccwpck_require__(9730) |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| const getLimit = __nccwpck_require__(9692) |  | ||||||
| 
 |  | ||||||
| const RE_CHARSET = /^charset$/i |  | ||||||
| 
 |  | ||||||
| UrlEncoded.detect = /^application\/x-www-form-urlencoded/i |  | ||||||
| function UrlEncoded (boy, cfg) { |  | ||||||
|   const limits = cfg.limits |  | ||||||
|   const parsedConType = cfg.parsedConType |  | ||||||
|   this.boy = boy |  | ||||||
| 
 |  | ||||||
|   this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) |  | ||||||
|   this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) |  | ||||||
|   this.fieldsLimit = getLimit(limits, 'fields', Infinity) |  | ||||||
| 
 |  | ||||||
|   let charset |  | ||||||
|   for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     if (Array.isArray(parsedConType[i]) && |  | ||||||
|         RE_CHARSET.test(parsedConType[i][0])) { |  | ||||||
|       charset = parsedConType[i][1].toLowerCase() |  | ||||||
|       break |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (charset === undefined) { charset = cfg.defCharset || 'utf8' } |  | ||||||
| 
 |  | ||||||
|   this.decoder = new Decoder() |  | ||||||
|   this.charset = charset |  | ||||||
|   this._fields = 0 |  | ||||||
|   this._state = 'key' |  | ||||||
|   this._checkingBytes = true |  | ||||||
|   this._bytesKey = 0 |  | ||||||
|   this._bytesVal = 0 |  | ||||||
|   this._key = '' |  | ||||||
|   this._val = '' |  | ||||||
|   this._keyTrunc = false |  | ||||||
|   this._valTrunc = false |  | ||||||
|   this._hitLimit = false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| UrlEncoded.prototype.write = function (data, cb) { |  | ||||||
|   if (this._fields === this.fieldsLimit) { |  | ||||||
|     if (!this.boy.hitFieldsLimit) { |  | ||||||
|       this.boy.hitFieldsLimit = true |  | ||||||
|       this.boy.emit('fieldsLimit') |  | ||||||
|     } |  | ||||||
|     return cb() |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   let idxeq; let idxamp; let i; let p = 0; const len = data.length |  | ||||||
| 
 |  | ||||||
|   while (p < len) { |  | ||||||
|     if (this._state === 'key') { |  | ||||||
|       idxeq = idxamp = undefined |  | ||||||
|       for (i = p; i < len; ++i) { |  | ||||||
|         if (!this._checkingBytes) { ++p } |  | ||||||
|         if (data[i] === 0x3D/* = */) { |  | ||||||
|           idxeq = i |  | ||||||
|           break |  | ||||||
|         } else if (data[i] === 0x26/* & */) { |  | ||||||
|           idxamp = i |  | ||||||
|           break |  | ||||||
|         } |  | ||||||
|         if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { |  | ||||||
|           this._hitLimit = true |  | ||||||
|           break |  | ||||||
|         } else if (this._checkingBytes) { ++this._bytesKey } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (idxeq !== undefined) { |  | ||||||
|         // key with assignment
 |  | ||||||
|         if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } |  | ||||||
|         this._state = 'val' |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._val = '' |  | ||||||
|         this._bytesVal = 0 |  | ||||||
|         this._valTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         p = idxeq + 1 |  | ||||||
|       } else if (idxamp !== undefined) { |  | ||||||
|         // key with no assignment
 |  | ||||||
|         ++this._fields |  | ||||||
|         let key; const keyTrunc = this._keyTrunc |  | ||||||
|         if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._key = '' |  | ||||||
|         this._bytesKey = 0 |  | ||||||
|         this._keyTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         if (key.length) { |  | ||||||
|           this.boy.emit('field', decodeText(key, 'binary', this.charset), |  | ||||||
|             '', |  | ||||||
|             keyTrunc, |  | ||||||
|             false) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         p = idxamp + 1 |  | ||||||
|         if (this._fields === this.fieldsLimit) { return cb() } |  | ||||||
|       } else if (this._hitLimit) { |  | ||||||
|         // we may not have hit the actual limit if there are encoded bytes...
 |  | ||||||
|         if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } |  | ||||||
|         p = i |  | ||||||
|         if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { |  | ||||||
|           // yep, we actually did hit the limit
 |  | ||||||
|           this._checkingBytes = false |  | ||||||
|           this._keyTrunc = true |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } |  | ||||||
|         p = len |  | ||||||
|       } |  | ||||||
|     } else { |  | ||||||
|       idxamp = undefined |  | ||||||
|       for (i = p; i < len; ++i) { |  | ||||||
|         if (!this._checkingBytes) { ++p } |  | ||||||
|         if (data[i] === 0x26/* & */) { |  | ||||||
|           idxamp = i |  | ||||||
|           break |  | ||||||
|         } |  | ||||||
|         if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { |  | ||||||
|           this._hitLimit = true |  | ||||||
|           break |  | ||||||
|         } else if (this._checkingBytes) { ++this._bytesVal } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (idxamp !== undefined) { |  | ||||||
|         ++this._fields |  | ||||||
|         if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } |  | ||||||
|         this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|           decodeText(this._val, 'binary', this.charset), |  | ||||||
|           this._keyTrunc, |  | ||||||
|           this._valTrunc) |  | ||||||
|         this._state = 'key' |  | ||||||
| 
 |  | ||||||
|         this._hitLimit = false |  | ||||||
|         this._checkingBytes = true |  | ||||||
|         this._key = '' |  | ||||||
|         this._bytesKey = 0 |  | ||||||
|         this._keyTrunc = false |  | ||||||
|         this.decoder.reset() |  | ||||||
| 
 |  | ||||||
|         p = idxamp + 1 |  | ||||||
|         if (this._fields === this.fieldsLimit) { return cb() } |  | ||||||
|       } else if (this._hitLimit) { |  | ||||||
|         // we may not have hit the actual limit if there are encoded bytes...
 |  | ||||||
|         if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } |  | ||||||
|         p = i |  | ||||||
|         if ((this._val === '' && this.fieldSizeLimit === 0) || |  | ||||||
|             (this._bytesVal = this._val.length) === this.fieldSizeLimit) { |  | ||||||
|           // yep, we actually did hit the limit
 |  | ||||||
|           this._checkingBytes = false |  | ||||||
|           this._valTrunc = true |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|         if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } |  | ||||||
|         p = len |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| UrlEncoded.prototype.end = function () { |  | ||||||
|   if (this.boy._done) { return } |  | ||||||
| 
 |  | ||||||
|   if (this._state === 'key' && this._key.length > 0) { |  | ||||||
|     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|       '', |  | ||||||
|       this._keyTrunc, |  | ||||||
|       false) |  | ||||||
|   } else if (this._state === 'val') { |  | ||||||
|     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), |  | ||||||
|       decodeText(this._val, 'binary', this.charset), |  | ||||||
|       this._keyTrunc, |  | ||||||
|       this._valTrunc) |  | ||||||
|   } |  | ||||||
|   this.boy._done = true |  | ||||||
|   this.boy.emit('finish') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = UrlEncoded |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9730: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const RE_PLUS = /\+/g |  | ||||||
| 
 |  | ||||||
| const HEX = [ |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, |  | ||||||
|   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| function Decoder () { |  | ||||||
|   this.buffer = undefined |  | ||||||
| } |  | ||||||
| Decoder.prototype.write = function (str) { |  | ||||||
|   // Replace '+' with ' ' before decoding
 |  | ||||||
|   str = str.replace(RE_PLUS, ' ') |  | ||||||
|   let res = '' |  | ||||||
|   let i = 0; let p = 0; const len = str.length |  | ||||||
|   for (; i < len; ++i) { |  | ||||||
|     if (this.buffer !== undefined) { |  | ||||||
|       if (!HEX[str.charCodeAt(i)]) { |  | ||||||
|         res += '%' + this.buffer |  | ||||||
|         this.buffer = undefined |  | ||||||
|         --i // retry character
 |  | ||||||
|       } else { |  | ||||||
|         this.buffer += str[i] |  | ||||||
|         ++p |  | ||||||
|         if (this.buffer.length === 2) { |  | ||||||
|           res += String.fromCharCode(parseInt(this.buffer, 16)) |  | ||||||
|           this.buffer = undefined |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } else if (str[i] === '%') { |  | ||||||
|       if (i > p) { |  | ||||||
|         res += str.substring(p, i) |  | ||||||
|         p = i |  | ||||||
|       } |  | ||||||
|       this.buffer = '' |  | ||||||
|       ++p |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (p < len && this.buffer === undefined) { res += str.substring(p) } |  | ||||||
|   return res |  | ||||||
| } |  | ||||||
| Decoder.prototype.reset = function () { |  | ||||||
|   this.buffer = undefined |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = Decoder |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 496: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module.exports = function basename (path) { |  | ||||||
|   if (typeof path !== 'string') { return '' } |  | ||||||
|   for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var
 |  | ||||||
|     switch (path.charCodeAt(i)) { |  | ||||||
|       case 0x2F: // '/'
 |  | ||||||
|       case 0x5C: // '\'
 |  | ||||||
|         path = path.slice(i + 1) |  | ||||||
|         return (path === '..' || path === '.' ? '' : path) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return (path === '..' || path === '.' ? '' : path) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9136: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // Node has always utf-8
 |  | ||||||
| const utf8Decoder = new TextDecoder('utf-8') |  | ||||||
| const textDecoders = new Map([ |  | ||||||
|   ['utf-8', utf8Decoder], |  | ||||||
|   ['utf8', utf8Decoder] |  | ||||||
| ]) |  | ||||||
| 
 |  | ||||||
| function decodeText (text, textEncoding, destEncoding) { |  | ||||||
|   if (text) { |  | ||||||
|     if (textDecoders.has(destEncoding)) { |  | ||||||
|       try { |  | ||||||
|         return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding)) |  | ||||||
|       } catch (e) { } |  | ||||||
|     } else { |  | ||||||
|       try { |  | ||||||
|         textDecoders.set(destEncoding, new TextDecoder(destEncoding)) |  | ||||||
|         return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding)) |  | ||||||
|       } catch (e) { } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return text |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = decodeText |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 9692: |  | ||||||
| /***/ ((module) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module.exports = function getLimit (limits, name, defaultLimit) { |  | ||||||
|   if ( |  | ||||||
|     !limits || |  | ||||||
|     limits[name] === undefined || |  | ||||||
|     limits[name] === null |  | ||||||
|   ) { return defaultLimit } |  | ||||||
| 
 |  | ||||||
|   if ( |  | ||||||
|     typeof limits[name] !== 'number' || |  | ||||||
|     isNaN(limits[name]) |  | ||||||
|   ) { throw new TypeError('Limit ' + name + ' is not a valid number') } |  | ||||||
| 
 |  | ||||||
|   return limits[name] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 4426: |  | ||||||
| /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const decodeText = __nccwpck_require__(9136) |  | ||||||
| 
 |  | ||||||
| const RE_ENCODED = /%([a-fA-F0-9]{2})/g |  | ||||||
| 
 |  | ||||||
| function encodedReplacer (match, byte) { |  | ||||||
|   return String.fromCharCode(parseInt(byte, 16)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function parseParams (str) { |  | ||||||
|   const res = [] |  | ||||||
|   let state = 'key' |  | ||||||
|   let charset = '' |  | ||||||
|   let inquote = false |  | ||||||
|   let escaping = false |  | ||||||
|   let p = 0 |  | ||||||
|   let tmp = '' |  | ||||||
| 
 |  | ||||||
|   for (var i = 0, len = str.length; i < len; ++i) { // eslint-disable-line no-var
 |  | ||||||
|     const char = str[i] |  | ||||||
|     if (char === '\\' && inquote) { |  | ||||||
|       if (escaping) { escaping = false } else { |  | ||||||
|         escaping = true |  | ||||||
|         continue |  | ||||||
|       } |  | ||||||
|     } else if (char === '"') { |  | ||||||
|       if (!escaping) { |  | ||||||
|         if (inquote) { |  | ||||||
|           inquote = false |  | ||||||
|           state = 'key' |  | ||||||
|         } else { inquote = true } |  | ||||||
|         continue |  | ||||||
|       } else { escaping = false } |  | ||||||
|     } else { |  | ||||||
|       if (escaping && inquote) { tmp += '\\' } |  | ||||||
|       escaping = false |  | ||||||
|       if ((state === 'charset' || state === 'lang') && char === "'") { |  | ||||||
|         if (state === 'charset') { |  | ||||||
|           state = 'lang' |  | ||||||
|           charset = tmp.substring(1) |  | ||||||
|         } else { state = 'value' } |  | ||||||
|         tmp = '' |  | ||||||
|         continue |  | ||||||
|       } else if (state === 'key' && |  | ||||||
|         (char === '*' || char === '=') && |  | ||||||
|         res.length) { |  | ||||||
|         if (char === '*') { state = 'charset' } else { state = 'value' } |  | ||||||
|         res[p] = [tmp, undefined] |  | ||||||
|         tmp = '' |  | ||||||
|         continue |  | ||||||
|       } else if (!inquote && char === ';') { |  | ||||||
|         state = 'key' |  | ||||||
|         if (charset) { |  | ||||||
|           if (tmp.length) { |  | ||||||
|             tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), |  | ||||||
|               'binary', |  | ||||||
|               charset) |  | ||||||
|           } |  | ||||||
|           charset = '' |  | ||||||
|         } else if (tmp.length) { |  | ||||||
|           tmp = decodeText(tmp, 'binary', 'utf8') |  | ||||||
|         } |  | ||||||
|         if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } |  | ||||||
|         tmp = '' |  | ||||||
|         ++p |  | ||||||
|         continue |  | ||||||
|       } else if (!inquote && (char === ' ' || char === '\t')) { continue } |  | ||||||
|     } |  | ||||||
|     tmp += char |  | ||||||
|   } |  | ||||||
|   if (charset && tmp.length) { |  | ||||||
|     tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), |  | ||||||
|       'binary', |  | ||||||
|       charset) |  | ||||||
|   } else if (tmp) { |  | ||||||
|     tmp = decodeText(tmp, 'binary', 'utf8') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (res[p] === undefined) { |  | ||||||
|     if (tmp) { res[p] = tmp } |  | ||||||
|   } else { res[p][1] = tmp } |  | ||||||
| 
 |  | ||||||
|   return res |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports = parseParams |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 334: | /***/ 334: | ||||||
| @ -79013,7 +77591,7 @@ module.exports = Dispatcher | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const Busboy = __nccwpck_require__(3438) | const Busboy = __nccwpck_require__(727) | ||||||
| const util = __nccwpck_require__(3983) | const util = __nccwpck_require__(3983) | ||||||
| const { | const { | ||||||
|   ReadableStreamFrom, |   ReadableStreamFrom, | ||||||
| @ -79035,6 +77613,14 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(9830) | |||||||
| const { File: UndiciFile } = __nccwpck_require__(8511) | const { File: UndiciFile } = __nccwpck_require__(8511) | ||||||
| const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) | const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) | ||||||
| 
 | 
 | ||||||
|  | let random | ||||||
|  | try { | ||||||
|  |   const crypto = __nccwpck_require__(6005) | ||||||
|  |   random = (max) => crypto.randomInt(0, max) | ||||||
|  | } catch { | ||||||
|  |   random = (max) => Math.floor(Math.random(max)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| let ReadableStream = globalThis.ReadableStream | let ReadableStream = globalThis.ReadableStream | ||||||
| 
 | 
 | ||||||
| /** @type {globalThis['File']} */ | /** @type {globalThis['File']} */ | ||||||
| @ -79120,7 +77706,7 @@ function extractBody (object, keepalive = false) { | |||||||
|     // Set source to a copy of the bytes held by object.
 |     // Set source to a copy of the bytes held by object.
 | ||||||
|     source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) |     source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) | ||||||
|   } else if (util.isFormDataLike(object)) { |   } else if (util.isFormDataLike(object)) { | ||||||
|     const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` |     const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` | ||||||
|     const prefix = `--${boundary}\r\nContent-Disposition: form-data` |     const prefix = `--${boundary}\r\nContent-Disposition: form-data` | ||||||
| 
 | 
 | ||||||
|     /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ |     /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ | ||||||
| @ -96825,7 +95411,7 @@ function wrappy (fn, cb) { | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 8186: | /***/ 333: | ||||||
| /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { | /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { | ||||||
| 
 | 
 | ||||||
| // Generated by CoffeeScript 1.12.7
 | // Generated by CoffeeScript 1.12.7
 | ||||||
| @ -97943,7 +96529,7 @@ function wrappy (fn, cb) { | |||||||
| 
 | 
 | ||||||
|   XMLElement = __nccwpck_require__(9437); |   XMLElement = __nccwpck_require__(9437); | ||||||
| 
 | 
 | ||||||
|   XMLCData = __nccwpck_require__(8186); |   XMLCData = __nccwpck_require__(333); | ||||||
| 
 | 
 | ||||||
|   XMLComment = __nccwpck_require__(4407); |   XMLComment = __nccwpck_require__(4407); | ||||||
| 
 | 
 | ||||||
| @ -98918,7 +97504,7 @@ function wrappy (fn, cb) { | |||||||
|       this.baseURI = null; |       this.baseURI = null; | ||||||
|       if (!XMLElement) { |       if (!XMLElement) { | ||||||
|         XMLElement = __nccwpck_require__(9437); |         XMLElement = __nccwpck_require__(9437); | ||||||
|         XMLCData = __nccwpck_require__(8186); |         XMLCData = __nccwpck_require__(333); | ||||||
|         XMLComment = __nccwpck_require__(4407); |         XMLComment = __nccwpck_require__(4407); | ||||||
|         XMLDeclaration = __nccwpck_require__(6364); |         XMLDeclaration = __nccwpck_require__(6364); | ||||||
|         XMLDocType = __nccwpck_require__(1801); |         XMLDocType = __nccwpck_require__(1801); | ||||||
| @ -100359,7 +98945,7 @@ function wrappy (fn, cb) { | |||||||
| 
 | 
 | ||||||
|   XMLDocType = __nccwpck_require__(1801); |   XMLDocType = __nccwpck_require__(1801); | ||||||
| 
 | 
 | ||||||
|   XMLCData = __nccwpck_require__(8186); |   XMLCData = __nccwpck_require__(333); | ||||||
| 
 | 
 | ||||||
|   XMLComment = __nccwpck_require__(4407); |   XMLComment = __nccwpck_require__(4407); | ||||||
| 
 | 
 | ||||||
| @ -102439,6 +101025,14 @@ module.exports = require("net"); | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
|  | /***/ 6005: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | module.exports = require("node:crypto"); | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
| /***/ 5673: | /***/ 5673: | ||||||
| /***/ ((module) => { | /***/ ((module) => { | ||||||
| 
 | 
 | ||||||
| @ -102581,6 +101175,1631 @@ module.exports = require("worker_threads"); | |||||||
| "use strict"; | "use strict"; | ||||||
| module.exports = require("zlib"); | module.exports = require("zlib"); | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2960: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const WritableStream = (__nccwpck_require__(4492).Writable) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | 
 | ||||||
|  | const StreamSearch = __nccwpck_require__(1142) | ||||||
|  | 
 | ||||||
|  | const PartStream = __nccwpck_require__(1620) | ||||||
|  | const HeaderParser = __nccwpck_require__(2032) | ||||||
|  | 
 | ||||||
|  | const DASH = 45 | ||||||
|  | const B_ONEDASH = Buffer.from('-') | ||||||
|  | const B_CRLF = Buffer.from('\r\n') | ||||||
|  | const EMPTY_FN = function () {} | ||||||
|  | 
 | ||||||
|  | function Dicer (cfg) { | ||||||
|  |   if (!(this instanceof Dicer)) { return new Dicer(cfg) } | ||||||
|  |   WritableStream.call(this, cfg) | ||||||
|  | 
 | ||||||
|  |   if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } | ||||||
|  | 
 | ||||||
|  |   if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } | ||||||
|  | 
 | ||||||
|  |   this._headerFirst = cfg.headerFirst | ||||||
|  | 
 | ||||||
|  |   this._dashes = 0 | ||||||
|  |   this._parts = 0 | ||||||
|  |   this._finished = false | ||||||
|  |   this._realFinish = false | ||||||
|  |   this._isPreamble = true | ||||||
|  |   this._justMatched = false | ||||||
|  |   this._firstWrite = true | ||||||
|  |   this._inHeader = true | ||||||
|  |   this._part = undefined | ||||||
|  |   this._cb = undefined | ||||||
|  |   this._ignoreData = false | ||||||
|  |   this._partOpts = { highWaterMark: cfg.partHwm } | ||||||
|  |   this._pause = false | ||||||
|  | 
 | ||||||
|  |   const self = this | ||||||
|  |   this._hparser = new HeaderParser(cfg) | ||||||
|  |   this._hparser.on('header', function (header) { | ||||||
|  |     self._inHeader = false | ||||||
|  |     self._part.emit('header', header) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | inherits(Dicer, WritableStream) | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.emit = function (ev) { | ||||||
|  |   if (ev === 'finish' && !this._realFinish) { | ||||||
|  |     if (!this._finished) { | ||||||
|  |       const self = this | ||||||
|  |       process.nextTick(function () { | ||||||
|  |         self.emit('error', new Error('Unexpected end of multipart data')) | ||||||
|  |         if (self._part && !self._ignoreData) { | ||||||
|  |           const type = (self._isPreamble ? 'Preamble' : 'Part') | ||||||
|  |           self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) | ||||||
|  |           self._part.push(null) | ||||||
|  |           process.nextTick(function () { | ||||||
|  |             self._realFinish = true | ||||||
|  |             self.emit('finish') | ||||||
|  |             self._realFinish = false | ||||||
|  |           }) | ||||||
|  |           return | ||||||
|  |         } | ||||||
|  |         self._realFinish = true | ||||||
|  |         self.emit('finish') | ||||||
|  |         self._realFinish = false | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } else { WritableStream.prototype.emit.apply(this, arguments) } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._write = function (data, encoding, cb) { | ||||||
|  |   // ignore unexpected data (e.g. extra trailer data after finished)
 | ||||||
|  |   if (!this._hparser && !this._bparser) { return cb() } | ||||||
|  | 
 | ||||||
|  |   if (this._headerFirst && this._isPreamble) { | ||||||
|  |     if (!this._part) { | ||||||
|  |       this._part = new PartStream(this._partOpts) | ||||||
|  |       if (this.listenerCount('preamble') !== 0) { this.emit('preamble', this._part) } else { this._ignore() } | ||||||
|  |     } | ||||||
|  |     const r = this._hparser.push(data) | ||||||
|  |     if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // allows for "easier" testing
 | ||||||
|  |   if (this._firstWrite) { | ||||||
|  |     this._bparser.push(B_CRLF) | ||||||
|  |     this._firstWrite = false | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this._bparser.push(data) | ||||||
|  | 
 | ||||||
|  |   if (this._pause) { this._cb = cb } else { cb() } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.reset = function () { | ||||||
|  |   this._part = undefined | ||||||
|  |   this._bparser = undefined | ||||||
|  |   this._hparser = undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype.setBoundary = function (boundary) { | ||||||
|  |   const self = this | ||||||
|  |   this._bparser = new StreamSearch('\r\n--' + boundary) | ||||||
|  |   this._bparser.on('info', function (isMatch, data, start, end) { | ||||||
|  |     self._oninfo(isMatch, data, start, end) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._ignore = function () { | ||||||
|  |   if (this._part && !this._ignoreData) { | ||||||
|  |     this._ignoreData = true | ||||||
|  |     this._part.on('error', EMPTY_FN) | ||||||
|  |     // we must perform some kind of read on the stream even though we are
 | ||||||
|  |     // ignoring the data, otherwise node's Readable stream will not emit 'end'
 | ||||||
|  |     // after pushing null to the stream
 | ||||||
|  |     this._part.resume() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._oninfo = function (isMatch, data, start, end) { | ||||||
|  |   let buf; const self = this; let i = 0; let r; let shouldWriteMore = true | ||||||
|  | 
 | ||||||
|  |   if (!this._part && this._justMatched && data) { | ||||||
|  |     while (this._dashes < 2 && (start + i) < end) { | ||||||
|  |       if (data[start + i] === DASH) { | ||||||
|  |         ++i | ||||||
|  |         ++this._dashes | ||||||
|  |       } else { | ||||||
|  |         if (this._dashes) { buf = B_ONEDASH } | ||||||
|  |         this._dashes = 0 | ||||||
|  |         break | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (this._dashes === 2) { | ||||||
|  |       if ((start + i) < end && this.listenerCount('trailer') !== 0) { this.emit('trailer', data.slice(start + i, end)) } | ||||||
|  |       this.reset() | ||||||
|  |       this._finished = true | ||||||
|  |       // no more parts will be added
 | ||||||
|  |       if (self._parts === 0) { | ||||||
|  |         self._realFinish = true | ||||||
|  |         self.emit('finish') | ||||||
|  |         self._realFinish = false | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (this._dashes) { return } | ||||||
|  |   } | ||||||
|  |   if (this._justMatched) { this._justMatched = false } | ||||||
|  |   if (!this._part) { | ||||||
|  |     this._part = new PartStream(this._partOpts) | ||||||
|  |     this._part._read = function (n) { | ||||||
|  |       self._unpause() | ||||||
|  |     } | ||||||
|  |     if (this._isPreamble && this.listenerCount('preamble') !== 0) { | ||||||
|  |       this.emit('preamble', this._part) | ||||||
|  |     } else if (this._isPreamble !== true && this.listenerCount('part') !== 0) { | ||||||
|  |       this.emit('part', this._part) | ||||||
|  |     } else { | ||||||
|  |       this._ignore() | ||||||
|  |     } | ||||||
|  |     if (!this._isPreamble) { this._inHeader = true } | ||||||
|  |   } | ||||||
|  |   if (data && start < end && !this._ignoreData) { | ||||||
|  |     if (this._isPreamble || !this._inHeader) { | ||||||
|  |       if (buf) { shouldWriteMore = this._part.push(buf) } | ||||||
|  |       shouldWriteMore = this._part.push(data.slice(start, end)) | ||||||
|  |       if (!shouldWriteMore) { this._pause = true } | ||||||
|  |     } else if (!this._isPreamble && this._inHeader) { | ||||||
|  |       if (buf) { this._hparser.push(buf) } | ||||||
|  |       r = this._hparser.push(data.slice(start, end)) | ||||||
|  |       if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (isMatch) { | ||||||
|  |     this._hparser.reset() | ||||||
|  |     if (this._isPreamble) { this._isPreamble = false } else { | ||||||
|  |       if (start !== end) { | ||||||
|  |         ++this._parts | ||||||
|  |         this._part.on('end', function () { | ||||||
|  |           if (--self._parts === 0) { | ||||||
|  |             if (self._finished) { | ||||||
|  |               self._realFinish = true | ||||||
|  |               self.emit('finish') | ||||||
|  |               self._realFinish = false | ||||||
|  |             } else { | ||||||
|  |               self._unpause() | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     this._part.push(null) | ||||||
|  |     this._part = undefined | ||||||
|  |     this._ignoreData = false | ||||||
|  |     this._justMatched = true | ||||||
|  |     this._dashes = 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Dicer.prototype._unpause = function () { | ||||||
|  |   if (!this._pause) { return } | ||||||
|  | 
 | ||||||
|  |   this._pause = false | ||||||
|  |   if (this._cb) { | ||||||
|  |     const cb = this._cb | ||||||
|  |     this._cb = undefined | ||||||
|  |     cb() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = Dicer | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2032: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const EventEmitter = (__nccwpck_require__(5673).EventEmitter) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const StreamSearch = __nccwpck_require__(1142) | ||||||
|  | 
 | ||||||
|  | const B_DCRLF = Buffer.from('\r\n\r\n') | ||||||
|  | const RE_CRLF = /\r\n/g | ||||||
|  | const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex
 | ||||||
|  | 
 | ||||||
|  | function HeaderParser (cfg) { | ||||||
|  |   EventEmitter.call(this) | ||||||
|  | 
 | ||||||
|  |   cfg = cfg || {} | ||||||
|  |   const self = this | ||||||
|  |   this.nread = 0 | ||||||
|  |   this.maxed = false | ||||||
|  |   this.npairs = 0 | ||||||
|  |   this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) | ||||||
|  |   this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.header = {} | ||||||
|  |   this.finished = false | ||||||
|  |   this.ss = new StreamSearch(B_DCRLF) | ||||||
|  |   this.ss.on('info', function (isMatch, data, start, end) { | ||||||
|  |     if (data && !self.maxed) { | ||||||
|  |       if (self.nread + end - start >= self.maxHeaderSize) { | ||||||
|  |         end = self.maxHeaderSize - self.nread + start | ||||||
|  |         self.nread = self.maxHeaderSize | ||||||
|  |         self.maxed = true | ||||||
|  |       } else { self.nread += (end - start) } | ||||||
|  | 
 | ||||||
|  |       self.buffer += data.toString('binary', start, end) | ||||||
|  |     } | ||||||
|  |     if (isMatch) { self._finish() } | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | inherits(HeaderParser, EventEmitter) | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype.push = function (data) { | ||||||
|  |   const r = this.ss.push(data) | ||||||
|  |   if (this.finished) { return r } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype.reset = function () { | ||||||
|  |   this.finished = false | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.header = {} | ||||||
|  |   this.ss.reset() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype._finish = function () { | ||||||
|  |   if (this.buffer) { this._parseHeader() } | ||||||
|  |   this.ss.matches = this.ss.maxMatches | ||||||
|  |   const header = this.header | ||||||
|  |   this.header = {} | ||||||
|  |   this.buffer = '' | ||||||
|  |   this.finished = true | ||||||
|  |   this.nread = this.npairs = 0 | ||||||
|  |   this.maxed = false | ||||||
|  |   this.emit('header', header) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | HeaderParser.prototype._parseHeader = function () { | ||||||
|  |   if (this.npairs === this.maxHeaderPairs) { return } | ||||||
|  | 
 | ||||||
|  |   const lines = this.buffer.split(RE_CRLF) | ||||||
|  |   const len = lines.length | ||||||
|  |   let m, h | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (lines[i].length === 0) { continue } | ||||||
|  |     if (lines[i][0] === '\t' || lines[i][0] === ' ') { | ||||||
|  |       // folded header content
 | ||||||
|  |       // RFC2822 says to just remove the CRLF and not the whitespace following
 | ||||||
|  |       // it, so we follow the RFC and include the leading whitespace ...
 | ||||||
|  |       if (h) { | ||||||
|  |         this.header[h][this.header[h].length - 1] += lines[i] | ||||||
|  |         continue | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const posColon = lines[i].indexOf(':') | ||||||
|  |     if ( | ||||||
|  |       posColon === -1 || | ||||||
|  |       posColon === 0 | ||||||
|  |     ) { | ||||||
|  |       return | ||||||
|  |     } | ||||||
|  |     m = RE_HDR.exec(lines[i]) | ||||||
|  |     h = m[1].toLowerCase() | ||||||
|  |     this.header[h] = this.header[h] || [] | ||||||
|  |     this.header[h].push((m[2] || '')) | ||||||
|  |     if (++this.npairs === this.maxHeaderPairs) { break } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = HeaderParser | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1620: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | const ReadableStream = (__nccwpck_require__(4492).Readable) | ||||||
|  | 
 | ||||||
|  | function PartStream (opts) { | ||||||
|  |   ReadableStream.call(this, opts) | ||||||
|  | } | ||||||
|  | inherits(PartStream, ReadableStream) | ||||||
|  | 
 | ||||||
|  | PartStream.prototype._read = function (n) {} | ||||||
|  | 
 | ||||||
|  | module.exports = PartStream | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1142: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Copyright Brian White. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * @see https://github.com/mscdex/streamsearch
 | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to | ||||||
|  |  * deal in the Software without restriction, including without limitation the | ||||||
|  |  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||||||
|  |  * sell copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||||||
|  |  * IN THE SOFTWARE. | ||||||
|  |  * | ||||||
|  |  * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation | ||||||
|  |  * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
 | ||||||
|  |  */ | ||||||
|  | const EventEmitter = (__nccwpck_require__(5673).EventEmitter) | ||||||
|  | const inherits = (__nccwpck_require__(7261).inherits) | ||||||
|  | 
 | ||||||
|  | function SBMH (needle) { | ||||||
|  |   if (typeof needle === 'string') { | ||||||
|  |     needle = Buffer.from(needle) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (!Buffer.isBuffer(needle)) { | ||||||
|  |     throw new TypeError('The needle has to be a String or a Buffer.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   const needleLength = needle.length | ||||||
|  | 
 | ||||||
|  |   if (needleLength === 0) { | ||||||
|  |     throw new Error('The needle cannot be an empty String/Buffer.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (needleLength > 256) { | ||||||
|  |     throw new Error('The needle cannot have a length bigger than 256.') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.maxMatches = Infinity | ||||||
|  |   this.matches = 0 | ||||||
|  | 
 | ||||||
|  |   this._occ = new Array(256) | ||||||
|  |     .fill(needleLength) // Initialize occurrence table.
 | ||||||
|  |   this._lookbehind_size = 0 | ||||||
|  |   this._needle = needle | ||||||
|  |   this._bufpos = 0 | ||||||
|  | 
 | ||||||
|  |   this._lookbehind = Buffer.alloc(needleLength) | ||||||
|  | 
 | ||||||
|  |   // Populate occurrence table with analysis of the needle,
 | ||||||
|  |   // ignoring last letter.
 | ||||||
|  |   for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     this._occ[needle[i]] = needleLength - 1 - i | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | inherits(SBMH, EventEmitter) | ||||||
|  | 
 | ||||||
|  | SBMH.prototype.reset = function () { | ||||||
|  |   this._lookbehind_size = 0 | ||||||
|  |   this.matches = 0 | ||||||
|  |   this._bufpos = 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype.push = function (chunk, pos) { | ||||||
|  |   if (!Buffer.isBuffer(chunk)) { | ||||||
|  |     chunk = Buffer.from(chunk, 'binary') | ||||||
|  |   } | ||||||
|  |   const chlen = chunk.length | ||||||
|  |   this._bufpos = pos || 0 | ||||||
|  |   let r | ||||||
|  |   while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } | ||||||
|  |   return r | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_feed = function (data) { | ||||||
|  |   const len = data.length | ||||||
|  |   const needle = this._needle | ||||||
|  |   const needleLength = needle.length | ||||||
|  |   const lastNeedleChar = needle[needleLength - 1] | ||||||
|  | 
 | ||||||
|  |   // Positive: points to a position in `data`
 | ||||||
|  |   //           pos == 3 points to data[3]
 | ||||||
|  |   // Negative: points to a position in the lookbehind buffer
 | ||||||
|  |   //           pos == -2 points to lookbehind[lookbehind_size - 2]
 | ||||||
|  |   let pos = -this._lookbehind_size | ||||||
|  |   let ch | ||||||
|  | 
 | ||||||
|  |   if (pos < 0) { | ||||||
|  |     // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
 | ||||||
|  |     // search with character lookup code that considers both the
 | ||||||
|  |     // lookbehind buffer and the current round's haystack data.
 | ||||||
|  |     //
 | ||||||
|  |     // Loop until
 | ||||||
|  |     //   there is a match.
 | ||||||
|  |     // or until
 | ||||||
|  |     //   we've moved past the position that requires the
 | ||||||
|  |     //   lookbehind buffer. In this case we switch to the
 | ||||||
|  |     //   optimized loop.
 | ||||||
|  |     // or until
 | ||||||
|  |     //   the character to look at lies outside the haystack.
 | ||||||
|  |     while (pos < 0 && pos <= len - needleLength) { | ||||||
|  |       ch = this._sbmh_lookup_char(data, pos + needleLength - 1) | ||||||
|  | 
 | ||||||
|  |       if ( | ||||||
|  |         ch === lastNeedleChar && | ||||||
|  |         this._sbmh_memcmp(data, pos, needleLength - 1) | ||||||
|  |       ) { | ||||||
|  |         this._lookbehind_size = 0 | ||||||
|  |         ++this.matches | ||||||
|  |         this.emit('info', true) | ||||||
|  | 
 | ||||||
|  |         return (this._bufpos = pos + needleLength) | ||||||
|  |       } | ||||||
|  |       pos += this._occ[ch] | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // No match.
 | ||||||
|  | 
 | ||||||
|  |     if (pos < 0) { | ||||||
|  |       // There's too few data for Boyer-Moore-Horspool to run,
 | ||||||
|  |       // so let's use a different algorithm to skip as much as
 | ||||||
|  |       // we can.
 | ||||||
|  |       // Forward pos until
 | ||||||
|  |       //   the trailing part of lookbehind + data
 | ||||||
|  |       //   looks like the beginning of the needle
 | ||||||
|  |       // or until
 | ||||||
|  |       //   pos == 0
 | ||||||
|  |       while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (pos >= 0) { | ||||||
|  |       // Discard lookbehind buffer.
 | ||||||
|  |       this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) | ||||||
|  |       this._lookbehind_size = 0 | ||||||
|  |     } else { | ||||||
|  |       // Cut off part of the lookbehind buffer that has
 | ||||||
|  |       // been processed and append the entire haystack
 | ||||||
|  |       // into it.
 | ||||||
|  |       const bytesToCutOff = this._lookbehind_size + pos | ||||||
|  |       if (bytesToCutOff > 0) { | ||||||
|  |         // The cut off data is guaranteed not to contain the needle.
 | ||||||
|  |         this.emit('info', false, this._lookbehind, 0, bytesToCutOff) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, | ||||||
|  |         this._lookbehind_size - bytesToCutOff) | ||||||
|  |       this._lookbehind_size -= bytesToCutOff | ||||||
|  | 
 | ||||||
|  |       data.copy(this._lookbehind, this._lookbehind_size) | ||||||
|  |       this._lookbehind_size += len | ||||||
|  | 
 | ||||||
|  |       this._bufpos = len | ||||||
|  |       return len | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   pos += (pos >= 0) * this._bufpos | ||||||
|  | 
 | ||||||
|  |   // Lookbehind buffer is now empty. We only need to check if the
 | ||||||
|  |   // needle is in the haystack.
 | ||||||
|  |   if (data.indexOf(needle, pos) !== -1) { | ||||||
|  |     pos = data.indexOf(needle, pos) | ||||||
|  |     ++this.matches | ||||||
|  |     if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } | ||||||
|  | 
 | ||||||
|  |     return (this._bufpos = pos + needleLength) | ||||||
|  |   } else { | ||||||
|  |     pos = len - needleLength | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // There was no match. If there's trailing haystack data that we cannot
 | ||||||
|  |   // match yet using the Boyer-Moore-Horspool algorithm (because the trailing
 | ||||||
|  |   // data is less than the needle size) then match using a modified
 | ||||||
|  |   // algorithm that starts matching from the beginning instead of the end.
 | ||||||
|  |   // Whatever trailing data is left after running this algorithm is added to
 | ||||||
|  |   // the lookbehind buffer.
 | ||||||
|  |   while ( | ||||||
|  |     pos < len && | ||||||
|  |     ( | ||||||
|  |       data[pos] !== needle[0] || | ||||||
|  |       ( | ||||||
|  |         (Buffer.compare( | ||||||
|  |           data.subarray(pos, pos + len - pos), | ||||||
|  |           needle.subarray(0, len - pos) | ||||||
|  |         ) !== 0) | ||||||
|  |       ) | ||||||
|  |     ) | ||||||
|  |   ) { | ||||||
|  |     ++pos | ||||||
|  |   } | ||||||
|  |   if (pos < len) { | ||||||
|  |     data.copy(this._lookbehind, 0, pos, pos + (len - pos)) | ||||||
|  |     this._lookbehind_size = len - pos | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // Everything until pos is guaranteed not to contain needle data.
 | ||||||
|  |   if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } | ||||||
|  | 
 | ||||||
|  |   this._bufpos = len | ||||||
|  |   return len | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_lookup_char = function (data, pos) { | ||||||
|  |   return (pos < 0) | ||||||
|  |     ? this._lookbehind[this._lookbehind_size + pos] | ||||||
|  |     : data[pos] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SBMH.prototype._sbmh_memcmp = function (data, pos, len) { | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } | ||||||
|  |   } | ||||||
|  |   return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = SBMH | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 727: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const WritableStream = (__nccwpck_require__(4492).Writable) | ||||||
|  | const { inherits } = __nccwpck_require__(7261) | ||||||
|  | const Dicer = __nccwpck_require__(2960) | ||||||
|  | 
 | ||||||
|  | const MultipartParser = __nccwpck_require__(2183) | ||||||
|  | const UrlencodedParser = __nccwpck_require__(8306) | ||||||
|  | const parseParams = __nccwpck_require__(1854) | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2183: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // TODO:
 | ||||||
|  | //  * support 1 nested multipart level
 | ||||||
|  | //    (see second multipart example here:
 | ||||||
|  | //     http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data)
 | ||||||
|  | //  * support limits.fieldNameSize
 | ||||||
|  | //     -- this will require modifications to utils.parseParams
 | ||||||
|  | 
 | ||||||
|  | const { Readable } = __nccwpck_require__(4492) | ||||||
|  | const { inherits } = __nccwpck_require__(7261) | ||||||
|  | 
 | ||||||
|  | const Dicer = __nccwpck_require__(2960) | ||||||
|  | 
 | ||||||
|  | const parseParams = __nccwpck_require__(1854) | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | const basename = __nccwpck_require__(8647) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const RE_BOUNDARY = /^boundary$/i | ||||||
|  | const RE_FIELD = /^form-data$/i | ||||||
|  | const RE_CHARSET = /^charset$/i | ||||||
|  | const RE_FILENAME = /^filename$/i | ||||||
|  | const RE_NAME = /^name$/i | ||||||
|  | 
 | ||||||
|  | Multipart.detect = /^multipart\/form-data/i | ||||||
|  | function Multipart (boy, cfg) { | ||||||
|  |   let i | ||||||
|  |   let len | ||||||
|  |   const self = this | ||||||
|  |   let boundary | ||||||
|  |   const limits = cfg.limits | ||||||
|  |   const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) | ||||||
|  |   const parsedConType = cfg.parsedConType || [] | ||||||
|  |   const defCharset = cfg.defCharset || 'utf8' | ||||||
|  |   const preservePath = cfg.preservePath | ||||||
|  |   const fileOpts = { highWaterMark: cfg.fileHwm } | ||||||
|  | 
 | ||||||
|  |   for (i = 0, len = parsedConType.length; i < len; ++i) { | ||||||
|  |     if (Array.isArray(parsedConType[i]) && | ||||||
|  |       RE_BOUNDARY.test(parsedConType[i][0])) { | ||||||
|  |       boundary = parsedConType[i][1] | ||||||
|  |       break | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function checkFinished () { | ||||||
|  |     if (nends === 0 && finished && !boy._done) { | ||||||
|  |       finished = false | ||||||
|  |       self.end() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } | ||||||
|  | 
 | ||||||
|  |   const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) | ||||||
|  |   const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) | ||||||
|  |   const filesLimit = getLimit(limits, 'files', Infinity) | ||||||
|  |   const fieldsLimit = getLimit(limits, 'fields', Infinity) | ||||||
|  |   const partsLimit = getLimit(limits, 'parts', Infinity) | ||||||
|  |   const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) | ||||||
|  |   const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) | ||||||
|  | 
 | ||||||
|  |   let nfiles = 0 | ||||||
|  |   let nfields = 0 | ||||||
|  |   let nends = 0 | ||||||
|  |   let curFile | ||||||
|  |   let curField | ||||||
|  |   let finished = false | ||||||
|  | 
 | ||||||
|  |   this._needDrain = false | ||||||
|  |   this._pause = false | ||||||
|  |   this._cb = undefined | ||||||
|  |   this._nparts = 0 | ||||||
|  |   this._boy = boy | ||||||
|  | 
 | ||||||
|  |   const parserCfg = { | ||||||
|  |     boundary, | ||||||
|  |     maxHeaderPairs: headerPairsLimit, | ||||||
|  |     maxHeaderSize: headerSizeLimit, | ||||||
|  |     partHwm: fileOpts.highWaterMark, | ||||||
|  |     highWaterMark: cfg.highWaterMark | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.parser = new Dicer(parserCfg) | ||||||
|  |   this.parser.on('drain', function () { | ||||||
|  |     self._needDrain = false | ||||||
|  |     if (self._cb && !self._pause) { | ||||||
|  |       const cb = self._cb | ||||||
|  |       self._cb = undefined | ||||||
|  |       cb() | ||||||
|  |     } | ||||||
|  |   }).on('part', function onPart (part) { | ||||||
|  |     if (++self._nparts > partsLimit) { | ||||||
|  |       self.parser.removeListener('part', onPart) | ||||||
|  |       self.parser.on('part', skipPart) | ||||||
|  |       boy.hitPartsLimit = true | ||||||
|  |       boy.emit('partsLimit') | ||||||
|  |       return skipPart(part) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let
 | ||||||
|  |     // us emit 'end' early since we know the part has ended if we are already
 | ||||||
|  |     // seeing the next part
 | ||||||
|  |     if (curField) { | ||||||
|  |       const field = curField | ||||||
|  |       field.emit('end') | ||||||
|  |       field.removeAllListeners('end') | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     part.on('header', function (header) { | ||||||
|  |       let contype | ||||||
|  |       let fieldname | ||||||
|  |       let parsed | ||||||
|  |       let charset | ||||||
|  |       let encoding | ||||||
|  |       let filename | ||||||
|  |       let nsize = 0 | ||||||
|  | 
 | ||||||
|  |       if (header['content-type']) { | ||||||
|  |         parsed = parseParams(header['content-type'][0]) | ||||||
|  |         if (parsed[0]) { | ||||||
|  |           contype = parsed[0].toLowerCase() | ||||||
|  |           for (i = 0, len = parsed.length; i < len; ++i) { | ||||||
|  |             if (RE_CHARSET.test(parsed[i][0])) { | ||||||
|  |               charset = parsed[i][1].toLowerCase() | ||||||
|  |               break | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (contype === undefined) { contype = 'text/plain' } | ||||||
|  |       if (charset === undefined) { charset = defCharset } | ||||||
|  | 
 | ||||||
|  |       if (header['content-disposition']) { | ||||||
|  |         parsed = parseParams(header['content-disposition'][0]) | ||||||
|  |         if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } | ||||||
|  |         for (i = 0, len = parsed.length; i < len; ++i) { | ||||||
|  |           if (RE_NAME.test(parsed[i][0])) { | ||||||
|  |             fieldname = parsed[i][1] | ||||||
|  |           } else if (RE_FILENAME.test(parsed[i][0])) { | ||||||
|  |             filename = parsed[i][1] | ||||||
|  |             if (!preservePath) { filename = basename(filename) } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } else { return skipPart(part) } | ||||||
|  | 
 | ||||||
|  |       if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } | ||||||
|  | 
 | ||||||
|  |       let onData, | ||||||
|  |         onEnd | ||||||
|  | 
 | ||||||
|  |       if (isPartAFile(fieldname, contype, filename)) { | ||||||
|  |         // file/binary field
 | ||||||
|  |         if (nfiles === filesLimit) { | ||||||
|  |           if (!boy.hitFilesLimit) { | ||||||
|  |             boy.hitFilesLimit = true | ||||||
|  |             boy.emit('filesLimit') | ||||||
|  |           } | ||||||
|  |           return skipPart(part) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nfiles | ||||||
|  | 
 | ||||||
|  |         if (boy.listenerCount('file') === 0) { | ||||||
|  |           self.parser._ignore() | ||||||
|  |           return | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nends | ||||||
|  |         const file = new FileStream(fileOpts) | ||||||
|  |         curFile = file | ||||||
|  |         file.on('end', function () { | ||||||
|  |           --nends | ||||||
|  |           self._pause = false | ||||||
|  |           checkFinished() | ||||||
|  |           if (self._cb && !self._needDrain) { | ||||||
|  |             const cb = self._cb | ||||||
|  |             self._cb = undefined | ||||||
|  |             cb() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |         file._read = function (n) { | ||||||
|  |           if (!self._pause) { return } | ||||||
|  |           self._pause = false | ||||||
|  |           if (self._cb && !self._needDrain) { | ||||||
|  |             const cb = self._cb | ||||||
|  |             self._cb = undefined | ||||||
|  |             cb() | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         boy.emit('file', fieldname, file, filename, encoding, contype) | ||||||
|  | 
 | ||||||
|  |         onData = function (data) { | ||||||
|  |           if ((nsize += data.length) > fileSizeLimit) { | ||||||
|  |             const extralen = fileSizeLimit - nsize + data.length | ||||||
|  |             if (extralen > 0) { file.push(data.slice(0, extralen)) } | ||||||
|  |             file.truncated = true | ||||||
|  |             file.bytesRead = fileSizeLimit | ||||||
|  |             part.removeAllListeners('data') | ||||||
|  |             file.emit('limit') | ||||||
|  |             return | ||||||
|  |           } else if (!file.push(data)) { self._pause = true } | ||||||
|  | 
 | ||||||
|  |           file.bytesRead = nsize | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         onEnd = function () { | ||||||
|  |           curFile = undefined | ||||||
|  |           file.push(null) | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         // non-file field
 | ||||||
|  |         if (nfields === fieldsLimit) { | ||||||
|  |           if (!boy.hitFieldsLimit) { | ||||||
|  |             boy.hitFieldsLimit = true | ||||||
|  |             boy.emit('fieldsLimit') | ||||||
|  |           } | ||||||
|  |           return skipPart(part) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         ++nfields | ||||||
|  |         ++nends | ||||||
|  |         let buffer = '' | ||||||
|  |         let truncated = false | ||||||
|  |         curField = part | ||||||
|  | 
 | ||||||
|  |         onData = function (data) { | ||||||
|  |           if ((nsize += data.length) > fieldSizeLimit) { | ||||||
|  |             const extralen = (fieldSizeLimit - (nsize - data.length)) | ||||||
|  |             buffer += data.toString('binary', 0, extralen) | ||||||
|  |             truncated = true | ||||||
|  |             part.removeAllListeners('data') | ||||||
|  |           } else { buffer += data.toString('binary') } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         onEnd = function () { | ||||||
|  |           curField = undefined | ||||||
|  |           if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } | ||||||
|  |           boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) | ||||||
|  |           --nends | ||||||
|  |           checkFinished() | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become | ||||||
|  |          broken. Streams2/streams3 is a huge black box of confusion, but | ||||||
|  |          somehow overriding the sync state seems to fix things again (and still | ||||||
|  |          seems to work for previous node versions). | ||||||
|  |       */ | ||||||
|  |       part._readableState.sync = false | ||||||
|  | 
 | ||||||
|  |       part.on('data', onData) | ||||||
|  |       part.on('end', onEnd) | ||||||
|  |     }).on('error', function (err) { | ||||||
|  |       if (curFile) { curFile.emit('error', err) } | ||||||
|  |     }) | ||||||
|  |   }).on('error', function (err) { | ||||||
|  |     boy.emit('error', err) | ||||||
|  |   }).on('finish', function () { | ||||||
|  |     finished = true | ||||||
|  |     checkFinished() | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Multipart.prototype.write = function (chunk, cb) { | ||||||
|  |   const r = this.parser.write(chunk) | ||||||
|  |   if (r && !this._pause) { | ||||||
|  |     cb() | ||||||
|  |   } else { | ||||||
|  |     this._needDrain = !r | ||||||
|  |     this._cb = cb | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Multipart.prototype.end = function () { | ||||||
|  |   const self = this | ||||||
|  | 
 | ||||||
|  |   if (self.parser.writable) { | ||||||
|  |     self.parser.end() | ||||||
|  |   } else if (!self._boy._done) { | ||||||
|  |     process.nextTick(function () { | ||||||
|  |       self._boy._done = true | ||||||
|  |       self._boy.emit('finish') | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function skipPart (part) { | ||||||
|  |   part.resume() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function FileStream (opts) { | ||||||
|  |   Readable.call(this, opts) | ||||||
|  | 
 | ||||||
|  |   this.bytesRead = 0 | ||||||
|  | 
 | ||||||
|  |   this.truncated = false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inherits(FileStream, Readable) | ||||||
|  | 
 | ||||||
|  | FileStream.prototype._read = function (n) {} | ||||||
|  | 
 | ||||||
|  | module.exports = Multipart | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8306: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const Decoder = __nccwpck_require__(7100) | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | const getLimit = __nccwpck_require__(1467) | ||||||
|  | 
 | ||||||
|  | const RE_CHARSET = /^charset$/i | ||||||
|  | 
 | ||||||
|  | UrlEncoded.detect = /^application\/x-www-form-urlencoded/i | ||||||
|  | function UrlEncoded (boy, cfg) { | ||||||
|  |   const limits = cfg.limits | ||||||
|  |   const parsedConType = cfg.parsedConType | ||||||
|  |   this.boy = boy | ||||||
|  | 
 | ||||||
|  |   this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) | ||||||
|  |   this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) | ||||||
|  |   this.fieldsLimit = getLimit(limits, 'fields', Infinity) | ||||||
|  | 
 | ||||||
|  |   let charset | ||||||
|  |   for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     if (Array.isArray(parsedConType[i]) && | ||||||
|  |         RE_CHARSET.test(parsedConType[i][0])) { | ||||||
|  |       charset = parsedConType[i][1].toLowerCase() | ||||||
|  |       break | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (charset === undefined) { charset = cfg.defCharset || 'utf8' } | ||||||
|  | 
 | ||||||
|  |   this.decoder = new Decoder() | ||||||
|  |   this.charset = charset | ||||||
|  |   this._fields = 0 | ||||||
|  |   this._state = 'key' | ||||||
|  |   this._checkingBytes = true | ||||||
|  |   this._bytesKey = 0 | ||||||
|  |   this._bytesVal = 0 | ||||||
|  |   this._key = '' | ||||||
|  |   this._val = '' | ||||||
|  |   this._keyTrunc = false | ||||||
|  |   this._valTrunc = false | ||||||
|  |   this._hitLimit = false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | UrlEncoded.prototype.write = function (data, cb) { | ||||||
|  |   if (this._fields === this.fieldsLimit) { | ||||||
|  |     if (!this.boy.hitFieldsLimit) { | ||||||
|  |       this.boy.hitFieldsLimit = true | ||||||
|  |       this.boy.emit('fieldsLimit') | ||||||
|  |     } | ||||||
|  |     return cb() | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   let idxeq; let idxamp; let i; let p = 0; const len = data.length | ||||||
|  | 
 | ||||||
|  |   while (p < len) { | ||||||
|  |     if (this._state === 'key') { | ||||||
|  |       idxeq = idxamp = undefined | ||||||
|  |       for (i = p; i < len; ++i) { | ||||||
|  |         if (!this._checkingBytes) { ++p } | ||||||
|  |         if (data[i] === 0x3D/* = */) { | ||||||
|  |           idxeq = i | ||||||
|  |           break | ||||||
|  |         } else if (data[i] === 0x26/* & */) { | ||||||
|  |           idxamp = i | ||||||
|  |           break | ||||||
|  |         } | ||||||
|  |         if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { | ||||||
|  |           this._hitLimit = true | ||||||
|  |           break | ||||||
|  |         } else if (this._checkingBytes) { ++this._bytesKey } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (idxeq !== undefined) { | ||||||
|  |         // key with assignment
 | ||||||
|  |         if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } | ||||||
|  |         this._state = 'val' | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._val = '' | ||||||
|  |         this._bytesVal = 0 | ||||||
|  |         this._valTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         p = idxeq + 1 | ||||||
|  |       } else if (idxamp !== undefined) { | ||||||
|  |         // key with no assignment
 | ||||||
|  |         ++this._fields | ||||||
|  |         let key; const keyTrunc = this._keyTrunc | ||||||
|  |         if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._key = '' | ||||||
|  |         this._bytesKey = 0 | ||||||
|  |         this._keyTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         if (key.length) { | ||||||
|  |           this.boy.emit('field', decodeText(key, 'binary', this.charset), | ||||||
|  |             '', | ||||||
|  |             keyTrunc, | ||||||
|  |             false) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         p = idxamp + 1 | ||||||
|  |         if (this._fields === this.fieldsLimit) { return cb() } | ||||||
|  |       } else if (this._hitLimit) { | ||||||
|  |         // we may not have hit the actual limit if there are encoded bytes...
 | ||||||
|  |         if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } | ||||||
|  |         p = i | ||||||
|  |         if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { | ||||||
|  |           // yep, we actually did hit the limit
 | ||||||
|  |           this._checkingBytes = false | ||||||
|  |           this._keyTrunc = true | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } | ||||||
|  |         p = len | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       idxamp = undefined | ||||||
|  |       for (i = p; i < len; ++i) { | ||||||
|  |         if (!this._checkingBytes) { ++p } | ||||||
|  |         if (data[i] === 0x26/* & */) { | ||||||
|  |           idxamp = i | ||||||
|  |           break | ||||||
|  |         } | ||||||
|  |         if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { | ||||||
|  |           this._hitLimit = true | ||||||
|  |           break | ||||||
|  |         } else if (this._checkingBytes) { ++this._bytesVal } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (idxamp !== undefined) { | ||||||
|  |         ++this._fields | ||||||
|  |         if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } | ||||||
|  |         this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |           decodeText(this._val, 'binary', this.charset), | ||||||
|  |           this._keyTrunc, | ||||||
|  |           this._valTrunc) | ||||||
|  |         this._state = 'key' | ||||||
|  | 
 | ||||||
|  |         this._hitLimit = false | ||||||
|  |         this._checkingBytes = true | ||||||
|  |         this._key = '' | ||||||
|  |         this._bytesKey = 0 | ||||||
|  |         this._keyTrunc = false | ||||||
|  |         this.decoder.reset() | ||||||
|  | 
 | ||||||
|  |         p = idxamp + 1 | ||||||
|  |         if (this._fields === this.fieldsLimit) { return cb() } | ||||||
|  |       } else if (this._hitLimit) { | ||||||
|  |         // we may not have hit the actual limit if there are encoded bytes...
 | ||||||
|  |         if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } | ||||||
|  |         p = i | ||||||
|  |         if ((this._val === '' && this.fieldSizeLimit === 0) || | ||||||
|  |             (this._bytesVal = this._val.length) === this.fieldSizeLimit) { | ||||||
|  |           // yep, we actually did hit the limit
 | ||||||
|  |           this._checkingBytes = false | ||||||
|  |           this._valTrunc = true | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } | ||||||
|  |         p = len | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   cb() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | UrlEncoded.prototype.end = function () { | ||||||
|  |   if (this.boy._done) { return } | ||||||
|  | 
 | ||||||
|  |   if (this._state === 'key' && this._key.length > 0) { | ||||||
|  |     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |       '', | ||||||
|  |       this._keyTrunc, | ||||||
|  |       false) | ||||||
|  |   } else if (this._state === 'val') { | ||||||
|  |     this.boy.emit('field', decodeText(this._key, 'binary', this.charset), | ||||||
|  |       decodeText(this._val, 'binary', this.charset), | ||||||
|  |       this._keyTrunc, | ||||||
|  |       this._valTrunc) | ||||||
|  |   } | ||||||
|  |   this.boy._done = true | ||||||
|  |   this.boy.emit('finish') | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = UrlEncoded | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 7100: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const RE_PLUS = /\+/g | ||||||
|  | 
 | ||||||
|  | const HEX = [ | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||||
|  |   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | function Decoder () { | ||||||
|  |   this.buffer = undefined | ||||||
|  | } | ||||||
|  | Decoder.prototype.write = function (str) { | ||||||
|  |   // Replace '+' with ' ' before decoding
 | ||||||
|  |   str = str.replace(RE_PLUS, ' ') | ||||||
|  |   let res = '' | ||||||
|  |   let i = 0; let p = 0; const len = str.length | ||||||
|  |   for (; i < len; ++i) { | ||||||
|  |     if (this.buffer !== undefined) { | ||||||
|  |       if (!HEX[str.charCodeAt(i)]) { | ||||||
|  |         res += '%' + this.buffer | ||||||
|  |         this.buffer = undefined | ||||||
|  |         --i // retry character
 | ||||||
|  |       } else { | ||||||
|  |         this.buffer += str[i] | ||||||
|  |         ++p | ||||||
|  |         if (this.buffer.length === 2) { | ||||||
|  |           res += String.fromCharCode(parseInt(this.buffer, 16)) | ||||||
|  |           this.buffer = undefined | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } else if (str[i] === '%') { | ||||||
|  |       if (i > p) { | ||||||
|  |         res += str.substring(p, i) | ||||||
|  |         p = i | ||||||
|  |       } | ||||||
|  |       this.buffer = '' | ||||||
|  |       ++p | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (p < len && this.buffer === undefined) { res += str.substring(p) } | ||||||
|  |   return res | ||||||
|  | } | ||||||
|  | Decoder.prototype.reset = function () { | ||||||
|  |   this.buffer = undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = Decoder | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8647: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | module.exports = function basename (path) { | ||||||
|  |   if (typeof path !== 'string') { return '' } | ||||||
|  |   for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var
 | ||||||
|  |     switch (path.charCodeAt(i)) { | ||||||
|  |       case 0x2F: // '/'
 | ||||||
|  |       case 0x5C: // '\'
 | ||||||
|  |         path = path.slice(i + 1) | ||||||
|  |         return (path === '..' || path === '.' ? '' : path) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return (path === '..' || path === '.' ? '' : path) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 4619: | ||||||
|  | /***/ (function(module) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // Node has always utf-8
 | ||||||
|  | const utf8Decoder = new TextDecoder('utf-8') | ||||||
|  | const textDecoders = new Map([ | ||||||
|  |   ['utf-8', utf8Decoder], | ||||||
|  |   ['utf8', utf8Decoder] | ||||||
|  | ]) | ||||||
|  | 
 | ||||||
|  | function getDecoder (charset) { | ||||||
|  |   let lc | ||||||
|  |   while (true) { | ||||||
|  |     switch (charset) { | ||||||
|  |       case 'utf-8': | ||||||
|  |       case 'utf8': | ||||||
|  |         return decoders.utf8 | ||||||
|  |       case 'latin1': | ||||||
|  |       case 'ascii': // TODO: Make these a separate, strict decoder?
 | ||||||
|  |       case 'us-ascii': | ||||||
|  |       case 'iso-8859-1': | ||||||
|  |       case 'iso8859-1': | ||||||
|  |       case 'iso88591': | ||||||
|  |       case 'iso_8859-1': | ||||||
|  |       case 'windows-1252': | ||||||
|  |       case 'iso_8859-1:1987': | ||||||
|  |       case 'cp1252': | ||||||
|  |       case 'x-cp1252': | ||||||
|  |         return decoders.latin1 | ||||||
|  |       case 'utf16le': | ||||||
|  |       case 'utf-16le': | ||||||
|  |       case 'ucs2': | ||||||
|  |       case 'ucs-2': | ||||||
|  |         return decoders.utf16le | ||||||
|  |       case 'base64': | ||||||
|  |         return decoders.base64 | ||||||
|  |       default: | ||||||
|  |         if (lc === undefined) { | ||||||
|  |           lc = true | ||||||
|  |           charset = charset.toLowerCase() | ||||||
|  |           continue | ||||||
|  |         } | ||||||
|  |         return decoders.other.bind(charset) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const decoders = { | ||||||
|  |   utf8: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.utf8Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   latin1: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       return data | ||||||
|  |     } | ||||||
|  |     return data.latin1Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   utf16le: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.ucs2Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   base64: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  |     return data.base64Slice(0, data.length) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   other: (data, sourceEncoding) => { | ||||||
|  |     if (data.length === 0) { | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |     if (typeof data === 'string') { | ||||||
|  |       data = Buffer.from(data, sourceEncoding) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (textDecoders.has(this.toString())) { | ||||||
|  |       try { | ||||||
|  |         return textDecoders.get(this).decode(data) | ||||||
|  |       } catch {} | ||||||
|  |     } | ||||||
|  |     return typeof data === 'string' | ||||||
|  |       ? data | ||||||
|  |       : data.toString() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function decodeText (text, sourceEncoding, destEncoding) { | ||||||
|  |   if (text) { | ||||||
|  |     return getDecoder(destEncoding)(text, sourceEncoding) | ||||||
|  |   } | ||||||
|  |   return text | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = decodeText | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1467: | ||||||
|  | /***/ ((module) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | module.exports = function getLimit (limits, name, defaultLimit) { | ||||||
|  |   if ( | ||||||
|  |     !limits || | ||||||
|  |     limits[name] === undefined || | ||||||
|  |     limits[name] === null | ||||||
|  |   ) { return defaultLimit } | ||||||
|  | 
 | ||||||
|  |   if ( | ||||||
|  |     typeof limits[name] !== 'number' || | ||||||
|  |     isNaN(limits[name]) | ||||||
|  |   ) { throw new TypeError('Limit ' + name + ' is not a valid number') } | ||||||
|  | 
 | ||||||
|  |   return limits[name] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 1854: | ||||||
|  | /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | /* eslint-disable object-property-newline */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const decodeText = __nccwpck_require__(4619) | ||||||
|  | 
 | ||||||
|  | const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g | ||||||
|  | 
 | ||||||
|  | const EncodedLookup = { | ||||||
|  |   '%00': '\x00', '%01': '\x01', '%02': '\x02', '%03': '\x03', '%04': '\x04', | ||||||
|  |   '%05': '\x05', '%06': '\x06', '%07': '\x07', '%08': '\x08', '%09': '\x09', | ||||||
|  |   '%0a': '\x0a', '%0A': '\x0a', '%0b': '\x0b', '%0B': '\x0b', '%0c': '\x0c', | ||||||
|  |   '%0C': '\x0c', '%0d': '\x0d', '%0D': '\x0d', '%0e': '\x0e', '%0E': '\x0e', | ||||||
|  |   '%0f': '\x0f', '%0F': '\x0f', '%10': '\x10', '%11': '\x11', '%12': '\x12', | ||||||
|  |   '%13': '\x13', '%14': '\x14', '%15': '\x15', '%16': '\x16', '%17': '\x17', | ||||||
|  |   '%18': '\x18', '%19': '\x19', '%1a': '\x1a', '%1A': '\x1a', '%1b': '\x1b', | ||||||
|  |   '%1B': '\x1b', '%1c': '\x1c', '%1C': '\x1c', '%1d': '\x1d', '%1D': '\x1d', | ||||||
|  |   '%1e': '\x1e', '%1E': '\x1e', '%1f': '\x1f', '%1F': '\x1f', '%20': '\x20', | ||||||
|  |   '%21': '\x21', '%22': '\x22', '%23': '\x23', '%24': '\x24', '%25': '\x25', | ||||||
|  |   '%26': '\x26', '%27': '\x27', '%28': '\x28', '%29': '\x29', '%2a': '\x2a', | ||||||
|  |   '%2A': '\x2a', '%2b': '\x2b', '%2B': '\x2b', '%2c': '\x2c', '%2C': '\x2c', | ||||||
|  |   '%2d': '\x2d', '%2D': '\x2d', '%2e': '\x2e', '%2E': '\x2e', '%2f': '\x2f', | ||||||
|  |   '%2F': '\x2f', '%30': '\x30', '%31': '\x31', '%32': '\x32', '%33': '\x33', | ||||||
|  |   '%34': '\x34', '%35': '\x35', '%36': '\x36', '%37': '\x37', '%38': '\x38', | ||||||
|  |   '%39': '\x39', '%3a': '\x3a', '%3A': '\x3a', '%3b': '\x3b', '%3B': '\x3b', | ||||||
|  |   '%3c': '\x3c', '%3C': '\x3c', '%3d': '\x3d', '%3D': '\x3d', '%3e': '\x3e', | ||||||
|  |   '%3E': '\x3e', '%3f': '\x3f', '%3F': '\x3f', '%40': '\x40', '%41': '\x41', | ||||||
|  |   '%42': '\x42', '%43': '\x43', '%44': '\x44', '%45': '\x45', '%46': '\x46', | ||||||
|  |   '%47': '\x47', '%48': '\x48', '%49': '\x49', '%4a': '\x4a', '%4A': '\x4a', | ||||||
|  |   '%4b': '\x4b', '%4B': '\x4b', '%4c': '\x4c', '%4C': '\x4c', '%4d': '\x4d', | ||||||
|  |   '%4D': '\x4d', '%4e': '\x4e', '%4E': '\x4e', '%4f': '\x4f', '%4F': '\x4f', | ||||||
|  |   '%50': '\x50', '%51': '\x51', '%52': '\x52', '%53': '\x53', '%54': '\x54', | ||||||
|  |   '%55': '\x55', '%56': '\x56', '%57': '\x57', '%58': '\x58', '%59': '\x59', | ||||||
|  |   '%5a': '\x5a', '%5A': '\x5a', '%5b': '\x5b', '%5B': '\x5b', '%5c': '\x5c', | ||||||
|  |   '%5C': '\x5c', '%5d': '\x5d', '%5D': '\x5d', '%5e': '\x5e', '%5E': '\x5e', | ||||||
|  |   '%5f': '\x5f', '%5F': '\x5f', '%60': '\x60', '%61': '\x61', '%62': '\x62', | ||||||
|  |   '%63': '\x63', '%64': '\x64', '%65': '\x65', '%66': '\x66', '%67': '\x67', | ||||||
|  |   '%68': '\x68', '%69': '\x69', '%6a': '\x6a', '%6A': '\x6a', '%6b': '\x6b', | ||||||
|  |   '%6B': '\x6b', '%6c': '\x6c', '%6C': '\x6c', '%6d': '\x6d', '%6D': '\x6d', | ||||||
|  |   '%6e': '\x6e', '%6E': '\x6e', '%6f': '\x6f', '%6F': '\x6f', '%70': '\x70', | ||||||
|  |   '%71': '\x71', '%72': '\x72', '%73': '\x73', '%74': '\x74', '%75': '\x75', | ||||||
|  |   '%76': '\x76', '%77': '\x77', '%78': '\x78', '%79': '\x79', '%7a': '\x7a', | ||||||
|  |   '%7A': '\x7a', '%7b': '\x7b', '%7B': '\x7b', '%7c': '\x7c', '%7C': '\x7c', | ||||||
|  |   '%7d': '\x7d', '%7D': '\x7d', '%7e': '\x7e', '%7E': '\x7e', '%7f': '\x7f', | ||||||
|  |   '%7F': '\x7f', '%80': '\x80', '%81': '\x81', '%82': '\x82', '%83': '\x83', | ||||||
|  |   '%84': '\x84', '%85': '\x85', '%86': '\x86', '%87': '\x87', '%88': '\x88', | ||||||
|  |   '%89': '\x89', '%8a': '\x8a', '%8A': '\x8a', '%8b': '\x8b', '%8B': '\x8b', | ||||||
|  |   '%8c': '\x8c', '%8C': '\x8c', '%8d': '\x8d', '%8D': '\x8d', '%8e': '\x8e', | ||||||
|  |   '%8E': '\x8e', '%8f': '\x8f', '%8F': '\x8f', '%90': '\x90', '%91': '\x91', | ||||||
|  |   '%92': '\x92', '%93': '\x93', '%94': '\x94', '%95': '\x95', '%96': '\x96', | ||||||
|  |   '%97': '\x97', '%98': '\x98', '%99': '\x99', '%9a': '\x9a', '%9A': '\x9a', | ||||||
|  |   '%9b': '\x9b', '%9B': '\x9b', '%9c': '\x9c', '%9C': '\x9c', '%9d': '\x9d', | ||||||
|  |   '%9D': '\x9d', '%9e': '\x9e', '%9E': '\x9e', '%9f': '\x9f', '%9F': '\x9f', | ||||||
|  |   '%a0': '\xa0', '%A0': '\xa0', '%a1': '\xa1', '%A1': '\xa1', '%a2': '\xa2', | ||||||
|  |   '%A2': '\xa2', '%a3': '\xa3', '%A3': '\xa3', '%a4': '\xa4', '%A4': '\xa4', | ||||||
|  |   '%a5': '\xa5', '%A5': '\xa5', '%a6': '\xa6', '%A6': '\xa6', '%a7': '\xa7', | ||||||
|  |   '%A7': '\xa7', '%a8': '\xa8', '%A8': '\xa8', '%a9': '\xa9', '%A9': '\xa9', | ||||||
|  |   '%aa': '\xaa', '%Aa': '\xaa', '%aA': '\xaa', '%AA': '\xaa', '%ab': '\xab', | ||||||
|  |   '%Ab': '\xab', '%aB': '\xab', '%AB': '\xab', '%ac': '\xac', '%Ac': '\xac', | ||||||
|  |   '%aC': '\xac', '%AC': '\xac', '%ad': '\xad', '%Ad': '\xad', '%aD': '\xad', | ||||||
|  |   '%AD': '\xad', '%ae': '\xae', '%Ae': '\xae', '%aE': '\xae', '%AE': '\xae', | ||||||
|  |   '%af': '\xaf', '%Af': '\xaf', '%aF': '\xaf', '%AF': '\xaf', '%b0': '\xb0', | ||||||
|  |   '%B0': '\xb0', '%b1': '\xb1', '%B1': '\xb1', '%b2': '\xb2', '%B2': '\xb2', | ||||||
|  |   '%b3': '\xb3', '%B3': '\xb3', '%b4': '\xb4', '%B4': '\xb4', '%b5': '\xb5', | ||||||
|  |   '%B5': '\xb5', '%b6': '\xb6', '%B6': '\xb6', '%b7': '\xb7', '%B7': '\xb7', | ||||||
|  |   '%b8': '\xb8', '%B8': '\xb8', '%b9': '\xb9', '%B9': '\xb9', '%ba': '\xba', | ||||||
|  |   '%Ba': '\xba', '%bA': '\xba', '%BA': '\xba', '%bb': '\xbb', '%Bb': '\xbb', | ||||||
|  |   '%bB': '\xbb', '%BB': '\xbb', '%bc': '\xbc', '%Bc': '\xbc', '%bC': '\xbc', | ||||||
|  |   '%BC': '\xbc', '%bd': '\xbd', '%Bd': '\xbd', '%bD': '\xbd', '%BD': '\xbd', | ||||||
|  |   '%be': '\xbe', '%Be': '\xbe', '%bE': '\xbe', '%BE': '\xbe', '%bf': '\xbf', | ||||||
|  |   '%Bf': '\xbf', '%bF': '\xbf', '%BF': '\xbf', '%c0': '\xc0', '%C0': '\xc0', | ||||||
|  |   '%c1': '\xc1', '%C1': '\xc1', '%c2': '\xc2', '%C2': '\xc2', '%c3': '\xc3', | ||||||
|  |   '%C3': '\xc3', '%c4': '\xc4', '%C4': '\xc4', '%c5': '\xc5', '%C5': '\xc5', | ||||||
|  |   '%c6': '\xc6', '%C6': '\xc6', '%c7': '\xc7', '%C7': '\xc7', '%c8': '\xc8', | ||||||
|  |   '%C8': '\xc8', '%c9': '\xc9', '%C9': '\xc9', '%ca': '\xca', '%Ca': '\xca', | ||||||
|  |   '%cA': '\xca', '%CA': '\xca', '%cb': '\xcb', '%Cb': '\xcb', '%cB': '\xcb', | ||||||
|  |   '%CB': '\xcb', '%cc': '\xcc', '%Cc': '\xcc', '%cC': '\xcc', '%CC': '\xcc', | ||||||
|  |   '%cd': '\xcd', '%Cd': '\xcd', '%cD': '\xcd', '%CD': '\xcd', '%ce': '\xce', | ||||||
|  |   '%Ce': '\xce', '%cE': '\xce', '%CE': '\xce', '%cf': '\xcf', '%Cf': '\xcf', | ||||||
|  |   '%cF': '\xcf', '%CF': '\xcf', '%d0': '\xd0', '%D0': '\xd0', '%d1': '\xd1', | ||||||
|  |   '%D1': '\xd1', '%d2': '\xd2', '%D2': '\xd2', '%d3': '\xd3', '%D3': '\xd3', | ||||||
|  |   '%d4': '\xd4', '%D4': '\xd4', '%d5': '\xd5', '%D5': '\xd5', '%d6': '\xd6', | ||||||
|  |   '%D6': '\xd6', '%d7': '\xd7', '%D7': '\xd7', '%d8': '\xd8', '%D8': '\xd8', | ||||||
|  |   '%d9': '\xd9', '%D9': '\xd9', '%da': '\xda', '%Da': '\xda', '%dA': '\xda', | ||||||
|  |   '%DA': '\xda', '%db': '\xdb', '%Db': '\xdb', '%dB': '\xdb', '%DB': '\xdb', | ||||||
|  |   '%dc': '\xdc', '%Dc': '\xdc', '%dC': '\xdc', '%DC': '\xdc', '%dd': '\xdd', | ||||||
|  |   '%Dd': '\xdd', '%dD': '\xdd', '%DD': '\xdd', '%de': '\xde', '%De': '\xde', | ||||||
|  |   '%dE': '\xde', '%DE': '\xde', '%df': '\xdf', '%Df': '\xdf', '%dF': '\xdf', | ||||||
|  |   '%DF': '\xdf', '%e0': '\xe0', '%E0': '\xe0', '%e1': '\xe1', '%E1': '\xe1', | ||||||
|  |   '%e2': '\xe2', '%E2': '\xe2', '%e3': '\xe3', '%E3': '\xe3', '%e4': '\xe4', | ||||||
|  |   '%E4': '\xe4', '%e5': '\xe5', '%E5': '\xe5', '%e6': '\xe6', '%E6': '\xe6', | ||||||
|  |   '%e7': '\xe7', '%E7': '\xe7', '%e8': '\xe8', '%E8': '\xe8', '%e9': '\xe9', | ||||||
|  |   '%E9': '\xe9', '%ea': '\xea', '%Ea': '\xea', '%eA': '\xea', '%EA': '\xea', | ||||||
|  |   '%eb': '\xeb', '%Eb': '\xeb', '%eB': '\xeb', '%EB': '\xeb', '%ec': '\xec', | ||||||
|  |   '%Ec': '\xec', '%eC': '\xec', '%EC': '\xec', '%ed': '\xed', '%Ed': '\xed', | ||||||
|  |   '%eD': '\xed', '%ED': '\xed', '%ee': '\xee', '%Ee': '\xee', '%eE': '\xee', | ||||||
|  |   '%EE': '\xee', '%ef': '\xef', '%Ef': '\xef', '%eF': '\xef', '%EF': '\xef', | ||||||
|  |   '%f0': '\xf0', '%F0': '\xf0', '%f1': '\xf1', '%F1': '\xf1', '%f2': '\xf2', | ||||||
|  |   '%F2': '\xf2', '%f3': '\xf3', '%F3': '\xf3', '%f4': '\xf4', '%F4': '\xf4', | ||||||
|  |   '%f5': '\xf5', '%F5': '\xf5', '%f6': '\xf6', '%F6': '\xf6', '%f7': '\xf7', | ||||||
|  |   '%F7': '\xf7', '%f8': '\xf8', '%F8': '\xf8', '%f9': '\xf9', '%F9': '\xf9', | ||||||
|  |   '%fa': '\xfa', '%Fa': '\xfa', '%fA': '\xfa', '%FA': '\xfa', '%fb': '\xfb', | ||||||
|  |   '%Fb': '\xfb', '%fB': '\xfb', '%FB': '\xfb', '%fc': '\xfc', '%Fc': '\xfc', | ||||||
|  |   '%fC': '\xfc', '%FC': '\xfc', '%fd': '\xfd', '%Fd': '\xfd', '%fD': '\xfd', | ||||||
|  |   '%FD': '\xfd', '%fe': '\xfe', '%Fe': '\xfe', '%fE': '\xfe', '%FE': '\xfe', | ||||||
|  |   '%ff': '\xff', '%Ff': '\xff', '%fF': '\xff', '%FF': '\xff' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function encodedReplacer (match) { | ||||||
|  |   return EncodedLookup[match] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const STATE_KEY = 0 | ||||||
|  | const STATE_VALUE = 1 | ||||||
|  | const STATE_CHARSET = 2 | ||||||
|  | const STATE_LANG = 3 | ||||||
|  | 
 | ||||||
|  | function parseParams (str) { | ||||||
|  |   const res = [] | ||||||
|  |   let state = STATE_KEY | ||||||
|  |   let charset = '' | ||||||
|  |   let inquote = false | ||||||
|  |   let escaping = false | ||||||
|  |   let p = 0 | ||||||
|  |   let tmp = '' | ||||||
|  |   const len = str.length | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
 | ||||||
|  |     const char = str[i] | ||||||
|  |     if (char === '\\' && inquote) { | ||||||
|  |       if (escaping) { escaping = false } else { | ||||||
|  |         escaping = true | ||||||
|  |         continue | ||||||
|  |       } | ||||||
|  |     } else if (char === '"') { | ||||||
|  |       if (!escaping) { | ||||||
|  |         if (inquote) { | ||||||
|  |           inquote = false | ||||||
|  |           state = STATE_KEY | ||||||
|  |         } else { inquote = true } | ||||||
|  |         continue | ||||||
|  |       } else { escaping = false } | ||||||
|  |     } else { | ||||||
|  |       if (escaping && inquote) { tmp += '\\' } | ||||||
|  |       escaping = false | ||||||
|  |       if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") { | ||||||
|  |         if (state === STATE_CHARSET) { | ||||||
|  |           state = STATE_LANG | ||||||
|  |           charset = tmp.substring(1) | ||||||
|  |         } else { state = STATE_VALUE } | ||||||
|  |         tmp = '' | ||||||
|  |         continue | ||||||
|  |       } else if (state === STATE_KEY && | ||||||
|  |         (char === '*' || char === '=') && | ||||||
|  |         res.length) { | ||||||
|  |         state = char === '*' | ||||||
|  |           ? STATE_CHARSET | ||||||
|  |           : STATE_VALUE | ||||||
|  |         res[p] = [tmp, undefined] | ||||||
|  |         tmp = '' | ||||||
|  |         continue | ||||||
|  |       } else if (!inquote && char === ';') { | ||||||
|  |         state = STATE_KEY | ||||||
|  |         if (charset) { | ||||||
|  |           if (tmp.length) { | ||||||
|  |             tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), | ||||||
|  |               'binary', | ||||||
|  |               charset) | ||||||
|  |           } | ||||||
|  |           charset = '' | ||||||
|  |         } else if (tmp.length) { | ||||||
|  |           tmp = decodeText(tmp, 'binary', 'utf8') | ||||||
|  |         } | ||||||
|  |         if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } | ||||||
|  |         tmp = '' | ||||||
|  |         ++p | ||||||
|  |         continue | ||||||
|  |       } else if (!inquote && (char === ' ' || char === '\t')) { continue } | ||||||
|  |     } | ||||||
|  |     tmp += char | ||||||
|  |   } | ||||||
|  |   if (charset && tmp.length) { | ||||||
|  |     tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), | ||||||
|  |       'binary', | ||||||
|  |       charset) | ||||||
|  |   } else if (tmp) { | ||||||
|  |     tmp = decodeText(tmp, 'binary', 'utf8') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (res[p] === undefined) { | ||||||
|  |     if (tmp) { res[p] = tmp } | ||||||
|  |   } else { res[p][1] = tmp } | ||||||
|  | 
 | ||||||
|  |   return res | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = parseParams | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 9167: | /***/ 9167: | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										14
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -1061,9 +1061,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@fastify/busboy": { |     "node_modules/@fastify/busboy": { | ||||||
|       "version": "2.0.0", |       "version": "2.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", | ||||||
|       "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", |       "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", | ||||||
|  |       "license": "MIT", | ||||||
|       "engines": { |       "engines": { | ||||||
|         "node": ">=14" |         "node": ">=14" | ||||||
|       } |       } | ||||||
| @ -5584,9 +5585,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/undici": { |     "node_modules/undici": { | ||||||
|       "version": "5.28.4", |       "version": "5.28.5", | ||||||
|       "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", |       "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", | ||||||
|       "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", |       "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", | ||||||
|  |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@fastify/busboy": "^2.0.0" |         "@fastify/busboy": "^2.0.0" | ||||||
|       }, |       }, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user