{"version":3,"sources":["jsdelivr-header.js","/npm/formidable-parser@0.1.0/index.js"],"names":[],"mappings":"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","file":"/npm/formidable-parser@0.1.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/formidable-parser@0.1.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// SPDX-License-Identifier: Apache-2.0 OR MIT\n\n/* eslint-disable promise/prefer-await-to-callbacks */\n/* eslint-disable prefer-const */\n/* eslint-disable no-plusplus */\n/* eslint-disable max-params */\n/* eslint-disable no-bitwise */\n\nimport { FormData } from 'formdata-polyfill/esm.min.js';\n\nlet s = 0;\nconst S = {\n  START_BOUNDARY: s++,\n  HEADER_FIELD_START: s++,\n  HEADER_FIELD: s++,\n  HEADER_VALUE_START: s++,\n  HEADER_VALUE: s++,\n  HEADER_VALUE_ALMOST_DONE: s++,\n  HEADERS_ALMOST_DONE: s++,\n  PART_DATA_START: s++,\n  PART_DATA: s++,\n  END: s++,\n};\n\nlet f = 1;\nconst F = {\n  PART_BOUNDARY: f,\n  LAST_BOUNDARY: (f *= 2),\n};\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nconst lower = (c) => c | 0x20;\n\nconst noop = () => {};\n\nexport class MultipartParser {\n  /**\n   * @param {string} boundary\n   */\n  constructor(boundary) {\n    this.index = 0;\n    this.flags = 0;\n\n    this.onHeaderEnd = noop;\n    this.onHeaderField = noop;\n    this.onHeadersEnd = noop;\n    this.onHeaderValue = noop;\n    this.onPartBegin = noop;\n    this.onPartData = noop;\n    this.onPartEnd = noop;\n    this.onEnd = noop;\n\n    this.boundaryChars = {};\n\n    // eslint-disable-next-line no-param-reassign\n    boundary = `\\r\\n--${boundary}`;\n    const ui8a = new Uint8Array(boundary.length);\n    for (let i = 0; i < boundary.length; i++) {\n      ui8a[i] = boundary.codePointAt(i);\n      this.boundaryChars[ui8a[i]] = true;\n    }\n\n    this.boundary = ui8a;\n    this.lookbehind = new Uint8Array(this.boundary.length + 8);\n    this.state = S.START_BOUNDARY;\n  }\n\n  /**\n   * @param {Uint8Array} data\n   */\n  write(data) {\n    let i = 0;\n    const length_ = data.length;\n    let previousIndex = this.index;\n    let { lookbehind, boundary, boundaryChars, index, state, flags } = this;\n    const boundaryLength = boundary.length;\n    const boundaryEnd = boundaryLength - 1;\n    const bufferLength = data.length;\n    let c;\n    let cl;\n\n    const mark = (name) => {\n      this[`${name}Mark`] = i;\n    };\n\n    const clear = (name) => {\n      delete this[`${name}Mark`];\n    };\n\n    const callback = (callbackSymbol, start, end, ui8a) => {\n      if (start === undefined || start !== end) {\n        this[callbackSymbol](ui8a && ui8a.subarray(start, end));\n      }\n    };\n\n    const dataCallback = (name, shouldClear) => {\n      const markSymbol = `${name}Mark`;\n      if (!(markSymbol in this)) {\n        return;\n      }\n\n      if (shouldClear) {\n        callback(name, this[markSymbol], i, data);\n        delete this[markSymbol];\n      } else {\n        callback(name, this[markSymbol], data.length, data);\n        this[markSymbol] = 0;\n      }\n    };\n\n    for (i = 0; i < length_; i++) {\n      c = data[i];\n\n      switch (state) {\n        case S.START_BOUNDARY:\n          if (index === boundary.length - 2) {\n            if (c === HYPHEN) {\n              flags |= F.LAST_BOUNDARY;\n            } else if (c !== CR) {\n              return;\n            }\n\n            index++;\n            break;\n          } else if (index - 1 === boundary.length - 2) {\n            if (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n              state = S.END;\n              flags = 0;\n            } else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n              index = 0;\n              callback('onPartBegin');\n              state = S.HEADER_FIELD_START;\n            } else {\n              return;\n            }\n\n            break;\n          }\n\n          if (c !== boundary[index + 2]) {\n            index = -2;\n          }\n\n          if (c === boundary[index + 2]) {\n            index++;\n          }\n\n          break;\n        case S.HEADER_FIELD_START:\n          state = S.HEADER_FIELD;\n          mark('onHeaderField');\n          index = 0;\n        // falls through\n        case S.HEADER_FIELD:\n          if (c === CR) {\n            clear('onHeaderField');\n            state = S.HEADERS_ALMOST_DONE;\n            break;\n          }\n\n          index++;\n          if (c === HYPHEN) {\n            break;\n          }\n\n          if (c === COLON) {\n            if (index === 1) {\n              // empty header field\n              return;\n            }\n\n            dataCallback('onHeaderField', true);\n            state = S.HEADER_VALUE_START;\n            break;\n          }\n\n          cl = lower(c);\n          if (cl < A || cl > Z) {\n            return;\n          }\n\n          break;\n        case S.HEADER_VALUE_START:\n          if (c === SPACE) {\n            break;\n          }\n\n          mark('onHeaderValue');\n          state = S.HEADER_VALUE;\n        // falls through\n        case S.HEADER_VALUE:\n          if (c === CR) {\n            dataCallback('onHeaderValue', true);\n            callback('onHeaderEnd');\n            state = S.HEADER_VALUE_ALMOST_DONE;\n          }\n\n          break;\n        case S.HEADER_VALUE_ALMOST_DONE:\n          if (c !== LF) {\n            return;\n          }\n\n          state = S.HEADER_FIELD_START;\n          break;\n        case S.HEADERS_ALMOST_DONE:\n          if (c !== LF) {\n            return;\n          }\n\n          callback('onHeadersEnd');\n          state = S.PART_DATA_START;\n          break;\n        case S.PART_DATA_START:\n          state = S.PART_DATA;\n          mark('onPartData');\n        // falls through\n        case S.PART_DATA:\n          previousIndex = index;\n\n          if (index === 0) {\n            // boyer-moore derrived algorithm to safely skip non-boundary data\n            i += boundaryEnd;\n            while (i < bufferLength && !(data[i] in boundaryChars)) {\n              i += boundaryLength;\n            }\n\n            i -= boundaryEnd;\n            c = data[i];\n          }\n\n          if (index < boundary.length) {\n            if (boundary[index] === c) {\n              if (index === 0) {\n                dataCallback('onPartData', true);\n              }\n\n              index++;\n            } else {\n              index = 0;\n            }\n          } else if (index === boundary.length) {\n            index++;\n            if (c === CR) {\n              // CR = part boundary\n              flags |= F.PART_BOUNDARY;\n            } else if (c === HYPHEN) {\n              // HYPHEN = end boundary\n              flags |= F.LAST_BOUNDARY;\n            } else {\n              index = 0;\n            }\n          } else if (index - 1 === boundary.length) {\n            if (flags & F.PART_BOUNDARY) {\n              index = 0;\n              if (c === LF) {\n                // unset the PART_BOUNDARY flag\n                flags &= ~F.PART_BOUNDARY;\n                callback('onPartEnd');\n                callback('onPartBegin');\n                state = S.HEADER_FIELD_START;\n                break;\n              }\n            } else if (flags & F.LAST_BOUNDARY) {\n              if (c === HYPHEN) {\n                callback('onPartEnd');\n                state = S.END;\n                flags = 0;\n              } else {\n                index = 0;\n              }\n            } else {\n              index = 0;\n            }\n          }\n\n          if (index > 0) {\n            // when matching a possible boundary, keep a lookbehind reference\n            // in case it turns out to be a false lead\n            lookbehind[index - 1] = c;\n          } else if (previousIndex > 0) {\n            // if our boundary turned out to be rubbish, the captured lookbehind\n            // belongs to partData\n            const _lookbehind = new Uint8Array(\n              lookbehind.buffer,\n              lookbehind.byteOffset,\n              lookbehind.byteLength,\n            );\n            callback('onPartData', 0, previousIndex, _lookbehind);\n            previousIndex = 0;\n            mark('onPartData');\n\n            // reconsider the current character even so it interrupted the sequence\n            // it could be the beginning of a new sequence\n            i--;\n          }\n\n          break;\n        case S.END:\n          break;\n        default:\n          throw new Error(`Unexpected state entered: ${state}`);\n      }\n    }\n\n    dataCallback('onHeaderField');\n    dataCallback('onHeaderValue');\n    dataCallback('onPartData');\n\n    // Update properties for the next call\n    this.index = index;\n    this.state = state;\n    this.flags = flags;\n  }\n\n  end() {\n    if (\n      (this.state === S.HEADER_FIELD_START && this.index === 0) ||\n      (this.state === S.PART_DATA && this.index === this.boundary.length)\n    ) {\n      this.onPartEnd();\n    } else if (this.state !== S.END) {\n      throw new Error('MultipartParser.end(): stream ended unexpectedly');\n    }\n  }\n}\n\nfunction _fileName(headerValue) {\n  // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n  const m = headerValue.match(\n    /\\bfilename=(\"(.*?)\"|([^\\s\"(),/:;<=>?@[\\\\\\]{}]+))($|;\\s)/i,\n  );\n  if (!m) {\n    return null;\n  }\n\n  const match = m[2] || m[3] || '';\n  let filename = match.slice(match.lastIndexOf('\\\\') + 1);\n  filename = filename.replace(/%22/g, '\"');\n  filename = filename.replace(/&#(\\d{4});/g, (_, code) =>\n    String.fromCodePoint(code),\n  );\n\n  return filename;\n}\n\nexport async function multipart(req, options = {}) {\n  const ct = req.headers['content-type'];\n\n  if (!/multipart/i.test(ct)) {\n    throw new TypeError('Failed! The parser supports only multipart/form-data');\n  }\n\tif (typeof options.createFile !== 'function') {\n\t\toptions.createFile = (...args) => new options.File(...args);\n\t}\n\n  const m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n\n  if (!m) {\n    throw new TypeError('no or bad content-type header, no multipart boundary');\n  }\n\n  const parser = new MultipartParser(m[1] || m[2]);\n\n  let headerField;\n  let headerValue;\n  let entryValue;\n  let entryName;\n  let contentType;\n  let filename;\n  const entryChunks = [];\n  const formData = new FormData();\n\n  // eslint-disable-next-line node/no-unsupported-features/node-builtins\n  const decoder = new TextDecoder('utf8');\n  decoder.decode();\n\n  const onPartData = (ui8a) => {\n    entryValue += decoder.decode(ui8a, { stream: true });\n  };\n\n  const appendToFile = (ui8a) => {\n    entryChunks.push(ui8a);\n  };\n\n  const appendFileToFormData = () => {\n    const file = options.createFile(filename, entryChunks, {\n      ...options,\n      type: contentType,\n    });\n    formData.append(entryName, file);\n  };\n\n  const appendEntryToFormData = () => {\n    formData.append(entryName, entryValue);\n  };\n\n  parser.onPartBegin = () => {\n    parser.onPartData = onPartData;\n    parser.onPartEnd = appendEntryToFormData;\n\n    headerField = '';\n    headerValue = '';\n    entryValue = '';\n    entryName = '';\n    contentType = '';\n    filename = null;\n    entryChunks.length = 0;\n  };\n\n  parser.onHeaderField = (ui8a) => {\n    headerField += decoder.decode(ui8a, { stream: true });\n  };\n\n  parser.onHeaderValue = (ui8a) => {\n    headerValue += decoder.decode(ui8a, { stream: true });\n  };\n\n  parser.onHeaderEnd = () => {\n    headerValue += decoder.decode();\n    headerField = headerField.toLowerCase();\n\n    if (headerField === 'content-disposition') {\n      // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n      const match = headerValue.match(\n        /\\bname=(\"([^\"]*)\"|([^\\s\"(),/:;<=>?@[\\\\\\]{}]+))/i,\n      );\n\n      if (match) {\n        entryName = match[2] || match[3] || '';\n      }\n\n      filename = _fileName(headerValue);\n\n      if (filename) {\n        parser.onPartData = appendToFile;\n        parser.onPartEnd = appendFileToFormData;\n      }\n    } else if (headerField === 'content-type') {\n      contentType = headerValue;\n    }\n\n    headerValue = '';\n    headerField = '';\n  };\n\n  return {\n    parser,\n\n    async toFormData(settings) {\n      const opts = { request: req, parser, ...settings };\n\n      for await (const chunk of opts.request) {\n        opts.parser.write(chunk);\n      }\n\n      opts.parser.onEnd();\n      opts.parser.end();\n\n      return formData;\n    },\n  };\n}\n\nexport * from 'formdata-polyfill/esm.min.js';\n"]}