@dooboostore/simple-boot-http-server 1.0.31 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/cjs/SimpleBootHttpServer.js +2 -1
  2. package/dist/cjs/SimpleBootHttpServer.js.map +2 -2
  3. package/dist/cjs/decorators/MethodMapping.js +9 -0
  4. package/dist/cjs/decorators/MethodMapping.js.map +2 -2
  5. package/dist/cjs/models/RequestResponse.js +15 -2
  6. package/dist/cjs/models/RequestResponse.js.map +2 -2
  7. package/dist/cjs/option/HttpServerOption.js +2 -1
  8. package/dist/cjs/option/HttpServerOption.js.map +2 -2
  9. package/dist/esm/SimpleBootHttpServer.js +2 -1
  10. package/dist/esm/SimpleBootHttpServer.js.map +2 -2
  11. package/dist/esm/decorators/MethodMapping.js +9 -0
  12. package/dist/esm/decorators/MethodMapping.js.map +2 -2
  13. package/dist/esm/models/RequestResponse.js +15 -2
  14. package/dist/esm/models/RequestResponse.js.map +2 -2
  15. package/dist/esm/option/HttpServerOption.js +2 -1
  16. package/dist/esm/option/HttpServerOption.js.map +2 -2
  17. package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js +64 -23
  18. package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js.map +2 -2
  19. package/dist/types/SimpleBootHttpServer.d.ts.map +1 -1
  20. package/dist/types/decorators/MethodMapping.d.ts.map +1 -1
  21. package/dist/types/models/RequestResponse.d.ts.map +1 -1
  22. package/dist/types/option/HttpServerOption.d.ts.map +1 -1
  23. package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js +64 -23
  24. package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js.map +2 -2
  25. package/package.json +3 -3
  26. package/src/SimpleBootHttpServer.ts +4 -1
  27. package/src/decorators/MethodMapping.ts +9 -0
  28. package/src/models/RequestResponse.ts +18 -2
  29. package/src/option/HttpServerOption.ts +8 -1
@@ -345,7 +345,8 @@ class SimpleBootHttpServer extends import_simple_boot.SimpleApplication {
345
345
  console.error("request error:", e);
346
346
  transactionManager?.catch(e);
347
347
  rr.resStatusCode(e instanceof import_HttpError.HttpError ? e.status : import_HttpStatus.HttpStatus.InternalServerError);
348
- const execute = typeof this.option.globalAdvice === "function" ? this.simstanceManager.getOrNewSim(this.option.globalAdvice) : this.option.globalAdvice;
348
+ const globalAdvice = this.option.globalAdvice;
349
+ const execute = typeof globalAdvice === "function" ? this.simstanceManager.getOrNewSim({ target: globalAdvice }) : globalAdvice;
349
350
  if (!execute) {
350
351
  rr.resEnd();
351
352
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/SimpleBootHttpServer.ts"],
4
- "sourcesContent": ["import {SimpleApplication} from '@dooboostore/simple-boot';\nimport {HttpServerOption} from './option/HttpServerOption';\nimport {ConstructorType} from '@dooboostore/core';\nimport {IncomingMessage, Server as HttpServer, ServerResponse} from 'http'\nimport {Server as HttpsServer} from 'https'; // Add HTTPS support\nimport {WebSocketServer, WebSocket} from 'ws';\nimport {RequestResponse} from './models/RequestResponse';\nimport {getUrlMapping, getUrlMappings, SaveMappingConfig, UrlMappingSituationType} from './decorators/MethodMapping';\nimport {HttpStatus} from './codes/HttpStatus';\nimport {HttpHeaders} from './codes/HttpHeaders';\nimport {Mimes} from './codes/Mimes';\nimport {Filter} from './filters/Filter';\nimport {ExceptionHandlerSituationType, targetExceptionHandler} from '@dooboostore/simple-boot';\nimport {getInject, SituationTypeContainer, SituationTypeContainers} from '@dooboostore/simple-boot';\nimport {EndPoint} from './endpoints/EndPoint';\nimport {ReflectUtils, ValidUtils} from '@dooboostore/core';\nimport {ReqFormUrlBody} from './models/datas/body/ReqFormUrlBody';\nimport {ReqJsonBody} from './models/datas/body/ReqJsonBody';\nimport {ReqHeader} from './models/datas/ReqHeader';\nimport {RouterModule} from '@dooboostore/simple-boot';\nimport {ReqMultipartFormBody} from './models/datas/body/ReqMultipartFormBody';\nimport {execValidationInValid, getValidIndex} from '@dooboostore/simple-boot';\nimport {ValidException} from '@dooboostore/simple-boot';\nimport {HttpError} from './errors/HttpError';\nimport {getRoute} from '@dooboostore/simple-boot';\nimport {OnInit} from './lifecycle/OnInit';\nimport {URLSearchParams} from 'url';\nimport {HttpMethod} from './codes/HttpMethod';\nimport {SessionManager} from './session/SessionManager';\nimport {InjectSituationType} from './inject/InjectSituationType';\nimport {ContentTypeGenerator} from './generators/ContentTypeGenerator';\nimport {ReqSearchParamsObj} from \"./models/datas/path/ReqSearchParamsObj\";\nimport {SimConfig} from '@dooboostore/simple-boot';\nimport {ReqPathData} from './models/datas/path/ReqPathData';\nimport {WebSocketEndPoint} from './endpoints/WebSocketEndPoint';\n\nexport class SimpleBootHttpServer extends SimpleApplication {\n public server?: HttpServer | HttpsServer;\n private sessionManager: SessionManager;\n private webSocketClients = new Map<WebSocket, { request: IncomingMessage }>();\n\n constructor(public option: HttpServerOption = new HttpServerOption()) {\n super(option);\n this.sessionManager = new SessionManager(this.option);\n }\n\n\n public run(otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>) {\n otherInstanceSim ??= new Map<ConstructorType<any> | Function | SimConfig | symbol, any>();\n otherInstanceSim.set(SimpleBootHttpServer, this);\n super.run(otherInstanceSim);\n const targets = [...this.option.closeEndPoints ?? [], ...this.option.errorEndPoints ?? [], ...this.option.requestEndPoints ?? [], ...(this.option.filters ?? []).map(it=>it.filter)];\n Promise.all(targets.map(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it as ConstructorType<any>}) : it) as OnInit).map(it => it.onInit(this))).then(it => {\n this.startServer();\n });\n return this;\n }\n\n private startServer() {\n\n // const a = this.option.serverOption as HttpsServerOption;\n // this.option.serverOption?.\n\n if (this.option.serverOption && 'key' in this.option.serverOption && 'cert' in this.option.serverOption) {\n this.server = new HttpsServer(this.option.serverOption);\n const httpServer = new HttpServer();\n httpServer.on('request', (req: IncomingMessage, res: ServerResponse) => {\n res.writeHead(301, {Location: `https://${req.headers.host}${req.url}`});\n res.end();\n });\n httpServer.listen(80, this.option.listen.hostname, () => {\n console.log('HTTP redirect server running on port 80');\n });\n } else if (this.option.serverOption) {\n this.server = new HttpServer(this.option.serverOption);\n } else {\n this.server = new HttpServer();\n }\n // const thisRef = this;\n this.server.on('request', async (req: IncomingMessage, res: ServerResponse) => {\n // console.log('request', req.url);\n const transactionManager = this.option.transactionManagerFactory ? await this.option.transactionManagerFactory() : undefined;\n res.on('close', async () => {\n if (this.option.closeEndPoints) {\n for (const it of this.option.closeEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n res.on('error', async () => {\n if (this.option.errorEndPoints) {\n for (const it of this.option.errorEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n const rr = new RequestResponse(req, res, {sessionManager: this.sessionManager, option: this.option});\n /*\n default setting first\n */\n rr.resSetHeader(HttpHeaders.Server, 'simple-boot-http-server');\n const cookie = rr.reqCookieGet(this.option.sessionOption.key);\n if (!cookie) {\n const session = await this.sessionManager.session();\n\n const cookieParts: string[] = [];\n cookieParts.push(`${this.option.sessionOption.key}=${session.uuid}`);\n cookieParts.push(`Path=${this.option.sessionOption.path}`);\n if (this.option.sessionOption.httpOnly) cookieParts.push('HttpOnly');\n if (this.option.sessionOption.secure) cookieParts.push('Secure');\n if (this.option.sessionOption.sameSite != null && this.option.sessionOption.sameSite) cookieParts.push(`SameSite=${this.option.sessionOption.sameSite}`);\n const maxAge = (this.option.sessionOption as any).maxAge ?? (this.sessionManager.sessionOption)?.maxAge;\n if (maxAge != null) cookieParts.push(`Max-Age=${maxAge}`);\n rr.resSetHeader(HttpHeaders.SetCookie, cookieParts.join('; '));\n }\n\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(RequestResponse, rr);\n otherStorage.set(IncomingMessage, req);\n otherStorage.set(ServerResponse, res);\n // \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uC751\uB2F5 \uC644\uB8CC \uC804\uC5D0 \uB04A\uC73C\uBA74 abort. \uD578\uB4E4\uB7EC\uB294 \uD30C\uB77C\uBBF8\uD130 \uD0C0\uC785 AbortSignal \uB85C \uC8FC\uC785\uBC1B\uC544\n // fetch/timers/events.once \uB4F1\uC5D0 \uB118\uAE30\uBA74 \uB300\uAE30 \uC911\uC774\uC5B4\uB3C4 \uBC14\uB85C \uD480\uB9B0\uB2E4 (\uC81C\uB108\uB808\uC774\uD130 \uC2A4\uD2B8\uB9BC\uC758 \uC774\uBCA4\uD2B8 \uB300\uAE30 \uB204\uC218 \uBC29\uC9C0)\n const abortController = new AbortController();\n res.once('close', () => {\n if (!res.writableFinished) abortController.abort();\n });\n otherStorage.set(AbortSignal, abortController.signal);\n try {\n transactionManager?.try();\n if (this.option.requestEndPoints) {\n for (const it of this.option.requestEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim<EndPoint>({target: it}) : it) as EndPoint;\n execute?.endPoint(rr, this);\n } catch (e) {\n }\n }\n }\n\n const filter = {\n carrier: new Map<string, any>(),\n filters: [] as { filter: Filter, sw: boolean }[]\n };\n for (let i = 0; this.option.filters && i < this.option.filters.length; i++) {\n const it = this.option.filters[i];\n\n let isSkip = false;\n if (typeof it.isSupport === 'boolean') {\n isSkip = !it.isSupport;\n } else if (typeof it.isSupport === 'object') {\n isSkip = !it.isSupport.test(rr.reqUrlPathName)\n } else if (typeof it.isSupport === 'function') {\n isSkip = !it.isSupport(rr);\n }\n if(isSkip) {\n continue;\n }\n\n let sw = true;\n const itFilter = it.filter;\n const execute = (typeof itFilter === 'function' ? this.simstanceManager.getOrNewSim({target: itFilter}) : itFilter) as Filter;\n if (execute?.proceedBefore) {\n sw = await execute.proceedBefore({rr, app: this, carrier: filter.carrier});\n filter.filters.push({filter: execute, sw});\n }\n if (!sw) {\n break;\n }\n }\n\n // body.. something..\n // \uB77C\uC6B0\uD130 \uC5C6\uC774 \uD544\uD130\uB9CC\uC73C\uB85C \uB3C4\uB294 \uC11C\uBC84(\uC608: SSR \uC804\uC6A9)\uBA74, \uC5B4\uB290 \uD544\uD130\uB3C4 \uCC98\uB9AC\uD558\uC9C0 \uC54A\uC740 \uC694\uCCAD\uC740 404 \uB85C \uB05D\uB0B8\uB2E4\n // (\uBE0C\uB77C\uC6B0\uC800\uAC00 \uC54C\uC544\uC11C \uBCF4\uB0B4\uB294 /favicon.ico, /.well-known/... \uAC19\uC740 \uAC83 \u2014 \uC608\uC804\uC5D4 'no router' \uC5D0\uB7EC\uB85C 500 + \uB85C\uADF8)\n if (!rr.resIsDone() && !this.option.rootRouter) {\n rr.resStatusCode(HttpStatus.NotFound);\n } else if (!rr.resIsDone()) {\n const routerModule = await super.routing(rr.reqIntent);\n otherStorage.set(RouterModule, routerModule);\n const moduleInstance = routerModule?.getModuleInstance?.();\n let methods: SaveMappingConfig[] = [];\n if (routerModule && moduleInstance) {\n // router \uD074\uB798\uC2A4 \uB0B4\uBD80\uC5D0\uC11C \uC120\uC5B8\uB41C Route\uC77C\uB54C\n if (routerModule.propertyKeys) {\n const map = routerModule.propertyKeys?.map((it: string | symbol) => {\n return {propertyKey: it, config: getUrlMapping(moduleInstance, it)} as SaveMappingConfig\n });\n methods.push(...(map ?? []));\n } else {\n methods.push(...(getUrlMappings(moduleInstance).filter(it => !getRoute(moduleInstance, it.propertyKey)) ?? []));\n }\n\n // options\uB85C \uC694\uCCAD\uC624\uBA74\uC740 allow\uB85C \uB123\uACE0 \uADF8\uB0E5 200\uCC98\uB9AC\uD574\uC57C\uB428.\n if (rr.reqMethod()?.toUpperCase() === HttpMethod.OPTIONS.toUpperCase()) {\n rr.resSetHeader(HttpHeaders.Allow, methods.map(it => it.config.method).join(', '));\n rr.resStatusCode(HttpStatus.Ok);\n }\n\n // method \uCC3E\uAE30\n methods = methods.filter(it => it && it.propertyKey && it.config && rr.reqMethod()?.toUpperCase() === it.config.method.toUpperCase());\n methods.sort((a, b) => {\n return ((b.config?.req?.contentType?.length ?? 0) + (b.config?.req?.accept?.length ?? 0)) - ((a.config?.req?.contentType?.length ?? 0) + (a.config?.req?.accept?.length ?? 0));\n });\n methods = methods\n .filter(it => it.config?.req?.contentType ? (!!it.config?.req?.contentType?.find(sit => rr.reqHasContentTypeHeader(sit))) : true)\n .filter(it => it.config?.req?.accept ? (!!it.config?.req?.accept?.find(sit => rr.reqHasAcceptHeader(sit))) : true);\n\n if (methods[0]) {\n const it = methods[0];\n const paramTypes = ReflectUtils.getParameterTypes(moduleInstance, it.propertyKey)\n const injects = getInject(moduleInstance, it.propertyKey);\n const validIndexs = getValidIndex(moduleInstance, it.propertyKey);\n if (injects) {\n const isPathData = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_PATH_DATA);\n const isJson = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_JSON_BODY);\n const isSearchParamsObj = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ);\n const isFormUrl = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_FORM_URL_BODY);\n // \uC6B0\uC120 \uB2E4\uC2DC \uC81C\uAC70\uD55C\uB2E4.. \uD2B8\uB79C\uC81D\uC158 \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uB2E4\uC2DC \uC0DD\uAC01\n // const isTransactionManager = injects.find(it => it.config?.situationType === InjectSituationType.TransactionManager);\n const siturationContainers = new SituationTypeContainers();\n if (isPathData) {\n let data = await routerModule.pathData\n if (isPathData.type) {\n data = Object.assign(new isPathData.type(), data);\n }\n if (validIndexs.includes(isPathData.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_PATH_DATA,\n data\n }));\n }\n if (isJson) {\n let data = await rr.reqBodyJsonData();\n if (data !== null && isJson.type) {\n data = Object.assign(new isJson.type(), data);\n }\n if (validIndexs.includes(isJson.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_JSON_BODY,\n data\n }));\n }\n if (isSearchParamsObj) {\n let data = rr.reqUrlSearchParamsObj\n if (validIndexs.includes(isSearchParamsObj.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ,\n data\n }));\n }\n if (isFormUrl) {\n let data = await rr.reqBodyFormUrlData()\n if (isFormUrl.type) {\n data = Object.assign(new isFormUrl.type(), data);\n }\n if (validIndexs.includes(isFormUrl.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({situationType: UrlMappingSituationType.REQ_FORM_URL_BODY, data}));\n }\n // \uD2B8\uB79C\uC81D\uC158 \uC6B0\uC120 \uC81C\uAC70 \uB098\uC911\uC5D0 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uD560\uC9C0 \uC0DD\uAC01..\n // if (isTransactionManager && isTransactionManager.type && transactionManager && transactionManager.hasTransaction(isTransactionManager.type)) {\n // let data = await transactionManager.getTransaction(isTransactionManager.type);\n // if (data) {\n // data = await data.try(isTransactionManager.config.argument);\n // siturationContainers.push(new SituationTypeContainer({situationType: InjectSituationType.TransactionManager, data, index: isTransactionManager.index}));\n // }\n // }\n if (siturationContainers.length) {\n otherStorage.set(SituationTypeContainers, siturationContainers);\n }\n }\n\n for (const paramType of paramTypes) {\n if (paramType === ReqFormUrlBody) {\n otherStorage.set(ReqFormUrlBody, await rr.reqBodyReqFormUrlBody())\n } else if (paramType === ReqPathData) {\n otherStorage.set(ReqPathData, routerModule.pathData)\n } else if (paramType === ReqJsonBody) {\n otherStorage.set(ReqJsonBody, await rr.reqBodyReqJsonBody())\n } else if (paramType === ReqSearchParamsObj) {\n otherStorage.set(ReqSearchParamsObj, rr.reqUrlSearchParamsObj)\n } else if (paramType === URLSearchParams) {\n otherStorage.set(URLSearchParams, rr.reqUrlSearchParams)\n } else if (paramType === ReqMultipartFormBody) {\n otherStorage.set(ReqMultipartFormBody, rr.reqBodyMultipartFormData())\n } else if (paramType === ReqHeader) {\n otherStorage.set(ReqHeader, rr.reqHeaderObj)\n }\n }\n\n // execute !!!\n let data = await this.simstanceManager.executeBindParameterSimPromise({\n target: moduleInstance,\n targetKey: it.propertyKey\n }, otherStorage);\n /*\n \uC5EC\uAE30\uC5D0\uC11C \uC815\uD574\uC9C4 \uD0C0\uC785 \uB9AC\uD134\uC5D0 \uB530\uB978 \uC870\uCE58\n ...\n */\n const resConfig = it.config?.res;\n if (resConfig === 'manual') {\n // \uD578\uB4E4\uB7EC\uAC00 ServerResponse\uB97C \uC9C1\uC811 \uC8FC\uC785\uBC1B\uC544 \uC2A4\uC2A4\uB85C write/end\uB97C \uC81C\uC5B4\uD55C\uB2E4 (\uC608: SSE \uC2A4\uD2B8\uB9AC\uBC0D)\n } else if (ValidUtils.isGenerator(data) || ValidUtils.isAsyncGenerator(data)) {\n // \uC81C\uB108\uB808\uC774\uD130 \uB9AC\uD134: \uD5E4\uB354 \uBA3C\uC800 \uBCF4\uB0B4\uACE0, yield \uB41C \uAC12\uC744 \uD558\uB098\uC529 \uBC14\uB85C body \uB85C \uD758\uB824\uBCF4\uB0B8\uB2E4 (\uC608: SSE)\n // ContentTypeGenerator.Stream \uC774\uBA74 Content-Type(boundary \uD3EC\uD568)\u00B7\uC555\uCD95 \uC5EC\uBD80\uB97C \uC2A4\uD2B8\uB9BC\uC774 \uC815\uD55C\uB2E4\n const stream = ContentTypeGenerator.isStream(data) ? data : undefined;\n const headers = resConfig?.header ?? {};\n const contentType = stream?.contentType ?? resConfig?.contentType;\n if (contentType) {\n headers[HttpHeaders.ContentType] = contentType;\n }\n rr.resSetHeaders(headers);\n rr.resSetStatusCode(resConfig?.status ?? HttpStatus.Ok);\n await rr.resStream(data, { compress: stream?.compress });\n } else {\n if (it.config?.resolver) {\n const execute = typeof it.config.resolver === 'function' ? this.simstanceManager.getOrNewSim({target: it.config.resolver}) : it.config.resolver;\n data = await execute?.resolve?.(data, rr, resConfig);\n }\n const status = resConfig?.status ?? HttpStatus.Ok;\n const headers = resConfig?.header ?? {};\n if (resConfig?.contentType) {\n headers[HttpHeaders.ContentType] = resConfig.contentType;\n }\n if ((resConfig?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {\n data = JSON.stringify(data);\n } else if (data && typeof data === 'object') {\n data = JSON.stringify(data);\n }\n rr.resSetHeaders(headers)\n rr.resSetStatusCode(status);\n rr.resWrite(data);\n }\n }\n }\n\n if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {\n throw this.option.noSuchRouteEndPointMappingThrow(rr);\n }\n }\n\n // after\n for (const it of filter.filters.reverse()) {\n if (it.filter?.proceedAfter && !await it.filter.proceedAfter({rr, app: this, before: it.sw, carrier: filter.carrier})) {\n break;\n }\n }\n } catch (e) {\n console.error('request error:', e);\n transactionManager?.catch(e);\n rr.resStatusCode(e instanceof HttpError ? e.status : HttpStatus.InternalServerError)\n const execute = typeof this.option.globalAdvice === 'function' ? this.simstanceManager.getOrNewSim(this.option.globalAdvice) : this.option.globalAdvice;\n if (!execute) {\n rr.resEnd();\n // rr.resEnd().catch(e => {\n // });\n return;\n }\n if (e && typeof e === 'object') {\n otherStorage.set(e.constructor as ConstructorType<any>, e);\n otherStorage.set(SituationTypeContainer, new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n }));\n }\n const target = targetExceptionHandler(execute, e);\n if (target) {\n await this.simstanceManager.executeBindParameterSimPromise({\n target: execute,\n targetKey: target.propertyKey\n }, otherStorage);\n }\n } finally {\n transactionManager?.finally();\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n if (this.option.webSocketEndPoints) {\n const webSocketServer = new WebSocketServer({server: this.server});\n const execute = this.option.webSocketEndPoints.map(it => typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it);\n webSocketServer.on('connection', async (ws, request) => {\n this.webSocketClients.set(ws, {request});\n const wsSet = {socket: ws, request};\n execute.forEach(it => it.connect?.(wsSet));\n ws.on('error', err => execute.forEach(it => it.error?.(wsSet, err)));\n ws.on('message', (data, isBinary) => execute.forEach(it => it.message(wsSet, {data, isBinary})));\n ws.on('ping', () => execute.forEach(it => it.ping?.(wsSet)));\n ws.on('close', () => {\n this.webSocketClients.delete(ws);\n execute.forEach(it => it.close?.(wsSet));\n });\n });\n }\n this.server.listen(this.option.listen.port, this.option.listen.hostname, this.option.listen.backlog, () => {\n this.option.listen.listeningListener?.(this, this.server);\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {SimpleApplication} from '@dooboostore/simple-boot';\nimport {HttpServerOption} from './option/HttpServerOption';\nimport {ConstructorType} from '@dooboostore/core';\nimport {IncomingMessage, Server as HttpServer, ServerResponse} from 'http'\nimport {Server as HttpsServer} from 'https'; // Add HTTPS support\nimport {WebSocketServer, WebSocket} from 'ws';\nimport {RequestResponse} from './models/RequestResponse';\nimport {getUrlMapping, getUrlMappings, SaveMappingConfig, UrlMappingSituationType} from './decorators/MethodMapping';\nimport {HttpStatus} from './codes/HttpStatus';\nimport {HttpHeaders} from './codes/HttpHeaders';\nimport {Mimes} from './codes/Mimes';\nimport {Filter} from './filters/Filter';\nimport {ExceptionHandlerSituationType, targetExceptionHandler} from '@dooboostore/simple-boot';\nimport {getInject, SituationTypeContainer, SituationTypeContainers} from '@dooboostore/simple-boot';\nimport {EndPoint} from './endpoints/EndPoint';\nimport {ReflectUtils, ValidUtils} from '@dooboostore/core';\nimport {ReqFormUrlBody} from './models/datas/body/ReqFormUrlBody';\nimport {ReqJsonBody} from './models/datas/body/ReqJsonBody';\nimport {ReqHeader} from './models/datas/ReqHeader';\nimport {RouterModule} from '@dooboostore/simple-boot';\nimport {ReqMultipartFormBody} from './models/datas/body/ReqMultipartFormBody';\nimport {execValidationInValid, getValidIndex} from '@dooboostore/simple-boot';\nimport {ValidException} from '@dooboostore/simple-boot';\nimport {HttpError} from './errors/HttpError';\nimport {getRoute} from '@dooboostore/simple-boot';\nimport {OnInit} from './lifecycle/OnInit';\nimport {URLSearchParams} from 'url';\nimport {HttpMethod} from './codes/HttpMethod';\nimport {SessionManager} from './session/SessionManager';\nimport {InjectSituationType} from './inject/InjectSituationType';\nimport {ContentTypeGenerator} from './generators/ContentTypeGenerator';\nimport {ReqSearchParamsObj} from \"./models/datas/path/ReqSearchParamsObj\";\nimport {SimConfig} from '@dooboostore/simple-boot';\nimport {ReqPathData} from './models/datas/path/ReqPathData';\nimport {WebSocketEndPoint} from './endpoints/WebSocketEndPoint';\n\nexport class SimpleBootHttpServer extends SimpleApplication {\n public server?: HttpServer | HttpsServer;\n private sessionManager: SessionManager;\n private webSocketClients = new Map<WebSocket, { request: IncomingMessage }>();\n\n constructor(public option: HttpServerOption = new HttpServerOption()) {\n super(option);\n this.sessionManager = new SessionManager(this.option);\n }\n\n\n public run(otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>) {\n otherInstanceSim ??= new Map<ConstructorType<any> | Function | SimConfig | symbol, any>();\n otherInstanceSim.set(SimpleBootHttpServer, this);\n super.run(otherInstanceSim);\n const targets = [...this.option.closeEndPoints ?? [], ...this.option.errorEndPoints ?? [], ...this.option.requestEndPoints ?? [], ...(this.option.filters ?? []).map(it=>it.filter)];\n Promise.all(targets.map(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it as ConstructorType<any>}) : it) as OnInit).map(it => it.onInit(this))).then(it => {\n this.startServer();\n });\n return this;\n }\n\n private startServer() {\n\n // const a = this.option.serverOption as HttpsServerOption;\n // this.option.serverOption?.\n\n if (this.option.serverOption && 'key' in this.option.serverOption && 'cert' in this.option.serverOption) {\n this.server = new HttpsServer(this.option.serverOption);\n const httpServer = new HttpServer();\n httpServer.on('request', (req: IncomingMessage, res: ServerResponse) => {\n res.writeHead(301, {Location: `https://${req.headers.host}${req.url}`});\n res.end();\n });\n httpServer.listen(80, this.option.listen.hostname, () => {\n console.log('HTTP redirect server running on port 80');\n });\n } else if (this.option.serverOption) {\n this.server = new HttpServer(this.option.serverOption);\n } else {\n this.server = new HttpServer();\n }\n // const thisRef = this;\n this.server.on('request', async (req: IncomingMessage, res: ServerResponse) => {\n // console.log('request', req.url);\n const transactionManager = this.option.transactionManagerFactory ? await this.option.transactionManagerFactory() : undefined;\n res.on('close', async () => {\n if (this.option.closeEndPoints) {\n for (const it of this.option.closeEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n res.on('error', async () => {\n if (this.option.errorEndPoints) {\n for (const it of this.option.errorEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n const rr = new RequestResponse(req, res, {sessionManager: this.sessionManager, option: this.option});\n /*\n default setting first\n */\n rr.resSetHeader(HttpHeaders.Server, 'simple-boot-http-server');\n const cookie = rr.reqCookieGet(this.option.sessionOption.key);\n if (!cookie) {\n const session = await this.sessionManager.session();\n\n const cookieParts: string[] = [];\n cookieParts.push(`${this.option.sessionOption.key}=${session.uuid}`);\n cookieParts.push(`Path=${this.option.sessionOption.path}`);\n if (this.option.sessionOption.httpOnly) cookieParts.push('HttpOnly');\n if (this.option.sessionOption.secure) cookieParts.push('Secure');\n if (this.option.sessionOption.sameSite != null && this.option.sessionOption.sameSite) cookieParts.push(`SameSite=${this.option.sessionOption.sameSite}`);\n const maxAge = (this.option.sessionOption as any).maxAge ?? (this.sessionManager.sessionOption)?.maxAge;\n if (maxAge != null) cookieParts.push(`Max-Age=${maxAge}`);\n rr.resSetHeader(HttpHeaders.SetCookie, cookieParts.join('; '));\n }\n\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(RequestResponse, rr);\n otherStorage.set(IncomingMessage, req);\n otherStorage.set(ServerResponse, res);\n // \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uC751\uB2F5 \uC644\uB8CC \uC804\uC5D0 \uB04A\uC73C\uBA74 abort. \uD578\uB4E4\uB7EC\uB294 \uD30C\uB77C\uBBF8\uD130 \uD0C0\uC785 AbortSignal \uB85C \uC8FC\uC785\uBC1B\uC544\n // fetch/timers/events.once \uB4F1\uC5D0 \uB118\uAE30\uBA74 \uB300\uAE30 \uC911\uC774\uC5B4\uB3C4 \uBC14\uB85C \uD480\uB9B0\uB2E4 (\uC81C\uB108\uB808\uC774\uD130 \uC2A4\uD2B8\uB9BC\uC758 \uC774\uBCA4\uD2B8 \uB300\uAE30 \uB204\uC218 \uBC29\uC9C0)\n const abortController = new AbortController();\n res.once('close', () => {\n if (!res.writableFinished) abortController.abort();\n });\n otherStorage.set(AbortSignal, abortController.signal);\n try {\n transactionManager?.try();\n if (this.option.requestEndPoints) {\n for (const it of this.option.requestEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim<EndPoint>({target: it}) : it) as EndPoint;\n execute?.endPoint(rr, this);\n } catch (e) {\n }\n }\n }\n\n const filter = {\n carrier: new Map<string, any>(),\n filters: [] as { filter: Filter, sw: boolean }[]\n };\n for (let i = 0; this.option.filters && i < this.option.filters.length; i++) {\n const it = this.option.filters[i];\n\n let isSkip = false;\n if (typeof it.isSupport === 'boolean') {\n isSkip = !it.isSupport;\n } else if (typeof it.isSupport === 'object') {\n isSkip = !it.isSupport.test(rr.reqUrlPathName)\n } else if (typeof it.isSupport === 'function') {\n isSkip = !it.isSupport(rr);\n }\n if(isSkip) {\n continue;\n }\n\n let sw = true;\n const itFilter = it.filter;\n const execute = (typeof itFilter === 'function' ? this.simstanceManager.getOrNewSim({target: itFilter}) : itFilter) as Filter;\n if (execute?.proceedBefore) {\n sw = await execute.proceedBefore({rr, app: this, carrier: filter.carrier});\n filter.filters.push({filter: execute, sw});\n }\n if (!sw) {\n break;\n }\n }\n\n // body.. something..\n // \uB77C\uC6B0\uD130 \uC5C6\uC774 \uD544\uD130\uB9CC\uC73C\uB85C \uB3C4\uB294 \uC11C\uBC84(\uC608: SSR \uC804\uC6A9)\uBA74, \uC5B4\uB290 \uD544\uD130\uB3C4 \uCC98\uB9AC\uD558\uC9C0 \uC54A\uC740 \uC694\uCCAD\uC740 404 \uB85C \uB05D\uB0B8\uB2E4\n // (\uBE0C\uB77C\uC6B0\uC800\uAC00 \uC54C\uC544\uC11C \uBCF4\uB0B4\uB294 /favicon.ico, /.well-known/... \uAC19\uC740 \uAC83 \u2014 \uC608\uC804\uC5D4 'no router' \uC5D0\uB7EC\uB85C 500 + \uB85C\uADF8)\n if (!rr.resIsDone() && !this.option.rootRouter) {\n rr.resStatusCode(HttpStatus.NotFound);\n } else if (!rr.resIsDone()) {\n const routerModule = await super.routing(rr.reqIntent);\n otherStorage.set(RouterModule, routerModule);\n const moduleInstance = routerModule?.getModuleInstance?.();\n let methods: SaveMappingConfig[] = [];\n if (routerModule && moduleInstance) {\n // router \uD074\uB798\uC2A4 \uB0B4\uBD80\uC5D0\uC11C \uC120\uC5B8\uB41C Route\uC77C\uB54C\n if (routerModule.propertyKeys) {\n const map = routerModule.propertyKeys?.map((it: string | symbol) => {\n return {propertyKey: it, config: getUrlMapping(moduleInstance, it)} as SaveMappingConfig\n });\n methods.push(...(map ?? []));\n } else {\n methods.push(...(getUrlMappings(moduleInstance).filter(it => !getRoute(moduleInstance, it.propertyKey)) ?? []));\n }\n\n // options\uB85C \uC694\uCCAD\uC624\uBA74\uC740 allow\uB85C \uB123\uACE0 \uADF8\uB0E5 200\uCC98\uB9AC\uD574\uC57C\uB428.\n if (rr.reqMethod()?.toUpperCase() === HttpMethod.OPTIONS.toUpperCase()) {\n rr.resSetHeader(HttpHeaders.Allow, methods.map(it => it.config.method).join(', '));\n rr.resStatusCode(HttpStatus.Ok);\n }\n\n // method \uCC3E\uAE30\n methods = methods.filter(it => it && it.propertyKey && it.config && rr.reqMethod()?.toUpperCase() === it.config.method.toUpperCase());\n methods.sort((a, b) => {\n return ((b.config?.req?.contentType?.length ?? 0) + (b.config?.req?.accept?.length ?? 0)) - ((a.config?.req?.contentType?.length ?? 0) + (a.config?.req?.accept?.length ?? 0));\n });\n methods = methods\n .filter(it => it.config?.req?.contentType ? (!!it.config?.req?.contentType?.find(sit => rr.reqHasContentTypeHeader(sit))) : true)\n .filter(it => it.config?.req?.accept ? (!!it.config?.req?.accept?.find(sit => rr.reqHasAcceptHeader(sit))) : true);\n\n if (methods[0]) {\n const it = methods[0];\n const paramTypes = ReflectUtils.getParameterTypes(moduleInstance, it.propertyKey)\n const injects = getInject(moduleInstance, it.propertyKey);\n const validIndexs = getValidIndex(moduleInstance, it.propertyKey);\n if (injects) {\n const isPathData = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_PATH_DATA);\n const isJson = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_JSON_BODY);\n const isSearchParamsObj = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ);\n const isFormUrl = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_FORM_URL_BODY);\n // \uC6B0\uC120 \uB2E4\uC2DC \uC81C\uAC70\uD55C\uB2E4.. \uD2B8\uB79C\uC81D\uC158 \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uB2E4\uC2DC \uC0DD\uAC01\n // const isTransactionManager = injects.find(it => it.config?.situationType === InjectSituationType.TransactionManager);\n const siturationContainers = new SituationTypeContainers();\n if (isPathData) {\n let data = await routerModule.pathData\n if (isPathData.type) {\n data = Object.assign(new isPathData.type(), data);\n }\n if (validIndexs.includes(isPathData.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_PATH_DATA,\n data\n }));\n }\n if (isJson) {\n let data = await rr.reqBodyJsonData();\n if (data !== null && isJson.type) {\n data = Object.assign(new isJson.type(), data);\n }\n if (validIndexs.includes(isJson.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_JSON_BODY,\n data\n }));\n }\n if (isSearchParamsObj) {\n let data = rr.reqUrlSearchParamsObj\n if (validIndexs.includes(isSearchParamsObj.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ,\n data\n }));\n }\n if (isFormUrl) {\n let data = await rr.reqBodyFormUrlData()\n if (isFormUrl.type) {\n data = Object.assign(new isFormUrl.type(), data);\n }\n if (validIndexs.includes(isFormUrl.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({situationType: UrlMappingSituationType.REQ_FORM_URL_BODY, data}));\n }\n // \uD2B8\uB79C\uC81D\uC158 \uC6B0\uC120 \uC81C\uAC70 \uB098\uC911\uC5D0 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uD560\uC9C0 \uC0DD\uAC01..\n // if (isTransactionManager && isTransactionManager.type && transactionManager && transactionManager.hasTransaction(isTransactionManager.type)) {\n // let data = await transactionManager.getTransaction(isTransactionManager.type);\n // if (data) {\n // data = await data.try(isTransactionManager.config.argument);\n // siturationContainers.push(new SituationTypeContainer({situationType: InjectSituationType.TransactionManager, data, index: isTransactionManager.index}));\n // }\n // }\n if (siturationContainers.length) {\n otherStorage.set(SituationTypeContainers, siturationContainers);\n }\n }\n\n for (const paramType of paramTypes) {\n if (paramType === ReqFormUrlBody) {\n otherStorage.set(ReqFormUrlBody, await rr.reqBodyReqFormUrlBody())\n } else if (paramType === ReqPathData) {\n otherStorage.set(ReqPathData, routerModule.pathData)\n } else if (paramType === ReqJsonBody) {\n otherStorage.set(ReqJsonBody, await rr.reqBodyReqJsonBody())\n } else if (paramType === ReqSearchParamsObj) {\n otherStorage.set(ReqSearchParamsObj, rr.reqUrlSearchParamsObj)\n } else if (paramType === URLSearchParams) {\n otherStorage.set(URLSearchParams, rr.reqUrlSearchParams)\n } else if (paramType === ReqMultipartFormBody) {\n otherStorage.set(ReqMultipartFormBody, rr.reqBodyMultipartFormData())\n } else if (paramType === ReqHeader) {\n otherStorage.set(ReqHeader, rr.reqHeaderObj)\n }\n }\n\n // execute !!!\n let data = await this.simstanceManager.executeBindParameterSimPromise({\n target: moduleInstance,\n targetKey: it.propertyKey\n }, otherStorage);\n /*\n \uC5EC\uAE30\uC5D0\uC11C \uC815\uD574\uC9C4 \uD0C0\uC785 \uB9AC\uD134\uC5D0 \uB530\uB978 \uC870\uCE58\n ...\n */\n const resConfig = it.config?.res;\n if (resConfig === 'manual') {\n // \uD578\uB4E4\uB7EC\uAC00 ServerResponse\uB97C \uC9C1\uC811 \uC8FC\uC785\uBC1B\uC544 \uC2A4\uC2A4\uB85C write/end\uB97C \uC81C\uC5B4\uD55C\uB2E4 (\uC608: SSE \uC2A4\uD2B8\uB9AC\uBC0D)\n } else if (ValidUtils.isGenerator(data) || ValidUtils.isAsyncGenerator(data)) {\n // \uC81C\uB108\uB808\uC774\uD130 \uB9AC\uD134: \uD5E4\uB354 \uBA3C\uC800 \uBCF4\uB0B4\uACE0, yield \uB41C \uAC12\uC744 \uD558\uB098\uC529 \uBC14\uB85C body \uB85C \uD758\uB824\uBCF4\uB0B8\uB2E4 (\uC608: SSE)\n // ContentTypeGenerator.Stream \uC774\uBA74 Content-Type(boundary \uD3EC\uD568)\u00B7\uC555\uCD95 \uC5EC\uBD80\uB97C \uC2A4\uD2B8\uB9BC\uC774 \uC815\uD55C\uB2E4\n const stream = ContentTypeGenerator.isStream(data) ? data : undefined;\n const headers = resConfig?.header ?? {};\n const contentType = stream?.contentType ?? resConfig?.contentType;\n if (contentType) {\n headers[HttpHeaders.ContentType] = contentType;\n }\n rr.resSetHeaders(headers);\n rr.resSetStatusCode(resConfig?.status ?? HttpStatus.Ok);\n await rr.resStream(data, { compress: stream?.compress });\n } else {\n if (it.config?.resolver) {\n const execute = typeof it.config.resolver === 'function' ? this.simstanceManager.getOrNewSim({target: it.config.resolver}) : it.config.resolver;\n data = await execute?.resolve?.(data, rr, resConfig);\n }\n const status = resConfig?.status ?? HttpStatus.Ok;\n const headers = resConfig?.header ?? {};\n if (resConfig?.contentType) {\n headers[HttpHeaders.ContentType] = resConfig.contentType;\n }\n if ((resConfig?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {\n data = JSON.stringify(data);\n } else if (data && typeof data === 'object') {\n data = JSON.stringify(data);\n }\n rr.resSetHeaders(headers)\n rr.resSetStatusCode(status);\n rr.resWrite(data);\n }\n }\n }\n\n if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {\n throw this.option.noSuchRouteEndPointMappingThrow(rr);\n }\n }\n\n // after\n for (const it of filter.filters.reverse()) {\n if (it.filter?.proceedAfter && !await it.filter.proceedAfter({rr, app: this, before: it.sw, carrier: filter.carrier})) {\n break;\n }\n }\n } catch (e) {\n console.error('request error:', e);\n transactionManager?.catch(e);\n rr.resStatusCode(e instanceof HttpError ? e.status : HttpStatus.InternalServerError)\n const globalAdvice = this.option.globalAdvice;\n // getOrNewSim takes { target }; passing the class directly\n // destructures to undefined and silently disables globalAdvice.\n const execute = typeof globalAdvice === 'function' ? this.simstanceManager.getOrNewSim({ target: globalAdvice }) : globalAdvice;\n if (!execute) {\n rr.resEnd();\n // rr.resEnd().catch(e => {\n // });\n return;\n }\n if (e && typeof e === 'object') {\n otherStorage.set(e.constructor as ConstructorType<any>, e);\n otherStorage.set(SituationTypeContainer, new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n }));\n }\n const target = targetExceptionHandler(execute, e);\n if (target) {\n await this.simstanceManager.executeBindParameterSimPromise({\n target: execute,\n targetKey: target.propertyKey\n }, otherStorage);\n }\n } finally {\n transactionManager?.finally();\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n if (this.option.webSocketEndPoints) {\n const webSocketServer = new WebSocketServer({server: this.server});\n const execute = this.option.webSocketEndPoints.map(it => typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it);\n webSocketServer.on('connection', async (ws, request) => {\n this.webSocketClients.set(ws, {request});\n const wsSet = {socket: ws, request};\n execute.forEach(it => it.connect?.(wsSet));\n ws.on('error', err => execute.forEach(it => it.error?.(wsSet, err)));\n ws.on('message', (data, isBinary) => execute.forEach(it => it.message(wsSet, {data, isBinary})));\n ws.on('ping', () => execute.forEach(it => it.ping?.(wsSet)));\n ws.on('close', () => {\n this.webSocketClients.delete(ws);\n execute.forEach(it => it.close?.(wsSet));\n });\n });\n }\n this.server.listen(this.option.listen.port, this.option.listen.hostname, this.option.listen.backlog, () => {\n this.option.listen.listeningListener?.(this, this.server);\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_simple_boot", "import_core", "HttpsServer", "HttpServer", "it", "data"]
7
7
  }
@@ -99,6 +99,7 @@ function GET(configOrTarget, propertyKey, descriptor) {
99
99
  process({ method: import_HttpMethod.HttpMethod.GET }, configOrTarget, propertyKey, descriptor);
100
100
  } else {
101
101
  return (target, propertyKey2, descriptor2) => {
102
+ configOrTarget = configOrTarget ?? {};
102
103
  configOrTarget.method = import_HttpMethod.HttpMethod.GET;
103
104
  process(configOrTarget, target, propertyKey2, descriptor2);
104
105
  };
@@ -115,6 +116,7 @@ function POST(configOrTarget, propertyKey, descriptor) {
115
116
  process({ method: import_HttpMethod.HttpMethod.POST }, configOrTarget, propertyKey, descriptor);
116
117
  } else {
117
118
  return (target, propertyKey2, descriptor2) => {
119
+ configOrTarget = configOrTarget ?? {};
118
120
  configOrTarget.method = import_HttpMethod.HttpMethod.POST;
119
121
  process(configOrTarget, target, propertyKey2, descriptor2);
120
122
  };
@@ -131,6 +133,7 @@ function DELETE(configOrTarget, propertyKey, descriptor) {
131
133
  process({ method: import_HttpMethod.HttpMethod.DELETE }, configOrTarget, propertyKey, descriptor);
132
134
  } else {
133
135
  return (target, propertyKey2, descriptor2) => {
136
+ configOrTarget = configOrTarget ?? {};
134
137
  configOrTarget.method = import_HttpMethod.HttpMethod.DELETE;
135
138
  process(configOrTarget, target, propertyKey2, descriptor2);
136
139
  };
@@ -147,6 +150,7 @@ function PUT(configOrTarget, propertyKey, descriptor) {
147
150
  process({ method: import_HttpMethod.HttpMethod.PUT }, configOrTarget, propertyKey, descriptor);
148
151
  } else {
149
152
  return (target, propertyKey2, descriptor2) => {
153
+ configOrTarget = configOrTarget ?? {};
150
154
  configOrTarget.method = import_HttpMethod.HttpMethod.PUT;
151
155
  process(configOrTarget, target, propertyKey2, descriptor2);
152
156
  };
@@ -163,6 +167,7 @@ function PATCH(configOrTarget, propertyKey, descriptor) {
163
167
  process({ method: import_HttpMethod.HttpMethod.PATCH }, configOrTarget, propertyKey, descriptor);
164
168
  } else {
165
169
  return (target, propertyKey2, descriptor2) => {
170
+ configOrTarget = configOrTarget ?? {};
166
171
  configOrTarget.method = import_HttpMethod.HttpMethod.PATCH;
167
172
  process(configOrTarget, target, propertyKey2, descriptor2);
168
173
  };
@@ -179,6 +184,7 @@ function OPTIONS(configOrTarget, propertyKey, descriptor) {
179
184
  process({ method: import_HttpMethod.HttpMethod.OPTIONS }, configOrTarget, propertyKey, descriptor);
180
185
  } else {
181
186
  return (target, propertyKey2, descriptor2) => {
187
+ configOrTarget = configOrTarget ?? {};
182
188
  configOrTarget.method = import_HttpMethod.HttpMethod.OPTIONS;
183
189
  process(configOrTarget, target, propertyKey2, descriptor2);
184
190
  };
@@ -195,6 +201,7 @@ function HEAD(configOrTarget, propertyKey, descriptor) {
195
201
  process({ method: import_HttpMethod.HttpMethod.HEAD }, configOrTarget, propertyKey, descriptor);
196
202
  } else {
197
203
  return (target, propertyKey2, descriptor2) => {
204
+ configOrTarget = configOrTarget ?? {};
198
205
  configOrTarget.method = import_HttpMethod.HttpMethod.HEAD;
199
206
  process(configOrTarget, target, propertyKey2, descriptor2);
200
207
  };
@@ -211,6 +218,7 @@ function TRACE(configOrTarget, propertyKey, descriptor) {
211
218
  process({ method: import_HttpMethod.HttpMethod.TRACE }, configOrTarget, propertyKey, descriptor);
212
219
  } else {
213
220
  return (target, propertyKey2, descriptor2) => {
221
+ configOrTarget = configOrTarget ?? {};
214
222
  configOrTarget.method = import_HttpMethod.HttpMethod.TRACE;
215
223
  process(configOrTarget, target, propertyKey2, descriptor2);
216
224
  };
@@ -227,6 +235,7 @@ function CONNECT(configOrTarget, propertyKey, descriptor) {
227
235
  process({ method: import_HttpMethod.HttpMethod.CONNECT }, configOrTarget, propertyKey, descriptor);
228
236
  } else {
229
237
  return (target, propertyKey2, descriptor2) => {
238
+ configOrTarget = configOrTarget ?? {};
230
239
  configOrTarget.method = import_HttpMethod.HttpMethod.CONNECT;
231
240
  process(configOrTarget, target, propertyKey2, descriptor2);
232
241
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/decorators/MethodMapping.ts"],
4
- "sourcesContent": ["import { ConstructorType } from '@dooboostore/core';\nimport { ReflectMethod } from '@dooboostore/simple-boot';\nimport { ReflectUtils } from '@dooboostore/core';\nimport { Resolver } from '../resolvers/Resolver';\nimport { Mimes } from '../codes/Mimes';\nimport { HttpMethod } from '../codes/HttpMethod';\n\nexport enum UrlMappingSituationType {\n REQ_JSON_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_JSON_BODY',\n REQ_PATH_DATA = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_PATH_DATA',\n // REQ_URL_SEARCH_PARAMS = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_URL_SEARCH_PARAMS',\n REQ_URL_SEARCH_PARAMS_OBJ = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_URL_SEARCH_PARAMS_OBJ',\n REQ_FORM_URL_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_FORM_URL_BODY'\n}\nexport type RequestMappingConfig = {\n method: HttpMethod | string;\n description?: {\n name?: string;\n detail?: string;\n };\n\n req?: {\n contentType?: (Mimes | string)[];\n accept?: (Mimes | string)[];\n };\n};\nexport type ResponseMappingConfig = {\n status?: number;\n header?: { [key: string]: string };\n contentType?: Mimes | string;\n};\nexport type MappingConfig = (RequestMappingConfig & { res?: ResponseMappingConfig; resolver?: Resolver | ConstructorType<Resolver> }) | (RequestMappingConfig & { res: 'manual' });\nexport type SaveMappingConfig = { propertyKey: string | symbol; config: MappingConfig };\nconst MappingMetadataKey = Symbol.for('simple-boot-http-server:mapping-metadata');\n// const GETSMappingMetadataKey = Symbol('GET_METHODS');\n// const GETMappingMetadataKey = Symbol('GET_METHOD');\n\nconst process = (config: MappingConfig, target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const saveMappingConfigs = (ReflectUtils.getMetadata(MappingMetadataKey, target.constructor) ?? []) as SaveMappingConfig[];\n saveMappingConfigs.push({ propertyKey, config });\n ReflectUtils.defineMetadata(MappingMetadataKey, saveMappingConfigs, target.constructor);\n ReflectUtils.defineMetadata(MappingMetadataKey, config, target, propertyKey);\n};\nexport function UrlMapping(config: MappingConfig): ReflectMethod;\nexport function UrlMapping(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function UrlMapping(configOrtarget?: MappingConfig | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.GET }, configOrtarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n process(configOrtarget, target, propertyKey, descriptor);\n };\n }\n}\nexport const getUrlMapping = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return ReflectUtils.getMetadata(MappingMetadataKey, target, propertyKey);\n};\n\nexport const getUrlMappings = (target: any): SaveMappingConfig[] => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(MappingMetadataKey, target);\n};\nexport function GET(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function GET(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function GET(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.GET }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.GET;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getGET = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getGETS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);\n};\nexport function POST(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function POST(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function POST(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.POST }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.POST;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPOST = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPOSTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.POST);\n};\nexport function DELETE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function DELETE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function DELETE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.DELETE }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.DELETE;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getDELETE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getDELETES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.DELETE);\n};\nexport function PUT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PUT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PUT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.PUT }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.PUT;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPUT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPUTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PUT);\n};\nexport function PATCH(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PATCH(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PATCH(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.PATCH }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.PATCH;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPATCH = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPATCHS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PATCH);\n};\nexport function OPTIONS(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function OPTIONS(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function OPTIONS(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.OPTIONS }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.OPTIONS;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getOPTIONS = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getOPTIONSS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.OPTIONS);\n};\nexport function HEAD(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function HEAD(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function HEAD(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.HEAD }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.HEAD;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getHEAD = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getHEADS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.HEAD);\n};\nexport function TRACE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function TRACE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function TRACE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.TRACE }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.TRACE;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getTRACE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getTRACES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.TRACE);\n};\nexport function CONNECT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function CONNECT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function CONNECT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.CONNECT }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.CONNECT;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getCONNECT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getCONNECTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.CONNECT);\n};\n\n// Aliases for lowercase\nexport const urlMapping = UrlMapping;\nexport const getMethod = GET;\nexport const postMethod = POST;\nexport const patchMethod = PATCH;\nexport const putMethod = PUT;\nexport const deleteMethod = DELETE;\nexport const optionsMethod = OPTIONS;\nexport const headMethod = HEAD;\nexport const traceMethod = TRACE;\nexport const connectMethod = CONNECT;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { ConstructorType } from '@dooboostore/core';\nimport { ReflectMethod } from '@dooboostore/simple-boot';\nimport { ReflectUtils } from '@dooboostore/core';\nimport { Resolver } from '../resolvers/Resolver';\nimport { Mimes } from '../codes/Mimes';\nimport { HttpMethod } from '../codes/HttpMethod';\n\nexport enum UrlMappingSituationType {\n REQ_JSON_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_JSON_BODY',\n REQ_PATH_DATA = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_PATH_DATA',\n // REQ_URL_SEARCH_PARAMS = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_URL_SEARCH_PARAMS',\n REQ_URL_SEARCH_PARAMS_OBJ = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_URL_SEARCH_PARAMS_OBJ',\n REQ_FORM_URL_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_FORM_URL_BODY'\n}\nexport type RequestMappingConfig = {\n method: HttpMethod | string;\n description?: {\n name?: string;\n detail?: string;\n };\n\n req?: {\n contentType?: (Mimes | string)[];\n accept?: (Mimes | string)[];\n };\n};\nexport type ResponseMappingConfig = {\n status?: number;\n header?: { [key: string]: string };\n contentType?: Mimes | string;\n};\nexport type MappingConfig = (RequestMappingConfig & { res?: ResponseMappingConfig; resolver?: Resolver | ConstructorType<Resolver> }) | (RequestMappingConfig & { res: 'manual' });\nexport type SaveMappingConfig = { propertyKey: string | symbol; config: MappingConfig };\nconst MappingMetadataKey = Symbol.for('simple-boot-http-server:mapping-metadata');\n// const GETSMappingMetadataKey = Symbol('GET_METHODS');\n// const GETMappingMetadataKey = Symbol('GET_METHOD');\n\nconst process = (config: MappingConfig, target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const saveMappingConfigs = (ReflectUtils.getMetadata(MappingMetadataKey, target.constructor) ?? []) as SaveMappingConfig[];\n saveMappingConfigs.push({ propertyKey, config });\n ReflectUtils.defineMetadata(MappingMetadataKey, saveMappingConfigs, target.constructor);\n ReflectUtils.defineMetadata(MappingMetadataKey, config, target, propertyKey);\n};\nexport function UrlMapping(config: MappingConfig): ReflectMethod;\nexport function UrlMapping(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function UrlMapping(configOrtarget?: MappingConfig | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.GET }, configOrtarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n process(configOrtarget, target, propertyKey, descriptor);\n };\n }\n}\nexport const getUrlMapping = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return ReflectUtils.getMetadata(MappingMetadataKey, target, propertyKey);\n};\n\nexport const getUrlMappings = (target: any): SaveMappingConfig[] => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(MappingMetadataKey, target);\n};\nexport function GET(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function GET(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function GET(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.GET }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.GET;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getGET = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getGETS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);\n};\nexport function POST(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function POST(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function POST(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.POST }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.POST;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPOST = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPOSTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.POST);\n};\nexport function DELETE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function DELETE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function DELETE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.DELETE }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.DELETE;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getDELETE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getDELETES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.DELETE);\n};\nexport function PUT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PUT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PUT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.PUT }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.PUT;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPUT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPUTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PUT);\n};\nexport function PATCH(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PATCH(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PATCH(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.PATCH }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.PATCH;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getPATCH = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getPATCHS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PATCH);\n};\nexport function OPTIONS(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function OPTIONS(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function OPTIONS(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.OPTIONS }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.OPTIONS;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getOPTIONS = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getOPTIONSS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.OPTIONS);\n};\nexport function HEAD(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function HEAD(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function HEAD(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.HEAD }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.HEAD;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getHEAD = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getHEADS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.HEAD);\n};\nexport function TRACE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function TRACE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function TRACE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.TRACE }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.TRACE;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getTRACE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getTRACES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.TRACE);\n};\nexport function CONNECT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function CONNECT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function CONNECT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({ method: HttpMethod.CONNECT }, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget = configOrTarget ?? {};\n configOrTarget.method = HttpMethod.CONNECT;\n process(configOrTarget, target, propertyKey, descriptor);\n };\n }\n}\n\nexport const getCONNECT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n};\nexport const getCONNECTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.CONNECT);\n};\n\n// Aliases for lowercase\nexport const urlMapping = UrlMapping;\nexport const getMethod = GET;\nexport const postMethod = POST;\nexport const patchMethod = PATCH;\nexport const putMethod = PUT;\nexport const deleteMethod = DELETE;\nexport const optionsMethod = OPTIONS;\nexport const headMethod = HEAD;\nexport const traceMethod = TRACE;\nexport const connectMethod = CONNECT;\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_core", "UrlMappingSituationType", "propertyKey", "descriptor"]
7
7
  }
@@ -34,6 +34,7 @@ var import_node_buffer = require("node:buffer");
34
34
  var import_core_node = require("@dooboostore/core-node");
35
35
  var import_core2 = require("@dooboostore/core");
36
36
  var import_core_node2 = require("@dooboostore/core-node");
37
+ var import_BadRequestError = require("../errors/BadRequestError");
37
38
  class RequestResponse {
38
39
  constructor(req, res, config) {
39
40
  // [아키텍트님의 정석] RequestResponse 객체 고유의 속성 저장소 (트랜잭션 생명주기)
@@ -292,7 +293,12 @@ class RequestResponse {
292
293
  return data;
293
294
  }
294
295
  async reqBodyJsonData() {
295
- return JSON.parse(await this.reqBodyStringData());
296
+ const raw = await this.reqBodyStringData();
297
+ try {
298
+ return JSON.parse(raw);
299
+ } catch (e) {
300
+ throw new import_BadRequestError.BadRequestError({ message: `Invalid JSON body: ${e?.message ?? e}` });
301
+ }
296
302
  }
297
303
  async reqBodyFormUrlData() {
298
304
  const data = await this.reqBodyStringData();
@@ -315,7 +321,14 @@ class RequestResponse {
315
321
  }
316
322
  async reqBodyReqJsonBody() {
317
323
  const data = await this.reqBodyStringData();
318
- return Object.assign(new import_ReqJsonBody.ReqJsonBody(), data ? JSON.parse(data) : {});
324
+ if (!data) {
325
+ return Object.assign(new import_ReqJsonBody.ReqJsonBody(), {});
326
+ }
327
+ try {
328
+ return Object.assign(new import_ReqJsonBody.ReqJsonBody(), JSON.parse(data));
329
+ } catch (e) {
330
+ throw new import_BadRequestError.BadRequestError({ message: `Invalid JSON body: ${e?.message ?? e}` });
331
+ }
319
332
  }
320
333
  resBodyJsonData() {
321
334
  const data = import_core_node2.ConvertUtils.toString(this.resBodyData());
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/models/RequestResponse.ts"],
4
- "sourcesContent": ["import { IncomingMessage, OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from 'http';\nimport { HttpHeaders, HttpHeadersType } from '../codes/HttpHeaders';\nimport { Mimes } from '../codes/Mimes';\nimport { Intent } from '@dooboostore/simple-boot';\nimport { URL, URLSearchParams } from 'url';\nimport { Buffer } from 'buffer';\nimport { MultipartData } from './datas/MultipartData';\nimport { ReqFormUrlBody } from './datas/body/ReqFormUrlBody';\nimport { ReqJsonBody } from './datas/body/ReqJsonBody';\nimport { ReqHeader } from './datas/ReqHeader';\nimport { ReqMultipartFormBody } from './datas/body/ReqMultipartFormBody';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { gzip } from 'node-gzip';\nimport { createGzip, constants as zlibConstants } from 'zlib';\nimport { SessionManager } from '../session/SessionManager';\nimport { HttpServerOption } from '../option/HttpServerOption';\nimport { Blob } from 'node:buffer';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { RandomUtils } from '@dooboostore/core';\nimport { FileUtils } from '@dooboostore/core-node';\nimport { ConvertUtils as CoreConvertUtils } from '@dooboostore/core';\nimport { ConvertUtils } from '@dooboostore/core-node';\nimport {HttpMethod} from \"../codes\";\n\ntype Config = { sessionManager?: SessionManager; option: HttpServerOption };\n\nexport class RequestResponse {\n protected resWriteChunk: string | Buffer | undefined;\n protected reqBodyChunk?: Buffer;\n protected req: IncomingMessage;\n protected res: ServerResponse;\n protected config: Config;\n\n // [\uC544\uD0A4\uD14D\uD2B8\uB2D8\uC758 \uC815\uC11D] RequestResponse \uAC1D\uCCB4 \uACE0\uC720\uC758 \uC18D\uC131 \uC800\uC7A5\uC18C (\uD2B8\uB79C\uC7AD\uC158 \uC0DD\uBA85\uC8FC\uAE30)\n protected attributes = new Map<string, any>();\n\n constructor(req: IncomingMessage | RequestResponse, res: ServerResponse, config: Config) {\n if (req instanceof RequestResponse) {\n this.req = req.req;\n this.res = req.res;\n this.config = config;\n this.attributes = req.attributes;\n } else {\n this.req = req;\n this.res = res!;\n this.config = config;\n }\n }\n\n // --- RequestResponse Attributes (Transaction Life-cycle) ---\n\n setAttribute(key: string, value: any): void {\n this.attributes.set(key, value);\n }\n\n getAttribute<T = any>(key: string): T | undefined {\n return this.attributes.get(key) as T;\n }\n\n get reqSocket() {\n return this.req.socket;\n }\n\n get reqCookieMap() {\n let cookies = this.reqHeader(HttpHeaders.Cookie) ?? '';\n if (Array.isArray(cookies)) {\n cookies = cookies.join(';');\n }\n\n const map = new Map<string, string>();\n cookies\n .split(';')\n .map(it => it.trim().split('='))\n .forEach(it => {\n if (it[0]) map.set(it[0], it[1]);\n });\n return map;\n }\n\n reqCookieGet(key: string) {\n return this.reqCookieMap.get(key);\n }\n\n get reqRemoteAddress(): string | undefined {\n const ipHeader = this.req.headers['x-forwarded-for'];\n let ip = this.req.socket.remoteAddress;\n if (Array.isArray(ipHeader)) {\n ip = ipHeader.join(',').split(',').shift();\n } else if (typeof ipHeader === 'string') {\n ip = ipHeader.split(',').shift();\n }\n return ip;\n }\n\n get reqUrlObject(): URL {\n return new URL(this.reqUrl, `${this.reqSocket ? 'https://' : 'http://'}${this.reqHost ?? 'localhost'}`);\n }\n\n get reqUrlPathName(): string {\n return this.reqUrlObj().pathname ?? '';\n }\n\n get reqUrl(): string {\n return this.req.url ?? '';\n }\n\n reqUrlObj(config?: { scheme?: string; host?: string }): URL {\n return new URL(`${config?.scheme ?? 'http'}://${config?.host ? config?.host : (this.reqHeaderFirst(HttpHeaders.Host) ?? 'localhost')}${this.req.url ?? ''}`);\n }\n\n get reqUrlSearchParamTuples(): [string, string][] {\n return Array.from(this.reqUrlObj().searchParams as any);\n }\n\n get reqUrlSearchParams(): URLSearchParams {\n return this.reqUrlObj().searchParams;\n }\n\n get reqUrlSearchParamsObj(): { [p: string]: string | string[] } {\n const entries = this.reqUrlObj().searchParams;\n return CoreConvertUtils.toObject(entries);\n }\n\n get reqPathSearchParamUrl(): string {\n const reqUrlObj = this.reqUrlObj();\n return reqUrlObj.pathname + (reqUrlObj.searchParams.toString() ? '?' + reqUrlObj.searchParams.toString() : '');\n }\n\n get reqReadable() {\n return this.req.readable;\n }\n\n get reqIntent() {\n return new Intent(this.reqPathSearchParamUrl);\n }\n\n reqHasContentTypeHeader(mime: Mimes | string): boolean {\n const contentType = this.reqHeader(HttpHeaders.ContentType);\n if (!contentType) return false;\n \n const targetMime = mime.toString().toLowerCase();\n const contentTypes = Array.isArray(contentType) ? contentType : [contentType];\n \n // \uBAA8\uB4E0 Content-Type \uD5E4\uB354\uB97C \uD655\uC778\n return contentTypes.some(ct => {\n // Content-Type\uC740 \uBCF4\uD1B5 \uB2E8\uC77C \uAC12\uC774\uC9C0\uB9CC, \uD30C\uB77C\uBBF8\uD130\uAC00 \uBD99\uC744 \uC218 \uC788\uC74C (charset=utf-8 \uB4F1)\n // \uC138\uBBF8\uCF5C\uB860\uC73C\uB85C split\uD574\uC11C \uC55E \uBD80\uBD84(MIME \uD0C0\uC785)\uB9CC \uBE44\uAD50\n const [mimeType] = ct.split(';').map(m => m.trim());\n return mimeType.toLowerCase() === targetMime || mimeType.toLowerCase().includes(targetMime);\n });\n }\n\n reqHasAcceptHeader(mime: Mimes | string): boolean {\n const accept = this.reqHeader(HttpHeaders.Accept);\n if (!accept) return false;\n\n const targetMime = mime.toString().toLowerCase();\n const acceptHeaders = Array.isArray(accept) ? accept : [accept];\n\n return acceptHeaders.some(acceptHeader => {\n const acceptMimes = acceptHeader.split(',').map(m => m.split(';')[0].trim().toLowerCase());\n return acceptMimes.some(acceptMime => acceptMime.includes(targetMime));\n });\n }\n\n reqBodyData(): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n if (this.reqReadable) {\n const data: Uint8Array[] = [];\n this.req.on('data', chunk => data.push(chunk));\n this.req.on('error', err => reject(err));\n this.req.on('end', () => {\n this.reqBodyChunk = Buffer.concat(data);\n resolve(this.reqBodyChunk);\n });\n } else {\n resolve(this.reqBodyChunk ?? Buffer.alloc(0));\n }\n });\n }\n\n resBodyData(): string | Buffer | undefined {\n return this.resWriteChunk;\n }\n\n async reqBodyMultipartFormDataObject<T>(): Promise<T> {\n const m = await this.reqBodyMultipartFormData();\n const formData = {} as any;\n\n for (const it of m) {\n if (it.isFile) {\n formData[it.name] = await FileUtils.writeFile(it.value, { originalName: it.filename, etcData: it });\n } else {\n const target = formData[it.name];\n if (Array.isArray(target)) {\n target.push(it.value);\n } else if (typeof target === 'string') {\n formData[it.name] = [target, it.value];\n } else {\n formData[it.name] = it.value;\n }\n }\n }\n return formData;\n }\n\n reqBodyMultipartFormData(): Promise<MultipartData[]> {\n return new Promise((resolve, reject) => {\n const contentTypeHeader = this.req.headers['content-type'];\n if (!contentTypeHeader || !contentTypeHeader.startsWith('multipart/form-data')) {\n return reject(new Error('Invalid Content-Type. Expected multipart/form-data.'));\n }\n\n const boundaryMatch = contentTypeHeader.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n if (!boundaryMatch) {\n return reject(new Error('Boundary not found in Content-Type header.'));\n }\n const boundary = boundaryMatch[1] || boundaryMatch[2];\n if (!boundary) {\n return reject(new Error('Failed to extract boundary.'));\n }\n\n const boundaryBuffer = Buffer.from(`--${boundary}`);\n const crlfBuffer = Buffer.from('\\r\\n');\n const doubleCrlfBuffer = Buffer.from('\\r\\n\\r\\n');\n\n const chunks: Buffer[] = [];\n let totalLength = 0;\n\n this.req.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n totalLength += chunk.length;\n });\n\n this.req.on('error', err => {\n reject(err);\n });\n\n this.req.on('end', () => {\n if (totalLength === 0) {\n return resolve([]);\n }\n\n const fullBuffer = Buffer.concat(chunks, totalLength);\n const parsedParts: MultipartData[] = [];\n let currentPosition = 0;\n\n let boundaryStartIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (boundaryStartIndex === -1) {\n return reject(new Error('Initial boundary not found.'));\n }\n currentPosition = boundaryStartIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n while (currentPosition < fullBuffer.length) {\n const nextBoundaryIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (nextBoundaryIndex === -1) {\n break;\n }\n\n let partEndIndex = nextBoundaryIndex;\n if (partEndIndex > crlfBuffer.length && fullBuffer.slice(partEndIndex - crlfBuffer.length, partEndIndex).equals(crlfBuffer)) {\n partEndIndex -= crlfBuffer.length;\n }\n const partBuffer = fullBuffer.slice(currentPosition, partEndIndex);\n\n const headerBodySeparatorIndex = partBuffer.indexOf(doubleCrlfBuffer);\n if (headerBodySeparatorIndex === -1) {\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break;\n continue;\n }\n\n const headerBuffer = partBuffer.slice(0, headerBodySeparatorIndex);\n const bodyBuffer = partBuffer.slice(headerBodySeparatorIndex + doubleCrlfBuffer.length);\n const headersStr = headerBuffer.toString('utf-8');\n\n const headers: { [key: string]: string } = {};\n headersStr.split('\\r\\n').forEach(line => {\n const colonIndex = line.indexOf(':');\n if (colonIndex > 0) {\n const key = line.substring(0, colonIndex).trim().toLowerCase();\n const value = line.substring(colonIndex + 1).trim();\n headers[key] = value;\n }\n });\n\n const contentDisposition = headers['content-disposition'];\n if (!contentDisposition) {\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break;\n continue;\n }\n\n const nameMatch = contentDisposition.match(/name=\"([^\"]+)\"/i);\n const filenameMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i);\n\n const name = nameMatch ? nameMatch[1] : null;\n const filename = filenameMatch ? filenameMatch[1] : null;\n const contentType = headers['content-type'] || null;\n\n if (name) {\n if (filename) {\n parsedParts.push({\n isFile: true,\n name: name,\n filename: filename,\n contentType: contentType ?? 'application/octet-stream',\n value: bodyBuffer\n });\n } else {\n parsedParts.push({\n isFile: false,\n name: name,\n value: bodyBuffer.toString('utf-8')\n });\n }\n }\n\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') {\n break;\n }\n }\n resolve(parsedParts);\n });\n });\n }\n\n async reqBodyStringData(): Promise<string> {\n const data = (await this.reqBodyData()).toString();\n return data;\n }\n\n async reqBodyJsonData<T>(): Promise<T> {\n return JSON.parse(await this.reqBodyStringData());\n }\n\n async reqBodyFormUrlData<T>(): Promise<T> {\n const data = await this.reqBodyStringData();\n const formData = {} as any;\n Array.from(new URLSearchParams(data).entries()).forEach(([k, v]) => {\n const target = formData[k];\n if (Array.isArray(target)) {\n target.push(v);\n } else if (typeof target === 'string') {\n formData[k] = [target, v];\n } else {\n formData[k] = v;\n }\n });\n return formData;\n }\n\n async reqBodyReqFormUrlBody() {\n const data = await this.reqBodyFormUrlData();\n return Object.assign(new ReqFormUrlBody(), data);\n }\n\n async reqBodyReqJsonBody(): Promise<ReqJsonBody> {\n const data = await this.reqBodyStringData();\n return Object.assign(new ReqJsonBody(), data ? JSON.parse(data) : {});\n }\n\n resBodyJsonData<T>(): T | null {\n const data = ConvertUtils.toString(this.resBodyData());\n return data ? JSON.parse(data) : null;\n }\n\n resBodyStringData() {\n return ConvertUtils.toString(this.resBodyData());\n }\n\n reqMethod() {\n return this.req.method?.toUpperCase();\n }\n\n reqIsMethod(method: HttpMethod | string) {\n return this.reqMethod().toUpperCase() === (method as string).toUpperCase();\n }\n\n reqHeader(key: keyof typeof HttpHeaders | string) {\n return this.req.headers[(key as string).toLowerCase()];\n }\n\n get reqHost() {\n return this.reqHeaderFirst(HttpHeaders.Host);\n }\n\n get reqHeaderObj(): ReqHeader {\n const h = new ReqHeader();\n Object.entries(this.req.headers).forEach(([k, v]) => {\n h[k] = v;\n });\n return h;\n }\n\n reqHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.req.headers[(key as string).toLowerCase()];\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n public reqAuthorizationHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n reqRefreshTokenHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n resStatusCode(code?: undefined): number;\n resStatusCode(code: number | HttpStatus): RequestResponseChain<number>;\n resStatusCode(code: number | undefined | HttpStatus): number | RequestResponseChain<number> {\n if (code) {\n this.res.statusCode = code;\n return new RequestResponseChain<number>(this.req, this.res, this.config, this.res.statusCode);\n } else {\n return this.res.statusCode;\n }\n }\n\n resHeader(key: HttpHeadersType | string) {\n return this.res.getHeader((key as string).toLowerCase());\n }\n\n resHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.res.getHeader((key as string).toLowerCase());\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n async reqSession(): Promise<{ [key: string]: any }> {\n if (this.config.sessionManager) {\n const session = await this.config.sessionManager.session(this);\n session.dataSet.data ??= {};\n return session.dataSet.data;\n } else {\n return Promise.reject(new Error('Not SessionManager'));\n }\n }\n\n async reqSessionSet(key: string, value: any): Promise<void> {\n const sessionData = await this.reqSession();\n sessionData[key] = value;\n }\n\n async reqSessionGet<T = any>(key: string): Promise<T | undefined> {\n const sessionData = await this.reqSession();\n return sessionData[key] as T;\n }\n\n resSetStatusCode(statusCode: number) {\n this.res.statusCode = statusCode;\n return this.createRequestResponseChain(this.res.statusCode);\n }\n\n resWrite(chunk: string | Buffer | any, encoding: BufferEncoding = 'utf8') {\n this.resWriteChunk = chunk;\n return this.createRequestResponseChain(this.resWriteChunk);\n }\n\n resWriteJson(chunk: any, encoding: BufferEncoding = 'utf8') {\n return this.resWrite(JSON.stringify(chunk), encoding);\n }\n\n resSetHeader(key: HttpHeadersType | string, value: string | string[]) {\n this.res.setHeader((key as string).toLowerCase(), value);\n return this.createRequestResponseChain();\n }\n\n resAddHeader(key: HttpHeadersType | string, value: string | string[]) {\n const existingValue = this.res.getHeader((key as string).toLowerCase());\n const newValue = Array.isArray(existingValue) ? existingValue.concat(value) : existingValue ? [existingValue.toString(), ...[].concat(value as any)] : value;\n this.res.setHeader((key as string).toLowerCase(), newValue as any);\n return this.createRequestResponseChain();\n }\n\n resSetHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resSetHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n resAddHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resAddHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n private async resEndChunk() {\n const encoding = this.reqHeaderFirst(HttpHeaders.AcceptEncoding);\n let data = this.resWriteChunk;\n if (encoding?.includes('gzip') && data) {\n data = await gzip(data);\n this.resSetHeader(HttpHeaders.ContentEncoding, 'gzip');\n }\n this.res.end(data);\n }\n\n async resEnd(chunk?: string | Buffer | Blob | ArrayBuffer | Response) {\n if (chunk instanceof Response) {\n chunk.headers.forEach((value, key) => {\n this.res.setHeader(`ORIGIN-${key}`, value);\n });\n if (!this.resHeader(HttpHeaders.ContentType)) {\n const contentType = chunk.headers.get(HttpHeaders.ContentType);\n if (contentType) this.res.setHeader(HttpHeaders.ContentType, contentType);\n }\n this.res.statusCode = chunk.status;\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n } else if (chunk instanceof Blob) {\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n if (!this.resHeader(HttpHeaders.ContentType)) {\n this.res.setHeader(HttpHeaders.ContentType, chunk.type);\n }\n } else if (chunk instanceof ArrayBuffer) {\n this.resWriteChunk = Buffer.from(chunk);\n } else {\n this.resWriteChunk = chunk ?? this.resWriteChunk;\n }\n\n if (this.req.readable) {\n await this.reqBodyData();\n await this.resEndChunk();\n } else {\n await this.resEndChunk();\n }\n }\n\n resRedirect(statusCode: number, location: string) {\n this.res.statusCode = statusCode;\n this.res.setHeader(HttpHeaders.Location, location);\n this.res.end();\n }\n resWriteHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n return this.createRequestResponseChain(this.res.writeHead(statusCode, headers as any));\n }\n resWriteHeadEnd(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n this.createRequestResponseChain(this.res.writeHead(statusCode, headers as any));\n this.res.end();\n }\n\n /**\n * \uD5E4\uB354\uB97C \uC989\uC2DC \uBCF4\uB0B4\uACE0, source \uAC00 \uB0B4\uB193\uB294 \uAC12\uC744 \uD558\uB098\uC529 \uBC14\uB85C body \uC5D0 \uC4F4 \uB4A4 end.\n * (SSE / \uC2A4\uD2B8\uB9AC\uBC0D \uC751\uB2F5\uC6A9. resWrite \uB294 \uBC84\uD37C\uB9C1 \uD6C4 resEnd \uC5D0\uC11C \uD55C \uBC88\uC5D0 \uBCF4\uB0B4\uBBC0\uB85C \uC2A4\uD2B8\uB9AC\uBC0D \uBD88\uAC00)\n * - \uBB38\uC790\uC5F4/Buffer \uB294 \uADF8\uB300\uB85C, \uADF8 \uC678\uB294 JSON.stringify\n * - Accept-Encoding \uC5D0 gzip \uC774 \uC788\uC73C\uBA74 gzip \uC2A4\uD2B8\uB9BC\uC73C\uB85C \uC555\uCD95\uD558\uACE0, \uCCAD\uD06C\uB9C8\uB2E4 Z_SYNC_FLUSH \uB85C \uBC14\uB85C \uB0B4\uBCF4\uB0B8\uB2E4\n * (flush \uC5C6\uC774 \uC4F0\uBA74 zlib \uB0B4\uBD80 \uBC84\uD37C\uC5D0 \uBAA8\uC600\uB2E4\uAC00 \uB2A6\uAC8C \uB098\uAC00\uC11C SSE \uC2E4\uC2DC\uAC04\uC131\uC774 \uAE68\uC9D0)\n * option.compress === false \uBA74 \uC555\uCD95 \uC548 \uD568 (MJPEG \uCC98\uB7FC \uC774\uBBF8 \uC555\uCD95\uB41C \uB0B4\uC6A9 \u2014 CPU\uB9CC \uC4F0\uACE0, gzip \uBABB \uD478\uB294 \uD074\uB77C\uC774\uC5B8\uD2B8\uB3C4 \uC788\uC74C)\n * - \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uB04A\uC73C\uBA74 source.return() \uC73C\uB85C \uC81C\uB108\uB808\uC774\uD130\uB97C \uC885\uB8CC\uC2DC\uCF1C finally \uAC00 \uB3CC\uAC8C \uD55C\uB2E4\n */\n async resStream(source: Iterable<any> | AsyncIterable<any>, option: { compress?: boolean } = {}) {\n const res = this.res;\n const gz = option.compress !== false && this.reqHeaderFirst(HttpHeaders.AcceptEncoding)?.includes('gzip') ? createGzip() : undefined;\n if (gz) {\n res.setHeader(HttpHeaders.ContentEncoding, 'gzip');\n res.removeHeader(HttpHeaders.ContentLength);\n gz.pipe(res);\n }\n const out = gz ?? res;\n res.flushHeaders();\n let closed = false;\n const onClose = () => {\n closed = true;\n (source as any).return?.();\n };\n res.once('close', onClose);\n try {\n for await (const chunk of source) {\n if (closed) break;\n const data = typeof chunk === 'string' || Buffer.isBuffer(chunk) ? chunk : JSON.stringify(chunk);\n const ok = out.write(data);\n gz?.flush(zlibConstants.Z_SYNC_FLUSH);\n // backpressure: \uBC84\uD37C\uAC00 \uCC28\uBA74 drain(\uB610\uB294 \uC5F0\uACB0 \uC885\uB8CC)\uAE4C\uC9C0 \uB300\uAE30\n if (!ok) await new Promise(resolve => { out.once('drain', resolve); res.once('close', resolve); });\n }\n } catch (e) {\n // \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uB04A\uAE34 \uB4A4\uC758 \uC5D0\uB7EC(AbortSignal \uB85C \uB300\uAE30\uB97C \uD47C AbortError \uB4F1)\uB294 \uBC1B\uC744 \uC0C1\uB300\uAC00 \uC5C6\uC73C\uB2C8 \uC0BC\uD0A8\uB2E4\n if (!closed) throw e;\n } finally {\n res.off('close', onClose);\n if (closed) {\n gz?.destroy();\n } else if (!res.writableEnded) {\n // gzip \uC774\uBA74 gz.end() \u2192 pipe \uAC00 res.end() \uAE4C\uC9C0 \uD574\uC900\uB2E4. \uB05D\uAE4C\uC9C0 \uD758\uB824\uBCF4\uB0B8 \uB4A4 \uB9AC\uD134\n const finished = new Promise(resolve => { res.once('finish', resolve); res.once('close', resolve); });\n out.end();\n await finished;\n }\n }\n }\n\n resIsDone() {\n return this.res.finished || this.res.writableEnded || this.res.headersSent;\n }\n\n createRequestResponseChain<T = any>(data?: T) {\n const requestResponseChain = new RequestResponseChain(this.req, this.res, this.config, data);\n requestResponseChain.resWriteChunk = this.resWriteChunk;\n requestResponseChain.reqBodyChunk = this.reqBodyChunk;\n return requestResponseChain;\n }\n}\n\nexport class RequestResponseChain<T> extends RequestResponse {\n constructor(\n req: IncomingMessage,\n res: ServerResponse,\n config: Config,\n public result?: T\n ) {\n super(req, res, config);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { IncomingMessage, OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from 'http';\nimport { HttpHeaders, HttpHeadersType } from '../codes/HttpHeaders';\nimport { Mimes } from '../codes/Mimes';\nimport { Intent } from '@dooboostore/simple-boot';\nimport { URL, URLSearchParams } from 'url';\nimport { Buffer } from 'buffer';\nimport { MultipartData } from './datas/MultipartData';\nimport { ReqFormUrlBody } from './datas/body/ReqFormUrlBody';\nimport { ReqJsonBody } from './datas/body/ReqJsonBody';\nimport { ReqHeader } from './datas/ReqHeader';\nimport { ReqMultipartFormBody } from './datas/body/ReqMultipartFormBody';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { gzip } from 'node-gzip';\nimport { createGzip, constants as zlibConstants } from 'zlib';\nimport { SessionManager } from '../session/SessionManager';\nimport { HttpServerOption } from '../option/HttpServerOption';\nimport { Blob } from 'node:buffer';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { RandomUtils } from '@dooboostore/core';\nimport { FileUtils } from '@dooboostore/core-node';\nimport { ConvertUtils as CoreConvertUtils } from '@dooboostore/core';\nimport { ConvertUtils } from '@dooboostore/core-node';\nimport {HttpMethod} from \"../codes\";\nimport { BadRequestError } from '../errors/BadRequestError';\n\ntype Config = { sessionManager?: SessionManager; option: HttpServerOption };\n\nexport class RequestResponse {\n protected resWriteChunk: string | Buffer | undefined;\n protected reqBodyChunk?: Buffer;\n protected req: IncomingMessage;\n protected res: ServerResponse;\n protected config: Config;\n\n // [\uC544\uD0A4\uD14D\uD2B8\uB2D8\uC758 \uC815\uC11D] RequestResponse \uAC1D\uCCB4 \uACE0\uC720\uC758 \uC18D\uC131 \uC800\uC7A5\uC18C (\uD2B8\uB79C\uC7AD\uC158 \uC0DD\uBA85\uC8FC\uAE30)\n protected attributes = new Map<string, any>();\n\n constructor(req: IncomingMessage | RequestResponse, res: ServerResponse, config: Config) {\n if (req instanceof RequestResponse) {\n this.req = req.req;\n this.res = req.res;\n this.config = config;\n this.attributes = req.attributes;\n } else {\n this.req = req;\n this.res = res!;\n this.config = config;\n }\n }\n\n // --- RequestResponse Attributes (Transaction Life-cycle) ---\n\n setAttribute(key: string, value: any): void {\n this.attributes.set(key, value);\n }\n\n getAttribute<T = any>(key: string): T | undefined {\n return this.attributes.get(key) as T;\n }\n\n get reqSocket() {\n return this.req.socket;\n }\n\n get reqCookieMap() {\n let cookies = this.reqHeader(HttpHeaders.Cookie) ?? '';\n if (Array.isArray(cookies)) {\n cookies = cookies.join(';');\n }\n\n const map = new Map<string, string>();\n cookies\n .split(';')\n .map(it => it.trim().split('='))\n .forEach(it => {\n if (it[0]) map.set(it[0], it[1]);\n });\n return map;\n }\n\n reqCookieGet(key: string) {\n return this.reqCookieMap.get(key);\n }\n\n get reqRemoteAddress(): string | undefined {\n const ipHeader = this.req.headers['x-forwarded-for'];\n let ip = this.req.socket.remoteAddress;\n if (Array.isArray(ipHeader)) {\n ip = ipHeader.join(',').split(',').shift();\n } else if (typeof ipHeader === 'string') {\n ip = ipHeader.split(',').shift();\n }\n return ip;\n }\n\n get reqUrlObject(): URL {\n return new URL(this.reqUrl, `${this.reqSocket ? 'https://' : 'http://'}${this.reqHost ?? 'localhost'}`);\n }\n\n get reqUrlPathName(): string {\n return this.reqUrlObj().pathname ?? '';\n }\n\n get reqUrl(): string {\n return this.req.url ?? '';\n }\n\n reqUrlObj(config?: { scheme?: string; host?: string }): URL {\n return new URL(`${config?.scheme ?? 'http'}://${config?.host ? config?.host : (this.reqHeaderFirst(HttpHeaders.Host) ?? 'localhost')}${this.req.url ?? ''}`);\n }\n\n get reqUrlSearchParamTuples(): [string, string][] {\n return Array.from(this.reqUrlObj().searchParams as any);\n }\n\n get reqUrlSearchParams(): URLSearchParams {\n return this.reqUrlObj().searchParams;\n }\n\n get reqUrlSearchParamsObj(): { [p: string]: string | string[] } {\n const entries = this.reqUrlObj().searchParams;\n return CoreConvertUtils.toObject(entries);\n }\n\n get reqPathSearchParamUrl(): string {\n const reqUrlObj = this.reqUrlObj();\n return reqUrlObj.pathname + (reqUrlObj.searchParams.toString() ? '?' + reqUrlObj.searchParams.toString() : '');\n }\n\n get reqReadable() {\n return this.req.readable;\n }\n\n get reqIntent() {\n return new Intent(this.reqPathSearchParamUrl);\n }\n\n reqHasContentTypeHeader(mime: Mimes | string): boolean {\n const contentType = this.reqHeader(HttpHeaders.ContentType);\n if (!contentType) return false;\n \n const targetMime = mime.toString().toLowerCase();\n const contentTypes = Array.isArray(contentType) ? contentType : [contentType];\n \n // \uBAA8\uB4E0 Content-Type \uD5E4\uB354\uB97C \uD655\uC778\n return contentTypes.some(ct => {\n // Content-Type\uC740 \uBCF4\uD1B5 \uB2E8\uC77C \uAC12\uC774\uC9C0\uB9CC, \uD30C\uB77C\uBBF8\uD130\uAC00 \uBD99\uC744 \uC218 \uC788\uC74C (charset=utf-8 \uB4F1)\n // \uC138\uBBF8\uCF5C\uB860\uC73C\uB85C split\uD574\uC11C \uC55E \uBD80\uBD84(MIME \uD0C0\uC785)\uB9CC \uBE44\uAD50\n const [mimeType] = ct.split(';').map(m => m.trim());\n return mimeType.toLowerCase() === targetMime || mimeType.toLowerCase().includes(targetMime);\n });\n }\n\n reqHasAcceptHeader(mime: Mimes | string): boolean {\n const accept = this.reqHeader(HttpHeaders.Accept);\n if (!accept) return false;\n\n const targetMime = mime.toString().toLowerCase();\n const acceptHeaders = Array.isArray(accept) ? accept : [accept];\n\n return acceptHeaders.some(acceptHeader => {\n const acceptMimes = acceptHeader.split(',').map(m => m.split(';')[0].trim().toLowerCase());\n return acceptMimes.some(acceptMime => acceptMime.includes(targetMime));\n });\n }\n\n reqBodyData(): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n if (this.reqReadable) {\n const data: Uint8Array[] = [];\n this.req.on('data', chunk => data.push(chunk));\n this.req.on('error', err => reject(err));\n this.req.on('end', () => {\n this.reqBodyChunk = Buffer.concat(data);\n resolve(this.reqBodyChunk);\n });\n } else {\n resolve(this.reqBodyChunk ?? Buffer.alloc(0));\n }\n });\n }\n\n resBodyData(): string | Buffer | undefined {\n return this.resWriteChunk;\n }\n\n async reqBodyMultipartFormDataObject<T>(): Promise<T> {\n const m = await this.reqBodyMultipartFormData();\n const formData = {} as any;\n\n for (const it of m) {\n if (it.isFile) {\n formData[it.name] = await FileUtils.writeFile(it.value, { originalName: it.filename, etcData: it });\n } else {\n const target = formData[it.name];\n if (Array.isArray(target)) {\n target.push(it.value);\n } else if (typeof target === 'string') {\n formData[it.name] = [target, it.value];\n } else {\n formData[it.name] = it.value;\n }\n }\n }\n return formData;\n }\n\n reqBodyMultipartFormData(): Promise<MultipartData[]> {\n return new Promise((resolve, reject) => {\n const contentTypeHeader = this.req.headers['content-type'];\n if (!contentTypeHeader || !contentTypeHeader.startsWith('multipart/form-data')) {\n return reject(new Error('Invalid Content-Type. Expected multipart/form-data.'));\n }\n\n const boundaryMatch = contentTypeHeader.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n if (!boundaryMatch) {\n return reject(new Error('Boundary not found in Content-Type header.'));\n }\n const boundary = boundaryMatch[1] || boundaryMatch[2];\n if (!boundary) {\n return reject(new Error('Failed to extract boundary.'));\n }\n\n const boundaryBuffer = Buffer.from(`--${boundary}`);\n const crlfBuffer = Buffer.from('\\r\\n');\n const doubleCrlfBuffer = Buffer.from('\\r\\n\\r\\n');\n\n const chunks: Buffer[] = [];\n let totalLength = 0;\n\n this.req.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n totalLength += chunk.length;\n });\n\n this.req.on('error', err => {\n reject(err);\n });\n\n this.req.on('end', () => {\n if (totalLength === 0) {\n return resolve([]);\n }\n\n const fullBuffer = Buffer.concat(chunks, totalLength);\n const parsedParts: MultipartData[] = [];\n let currentPosition = 0;\n\n let boundaryStartIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (boundaryStartIndex === -1) {\n return reject(new Error('Initial boundary not found.'));\n }\n currentPosition = boundaryStartIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n while (currentPosition < fullBuffer.length) {\n const nextBoundaryIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (nextBoundaryIndex === -1) {\n break;\n }\n\n let partEndIndex = nextBoundaryIndex;\n if (partEndIndex > crlfBuffer.length && fullBuffer.slice(partEndIndex - crlfBuffer.length, partEndIndex).equals(crlfBuffer)) {\n partEndIndex -= crlfBuffer.length;\n }\n const partBuffer = fullBuffer.slice(currentPosition, partEndIndex);\n\n const headerBodySeparatorIndex = partBuffer.indexOf(doubleCrlfBuffer);\n if (headerBodySeparatorIndex === -1) {\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break;\n continue;\n }\n\n const headerBuffer = partBuffer.slice(0, headerBodySeparatorIndex);\n const bodyBuffer = partBuffer.slice(headerBodySeparatorIndex + doubleCrlfBuffer.length);\n const headersStr = headerBuffer.toString('utf-8');\n\n const headers: { [key: string]: string } = {};\n headersStr.split('\\r\\n').forEach(line => {\n const colonIndex = line.indexOf(':');\n if (colonIndex > 0) {\n const key = line.substring(0, colonIndex).trim().toLowerCase();\n const value = line.substring(colonIndex + 1).trim();\n headers[key] = value;\n }\n });\n\n const contentDisposition = headers['content-disposition'];\n if (!contentDisposition) {\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break;\n continue;\n }\n\n const nameMatch = contentDisposition.match(/name=\"([^\"]+)\"/i);\n const filenameMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i);\n\n const name = nameMatch ? nameMatch[1] : null;\n const filename = filenameMatch ? filenameMatch[1] : null;\n const contentType = headers['content-type'] || null;\n\n if (name) {\n if (filename) {\n parsedParts.push({\n isFile: true,\n name: name,\n filename: filename,\n contentType: contentType ?? 'application/octet-stream',\n value: bodyBuffer\n });\n } else {\n parsedParts.push({\n isFile: false,\n name: name,\n value: bodyBuffer.toString('utf-8')\n });\n }\n }\n\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') {\n break;\n }\n }\n resolve(parsedParts);\n });\n });\n }\n\n async reqBodyStringData(): Promise<string> {\n const data = (await this.reqBodyData()).toString();\n return data;\n }\n\n async reqBodyJsonData<T>(): Promise<T> {\n const raw = await this.reqBodyStringData();\n try {\n return JSON.parse(raw);\n } catch (e: any) {\n // Malformed JSON is a client error (400), not a server crash (500).\n // Express-compatible: surface the parse failure as Bad Request.\n throw new BadRequestError({ message: `Invalid JSON body: ${e?.message ?? e}` });\n }\n }\n\n async reqBodyFormUrlData<T>(): Promise<T> {\n const data = await this.reqBodyStringData();\n const formData = {} as any;\n Array.from(new URLSearchParams(data).entries()).forEach(([k, v]) => {\n const target = formData[k];\n if (Array.isArray(target)) {\n target.push(v);\n } else if (typeof target === 'string') {\n formData[k] = [target, v];\n } else {\n formData[k] = v;\n }\n });\n return formData;\n }\n\n async reqBodyReqFormUrlBody() {\n const data = await this.reqBodyFormUrlData();\n return Object.assign(new ReqFormUrlBody(), data);\n }\n\n async reqBodyReqJsonBody(): Promise<ReqJsonBody> {\n const data = await this.reqBodyStringData();\n if (!data) {\n return Object.assign(new ReqJsonBody(), {});\n }\n try {\n return Object.assign(new ReqJsonBody(), JSON.parse(data));\n } catch (e: any) {\n // Malformed JSON is a client error (400), not a server crash (500).\n throw new BadRequestError({ message: `Invalid JSON body: ${e?.message ?? e}` });\n }\n }\n\n resBodyJsonData<T>(): T | null {\n const data = ConvertUtils.toString(this.resBodyData());\n return data ? JSON.parse(data) : null;\n }\n\n resBodyStringData() {\n return ConvertUtils.toString(this.resBodyData());\n }\n\n reqMethod() {\n return this.req.method?.toUpperCase();\n }\n\n reqIsMethod(method: HttpMethod | string) {\n return this.reqMethod().toUpperCase() === (method as string).toUpperCase();\n }\n\n reqHeader(key: keyof typeof HttpHeaders | string) {\n return this.req.headers[(key as string).toLowerCase()];\n }\n\n get reqHost() {\n return this.reqHeaderFirst(HttpHeaders.Host);\n }\n\n get reqHeaderObj(): ReqHeader {\n const h = new ReqHeader();\n Object.entries(this.req.headers).forEach(([k, v]) => {\n h[k] = v;\n });\n return h;\n }\n\n reqHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.req.headers[(key as string).toLowerCase()];\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n public reqAuthorizationHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n reqRefreshTokenHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n resStatusCode(code?: undefined): number;\n resStatusCode(code: number | HttpStatus): RequestResponseChain<number>;\n resStatusCode(code: number | undefined | HttpStatus): number | RequestResponseChain<number> {\n if (code) {\n this.res.statusCode = code;\n return new RequestResponseChain<number>(this.req, this.res, this.config, this.res.statusCode);\n } else {\n return this.res.statusCode;\n }\n }\n\n resHeader(key: HttpHeadersType | string) {\n return this.res.getHeader((key as string).toLowerCase());\n }\n\n resHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.res.getHeader((key as string).toLowerCase());\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n async reqSession(): Promise<{ [key: string]: any }> {\n if (this.config.sessionManager) {\n const session = await this.config.sessionManager.session(this);\n session.dataSet.data ??= {};\n return session.dataSet.data;\n } else {\n return Promise.reject(new Error('Not SessionManager'));\n }\n }\n\n async reqSessionSet(key: string, value: any): Promise<void> {\n const sessionData = await this.reqSession();\n sessionData[key] = value;\n }\n\n async reqSessionGet<T = any>(key: string): Promise<T | undefined> {\n const sessionData = await this.reqSession();\n return sessionData[key] as T;\n }\n\n resSetStatusCode(statusCode: number) {\n this.res.statusCode = statusCode;\n return this.createRequestResponseChain(this.res.statusCode);\n }\n\n resWrite(chunk: string | Buffer | any, encoding: BufferEncoding = 'utf8') {\n this.resWriteChunk = chunk;\n return this.createRequestResponseChain(this.resWriteChunk);\n }\n\n resWriteJson(chunk: any, encoding: BufferEncoding = 'utf8') {\n return this.resWrite(JSON.stringify(chunk), encoding);\n }\n\n resSetHeader(key: HttpHeadersType | string, value: string | string[]) {\n this.res.setHeader((key as string).toLowerCase(), value);\n return this.createRequestResponseChain();\n }\n\n resAddHeader(key: HttpHeadersType | string, value: string | string[]) {\n const existingValue = this.res.getHeader((key as string).toLowerCase());\n const newValue = Array.isArray(existingValue) ? existingValue.concat(value) : existingValue ? [existingValue.toString(), ...[].concat(value as any)] : value;\n this.res.setHeader((key as string).toLowerCase(), newValue as any);\n return this.createRequestResponseChain();\n }\n\n resSetHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resSetHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n resAddHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resAddHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n private async resEndChunk() {\n const encoding = this.reqHeaderFirst(HttpHeaders.AcceptEncoding);\n let data = this.resWriteChunk;\n if (encoding?.includes('gzip') && data) {\n data = await gzip(data);\n this.resSetHeader(HttpHeaders.ContentEncoding, 'gzip');\n }\n this.res.end(data);\n }\n\n async resEnd(chunk?: string | Buffer | Blob | ArrayBuffer | Response) {\n if (chunk instanceof Response) {\n chunk.headers.forEach((value, key) => {\n this.res.setHeader(`ORIGIN-${key}`, value);\n });\n if (!this.resHeader(HttpHeaders.ContentType)) {\n const contentType = chunk.headers.get(HttpHeaders.ContentType);\n if (contentType) this.res.setHeader(HttpHeaders.ContentType, contentType);\n }\n this.res.statusCode = chunk.status;\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n } else if (chunk instanceof Blob) {\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n if (!this.resHeader(HttpHeaders.ContentType)) {\n this.res.setHeader(HttpHeaders.ContentType, chunk.type);\n }\n } else if (chunk instanceof ArrayBuffer) {\n this.resWriteChunk = Buffer.from(chunk);\n } else {\n this.resWriteChunk = chunk ?? this.resWriteChunk;\n }\n\n if (this.req.readable) {\n await this.reqBodyData();\n await this.resEndChunk();\n } else {\n await this.resEndChunk();\n }\n }\n\n resRedirect(statusCode: number, location: string) {\n this.res.statusCode = statusCode;\n this.res.setHeader(HttpHeaders.Location, location);\n this.res.end();\n }\n resWriteHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n return this.createRequestResponseChain(this.res.writeHead(statusCode, headers as any));\n }\n resWriteHeadEnd(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n this.createRequestResponseChain(this.res.writeHead(statusCode, headers as any));\n this.res.end();\n }\n\n /**\n * \uD5E4\uB354\uB97C \uC989\uC2DC \uBCF4\uB0B4\uACE0, source \uAC00 \uB0B4\uB193\uB294 \uAC12\uC744 \uD558\uB098\uC529 \uBC14\uB85C body \uC5D0 \uC4F4 \uB4A4 end.\n * (SSE / \uC2A4\uD2B8\uB9AC\uBC0D \uC751\uB2F5\uC6A9. resWrite \uB294 \uBC84\uD37C\uB9C1 \uD6C4 resEnd \uC5D0\uC11C \uD55C \uBC88\uC5D0 \uBCF4\uB0B4\uBBC0\uB85C \uC2A4\uD2B8\uB9AC\uBC0D \uBD88\uAC00)\n * - \uBB38\uC790\uC5F4/Buffer \uB294 \uADF8\uB300\uB85C, \uADF8 \uC678\uB294 JSON.stringify\n * - Accept-Encoding \uC5D0 gzip \uC774 \uC788\uC73C\uBA74 gzip \uC2A4\uD2B8\uB9BC\uC73C\uB85C \uC555\uCD95\uD558\uACE0, \uCCAD\uD06C\uB9C8\uB2E4 Z_SYNC_FLUSH \uB85C \uBC14\uB85C \uB0B4\uBCF4\uB0B8\uB2E4\n * (flush \uC5C6\uC774 \uC4F0\uBA74 zlib \uB0B4\uBD80 \uBC84\uD37C\uC5D0 \uBAA8\uC600\uB2E4\uAC00 \uB2A6\uAC8C \uB098\uAC00\uC11C SSE \uC2E4\uC2DC\uAC04\uC131\uC774 \uAE68\uC9D0)\n * option.compress === false \uBA74 \uC555\uCD95 \uC548 \uD568 (MJPEG \uCC98\uB7FC \uC774\uBBF8 \uC555\uCD95\uB41C \uB0B4\uC6A9 \u2014 CPU\uB9CC \uC4F0\uACE0, gzip \uBABB \uD478\uB294 \uD074\uB77C\uC774\uC5B8\uD2B8\uB3C4 \uC788\uC74C)\n * - \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uB04A\uC73C\uBA74 source.return() \uC73C\uB85C \uC81C\uB108\uB808\uC774\uD130\uB97C \uC885\uB8CC\uC2DC\uCF1C finally \uAC00 \uB3CC\uAC8C \uD55C\uB2E4\n */\n async resStream(source: Iterable<any> | AsyncIterable<any>, option: { compress?: boolean } = {}) {\n const res = this.res;\n const gz = option.compress !== false && this.reqHeaderFirst(HttpHeaders.AcceptEncoding)?.includes('gzip') ? createGzip() : undefined;\n if (gz) {\n res.setHeader(HttpHeaders.ContentEncoding, 'gzip');\n res.removeHeader(HttpHeaders.ContentLength);\n gz.pipe(res);\n }\n const out = gz ?? res;\n res.flushHeaders();\n let closed = false;\n const onClose = () => {\n closed = true;\n (source as any).return?.();\n };\n res.once('close', onClose);\n try {\n for await (const chunk of source) {\n if (closed) break;\n const data = typeof chunk === 'string' || Buffer.isBuffer(chunk) ? chunk : JSON.stringify(chunk);\n const ok = out.write(data);\n gz?.flush(zlibConstants.Z_SYNC_FLUSH);\n // backpressure: \uBC84\uD37C\uAC00 \uCC28\uBA74 drain(\uB610\uB294 \uC5F0\uACB0 \uC885\uB8CC)\uAE4C\uC9C0 \uB300\uAE30\n if (!ok) await new Promise(resolve => { out.once('drain', resolve); res.once('close', resolve); });\n }\n } catch (e) {\n // \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uB04A\uAE34 \uB4A4\uC758 \uC5D0\uB7EC(AbortSignal \uB85C \uB300\uAE30\uB97C \uD47C AbortError \uB4F1)\uB294 \uBC1B\uC744 \uC0C1\uB300\uAC00 \uC5C6\uC73C\uB2C8 \uC0BC\uD0A8\uB2E4\n if (!closed) throw e;\n } finally {\n res.off('close', onClose);\n if (closed) {\n gz?.destroy();\n } else if (!res.writableEnded) {\n // gzip \uC774\uBA74 gz.end() \u2192 pipe \uAC00 res.end() \uAE4C\uC9C0 \uD574\uC900\uB2E4. \uB05D\uAE4C\uC9C0 \uD758\uB824\uBCF4\uB0B8 \uB4A4 \uB9AC\uD134\n const finished = new Promise(resolve => { res.once('finish', resolve); res.once('close', resolve); });\n out.end();\n await finished;\n }\n }\n }\n\n resIsDone() {\n return this.res.finished || this.res.writableEnded || this.res.headersSent;\n }\n\n createRequestResponseChain<T = any>(data?: T) {\n const requestResponseChain = new RequestResponseChain(this.req, this.res, this.config, data);\n requestResponseChain.resWriteChunk = this.resWriteChunk;\n requestResponseChain.reqBodyChunk = this.reqBodyChunk;\n return requestResponseChain;\n }\n}\n\nexport class RequestResponseChain<T> extends RequestResponse {\n constructor(\n req: IncomingMessage,\n res: ServerResponse,\n config: Config,\n public result?: T\n ) {\n super(req, res, config);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAA6C;AAE7C,yBAAuB;AACvB,iBAAqC;AACrC,oBAAuB;AAEvB,4BAA+B;AAC/B,yBAA4B;AAC5B,uBAA0B;AAG1B,uBAAqB;AACrB,kBAAuD;AAGvD,yBAAqB;AAIrB,uBAA0B;AAC1B,IAAAA,eAAiD;AACjD,IAAAC,oBAA6B;AAE7B,6BAAgC;AAIzB,MAAM,gBAAgB;AAAA,EAU3B,YAAY,KAAwC,KAAqB,QAAgB;AAFzF;AAAA,SAAU,aAAa,oBAAI,IAAiB;AAG1C,QAAI,eAAe,iBAAiB;AAClC,WAAK,MAAM,IAAI;AACf,WAAK,MAAM,IAAI;AACf,WAAK,SAAS;AACd,WAAK,aAAa,IAAI;AAAA,IACxB,OAAO;AACL,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAIA,aAAa,KAAa,OAAkB;AAC1C,SAAK,WAAW,IAAI,KAAK,KAAK;AAAA,EAChC;AAAA,EAEA,aAAsB,KAA4B;AAChD,WAAO,KAAK,WAAW,IAAI,GAAG;AAAA,EAChC;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,eAAe;AACjB,QAAI,UAAU,KAAK,UAAU,+BAAY,MAAM,KAAK;AACpD,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,gBAAU,QAAQ,KAAK,GAAG;AAAA,IAC5B;AAEA,UAAM,MAAM,oBAAI,IAAoB;AACpC,YACG,MAAM,GAAG,EACT,IAAI,QAAM,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAC9B,QAAQ,QAAM;AACb,UAAI,GAAG,CAAC,EAAG,KAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,IACjC,CAAC;AACH,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,KAAa;AACxB,WAAO,KAAK,aAAa,IAAI,GAAG;AAAA,EAClC;AAAA,EAEA,IAAI,mBAAuC;AACzC,UAAM,WAAW,KAAK,IAAI,QAAQ,iBAAiB;AACnD,QAAI,KAAK,KAAK,IAAI,OAAO;AACzB,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAK,SAAS,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM;AAAA,IAC3C,WAAW,OAAO,aAAa,UAAU;AACvC,WAAK,SAAS,MAAM,GAAG,EAAE,MAAM;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,eAAoB;AACtB,WAAO,IAAI,eAAI,KAAK,QAAQ,GAAG,KAAK,YAAY,aAAa,SAAS,GAAG,KAAK,WAAW,WAAW,EAAE;AAAA,EACxG;AAAA,EAEA,IAAI,iBAAyB;AAC3B,WAAO,KAAK,UAAU,EAAE,YAAY;AAAA,EACtC;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,IAAI,OAAO;AAAA,EACzB;AAAA,EAEA,UAAU,QAAkD;AAC1D,WAAO,IAAI,eAAI,GAAG,QAAQ,UAAU,MAAM,MAAM,QAAQ,OAAO,QAAQ,OAAQ,KAAK,eAAe,+BAAY,IAAI,KAAK,WAAY,GAAG,KAAK,IAAI,OAAO,EAAE,EAAE;AAAA,EAC7J;AAAA,EAEA,IAAI,0BAA8C;AAChD,WAAO,MAAM,KAAK,KAAK,UAAU,EAAE,YAAmB;AAAA,EACxD;AAAA,EAEA,IAAI,qBAAsC;AACxC,WAAO,KAAK,UAAU,EAAE;AAAA,EAC1B;AAAA,EAEA,IAAI,wBAA4D;AAC9D,UAAM,UAAU,KAAK,UAAU,EAAE;AACjC,WAAO,aAAAC,aAAiB,SAAS,OAAO;AAAA,EAC1C;AAAA,EAEA,IAAI,wBAAgC;AAClC,UAAM,YAAY,KAAK,UAAU;AACjC,WAAO,UAAU,YAAY,UAAU,aAAa,SAAS,IAAI,MAAM,UAAU,aAAa,SAAS,IAAI;AAAA,EAC7G;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,IAAI,0BAAO,KAAK,qBAAqB;AAAA,EAC9C;AAAA,EAEA,wBAAwB,MAA+B;AACrD,UAAM,cAAc,KAAK,UAAU,+BAAY,WAAW;AAC1D,QAAI,CAAC,YAAa,QAAO;AAEzB,UAAM,aAAa,KAAK,SAAS,EAAE,YAAY;AAC/C,UAAM,eAAe,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW;AAG5E,WAAO,aAAa,KAAK,QAAM;AAG7B,YAAM,CAAC,QAAQ,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAClD,aAAO,SAAS,YAAY,MAAM,cAAc,SAAS,YAAY,EAAE,SAAS,UAAU;AAAA,IAC5F,CAAC;AAAA,EACH;AAAA,EAEA,mBAAmB,MAA+B;AAChD,UAAM,SAAS,KAAK,UAAU,+BAAY,MAAM;AAChD,QAAI,CAAC,OAAQ,QAAO;AAEpB,UAAM,aAAa,KAAK,SAAS,EAAE,YAAY;AAC/C,UAAM,gBAAgB,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAE9D,WAAO,cAAc,KAAK,kBAAgB;AACxC,YAAM,cAAc,aAAa,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;AACzF,aAAO,YAAY,KAAK,gBAAc,WAAW,SAAS,UAAU,CAAC;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EAEA,cAA+B;AAC7B,WAAO,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC9C,UAAI,KAAK,aAAa;AACpB,cAAM,OAAqB,CAAC;AAC5B,aAAK,IAAI,GAAG,QAAQ,WAAS,KAAK,KAAK,KAAK,CAAC;AAC7C,aAAK,IAAI,GAAG,SAAS,SAAO,OAAO,GAAG,CAAC;AACvC,aAAK,IAAI,GAAG,OAAO,MAAM;AACvB,eAAK,eAAe,qBAAO,OAAO,IAAI;AACtC,kBAAQ,KAAK,YAAY;AAAA,QAC3B,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,KAAK,gBAAgB,qBAAO,MAAM,CAAC,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,cAA2C;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,iCAAgD;AACpD,UAAM,IAAI,MAAM,KAAK,yBAAyB;AAC9C,UAAM,WAAW,CAAC;AAElB,eAAW,MAAM,GAAG;AAClB,UAAI,GAAG,QAAQ;AACb,iBAAS,GAAG,IAAI,IAAI,MAAM,2BAAU,UAAU,GAAG,OAAO,EAAE,cAAc,GAAG,UAAU,SAAS,GAAG,CAAC;AAAA,MACpG,OAAO;AACL,cAAM,SAAS,SAAS,GAAG,IAAI;AAC/B,YAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,iBAAO,KAAK,GAAG,KAAK;AAAA,QACtB,WAAW,OAAO,WAAW,UAAU;AACrC,mBAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AAAA,QACvC,OAAO;AACL,mBAAS,GAAG,IAAI,IAAI,GAAG;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,2BAAqD;AACnD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,oBAAoB,KAAK,IAAI,QAAQ,cAAc;AACzD,UAAI,CAAC,qBAAqB,CAAC,kBAAkB,WAAW,qBAAqB,GAAG;AAC9E,eAAO,OAAO,IAAI,MAAM,qDAAqD,CAAC;AAAA,MAChF;AAEA,YAAM,gBAAgB,kBAAkB,MAAM,iCAAiC;AAC/E,UAAI,CAAC,eAAe;AAClB,eAAO,OAAO,IAAI,MAAM,4CAA4C,CAAC;AAAA,MACvE;AACA,YAAM,WAAW,cAAc,CAAC,KAAK,cAAc,CAAC;AACpD,UAAI,CAAC,UAAU;AACb,eAAO,OAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,MACxD;AAEA,YAAM,iBAAiB,qBAAO,KAAK,KAAK,QAAQ,EAAE;AAClD,YAAM,aAAa,qBAAO,KAAK,MAAM;AACrC,YAAM,mBAAmB,qBAAO,KAAK,UAAU;AAE/C,YAAM,SAAmB,CAAC;AAC1B,UAAI,cAAc;AAElB,WAAK,IAAI,GAAG,QAAQ,CAAC,UAAkB;AACrC,eAAO,KAAK,KAAK;AACjB,uBAAe,MAAM;AAAA,MACvB,CAAC;AAED,WAAK,IAAI,GAAG,SAAS,SAAO;AAC1B,eAAO,GAAG;AAAA,MACZ,CAAC;AAED,WAAK,IAAI,GAAG,OAAO,MAAM;AACvB,YAAI,gBAAgB,GAAG;AACrB,iBAAO,QAAQ,CAAC,CAAC;AAAA,QACnB;AAEA,cAAM,aAAa,qBAAO,OAAO,QAAQ,WAAW;AACpD,cAAM,cAA+B,CAAC;AACtC,YAAI,kBAAkB;AAEtB,YAAI,qBAAqB,WAAW,QAAQ,gBAAgB,eAAe;AAC3E,YAAI,uBAAuB,IAAI;AAC7B,iBAAO,OAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,QACxD;AACA,0BAAkB,qBAAqB,eAAe;AACtD,YAAI,WAAW,MAAM,iBAAiB,kBAAkB,WAAW,MAAM,EAAE,OAAO,UAAU,GAAG;AAC7F,6BAAmB,WAAW;AAAA,QAChC;AAEA,eAAO,kBAAkB,WAAW,QAAQ;AAC1C,gBAAM,oBAAoB,WAAW,QAAQ,gBAAgB,eAAe;AAC5E,cAAI,sBAAsB,IAAI;AAC5B;AAAA,UACF;AAEA,cAAI,eAAe;AACnB,cAAI,eAAe,WAAW,UAAU,WAAW,MAAM,eAAe,WAAW,QAAQ,YAAY,EAAE,OAAO,UAAU,GAAG;AAC3H,4BAAgB,WAAW;AAAA,UAC7B;AACA,gBAAM,aAAa,WAAW,MAAM,iBAAiB,YAAY;AAEjE,gBAAM,2BAA2B,WAAW,QAAQ,gBAAgB;AACpE,cAAI,6BAA6B,IAAI;AACnC,8BAAkB,oBAAoB,eAAe;AACrD,gBAAI,WAAW,MAAM,iBAAiB,kBAAkB,WAAW,MAAM,EAAE,OAAO,UAAU,GAAG;AAC7F,iCAAmB,WAAW;AAAA,YAChC;AACA,gBAAI,WAAW,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,SAAS,MAAM,KAAM;AAChF;AAAA,UACF;AAEA,gBAAM,eAAe,WAAW,MAAM,GAAG,wBAAwB;AACjE,gBAAM,aAAa,WAAW,MAAM,2BAA2B,iBAAiB,MAAM;AACtF,gBAAM,aAAa,aAAa,SAAS,OAAO;AAEhD,gBAAM,UAAqC,CAAC;AAC5C,qBAAW,MAAM,MAAM,EAAE,QAAQ,UAAQ;AACvC,kBAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,gBAAI,aAAa,GAAG;AAClB,oBAAM,MAAM,KAAK,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,YAAY;AAC7D,oBAAM,QAAQ,KAAK,UAAU,aAAa,CAAC,EAAE,KAAK;AAClD,sBAAQ,GAAG,IAAI;AAAA,YACjB;AAAA,UACF,CAAC;AAED,gBAAM,qBAAqB,QAAQ,qBAAqB;AACxD,cAAI,CAAC,oBAAoB;AACvB,8BAAkB,oBAAoB,eAAe;AACrD,gBAAI,WAAW,MAAM,iBAAiB,kBAAkB,WAAW,MAAM,EAAE,OAAO,UAAU,GAAG;AAC7F,iCAAmB,WAAW;AAAA,YAChC;AACA,gBAAI,WAAW,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,SAAS,MAAM,KAAM;AAChF;AAAA,UACF;AAEA,gBAAM,YAAY,mBAAmB,MAAM,iBAAiB;AAC5D,gBAAM,gBAAgB,mBAAmB,MAAM,qBAAqB;AAEpE,gBAAM,OAAO,YAAY,UAAU,CAAC,IAAI;AACxC,gBAAM,WAAW,gBAAgB,cAAc,CAAC,IAAI;AACpD,gBAAM,cAAc,QAAQ,cAAc,KAAK;AAE/C,cAAI,MAAM;AACR,gBAAI,UAAU;AACZ,0BAAY,KAAK;AAAA,gBACf,QAAQ;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA,aAAa,eAAe;AAAA,gBAC5B,OAAO;AAAA,cACT,CAAC;AAAA,YACH,OAAO;AACL,0BAAY,KAAK;AAAA,gBACf,QAAQ;AAAA,gBACR;AAAA,gBACA,OAAO,WAAW,SAAS,OAAO;AAAA,cACpC,CAAC;AAAA,YACH;AAAA,UACF;AAEA,4BAAkB,oBAAoB,eAAe;AACrD,cAAI,WAAW,MAAM,iBAAiB,kBAAkB,WAAW,MAAM,EAAE,OAAO,UAAU,GAAG;AAC7F,+BAAmB,WAAW;AAAA,UAChC;AAEA,cAAI,WAAW,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,SAAS,MAAM,MAAM;AAC9E;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBAAqC;AACzC,UAAM,QAAQ,MAAM,KAAK,YAAY,GAAG,SAAS;AACjD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kBAAiC;AACrC,UAAM,MAAM,MAAM,KAAK,kBAAkB;AACzC,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,SAAS,GAAQ;AAGf,YAAM,IAAI,uCAAgB,EAAE,SAAS,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AAAA,EAEA,MAAM,qBAAoC;AACxC,UAAM,OAAO,MAAM,KAAK,kBAAkB;AAC1C,UAAM,WAAW,CAAC;AAClB,UAAM,KAAK,IAAI,2BAAgB,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;AAClE,YAAM,SAAS,SAAS,CAAC;AACzB,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,eAAO,KAAK,CAAC;AAAA,MACf,WAAW,OAAO,WAAW,UAAU;AACrC,iBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAA,MAC1B,OAAO;AACL,iBAAS,CAAC,IAAI;AAAA,MAChB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,wBAAwB;AAC5B,UAAM,OAAO,MAAM,KAAK,mBAAmB;AAC3C,WAAO,OAAO,OAAO,IAAI,qCAAe,GAAG,IAAI;AAAA,EACjD;AAAA,EAEA,MAAM,qBAA2C;AAC/C,UAAM,OAAO,MAAM,KAAK,kBAAkB;AAC1C,QAAI,CAAC,MAAM;AACT,aAAO,OAAO,OAAO,IAAI,+BAAY,GAAG,CAAC,CAAC;AAAA,IAC5C;AACA,QAAI;AACF,aAAO,OAAO,OAAO,IAAI,+BAAY,GAAG,KAAK,MAAM,IAAI,CAAC;AAAA,IAC1D,SAAS,GAAQ;AAEf,YAAM,IAAI,uCAAgB,EAAE,SAAS,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AAAA,EAEA,kBAA+B;AAC7B,UAAM,OAAO,+BAAa,SAAS,KAAK,YAAY,CAAC;AACrD,WAAO,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,EACnC;AAAA,EAEA,oBAAoB;AAClB,WAAO,+BAAa,SAAS,KAAK,YAAY,CAAC;AAAA,EACjD;AAAA,EAEA,YAAY;AACV,WAAO,KAAK,IAAI,QAAQ,YAAY;AAAA,EACtC;AAAA,EAEA,YAAY,QAA6B;AACvC,WAAO,KAAK,UAAU,EAAE,YAAY,MAAO,OAAkB,YAAY;AAAA,EAC3E;AAAA,EAEA,UAAU,KAAwC;AAChD,WAAO,KAAK,IAAI,QAAS,IAAe,YAAY,CAAC;AAAA,EACvD;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,eAAe,+BAAY,IAAI;AAAA,EAC7C;AAAA,EAEA,IAAI,eAA0B;AAC5B,UAAM,IAAI,IAAI,2BAAU;AACxB,WAAO,QAAQ,KAAK,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;AACnD,QAAE,CAAC,IAAI;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,KAA+B,cAAuB;AACnE,UAAM,SAAS,KAAK,IAAI,QAAS,IAAe,YAAY,CAAC;AAC7D,QAAI,UAAU,MAAM,QAAQ,MAAM,GAAG;AACnC,aAAO,OAAO,CAAC,KAAK;AAAA,IACtB,OAAO;AACL,aAAQ,UAAqB;AAAA,IAC/B;AAAA,EACF;AAAA,EAEO,yBAAyB;AAC9B,WAAO,KAAK,eAAe,+BAAY,aAAa;AAAA,EACtD;AAAA,EAEA,wBAAwB;AACtB,WAAO,KAAK,eAAe,+BAAY,aAAa;AAAA,EACtD;AAAA,EAIA,cAAc,MAA8E;AAC1F,QAAI,MAAM;AACR,WAAK,IAAI,aAAa;AACtB,aAAO,IAAI,qBAA6B,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,UAAU;AAAA,IAC9F,OAAO;AACL,aAAO,KAAK,IAAI;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,UAAU,KAA+B;AACvC,WAAO,KAAK,IAAI,UAAW,IAAe,YAAY,CAAC;AAAA,EACzD;AAAA,EAEA,eAAe,KAA+B,cAAuB;AACnE,UAAM,SAAS,KAAK,IAAI,UAAW,IAAe,YAAY,CAAC;AAC/D,QAAI,UAAU,MAAM,QAAQ,MAAM,GAAG;AACnC,aAAO,OAAO,CAAC,KAAK;AAAA,IACtB,OAAO;AACL,aAAQ,UAAqB;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,aAA8C;AAClD,QAAI,KAAK,OAAO,gBAAgB;AAC9B,YAAM,UAAU,MAAM,KAAK,OAAO,eAAe,QAAQ,IAAI;AAC7D,cAAQ,QAAQ,SAAS,CAAC;AAC1B,aAAO,QAAQ,QAAQ;AAAA,IACzB,OAAO;AACL,aAAO,QAAQ,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,KAAa,OAA2B;AAC1D,UAAM,cAAc,MAAM,KAAK,WAAW;AAC1C,gBAAY,GAAG,IAAI;AAAA,EACrB;AAAA,EAEA,MAAM,cAAuB,KAAqC;AAChE,UAAM,cAAc,MAAM,KAAK,WAAW;AAC1C,WAAO,YAAY,GAAG;AAAA,EACxB;AAAA,EAEA,iBAAiB,YAAoB;AACnC,SAAK,IAAI,aAAa;AACtB,WAAO,KAAK,2BAA2B,KAAK,IAAI,UAAU;AAAA,EAC5D;AAAA,EAEA,SAAS,OAA8B,WAA2B,QAAQ;AACxE,SAAK,gBAAgB;AACrB,WAAO,KAAK,2BAA2B,KAAK,aAAa;AAAA,EAC3D;AAAA,EAEA,aAAa,OAAY,WAA2B,QAAQ;AAC1D,WAAO,KAAK,SAAS,KAAK,UAAU,KAAK,GAAG,QAAQ;AAAA,EACtD;AAAA,EAEA,aAAa,KAA+B,OAA0B;AACpE,SAAK,IAAI,UAAW,IAAe,YAAY,GAAG,KAAK;AACvD,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA,EAEA,aAAa,KAA+B,OAA0B;AACpE,UAAM,gBAAgB,KAAK,IAAI,UAAW,IAAe,YAAY,CAAC;AACtE,UAAM,WAAW,MAAM,QAAQ,aAAa,IAAI,cAAc,OAAO,KAAK,IAAI,gBAAgB,CAAC,cAAc,SAAS,GAAG,GAAG,CAAC,EAAE,OAAO,KAAY,CAAC,IAAI;AACvJ,SAAK,IAAI,UAAW,IAAe,YAAY,GAAG,QAAe;AACjE,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA,EAEA,cAAc,SAA+C;AAC3D,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,aAAa,KAAK,KAAK,CAAC;AAC/E,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA,EAEA,cAAc,SAA+C;AAC3D,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,aAAa,KAAK,KAAK,CAAC;AAC/E,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA,EAEA,MAAc,cAAc;AAC1B,UAAM,WAAW,KAAK,eAAe,+BAAY,cAAc;AAC/D,QAAI,OAAO,KAAK;AAChB,QAAI,UAAU,SAAS,MAAM,KAAK,MAAM;AACtC,aAAO,UAAM,uBAAK,IAAI;AACtB,WAAK,aAAa,+BAAY,iBAAiB,MAAM;AAAA,IACvD;AACA,SAAK,IAAI,IAAI,IAAI;AAAA,EACnB;AAAA,EAEA,MAAM,OAAO,OAAyD;AACpE,QAAI,iBAAiB,UAAU;AAC7B,YAAM,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACpC,aAAK,IAAI,UAAU,UAAU,GAAG,IAAI,KAAK;AAAA,MAC3C,CAAC;AACD,UAAI,CAAC,KAAK,UAAU,+BAAY,WAAW,GAAG;AAC5C,cAAM,cAAc,MAAM,QAAQ,IAAI,+BAAY,WAAW;AAC7D,YAAI,YAAa,MAAK,IAAI,UAAU,+BAAY,aAAa,WAAW;AAAA,MAC1E;AACA,WAAK,IAAI,aAAa,MAAM;AAC5B,WAAK,gBAAgB,qBAAO,KAAK,MAAM,MAAM,YAAY,CAAC;AAAA,IAC5D,WAAW,iBAAiB,yBAAM;AAChC,WAAK,gBAAgB,qBAAO,KAAK,MAAM,MAAM,YAAY,CAAC;AAC1D,UAAI,CAAC,KAAK,UAAU,+BAAY,WAAW,GAAG;AAC5C,aAAK,IAAI,UAAU,+BAAY,aAAa,MAAM,IAAI;AAAA,MACxD;AAAA,IACF,WAAW,iBAAiB,aAAa;AACvC,WAAK,gBAAgB,qBAAO,KAAK,KAAK;AAAA,IACxC,OAAO;AACL,WAAK,gBAAgB,SAAS,KAAK;AAAA,IACrC;AAEA,QAAI,KAAK,IAAI,UAAU;AACrB,YAAM,KAAK,YAAY;AACvB,YAAM,KAAK,YAAY;AAAA,IACzB,OAAO;AACL,YAAM,KAAK,YAAY;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,YAAY,YAAoB,UAAkB;AAChD,SAAK,IAAI,aAAa;AACtB,SAAK,IAAI,UAAU,+BAAY,UAAU,QAAQ;AACjD,SAAK,IAAI,IAAI;AAAA,EACf;AAAA,EACA,aAAa,YAAoB,SAA6F;AAC5H,WAAO,KAAK,2BAA2B,KAAK,IAAI,UAAU,YAAY,OAAc,CAAC;AAAA,EACvF;AAAA,EACA,gBAAgB,YAAoB,SAA6F;AAC/H,SAAK,2BAA2B,KAAK,IAAI,UAAU,YAAY,OAAc,CAAC;AAC9E,SAAK,IAAI,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,UAAU,QAA4C,SAAiC,CAAC,GAAG;AAC/F,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,OAAO,aAAa,SAAS,KAAK,eAAe,+BAAY,cAAc,GAAG,SAAS,MAAM,QAAI,wBAAW,IAAI;AAC3H,QAAI,IAAI;AACN,UAAI,UAAU,+BAAY,iBAAiB,MAAM;AACjD,UAAI,aAAa,+BAAY,aAAa;AAC1C,SAAG,KAAK,GAAG;AAAA,IACb;AACA,UAAM,MAAM,MAAM;AAClB,QAAI,aAAa;AACjB,QAAI,SAAS;AACb,UAAM,UAAU,MAAM;AACpB,eAAS;AACT,MAAC,OAAe,SAAS;AAAA,IAC3B;AACA,QAAI,KAAK,SAAS,OAAO;AACzB,QAAI;AACF,uBAAiB,SAAS,QAAQ;AAChC,YAAI,OAAQ;AACZ,cAAM,OAAO,OAAO,UAAU,YAAY,qBAAO,SAAS,KAAK,IAAI,QAAQ,KAAK,UAAU,KAAK;AAC/F,cAAM,KAAK,IAAI,MAAM,IAAI;AACzB,YAAI,MAAM,YAAAC,UAAc,YAAY;AAEpC,YAAI,CAAC,GAAI,OAAM,IAAI,QAAQ,aAAW;AAAE,cAAI,KAAK,SAAS,OAAO;AAAG,cAAI,KAAK,SAAS,OAAO;AAAA,QAAG,CAAC;AAAA,MACnG;AAAA,IACF,SAAS,GAAG;AAEV,UAAI,CAAC,OAAQ,OAAM;AAAA,IACrB,UAAE;AACA,UAAI,IAAI,SAAS,OAAO;AACxB,UAAI,QAAQ;AACV,YAAI,QAAQ;AAAA,MACd,WAAW,CAAC,IAAI,eAAe;AAE7B,cAAM,WAAW,IAAI,QAAQ,aAAW;AAAE,cAAI,KAAK,UAAU,OAAO;AAAG,cAAI,KAAK,SAAS,OAAO;AAAA,QAAG,CAAC;AACpG,YAAI,IAAI;AACR,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY;AACV,WAAO,KAAK,IAAI,YAAY,KAAK,IAAI,iBAAiB,KAAK,IAAI;AAAA,EACjE;AAAA,EAEA,2BAAoC,MAAU;AAC5C,UAAM,uBAAuB,IAAI,qBAAqB,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI;AAC3F,yBAAqB,gBAAgB,KAAK;AAC1C,yBAAqB,eAAe,KAAK;AACzC,WAAO;AAAA,EACT;AACF;AAEO,MAAM,6BAAgC,gBAAgB;AAAA,EAC3D,YACE,KACA,KACA,QACO,QACP;AACA,UAAM,KAAK,KAAK,MAAM;AAFf;AAAA,EAGT;AACF;",
6
6
  "names": ["import_core", "import_core_node", "CoreConvertUtils", "zlibConstants"]
7
7
  }
@@ -21,6 +21,7 @@ __export(HttpServerOption_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(HttpServerOption_exports);
23
23
  var import_simple_boot = require("@dooboostore/simple-boot");
24
+ var import_NotFoundError = require("../errors/NotFoundError");
24
25
  class HttpServerOption extends import_simple_boot.SimOption {
25
26
  static {
26
27
  this.DEFAULT_PORT = 8081;
@@ -59,7 +60,7 @@ class HttpServerOption extends import_simple_boot.SimOption {
59
60
  );
60
61
  this.globalAdvice = globalAdvice;
61
62
  this.fileUploadTempPath = fileUploadTempPath;
62
- this.noSuchRouteEndPointMappingThrow = noSuchRouteEndPointMappingThrow;
63
+ this.noSuchRouteEndPointMappingThrow = noSuchRouteEndPointMappingThrow ?? ((rr) => new import_NotFoundError.NotFoundError({ message: `no route ${rr.reqMethod?.() ?? ""} ${rr.reqUrlPathName ?? ""}`.trim() }));
63
64
  this.transactionManagerFactory = transactionManagerFactory;
64
65
  }
65
66
  get hostname() {