{"version":3,"sources":["jsdelivr-header.js","/npm/servie-http@2.0.1/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,oECNA,MAAA,KAAA,QAAA,QACA,OAAA,QAAA,oBACA,SAAA,QAAA,sBAEA,sBAAA,QAAA,uBACA,sBAAA,QAAA,uBAYA,MAAa,oBAAoB,OAAA,QAG/B,WAAA,CAAY,EAAyB,GACnC,MAAM,EAAO,GACb,KAAK,QAAU,EAAQ,OACzB,EAsBF,SAAgB,cAAc,EAAU,EAAmB,IACzD,OAAO,SACL,EACA,GAEA,IAAI,GAAa,EAEjB,MAAM,EAAM,IAAI,YAAY,EAAQ,KAAO,IAAK,CAC9C,OAAQ,EAAQ,OAChB,KAAM,EACN,QAAS,EAAQ,QACjB,oBAAoB,EACpB,QAAS,IAGL,EAAW,sBAAA,aAAa,EAAK,CACjC,WAAY,EAAQ,WACpB,IAAK,EAAQ,WAGf,SAAS,EAAU,GACjB,OAAO,EAAa,EAAS,GAC/B,CAEA,SAAS,EAAa,GACpB,GAAI,EAAY,OAEhB,GAAa,EACb,EAAI,OAAO,KAAK,mBAEZ,EAAI,SAAQ,EAAS,WAAa,EAAI,QACtC,EAAI,aAAY,EAAS,cAAgB,EAAI,YAEjD,MAAM,EAAU,EAAI,QAAQ,WACtB,EAAU,SAAA,WAAW,GAE3B,IAAK,MAAM,KAAO,OAAO,KAAK,GAC5B,EAAS,UAAU,EAAK,EAAQ,IAGlC,QAAQ,IAAI,CACV,EAAI,QAAQ,MAAK,IACf,EAAS,YAAY,EAAQ,WAAW,IAG9B,OAAZ,EACI,IAAI,SAAQ,IACV,EAAI,OAAO,KAAK,iBAChB,EAAS,MACF,OAET,OAAO,SAAS,IAA+B,iBAAZ,EACnC,IAAI,SAAmB,IACrB,EAAS,MAAM,GACf,EAAS,MACT,EAAI,OAAO,KAAK,iBACT,OAET,IAAI,SAAmB,CAAC,EAAS,KAC/B,KAAK,EAAS,GAAU,IACtB,EAAI,OAAO,KAAK,iBACT,EAAM,EAAO,GAAO,MAC3B,MAEP,MAAM,EACX,CAMA,OAJA,EAAI,OAAO,GAAG,SAAS,IAAM,EAAQ,YAErC,EAAI,OAAO,KAAK,kBAET,QAAQ,QAAQ,EAAI,EAAK,sBAAA,aAAa,KAAO,MAClD,GAAO,EAAa,KACpB,GAAO,EAAU,IAErB,CACF,CAxGA,QAAA,wBA4BA,QAAA","file":"/npm/servie-http@2.0.1/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/servie-http@2.0.1/dist/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","import pump = require(\"pump\");\nimport { Request, Response, RequestOptions } from \"servie/dist/node\";\nimport { useRawBody } from \"servie/dist/common\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport { finalhandler } from \"servie-finalhandler\";\nimport { errorhandler } from \"servie-errorhandler\";\n\n/**\n * Node.js HTTP request options.\n */\nexport interface HttpRequestOptions extends RequestOptions {\n  request: IncomingMessage;\n}\n\n/**\n * Node.js HTTP request class.\n */\nexport class HttpRequest extends Request {\n  request: IncomingMessage;\n\n  constructor(input: string | Request, options: HttpRequestOptions) {\n    super(input, options);\n    this.request = options.request;\n  }\n}\n\n/**\n * HTTP server application signature.\n */\nexport type App = (\n  req: HttpRequest,\n  next: () => Promise<Response>\n) => Response | Promise<Response>;\n\n/**\n * HTTP server options.\n */\nexport interface Options {\n  production?: boolean;\n  logError?: (err: any) => void;\n}\n\n/**\n * Create a node.js-compatible http handler.\n */\nexport function createHandler(app: App, options: Options = {}) {\n  return function(\n    request: IncomingMessage,\n    response: ServerResponse\n  ): Promise<void> {\n    let didRespond = false;\n\n    const req = new HttpRequest(request.url || \"/\", {\n      method: request.method,\n      body: request,\n      headers: request.headers,\n      omitDefaultHeaders: true,\n      request: request\n    });\n\n    const mapError = errorhandler(req, {\n      production: options.production,\n      log: options.logError\n    });\n\n    function sendError(err: Error) {\n      return sendResponse(mapError(err));\n    }\n\n    function sendResponse(res: Response): void {\n      if (didRespond) return;\n\n      didRespond = true;\n      req.signal.emit(\"responseStarted\");\n\n      if (res.status) response.statusCode = res.status;\n      if (res.statusText) response.statusMessage = res.statusText;\n\n      const headers = res.headers.asObject();\n      const rawBody = useRawBody(res);\n\n      for (const key of Object.keys(headers)) {\n        response.setHeader(key, headers[key]);\n      }\n\n      Promise.all([\n        res.trailer.then(trailer => {\n          response.addTrailers(trailer.asObject());\n        }),\n        // Creating a stream is super expensive, use buffered values when possible.\n        rawBody === null\n          ? new Promise(resolve => {\n              req.signal.emit(\"responseEnded\");\n              response.end();\n              return resolve();\n            })\n          : Buffer.isBuffer(rawBody) || typeof rawBody === \"string\"\n          ? new Promise<undefined>(resolve => {\n              response.write(rawBody);\n              response.end();\n              req.signal.emit(\"responseEnded\");\n              return resolve();\n            })\n          : new Promise<undefined>((resolve, reject) => {\n              pump(rawBody, response, err => {\n                req.signal.emit(\"responseEnded\");\n                return err ? reject(err) : resolve();\n              });\n            })\n      ]).catch(sendError);\n    }\n\n    req.signal.on(\"abort\", () => request.destroy());\n\n    req.signal.emit(\"requestStarted\");\n\n    return Promise.resolve(app(req, finalhandler(req))).then(\n      res => sendResponse(res),\n      err => sendError(err)\n    );\n  };\n}\n"]}