{
  "version": 3,
  "sources": ["../../src/workers/v2-multi.ts", "../../src/controllers/constants.ts", "../../src/controllers/multi-tools.ts", "../../src/controllers/path.ts", "../../src/controllers/request-handler-v2.ts", "../../src/controllers/parser.ts"],
  "sourcesContent": ["import ck from 'chalk'\r\nimport selfSigned from 'selfsigned'\r\nimport { existsSync, mkdirSync, rmSync } from 'fs'\r\nimport { createSecureServer, createServer } from 'http2'\r\nimport { join } from 'path'\r\nimport { defaultPaths, globPatterns, isDev } from '../controllers/constants'\r\nimport { startWorker, workerTunnel } from '../controllers/multi-tools'\r\nimport { getModule, globFind, normalizePath } from '../controllers/path'\r\nimport { buildRequestHandlerV2 } from '../controllers/request-handler-v2'\r\n\r\nconst basePath = process.cwd()\r\nconst configPath = await globFind(basePath, globPatterns.configFile)\r\nconst config = ((await getModule(configPath)).default || {}) as IntREST.Config\r\n\r\nconst bootstrapPath = await globFind(\r\n  basePath,\r\n  defaultPaths.compiledFolder,\r\n  defaultPaths.compiledRoutes,\r\n  globPatterns.bootstrapCompiled,\r\n)\r\nconst bootstrap = await getModule(bootstrapPath)\r\nconst bootstrapHandler = bootstrap.bootstrap || bootstrap.default\r\nif (bootstrapHandler && typeof bootstrapHandler === 'function') {\r\n  console.log('\\n    Bootstrapping...\\n')\r\n  await bootstrapHandler(config)\r\n}\r\n\r\nconst appPort = config.port || +(process.env.PORT || 4000)\r\nconst appTempPath = normalizePath(\r\n  join(basePath, config.paths?.uploadTemp || '.tmp'),\r\n)\r\n\r\nif (existsSync(appTempPath)) {\r\n  rmSync(appTempPath, { recursive: true })\r\n}\r\nmkdirSync(appTempPath, { recursive: true })\r\nstartWorker(config.limits?.minWorkerPoolSize || 5)\r\n\r\nconst ssl = selfSigned.generate()\r\nconst server = isDev()\r\n  ? createSecureServer(\r\n      {\r\n        cert: ssl.cert,\r\n        key: ssl.private,\r\n        keepAlive: true,\r\n        keepAliveInitialDelay: 5000,\r\n      },\r\n      buildRequestHandlerV2(workerTunnel),\r\n    )\r\n  : createServer(buildRequestHandlerV2(workerTunnel))\r\n\r\nserver.listen(appPort, () => {\r\n  console.log(`\\n    Server running on port %s`, ck.yellow(appPort))\r\n  console.log(\r\n    `    You can access the server at %s or %s\\n`,\r\n    ck.yellow(`https://localhost:${appPort}`),\r\n    ck.yellow(`https://127.0.0.1:${appPort}`),\r\n  )\r\n})\r\n", "export const isDev = () => process.env.NODE_ENV === 'development'\r\n\r\nexport const globPatterns = {\r\n  env: ['.env', '.env{.local,.development,.production}'],\r\n  entryFolder: ['routes', 'src/routes'],\r\n  assetsFolder: ['assets', 'src/assets'],\r\n  staticFolder: ['static', 'src/static', 'public', 'src/public'],\r\n  configFile: 'intrest.config.{mjs,cjs,js}',\r\n  envFile: '.env{.local,.development,.production}',\r\n  bootstrapEntry: 'bootstrap.ts',\r\n  bootstrapCompiled: 'bootstrap.mjs',\r\n  entryPoints: '**/{route,middleware,validation}.ts',\r\n  identityPoints: '**/__identity.mjs',\r\n  middlewarePoints: '**/middleware.mjs',\r\n  routeFile: 'route.{mjs,cjs,js,ts}',\r\n  middlewareFile: 'middleware.{mjs,cjs,js,ts}',\r\n} as const\r\n\r\nexport const regexpPatterns = {\r\n  env: /^\\.env(?:\\.[a-z-_]*)?$/,\r\n  config: /^intrest\\.config\\.[mc]?js$/,\r\n  bootstrap: /^bootstrap\\.ts$/,\r\n  entry: /(?:^|\\/)(?:route|middleware|validation)\\.ts$/,\r\n  observable: /(?:route)\\.ts$/,\r\n  reservedChars: /(?:[.*+?^=!:${}()|\\[\\]\\/\\\\])/g,\r\n  startSlashesOrNot: /^[\\\\\\/]*/,\r\n  endSlashesOrNot: /[\\\\\\/]*$/,\r\n  multiSlashes: /[\\\\\\/]+/g,\r\n  isBusboyContentType: /^(?:x-www-form-urlencoded|multipart\\/form-data.*)$/i,\r\n  isJSONContentType: /^application\\/json$/i,\r\n  isXMLContentType: /^application\\/xml$/i,\r\n  isAcceptableContentType:\r\n    /^(?:x-www-form-urlencoded|multipart\\/form-data.*|application\\/(?:json|xml))$/i,\r\n} as const\r\n\r\nexport const defaultPaths = {\r\n  compiledFolder: '.intrest',\r\n  compiledRoutes: 'routes',\r\n  workerMultiWorker: 'multi.mjs',\r\n  workerSingleWorker: 'single.mjs',\r\n  workerRouter: 'router.mjs',\r\n  routeIdentity: '__identity.mjs',\r\n} as const\r\n\r\nexport const defaultOutputPaths = {\r\n  vercel: '.vercel/output',\r\n}\r\n", "import { randomUUID } from 'crypto'\r\nimport { Worker } from 'worker_threads'\r\nimport { defaultPaths } from './constants'\r\nimport { join } from 'path'\r\nimport { normalizePath } from './path'\r\n\r\nfunction workerURL(path: string) {\r\n  return new URL(normalizePath(join('.', path)), import.meta.url)\r\n}\r\n\r\ninterface WorkerPool {\r\n  weight: number\r\n  worker: Worker\r\n  workerId: number\r\n}\r\n\r\nconst workerPool = new Map<number, WorkerPool>()\r\n\r\n/**\r\n * Initialize the worker pool\r\n */\r\nexport async function startWorker(size: number) {\r\n  for (let i = 0; i < size; i++) {\r\n    const worker = new Worker(workerURL(defaultPaths.workerRouter), {\r\n      env: process.env,\r\n    })\r\n    worker.setMaxListeners(Infinity)\r\n    workerPool.set(worker.threadId, {\r\n      weight: 0,\r\n      worker,\r\n      workerId: worker.threadId,\r\n    })\r\n  }\r\n}\r\n\r\nexport async function stopWorkers() {\r\n  for (const worker of workerPool.values()) {\r\n    worker.worker.terminate()\r\n  }\r\n  workerPool.clear()\r\n}\r\n\r\nexport async function workerTunnel(\r\n  { basePath, data, config }: Omit<WorkerProps, 'requestId'>,\r\n  cb: (state: ResponseState, data: ResponseData) => void,\r\n) {\r\n  return new Promise<void>((resolve, reject) => {\r\n    // Generate a random request id\r\n    const requestId = randomUUID()\r\n    // Get the list of workers\r\n    const workerList = Array.from(workerPool.values())\r\n    // Try to find a worker with weight 0\r\n    let workerItem = workerList.find((w) => w.weight === 0)\r\n    let worker: Worker\r\n    let workerId: number\r\n\r\n    // If no worker with weight 0 is found\r\n    // and the worker pool size is less than the max size,\r\n    // find a worker with the lowest weight\r\n    if (\r\n      !workerItem &&\r\n      workerList.length < (config.limits?.maxWorkerPoolSize || 20)\r\n    ) {\r\n      // Create a new worker\r\n      const worker = new Worker(workerURL(defaultPaths.workerRouter), {\r\n        env: process.env,\r\n      })\r\n      worker.setMaxListeners(Infinity)\r\n      workerItem = {\r\n        weight: 0,\r\n        worker,\r\n        workerId: worker.threadId,\r\n      }\r\n      // Add the worker to the worker pool\r\n      workerPool.set(worker.threadId, workerItem)\r\n    } else if (!workerItem) {\r\n      workerItem = workerList.reduce((a, b) => (a.weight < b.weight ? a : b))\r\n    }\r\n\r\n    // Increase the worker weight, because it is busy with a request\r\n    workerItem.weight++\r\n    worker = workerItem.worker\r\n    workerId = workerItem.workerId\r\n\r\n    // Handle worker exit, if a catastrophic error occurs\r\n    const handleExit = (code: number) => {\r\n      workerPool.delete(workerId)\r\n      worker.off('exit', handleExit)\r\n      reject(new Error(`Worker stopped with exit code ${code}`))\r\n    }\r\n    worker.once('exit', handleExit)\r\n\r\n    // Handle worker error, if a catastrophic error occurs\r\n    const handleError = (err: Error) => {\r\n      reject(err)\r\n      workerItem && workerItem.weight--\r\n      worker.off('error', handleError)\r\n      worker.off('exit', handleExit)\r\n    }\r\n    worker.once('error', handleError)\r\n\r\n    // Handle worker message, and call the callback function if the request id matches\r\n    const handleMessage = (r: TransferResponse) => {\r\n      if (r.requestId !== requestId) return\r\n\r\n      cb(r.state, r.data)\r\n      if (r.state === 'end') {\r\n        workerItem && workerItem.weight--\r\n        worker.off('message', handleMessage)\r\n        worker.off('error', handleError)\r\n        worker.off('exit', handleExit)\r\n        resolve()\r\n      }\r\n    }\r\n    worker.on('message', handleMessage)\r\n    // Send the data to the worker router\r\n    worker.postMessage({\r\n      data,\r\n      basePath,\r\n      config,\r\n      requestId,\r\n    })\r\n  })\r\n}\r\n", "import { glob } from 'glob'\r\nimport { join, normalize } from 'path'\r\nimport { pathToFileURL } from 'url'\r\nimport { globPatterns, isDev } from './constants'\r\n\r\n/**\r\n * Normalize the path and replace all backslash with slash\r\n *\r\n * @param pathname\r\n * @returns\r\n */\r\nexport function normalizePath(pathname: string) {\r\n  return normalize(pathname).replace(/[\\/\\\\]+/g, '/')\r\n}\r\n\r\n/**\r\n * Get the module from the given path\r\n * If the path is not given or the module is not found, return empty object\r\n */\r\nexport async function getModule(configPath?: string) {\r\n  if (!configPath) return {} as Record<string, any>\r\n  const configURL = pathToFileURL(configPath)\r\n  configURL.searchParams.set('update', Date.now().toString())\r\n  try {\r\n    return (\r\n      (await import(configURL.toString()).then(\r\n        (m) => m as Record<string, any>,\r\n      )) || {}\r\n    )\r\n  } catch (err) {\r\n    return {} as Record<string, any>\r\n  }\r\n}\r\n\r\n/**\r\n * Find the first file that match the glob pattern\r\n */\r\nexport async function globFind(\r\n  ...pattern: string[]\r\n): Promise<string | undefined> {\r\n  const res = await glob(normalizePath(join(...pattern)), {\r\n    ignore: ['**/node_modules/**'],\r\n    windowsPathsNoEscape: true,\r\n  })\r\n  return res[0] && normalizePath(res[0])\r\n}\r\n\r\n/**\r\n * Find the first file that match the glob pattern list\r\n */\r\nexport async function globFindList(\r\n  ...pattern: string[][]\r\n): Promise<string | undefined> {\r\n  const list = pattern.map((p) => normalizePath(join(...p)))\r\n  const res = await glob(list, {\r\n    ignore: ['**/node_modules/**'],\r\n    windowsPathsNoEscape: true,\r\n  })\r\n  return res[0] && normalizePath(res[0])\r\n}\r\n\r\n/**\r\n * Find all files that match the glob pattern\r\n */\r\nexport async function globFindAll(...pattern: string[]): Promise<string[]> {\r\n  const res = await glob(normalizePath(join(...pattern)), {\r\n    ignore: ['**/node_modules/**'],\r\n    windowsPathsNoEscape: true,\r\n  })\r\n  return res.map(normalizePath)\r\n}\r\n\r\n/**\r\n * Find all files that match the glob pattern list\r\n */\r\nexport async function globFindAllList(\r\n  ...pattern: string[][]\r\n): Promise<string[]> {\r\n  const list = pattern.map((p) => normalizePath(join(...p)))\r\n  const res = await glob(list.reverse(), {\r\n    ignore: ['**/node_modules/**'],\r\n    windowsPathsNoEscape: true,\r\n  })\r\n  return res.map(normalizePath)\r\n}\r\n\r\n/**\r\n * Escape the path with the given escape string\r\n */\r\nexport function escapePath(pathname: string, ...escape: string[]) {\r\n  return normalizePath(pathname)\r\n    .replace(normalizePath(join(...escape)), '')\r\n    .replace(/^\\//, '')\r\n}\r\n\r\n/**\r\n * Clear the extension of the path\r\n */\r\nexport function clearExtension(path: string) {\r\n  return normalizePath(path).replace(/\\.[a-z0-9]+$/i, '')\r\n}\r\n\r\n/**\r\n * Find the list of env files that match the glob pattern\r\n * inside the given base path\r\n */\r\nexport async function findEnvPaths(basePath: string) {\r\n  return globFindAllList(...globPatterns.env.map((p) => [basePath, p]))\r\n}\r\n\r\n/**\r\n * Get the first env file that match the glob pattern\r\n * inside the given base path\r\n */\r\nexport async function getEnvPath(basePath: string) {\r\n  return (await findEnvPaths(basePath))[0] as string | undefined\r\n}\r\n\r\n/**\r\n * Find the app folder that match the glob pattern\r\n * inside the given base path\r\n */\r\nexport async function getFolderPath(\r\n  basePath: string,\r\n  possibleFolders: readonly string[],\r\n) {\r\n  return (\r\n    (await globFindAllList(...possibleFolders.map((p) => [basePath, p])))[0] ||\r\n    possibleFolders[1]\r\n  )\r\n}\r\n\r\n/**\r\n * Add the update query to the module path for development\r\n * to prevent the module from being cached\r\n */\r\nexport function encapsulateModule(v: string) {\r\n  if (!isDev()) return v\r\n  return `${v}?update=${Date.now()}`\r\n}\r\n", "import busboy from 'busboy'\r\nimport ck from 'chalk'\r\nimport concat from 'concat-stream'\r\nimport cookie from 'cookie'\r\nimport { randomUUID } from 'crypto'\r\nimport { XMLParser, XMLValidator } from 'fast-xml-parser'\r\nimport { createWriteStream, rmSync } from 'fs'\r\nimport { StatusCodes, getReasonPhrase } from 'http-status-codes'\r\nimport type { Http2ServerRequest, Http2ServerResponse } from 'http2'\r\nimport _ from 'lodash'\r\nimport ms from 'ms'\r\nimport { join } from 'path'\r\nimport { performance } from 'perf_hooks'\r\nimport { globPatterns, isDev, regexpPatterns } from './constants'\r\nimport {\r\n  parseDecompressBuffer,\r\n  parseStringBytesToNumber,\r\n  parseStringToAutoDetectValue,\r\n} from './parser'\r\nimport { getModule, globFind, normalizePath } from './path'\r\n\r\ninterface TunnelFunction {\r\n  (\r\n    params: Omit<WorkerProps, 'requestId'>,\r\n    endCallback: (state: ResponseState, data: ResponseData) => void,\r\n  ): Promise<void>\r\n}\r\n\r\nfunction debugRequest(\r\n  startRequestTime: number,\r\n  method: string,\r\n  path: string,\r\n  status: number = 200,\r\n) {\r\n  console.debug(\r\n    '%s(%s - %s) - %s %s',\r\n    ck.yellow(method),\r\n    ck.green(status),\r\n    getReasonPhrase(status),\r\n    ck.bold(path),\r\n    ck.cyan(`${(performance.now() - startRequestTime).toPrecision(5)}ms`),\r\n  )\r\n}\r\n\r\nexport function buildRequestHandlerV2(tunnel: TunnelFunction) {\r\n  return async function requestHandler(\r\n    req: Http2ServerRequest,\r\n    res: Http2ServerResponse,\r\n  ) {\r\n    // Get the root path of the project\r\n    const basePath = process.cwd()\r\n    // Try find the config module\r\n    const configPath = await globFind(basePath, globPatterns.configFile)\r\n    const config = ((await getModule(configPath)).default ||\r\n      {}) as IntREST.Config\r\n    // Get the temp path for upload files\r\n    const appTempPath = normalizePath(\r\n      join(basePath, config.paths?.uploadTemp || '.tmp'),\r\n    )\r\n    // Get the request method, path, query and content type\r\n    const method = (req.method?.toUpperCase() ||\r\n      'GET') as IntREST.RequestMethods\r\n    const [prePath, preQuery] = (req.url || '/').split('?')\r\n    const path = decodeURIComponent(prePath)\r\n    const query = preQuery || ''\r\n    const contentType = req.headers['content-type'] || 'application/json'\r\n    // Prepare origin for CORS\r\n    const pureOrigin = req.headers.origin || req.headers.host || ''\r\n    const ipOrigin = req.socket.remoteAddress\r\n    const origin = pureOrigin.replace(/^[a-z]+:\\/\\//, '')\r\n    const originWithProtocol = /^[a-z]+:\\/\\//.test(pureOrigin)\r\n      ? pureOrigin\r\n      : pureOrigin.includes('localhost') || isDev()\r\n      ? `http://${pureOrigin || 'localhost'}`\r\n      : pureOrigin\r\n      ? `https://${pureOrigin}`\r\n      : '*'\r\n    // Validate allowOrigin\r\n    if (config.limits?.allowOrigin && !isDev()) {\r\n      const allowOrigin = (\r\n        Array.isArray(config.limits.allowOrigin)\r\n          ? config.limits.allowOrigin\r\n          : [config.limits.allowOrigin]\r\n      ).map((d) => d.replace(/^[a-z]+:\\/\\//, ''))\r\n      const allowOriginItem = allowOrigin.find((o) => origin.endsWith(o))\r\n      if (allowOriginItem) {\r\n        res.setHeader('Access-Control-Allow-Origin', allowOriginItem)\r\n      } else {\r\n        res.setHeader('Access-Control-Allow-Origin', '*')\r\n      }\r\n    } else {\r\n      res.setHeader('Access-Control-Allow-Origin', originWithProtocol)\r\n    }\r\n    // Set default headers\r\n    res.setHeader('Server', 'IntREST')\r\n    res.setHeader('Accept', [\r\n      'application/json',\r\n      'application/xml',\r\n      'x-www-form-urlencoded',\r\n      'multipart/form-data',\r\n    ])\r\n    res.setHeader('Accept-Encoding', ['gzip', 'x-gzip', 'deflate', 'identity'])\r\n    res.setHeader('Access-Control-Allow-Methods', [\r\n      'GET',\r\n      'POST',\r\n      'PUT',\r\n      'PATCH',\r\n      'DELETE',\r\n      'OPTIONS',\r\n    ])\r\n    res.setHeader('Access-Control-Allow-Headers', [\r\n      'Content-Length',\r\n      'Content-Type',\r\n      'Authorization',\r\n      'Range',\r\n      '*',\r\n      ...(config.limits?.allowHeaders || []),\r\n    ])\r\n    res.setHeader('Access-Control-Allow-Credentials', 'true')\r\n    res.setHeader('Access-Control-Max-Age', '86400')\r\n    res.setHeader('Accept-Ranges', 'bytes')\r\n    res.setHeader('Connection', 'keep-alive')\r\n    res.setHeader('Keep-Alive', ['timeout=5', 'max=30'])\r\n    // Start the request time\r\n    const startRequestTime = performance.now()\r\n    if (/^options$/i.test(method)) {\r\n      res.statusCode = StatusCodes.NO_CONTENT\r\n      res.end()\r\n      return\r\n    }\r\n    // Check if the content type is acceptable\r\n    if (!regexpPatterns.isAcceptableContentType.test(contentType)) {\r\n      res.writeHead(StatusCodes.UNSUPPORTED_MEDIA_TYPE, {\r\n        'Content-Type': 'application/json',\r\n      })\r\n      debugRequest(\r\n        startRequestTime,\r\n        method,\r\n        path,\r\n        StatusCodes.UNSUPPORTED_MEDIA_TYPE,\r\n      )\r\n      return res.end(\r\n        JSON.stringify({\r\n          message:\r\n            config.messages?.UNSUPPORTED_MEDIA_TYPE || 'Unsupported media type',\r\n        }),\r\n      )\r\n    }\r\n    let body = {} as Record<string, any>\r\n    // Check if the body size is acceptable\r\n    const bodySize =\r\n      (req.headers['content-length'] &&\r\n        parseInt(req.headers['content-length'])) ||\r\n      0\r\n    const maxBodySize = parseStringBytesToNumber(\r\n      config.limits?.bodyMaxSize || '10mb',\r\n    )\r\n    if (bodySize > maxBodySize) {\r\n      res.writeHead(StatusCodes.REQUEST_TOO_LONG, {\r\n        'Content-Type': 'application/json',\r\n      })\r\n      debugRequest(startRequestTime, method, path, StatusCodes.REQUEST_TOO_LONG)\r\n      return res.end(\r\n        JSON.stringify({\r\n          message:\r\n            config.messages?.REQUEST_TOO_LONG || 'Request entity too large',\r\n        }),\r\n      )\r\n    }\r\n    const filesToBeRemoved: string[] = []\r\n    // Parse the body if the method is not GET\r\n    if (!/^get$/i.test(method)) {\r\n      // x-www-form-urlencoded and multipart/form-data\r\n      try {\r\n        if (regexpPatterns.isBusboyContentType.test(contentType)) {\r\n          await new Promise<void>((resolve, reject) => {\r\n            const bb = busboy({ headers: req.headers })\r\n            bb.on('file', (name, file, info) => {\r\n              const { filename, encoding, mimeType: mimetype } = info\r\n              const fileHash = randomUUID()\r\n              const filePath = normalizePath(join(appTempPath, fileHash))\r\n              const fileMetadata = {\r\n                absolutePath: filePath,\r\n                filename,\r\n                encoding,\r\n                mimetype,\r\n              } as IntREST.FileMetadata\r\n              _.set(body, name, fileMetadata)\r\n              filesToBeRemoved.push(filePath)\r\n              const fileWriter = createWriteStream(filePath, {\r\n                flags: 'w',\r\n              })\r\n              file.pipe(fileWriter, {\r\n                end: true,\r\n              })\r\n            })\r\n            bb.on('field', (name, val) => {\r\n              _.set(body, name, parseStringToAutoDetectValue(val))\r\n            })\r\n            bb.on('close', resolve)\r\n            bb.on('error', reject)\r\n            req.pipe(bb, {\r\n              end: true,\r\n            })\r\n          })\r\n        } else {\r\n          // application/json and application/xml\r\n          const buffer = await new Promise<Buffer>((resolve) => {\r\n            const writer = concat(resolve)\r\n            req.pipe(writer)\r\n          })\r\n          const encoding = req.headers['content-encoding'] || 'identity'\r\n          const bodyString =\r\n            (\r\n              await parseDecompressBuffer(\r\n                buffer,\r\n                encoding.split(/, */) as IntREST.RequestEncoding[],\r\n              )\r\n            ).toString() || '{}' // default to empty object\r\n          if (regexpPatterns.isJSONContentType.test(contentType)) {\r\n            body = JSON.parse(bodyString)\r\n          } else {\r\n            // is XML Content-Type\r\n            const parser = new XMLParser({\r\n              ignoreAttributes: false,\r\n              allowBooleanAttributes: true,\r\n              attributeNamePrefix: '',\r\n              attributesGroupName: '$attributes',\r\n              commentPropName: '$comment',\r\n              cdataPropName: '$cdata',\r\n              textNodeName: '$text',\r\n              alwaysCreateTextNode: true,\r\n              parseTagValue: true,\r\n              unpairedTags: ['meta', 'link', 'img', 'br', 'hr', 'input'],\r\n            })\r\n            if (!XMLValidator.validate(bodyString)) {\r\n              throw new Error('Invalid XML')\r\n            }\r\n            body = parser.parse(bodyString)\r\n          }\r\n        }\r\n      } catch (err: any) {\r\n        res.writeHead(StatusCodes.BAD_REQUEST, {\r\n          'Content-Type': 'application/json',\r\n        })\r\n        debugRequest(startRequestTime, method, path, StatusCodes.BAD_REQUEST)\r\n        return res.end(\r\n          JSON.stringify({\r\n            message: 'Invalid body',\r\n            error: err.message || err.toString(),\r\n          }),\r\n        )\r\n      }\r\n    }\r\n    const cookies = cookie.parse(req.headers.cookie || '')\r\n    try {\r\n      await tunnel(\r\n        {\r\n          basePath,\r\n          config,\r\n          data: {\r\n            method,\r\n            path,\r\n            custom: {},\r\n            headers: req.headers,\r\n            cookies,\r\n            body,\r\n            query,\r\n            origin: {\r\n              url:\r\n                originWithProtocol === '*'\r\n                  ? undefined\r\n                  : new URL(originWithProtocol),\r\n              ip: ipOrigin,\r\n            },\r\n          },\r\n        },\r\n        (state, data) => {\r\n          if (state === 'cookie') {\r\n            const { name, value, options } = data as ResponseDataMap['cookie']\r\n            if (options?.maxAge && typeof options?.maxAge === 'string') {\r\n              options.maxAge = ms(options.maxAge)\r\n            }\r\n            res.setHeader(\r\n              'Set-Cookie',\r\n              cookie.serialize(name, value, options as any),\r\n            )\r\n          } else if (state === 'clear-cookie') {\r\n            const { name, options } = data as ResponseDataMap['clear-cookie']\r\n            if (options?.maxAge && typeof options?.maxAge === 'string') {\r\n              options.maxAge = ms(options.maxAge)\r\n            }\r\n            res.setHeader(\r\n              'Set-Cookie',\r\n              cookie.serialize(name, '', options as any),\r\n            )\r\n          } else if (state === 'set') {\r\n            const [name, value] = data as ResponseDataMap['set']\r\n            res.setHeader(name, value || '')\r\n          } else if (state === 'write') {\r\n            const buffer = data as ResponseDataMap['write']\r\n            res.write(buffer)\r\n          } else if (state === 'status') {\r\n            res.statusCode = data as ResponseDataMap['status']\r\n          } else if (state === 'end') {\r\n            if (\r\n              filesToBeRemoved.length &&\r\n              config.removeUploadFilesAfterResponse\r\n            ) {\r\n              for (const file of filesToBeRemoved) {\r\n                try {\r\n                  rmSync(file)\r\n                } catch (err: any) {\r\n                  console.error(`Error removing file ${file}`, err.message)\r\n                }\r\n              }\r\n            }\r\n            debugRequest(startRequestTime, method, path, res.statusCode)\r\n            res.end()\r\n          }\r\n        },\r\n      )\r\n    } catch (err) {\r\n      console.error(err)\r\n      res.writeHead(StatusCodes.INTERNAL_SERVER_ERROR, {\r\n        'Content-Type': 'application/json',\r\n      })\r\n      debugRequest(\r\n        startRequestTime,\r\n        method,\r\n        path,\r\n        StatusCodes.INTERNAL_SERVER_ERROR,\r\n      )\r\n      return res.end(\r\n        JSON.stringify({\r\n          message:\r\n            config.messages?.INTERNAL_SERVER_ERROR || 'Internal server error',\r\n        }),\r\n      )\r\n    }\r\n  }\r\n}\r\n", "import type { Readable } from 'stream'\nimport {\n  createDeflate,\n  createGunzip,\n  createGzip,\n  createInflate,\n  deflate,\n  gunzip,\n  gzip,\n  inflate,\n} from 'zlib'\n\n/**\n * Parse string bytes to number\n *  1kb = 1024 bytes\n *  1mb = 1048576 bytes\n *  1gb = 1073741824 bytes\n *  1tb = 1099511627776 bytes\n *\n * @param bytes\n * @returns\n */\nexport function parseStringBytesToNumber(bytes: string | number): number {\n  if (typeof bytes !== 'string') return bytes\n\n  const [, size, unit] = bytes.match(/^(\\d+)([kmgt]b?)$/i) || []\n  if (!size || !unit) return 0\n  const sizeNumber = parseInt(size)\n  if (isNaN(sizeNumber)) return 0\n  switch (unit.toLowerCase()) {\n    case 'tb':\n      return sizeNumber * 1024 * 1024 * 1024 * 1024\n    case 'gb':\n      return sizeNumber * 1024 * 1024 * 1024\n    case 'mb':\n      return sizeNumber * 1024 * 1024\n    case 'kb':\n      return sizeNumber * 1024\n    default:\n      return sizeNumber\n  }\n}\n\n/**\n * If detect string is number or boolean, parse it to number or boolean\n */\nexport function parseStringToAutoDetectValue(val?: string | null) {\n  switch (true) {\n    case val == null:\n      return undefined\n    case /^(no|n|false|f|off)$/i.test(val!):\n      return false\n    case /^(yes|y|true|t|on)$/i.test(val!):\n      return true\n    case !isNaN(parseFloat(val!)):\n      return parseFloat(val!)\n    default:\n      return val\n  }\n}\n\n/**\n * Decompress buffer with gzip and/or deflate encoding\n *\n * @param data\n * @param encoding\n * @returns\n */\nexport async function parseDecompressBuffer(\n  data: Buffer,\n  encoding: IntREST.RequestEncoding[] = ['identity'],\n) {\n  let buffer = data\n  for (const enc of encoding) {\n    if (/^gzip$/i.test(enc)) {\n      buffer = await new Promise<Buffer>((resolve, reject) => {\n        gunzip(buffer, (err, res) => {\n          if (err) return reject(err)\n          resolve(res)\n        })\n      })\n    } else if (/^deflate$/i.test(enc)) {\n      buffer = await new Promise<Buffer>((resolve, reject) => {\n        inflate(buffer, (err, res) => {\n          if (err) return reject(err)\n          resolve(res)\n        })\n      })\n    }\n  }\n  return buffer\n}\n\n/**\n * Compress buffer with gzip and/or deflate encoding\n *\n * @param data\n * @param encoding\n * @returns\n */\nexport async function parseCompressBuffer(\n  data: Buffer,\n  encoding: IntREST.RequestEncoding[] = ['identity'],\n) {\n  let buffer = data\n  for (const enc of encoding) {\n    if (/^gzip$/i.test(enc)) {\n      buffer = await new Promise<Buffer>((resolve, reject) => {\n        gzip(buffer, (err, res) => {\n          if (err) return reject(err)\n          resolve(res)\n        })\n      })\n    } else if (/^deflate$/i.test(enc)) {\n      buffer = await new Promise<Buffer>((resolve, reject) => {\n        deflate(buffer, (err, res) => {\n          if (err) return reject(err)\n          resolve(res)\n        })\n      })\n    }\n  }\n  return buffer\n}\n\n/**\n * Decompress stream piping with gzip and/or deflate encoding\n *\n * @param data\n * @param encoding\n * @returns\n */\nexport async function parseDecompressStream(\n  data: Readable,\n  encoding: IntREST.RequestEncoding[] = ['identity'],\n) {\n  let stream = data\n  for (const enc of encoding) {\n    if (/^gzip$/i.test(enc)) {\n      stream = stream.pipe(createGunzip())\n    } else if (/^deflate$/i.test(enc)) {\n      stream = stream.pipe(createInflate())\n    }\n  }\n  return stream\n}\n\n/**\n * Compress stream piping with gzip and/or deflate encoding\n *\n * @param data\n * @param encoding\n * @returns\n */\nexport async function parseCompressStream(\n  data: Readable,\n  encoding: IntREST.RequestEncoding[] = ['identity'],\n) {\n  let stream = data\n  for (const enc of encoding) {\n    if (/^gzip$/i.test(enc)) {\n      stream = stream.pipe(createGzip())\n    } else if (/^deflate$/i.test(enc)) {\n      stream = stream.pipe(createDeflate())\n    }\n  }\n  return stream\n}\n"],
  "mappings": "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",
  "names": ["ck", "selfSigned", "existsSync", "mkdirSync", "rmSync", "createSecureServer", "createServer", "join", "isDev", "globPatterns", "regexpPatterns", "defaultPaths", "randomUUID", "Worker", "join", "glob", "join", "normalize", "pathToFileURL", "normalizePath", "pathname", "normalize", "getModule", "configPath", "configURL", "pathToFileURL", "m", "globFind", "pattern", "res", "glob", "join", "workerURL", "path", "normalizePath", "join", "workerPool", "startWorker", "size", "i", "worker", "Worker", "defaultPaths", "workerTunnel", "basePath", "data", "config", "cb", "resolve", "reject", "requestId", "randomUUID", "workerList", "workerPool", "workerItem", "w", "worker", "workerId", "Worker", "workerURL", "defaultPaths", "a", "b", "handleExit", "code", "handleError", "err", "handleMessage", "r", "busboy", "ck", "concat", "cookie", "randomUUID", "XMLParser", "XMLValidator", "createWriteStream", "rmSync", "StatusCodes", "getReasonPhrase", "_", "ms", "join", "performance", "createDeflate", "createGunzip", "createGzip", "createInflate", "deflate", "gunzip", "gzip", "inflate", "parseStringBytesToNumber", "bytes", "size", "unit", "sizeNumber", "parseStringToAutoDetectValue", "val", "parseDecompressBuffer", "data", "encoding", "buffer", "enc", "resolve", "reject", "err", "res", "debugRequest", "startRequestTime", "method", "path", "status", "ck", "getReasonPhrase", "performance", "buildRequestHandlerV2", "tunnel", "req", "res", "basePath", "configPath", "globFind", "globPatterns", "config", "getModule", "appTempPath", "normalizePath", "join", "prePath", "preQuery", "query", "contentType", "pureOrigin", "ipOrigin", "origin", "originWithProtocol", "isDev", "allowOriginItem", "d", "o", "StatusCodes", "regexpPatterns", "body", "bodySize", "maxBodySize", "parseStringBytesToNumber", "filesToBeRemoved", "resolve", "reject", "bb", "busboy", "name", "file", "info", "filename", "encoding", "mimetype", "fileHash", "randomUUID", "filePath", "fileMetadata", "_", "fileWriter", "createWriteStream", "val", "parseStringToAutoDetectValue", "buffer", "writer", "concat", "bodyString", "parseDecompressBuffer", "parser", "XMLParser", "XMLValidator", "err", "cookies", "cookie", "state", "data", "value", "options", "ms", "rmSync", "basePath", "configPath", "globFind", "globPatterns", "config", "getModule", "bootstrapPath", "defaultPaths", "bootstrap", "bootstrapHandler", "appPort", "appTempPath", "normalizePath", "join", "existsSync", "rmSync", "mkdirSync", "startWorker", "ssl", "selfSigned", "server", "isDev", "createSecureServer", "buildRequestHandlerV2", "workerTunnel", "createServer", "ck"]
}
