@dooboostore/simple-boot-http-server 1.0.23 → 1.0.25
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.
- package/README.md +113 -0
- package/dist/cjs/SimpleBootHttpServer.js +80 -40
- package/dist/cjs/SimpleBootHttpServer.js.map +3 -3
- package/dist/cjs/codes/HttpHeaders.js +14 -3
- package/dist/cjs/codes/HttpHeaders.js.map +2 -2
- package/dist/cjs/codes/Mimes.js +2 -0
- package/dist/cjs/codes/Mimes.js.map +2 -2
- package/dist/cjs/decorators/MethodMapping.js +40 -9
- package/dist/cjs/decorators/MethodMapping.js.map +3 -3
- package/dist/cjs/endpoints/WebSocketEndPoint.js +16 -0
- package/dist/cjs/endpoints/WebSocketEndPoint.js.map +7 -0
- package/dist/cjs/errors/BadRequestError.js +2 -1
- package/dist/cjs/errors/BadRequestError.js.map +2 -2
- package/dist/cjs/errors/ForbiddenError.js +2 -1
- package/dist/cjs/errors/ForbiddenError.js.map +2 -2
- package/dist/cjs/errors/InternalServerError.js +2 -1
- package/dist/cjs/errors/InternalServerError.js.map +2 -2
- package/dist/cjs/errors/NotFoundError.js +2 -1
- package/dist/cjs/errors/NotFoundError.js.map +2 -2
- package/dist/cjs/errors/UnauthorizedError.js +2 -1
- package/dist/cjs/errors/UnauthorizedError.js.map +2 -2
- package/dist/cjs/filters/CacheFilter.js +75 -35
- package/dist/cjs/filters/CacheFilter.js.map +3 -3
- package/dist/cjs/filters/IntentSchemeFilter.js +97 -0
- package/dist/cjs/filters/IntentSchemeFilter.js.map +7 -0
- package/dist/cjs/filters/ResourceFilter.js +6 -2
- package/dist/cjs/filters/ResourceFilter.js.map +2 -2
- package/dist/cjs/filters/TopicProtocolFilter.js +343 -0
- package/dist/cjs/filters/TopicProtocolFilter.js.map +7 -0
- package/dist/cjs/filters/index.js +5 -1
- package/dist/cjs/filters/index.js.map +2 -2
- package/dist/cjs/index.js +30 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/inject/InjectSituationType.js +1 -1
- package/dist/cjs/inject/InjectSituationType.js.map +2 -2
- package/dist/cjs/models/RequestResponse.js +70 -91
- package/dist/cjs/models/RequestResponse.js.map +3 -3
- package/dist/cjs/models/datas/body/index.js +28 -0
- package/dist/cjs/models/datas/body/index.js.map +7 -0
- package/dist/cjs/models/datas/index.js +32 -0
- package/dist/cjs/models/datas/index.js.map +7 -0
- package/dist/cjs/models/datas/path/ReqPathData.js +29 -0
- package/dist/cjs/models/datas/path/ReqPathData.js.map +7 -0
- package/dist/cjs/models/datas/{search → path}/ReqSearchParamsObj.js.map +1 -1
- package/dist/cjs/models/datas/path/index.js +24 -0
- package/dist/cjs/models/datas/path/index.js.map +7 -0
- package/dist/cjs/models/index.js +4 -16
- package/dist/cjs/models/index.js.map +2 -2
- package/dist/cjs/models/method/index.js +22 -0
- package/dist/cjs/models/method/index.js.map +7 -0
- package/dist/cjs/models/method/patch/index.js +22 -0
- package/dist/cjs/models/method/patch/index.js.map +7 -0
- package/dist/cjs/option/HttpServerOption.js +25 -5
- package/dist/cjs/option/HttpServerOption.js.map +2 -2
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +144 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +7 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js +35 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js.map +7 -0
- package/dist/cjs/proxy/TopicProtocolApiServiceProxy.js +324 -0
- package/dist/cjs/proxy/TopicProtocolApiServiceProxy.js.map +7 -0
- package/dist/cjs/proxy/index.js +26 -0
- package/dist/cjs/proxy/index.js.map +7 -0
- package/dist/cjs/resolvers/ResourceResolver.js +2 -2
- package/dist/cjs/resolvers/ResourceResolver.js.map +2 -2
- package/dist/cjs/session/SessionManager.js +2 -2
- package/dist/cjs/session/SessionManager.js.map +2 -2
- package/dist/cjs/websocket/WebSocketClient.js +554 -0
- package/dist/cjs/websocket/WebSocketClient.js.map +7 -0
- package/dist/cjs/websocket/WebSocketManager.js +652 -0
- package/dist/cjs/websocket/WebSocketManager.js.map +7 -0
- package/dist/cjs/websocket/index.js +24 -0
- package/dist/cjs/websocket/index.js.map +7 -0
- package/dist/esm/SimpleBootHttpServer.js +60 -20
- package/dist/esm/SimpleBootHttpServer.js.map +2 -2
- package/dist/esm/codes/HttpHeaders.js +12 -2
- package/dist/esm/codes/HttpHeaders.js.map +2 -2
- package/dist/esm/codes/Mimes.js +2 -0
- package/dist/esm/codes/Mimes.js.map +2 -2
- package/dist/esm/decorators/MethodMapping.js +24 -3
- package/dist/esm/decorators/MethodMapping.js.map +2 -2
- package/dist/esm/endpoints/WebSocketEndPoint.js +1 -0
- package/dist/esm/endpoints/WebSocketEndPoint.js.map +7 -0
- package/dist/esm/errors/BadRequestError.js +2 -1
- package/dist/esm/errors/BadRequestError.js.map +2 -2
- package/dist/esm/errors/ForbiddenError.js +2 -1
- package/dist/esm/errors/ForbiddenError.js.map +2 -2
- package/dist/esm/errors/InternalServerError.js +2 -1
- package/dist/esm/errors/InternalServerError.js.map +2 -2
- package/dist/esm/errors/NotFoundError.js +2 -1
- package/dist/esm/errors/NotFoundError.js.map +2 -2
- package/dist/esm/errors/UnauthorizedError.js +2 -1
- package/dist/esm/errors/UnauthorizedError.js.map +2 -2
- package/dist/esm/filters/CacheFilter.js +67 -27
- package/dist/esm/filters/CacheFilter.js.map +2 -2
- package/dist/esm/filters/IntentSchemeFilter.js +74 -0
- package/dist/esm/filters/IntentSchemeFilter.js.map +7 -0
- package/dist/esm/filters/ResourceFilter.js +6 -2
- package/dist/esm/filters/ResourceFilter.js.map +2 -2
- package/dist/esm/filters/TopicProtocolFilter.js +310 -0
- package/dist/esm/filters/TopicProtocolFilter.js.map +7 -0
- package/dist/esm/filters/index.js +2 -0
- package/dist/esm/filters/index.js.map +2 -2
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/inject/InjectSituationType.js +1 -1
- package/dist/esm/inject/InjectSituationType.js.map +2 -2
- package/dist/esm/models/RequestResponse.js +65 -86
- package/dist/esm/models/RequestResponse.js.map +2 -2
- package/dist/esm/models/datas/body/index.js +5 -0
- package/dist/esm/models/datas/body/index.js.map +7 -0
- package/dist/esm/models/datas/index.js +7 -0
- package/dist/esm/models/datas/index.js.map +7 -0
- package/dist/esm/models/datas/path/ReqPathData.js +6 -0
- package/dist/esm/models/datas/path/ReqPathData.js.map +7 -0
- package/dist/esm/models/datas/{search → path}/ReqSearchParamsObj.js.map +1 -1
- package/dist/esm/models/datas/path/index.js +3 -0
- package/dist/esm/models/datas/path/index.js.map +7 -0
- package/dist/esm/models/index.js +2 -8
- package/dist/esm/models/index.js.map +2 -2
- package/dist/esm/models/method/index.js +2 -0
- package/dist/esm/models/method/index.js.map +7 -0
- package/dist/esm/models/method/patch/index.js +2 -0
- package/dist/esm/models/method/patch/index.js.map +7 -0
- package/dist/esm/option/HttpServerOption.js +24 -4
- package/dist/esm/option/HttpServerOption.js.map +2 -2
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +121 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +7 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js +12 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js.map +7 -0
- package/dist/esm/proxy/TopicProtocolApiServiceProxy.js +301 -0
- package/dist/esm/proxy/TopicProtocolApiServiceProxy.js.map +7 -0
- package/dist/esm/proxy/index.js +4 -0
- package/dist/esm/proxy/index.js.map +7 -0
- package/dist/esm/resolvers/ResourceResolver.js +1 -1
- package/dist/esm/resolvers/ResourceResolver.js.map +1 -1
- package/dist/esm/session/SessionManager.js +1 -1
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/websocket/WebSocketClient.js +529 -0
- package/dist/esm/websocket/WebSocketClient.js.map +7 -0
- package/dist/esm/websocket/WebSocketManager.js +622 -0
- package/dist/esm/websocket/WebSocketManager.js.map +7 -0
- package/dist/esm/websocket/index.js +3 -0
- package/dist/esm/websocket/index.js.map +7 -0
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js +18209 -5299
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js.map +4 -4
- package/dist/types/SimpleBootHttpServer.d.ts +5 -3
- package/dist/types/SimpleBootHttpServer.d.ts.map +1 -1
- package/dist/types/codes/HttpHeaders.d.ts +3 -0
- package/dist/types/codes/HttpHeaders.d.ts.map +1 -1
- package/dist/types/codes/Mimes.d.ts +3 -1
- package/dist/types/codes/Mimes.d.ts.map +1 -1
- package/dist/types/decorators/MethodMapping.d.ts +13 -2
- package/dist/types/decorators/MethodMapping.d.ts.map +1 -1
- package/dist/types/endpoints/WebSocketEndPoint.d.ts +17 -0
- package/dist/types/endpoints/WebSocketEndPoint.d.ts.map +1 -0
- package/dist/types/errors/BadRequestError.d.ts +2 -2
- package/dist/types/errors/BadRequestError.d.ts.map +1 -1
- package/dist/types/errors/ForbiddenError.d.ts +2 -2
- package/dist/types/errors/ForbiddenError.d.ts.map +1 -1
- package/dist/types/errors/InternalServerError.d.ts +2 -2
- package/dist/types/errors/InternalServerError.d.ts.map +1 -1
- package/dist/types/errors/NotFoundError.d.ts +2 -2
- package/dist/types/errors/NotFoundError.d.ts.map +1 -1
- package/dist/types/errors/UnauthorizedError.d.ts +2 -2
- package/dist/types/errors/UnauthorizedError.d.ts.map +1 -1
- package/dist/types/filters/CacheFilter.d.ts +6 -0
- package/dist/types/filters/CacheFilter.d.ts.map +1 -1
- package/dist/types/filters/IntentSchemeFilter.d.ts +20 -0
- package/dist/types/filters/IntentSchemeFilter.d.ts.map +1 -0
- package/dist/types/filters/ResourceFilter.d.ts.map +1 -1
- package/dist/types/filters/TopicProtocolFilter.d.ts +34 -0
- package/dist/types/filters/TopicProtocolFilter.d.ts.map +1 -0
- package/dist/types/filters/index.d.ts +2 -0
- package/dist/types/filters/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/inject/InjectSituationType.d.ts.map +1 -1
- package/dist/types/models/RequestResponse.d.ts +12 -7
- package/dist/types/models/RequestResponse.d.ts.map +1 -1
- package/dist/types/models/datas/body/index.d.ts +5 -0
- package/dist/types/models/datas/body/index.d.ts.map +1 -0
- package/dist/types/models/datas/index.d.ts +7 -0
- package/dist/types/models/datas/index.d.ts.map +1 -0
- package/dist/types/models/datas/path/ReqPathData.d.ts +4 -0
- package/dist/types/models/datas/path/ReqPathData.d.ts.map +1 -0
- package/dist/types/models/datas/path/ReqSearchParamsObj.d.ts.map +1 -0
- package/dist/types/models/datas/path/index.d.ts +3 -0
- package/dist/types/models/datas/path/index.d.ts.map +1 -0
- package/dist/types/models/index.d.ts +2 -8
- package/dist/types/models/index.d.ts.map +1 -1
- package/dist/types/models/method/index.d.ts +2 -0
- package/dist/types/models/method/index.d.ts.map +1 -0
- package/dist/types/models/method/patch/index.d.ts +2 -0
- package/dist/types/models/method/patch/index.d.ts.map +1 -0
- package/dist/types/option/HttpServerOption.d.ts +30 -20
- package/dist/types/option/HttpServerOption.d.ts.map +1 -1
- package/dist/types/proxy/SymbolIntentApiServiceProxy.d.ts +16 -0
- package/dist/types/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -0
- package/dist/types/proxy/SymbolIntentApiServiceProxyBase.d.ts +5 -0
- package/dist/types/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +1 -0
- package/dist/types/proxy/TopicProtocolApiServiceProxy.d.ts +28 -0
- package/dist/types/proxy/TopicProtocolApiServiceProxy.d.ts.map +1 -0
- package/dist/types/proxy/index.d.ts +4 -0
- package/dist/types/proxy/index.d.ts.map +1 -0
- package/dist/types/session/SessionManager.d.ts +2 -17
- package/dist/types/session/SessionManager.d.ts.map +1 -1
- package/dist/types/websocket/WebSocketClient.d.ts +88 -0
- package/dist/types/websocket/WebSocketClient.d.ts.map +1 -0
- package/dist/types/websocket/WebSocketManager.d.ts +163 -0
- package/dist/types/websocket/WebSocketManager.d.ts.map +1 -0
- package/dist/types/websocket/index.d.ts +3 -0
- package/dist/types/websocket/index.d.ts.map +1 -0
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js +18108 -5198
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js.map +4 -4
- package/dist/umd-bundle/websocket-client.umd.js +11374 -0
- package/dist/umd-bundle/websocket-client.umd.js.map +7 -0
- package/package.json +24 -15
- package/src/SimpleBootHttpServer.ts +367 -313
- package/src/codes/HttpHeaders.ts +13 -2
- package/src/codes/Mimes.ts +27 -25
- package/src/decorators/MethodMapping.ts +17 -4
- package/src/endpoints/WebSocketEndPoint.ts +12 -0
- package/src/errors/BadRequestError.ts +7 -3
- package/src/errors/ForbiddenError.ts +7 -3
- package/src/errors/InternalServerError.ts +7 -3
- package/src/errors/NotFoundError.ts +7 -3
- package/src/errors/UnauthorizedError.ts +7 -3
- package/src/filters/CacheFilter.ts +112 -67
- package/src/filters/IntentSchemeFilter.ts +69 -0
- package/src/filters/ResourceFilter.ts +10 -2
- package/src/filters/TopicProtocolFilter.ts +349 -0
- package/src/filters/index.ts +2 -0
- package/src/index.ts +13 -12
- package/src/inject/InjectSituationType.ts +1 -1
- package/src/models/RequestResponse.ts +136 -242
- package/src/models/datas/body/index.ts +4 -0
- package/src/models/datas/index.ts +6 -0
- package/src/models/datas/path/ReqPathData.ts +3 -0
- package/src/models/datas/path/index.ts +2 -0
- package/src/models/index.ts +2 -8
- package/src/models/method/index.ts +1 -0
- package/src/models/method/patch/index.ts +1 -0
- package/src/option/HttpServerOption.ts +73 -23
- package/src/proxy/SymbolIntentApiServiceProxy.ts +126 -0
- package/src/proxy/SymbolIntentApiServiceProxyBase.ts +16 -0
- package/src/proxy/TopicProtocolApiServiceProxy.ts +328 -0
- package/src/proxy/index.ts +3 -0
- package/src/resolvers/ResourceResolver.ts +1 -1
- package/src/session/SessionManager.ts +3 -3
- package/src/websocket/WebSocketClient.ts +637 -0
- package/src/websocket/WebSocketManager.ts +713 -0
- package/src/websocket/index.ts +2 -0
- package/tsconfig.json +3 -1
- package/README.MD +0 -36
- package/dist/types/models/datas/search/ReqSearchParamsObj.d.ts.map +0 -1
- /package/dist/cjs/models/datas/{search → path}/ReqSearchParamsObj.js +0 -0
- /package/dist/esm/models/datas/{search → path}/ReqSearchParamsObj.js +0 -0
- /package/dist/types/models/datas/{search → path}/ReqSearchParamsObj.d.ts +0 -0
- /package/src/models/datas/{search → path}/ReqSearchParamsObj.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/decorators/MethodMapping.ts"],
|
|
4
|
-
"sourcesContent": ["import { ConstructorType } from '@dooboostore/core/types';\nimport { ReflectMethod } from '@dooboostore/simple-boot/types/Types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\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_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 MappingConfig = {\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\n res?: {\n status?: number;\n header?: {[key: string]: string};\n contentType?: Mimes | string;\n }\n resolver?: Resolver|ConstructorType<Resolver>;\n}\nexport type SaveMappingConfig = {propertyKey: string | symbol; config: MappingConfig}\nconst MappingMetadataKey = Symbol('MappingMetadataKey');\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.GET);\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.GET);\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"],
|
|
5
|
-
"mappings": "AAEA,SAAS,oBAAoB;AAG7B,SAAS,kBAAkB;AAEpB,IAAK,0BAAL,kBAAKA,6BAAL;AACH,EAAAA,yBAAA,mBAAgB;AAEhB,EAAAA,yBAAA,+BAA4B;AAC5B,EAAAA,yBAAA,uBAAoB;
|
|
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 MappingConfig = {\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\n res?: {\n status?: number;\n header?: {[key: string]: string};\n contentType?: Mimes | string;\n }\n resolver?: Resolver|ConstructorType<Resolver>;\n}\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.GET);\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.GET);\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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",
|
|
6
6
|
"names": ["UrlMappingSituationType", "propertyKey", "descriptor"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=WebSocketEndPoint.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpError } from "./HttpError.js";
|
|
2
2
|
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
3
3
|
class BadRequestError extends HttpError {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(input = {}) {
|
|
5
|
+
const { status = HttpStatus.BadRequest, message = "Bad Request" } = typeof input === "string" ? { message: input } : input;
|
|
5
6
|
super({ status, message });
|
|
6
7
|
}
|
|
7
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/errors/BadRequestError.ts"],
|
|
4
|
-
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class BadRequestError extends HttpError {\n
|
|
5
|
-
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,wBAAwB,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class BadRequestError extends HttpError {\n constructor(\n input: { status?: number; message?: string } | string = {},\n ) {\n const {status = HttpStatus.BadRequest, message = 'Bad Request'} =\n typeof input === 'string' ? {message: input} : input;\n super({status, message});\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,wBAAwB,UAAU;AAAA,EAC7C,YACE,QAAwD,CAAC,GACzD;AACA,UAAM,EAAC,SAAS,WAAW,YAAY,UAAU,cAAa,IAC5D,OAAO,UAAU,WAAW,EAAC,SAAS,MAAK,IAAI;AACjD,UAAM,EAAC,QAAQ,QAAO,CAAC;AAAA,EACzB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpError } from "./HttpError.js";
|
|
2
2
|
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
3
3
|
class ForbiddenError extends HttpError {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(input = {}) {
|
|
5
|
+
const { status = HttpStatus.Forbidden, message = "Forbidden" } = typeof input === "string" ? { message: input } : input;
|
|
5
6
|
super({ status, message });
|
|
6
7
|
}
|
|
7
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/errors/ForbiddenError.ts"],
|
|
4
|
-
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class ForbiddenError extends HttpError {\n
|
|
5
|
-
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,uBAAuB,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class ForbiddenError extends HttpError {\n constructor(\n input: { status?: number; message?: string } | string = {},\n ) {\n const {status = HttpStatus.Forbidden, message = 'Forbidden'} =\n typeof input === 'string' ? {message: input} : input;\n super({status, message});\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,uBAAuB,UAAU;AAAA,EAC5C,YACE,QAAwD,CAAC,GACzD;AACA,UAAM,EAAC,SAAS,WAAW,WAAW,UAAU,YAAW,IACzD,OAAO,UAAU,WAAW,EAAC,SAAS,MAAK,IAAI;AACjD,UAAM,EAAC,QAAQ,QAAO,CAAC;AAAA,EACzB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpError } from "./HttpError.js";
|
|
2
2
|
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
3
3
|
class InternalServerError extends HttpError {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(input = {}) {
|
|
5
|
+
const { status = HttpStatus.InternalServerError, message = "Internal Server Error" } = typeof input === "string" ? { message: input } : input;
|
|
5
6
|
super({ status, message });
|
|
6
7
|
}
|
|
7
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/errors/InternalServerError.ts"],
|
|
4
|
-
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class InternalServerError extends HttpError {\n
|
|
5
|
-
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,4BAA4B,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class InternalServerError extends HttpError {\n constructor(\n input: { status?: number; message?: string } | string = {},\n ) {\n const {status = HttpStatus.InternalServerError, message = 'Internal Server Error'} =\n typeof input === 'string' ? {message: input} : input;\n super({status, message});\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,4BAA4B,UAAU;AAAA,EACjD,YACE,QAAwD,CAAC,GACzD;AACA,UAAM,EAAC,SAAS,WAAW,qBAAqB,UAAU,wBAAuB,IAC/E,OAAO,UAAU,WAAW,EAAC,SAAS,MAAK,IAAI;AACjD,UAAM,EAAC,QAAQ,QAAO,CAAC;AAAA,EACzB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpError } from "./HttpError.js";
|
|
2
2
|
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
3
3
|
class NotFoundError extends HttpError {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(input = {}) {
|
|
5
|
+
const { status = HttpStatus.NotFound, message = "Not Found" } = typeof input === "string" ? { message: input } : input;
|
|
5
6
|
super({ status, message });
|
|
6
7
|
}
|
|
7
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/errors/NotFoundError.ts"],
|
|
4
|
-
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class NotFoundError extends HttpError {\n
|
|
5
|
-
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,sBAAsB,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class NotFoundError extends HttpError {\n constructor(\n input: { status?: number; message?: string } | string = {},\n ) {\n const {status = HttpStatus.NotFound, message = 'Not Found'} =\n typeof input === 'string' ? {message: input} : input;\n super({status, message});\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,sBAAsB,UAAU;AAAA,EAC3C,YACE,QAAwD,CAAC,GACzD;AACA,UAAM,EAAC,SAAS,WAAW,UAAU,UAAU,YAAW,IACxD,OAAO,UAAU,WAAW,EAAC,SAAS,MAAK,IAAI;AACjD,UAAM,EAAC,QAAQ,QAAO,CAAC;AAAA,EACzB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpError } from "./HttpError.js";
|
|
2
2
|
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
3
3
|
class UnauthorizedError extends HttpError {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(input = {}) {
|
|
5
|
+
const { status = HttpStatus.Unauthorized, message = "Unauthorized" } = typeof input === "string" ? { message: input } : input;
|
|
5
6
|
super({ status, message });
|
|
6
7
|
}
|
|
7
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/errors/UnauthorizedError.ts"],
|
|
4
|
-
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class UnauthorizedError extends HttpError {\n
|
|
5
|
-
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,0BAA0B,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class UnauthorizedError extends HttpError {\n constructor(\n input: { status?: number; message?: string } | string = {},\n ) {\n const {status = HttpStatus.Unauthorized, message = 'Unauthorized'} =\n typeof input === 'string' ? {message: input} : input;\n super({status, message});\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAQ,iBAAgB;AACxB,SAAQ,kBAAiB;AAElB,MAAM,0BAA0B,UAAU;AAAA,EAC/C,YACE,QAAwD,CAAC,GACzD;AACA,UAAM,EAAC,SAAS,WAAW,cAAc,UAAU,eAAc,IAC/D,OAAO,UAAU,WAAW,EAAC,SAAS,MAAK,IAAI;AACjD,UAAM,EAAC,QAAQ,QAAO,CAAC;AAAA,EACzB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FileUtils } from "@dooboostore/core-node
|
|
2
|
-
import { ConvertUtils } from "@dooboostore/core-node
|
|
3
|
-
import { RandomUtils } from "@dooboostore/core
|
|
1
|
+
import { FileUtils } from "@dooboostore/core-node";
|
|
2
|
+
import { ConvertUtils } from "@dooboostore/core-node";
|
|
3
|
+
import { RandomUtils } from "@dooboostore/core";
|
|
4
4
|
class CacheFilter {
|
|
5
5
|
constructor(config) {
|
|
6
6
|
this.config = config;
|
|
@@ -9,6 +9,9 @@ class CacheFilter {
|
|
|
9
9
|
FileUtils.deleteSync(config.config.cacheDir, { options: { recursive: true } });
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
static {
|
|
13
|
+
this.SYMBOL = Symbol.for("CacheFilter");
|
|
14
|
+
}
|
|
12
15
|
static {
|
|
13
16
|
this.CARRIER_KEY_NAME = "_CARRIER_CACHE_FILTER_KEY_NAME";
|
|
14
17
|
}
|
|
@@ -19,25 +22,7 @@ class CacheFilter {
|
|
|
19
22
|
if (!filter) {
|
|
20
23
|
return true;
|
|
21
24
|
}
|
|
22
|
-
|
|
23
|
-
FileUtils.mkdirSync(this.config.config.cacheDir, { recursive: true });
|
|
24
|
-
}
|
|
25
|
-
if (!this.cacheConfig && this.config.config.cacheDir) {
|
|
26
|
-
try {
|
|
27
|
-
this.cacheConfig = JSON.parse(ConvertUtils.toString(FileUtils.readSync([this.config.config.cacheDir, "cacheConfig.json"], { option: { encoding: "utf-8" } })));
|
|
28
|
-
} catch (e) {
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const date = (/* @__PURE__ */ new Date()).toISOString();
|
|
32
|
-
this.cacheConfig ??= {
|
|
33
|
-
createDate: date,
|
|
34
|
-
updateDate: date,
|
|
35
|
-
// accessDate: date,
|
|
36
|
-
caches: {}
|
|
37
|
-
};
|
|
38
|
-
this.cacheConfig.createDate ??= date;
|
|
39
|
-
this.cacheConfig.updateDate ??= date;
|
|
40
|
-
this.cacheConfig.caches ??= {};
|
|
25
|
+
this.initCacheConfig();
|
|
41
26
|
const rkey = this.config.key(rr, app);
|
|
42
27
|
const sessionData = { key: rkey.key, lifeTime: rkey.lifeTime ?? this.config.config.lifeTime, isUpdate: false, responseHeaders: rkey.responseHeaders };
|
|
43
28
|
const cache = this.cacheConfig.caches[sessionData.key];
|
|
@@ -45,8 +30,7 @@ class CacheFilter {
|
|
|
45
30
|
const existes = this.config.config.cacheDir ? FileUtils.existsSync(cache.path) : this.storage.has(cache.path);
|
|
46
31
|
const diffTime = Date.now() - cache.createTime;
|
|
47
32
|
if (!existes || diffTime > cache.lifeTime) {
|
|
48
|
-
|
|
49
|
-
this.deleteChunk(cache.path);
|
|
33
|
+
this.clear(sessionData.key);
|
|
50
34
|
sessionData.isUpdate = true;
|
|
51
35
|
} else {
|
|
52
36
|
rr.resSetHeaders({
|
|
@@ -66,6 +50,64 @@ class CacheFilter {
|
|
|
66
50
|
carrier.set(CacheFilter.CARRIER_KEY_NAME, sessionData);
|
|
67
51
|
return sessionData.isUpdate;
|
|
68
52
|
}
|
|
53
|
+
async refresh(path2, app) {
|
|
54
|
+
this.clear(path2);
|
|
55
|
+
const url = `${app.option.protocol}://${app.option.hostname}:${app.option.port}${path2}`;
|
|
56
|
+
try {
|
|
57
|
+
await fetch(url, {
|
|
58
|
+
method: "GET",
|
|
59
|
+
headers: {
|
|
60
|
+
"x-cache-force-refresh": "true",
|
|
61
|
+
"User-Agent": "SimpleBootHttpServer-Internal-Refresh"
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.error("CacheFilter.refresh fetch error:", e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
clear(key) {
|
|
69
|
+
this.initCacheConfig();
|
|
70
|
+
const cache = this.cacheConfig.caches[key];
|
|
71
|
+
if (cache) {
|
|
72
|
+
this.deleteChunk(cache.path);
|
|
73
|
+
delete this.cacheConfig.caches[key];
|
|
74
|
+
this.saveCacheConfig();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
clearAll() {
|
|
78
|
+
this.initCacheConfig();
|
|
79
|
+
Object.keys(this.cacheConfig.caches).forEach((key) => {
|
|
80
|
+
this.deleteChunk(this.cacheConfig.caches[key].path);
|
|
81
|
+
});
|
|
82
|
+
this.cacheConfig.caches = {};
|
|
83
|
+
this.saveCacheConfig();
|
|
84
|
+
}
|
|
85
|
+
initCacheConfig() {
|
|
86
|
+
if (this.config.config.cacheDir) {
|
|
87
|
+
FileUtils.mkdirSync(this.config.config.cacheDir, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
if (!this.cacheConfig && this.config.config.cacheDir) {
|
|
90
|
+
try {
|
|
91
|
+
this.cacheConfig = JSON.parse(ConvertUtils.toString(FileUtils.readSync([this.config.config.cacheDir, "cacheConfig.json"], { option: { encoding: "utf-8" } })));
|
|
92
|
+
} catch (e) {
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const date = (/* @__PURE__ */ new Date()).toISOString();
|
|
96
|
+
this.cacheConfig ??= {
|
|
97
|
+
createDate: date,
|
|
98
|
+
updateDate: date,
|
|
99
|
+
// accessDate: date,
|
|
100
|
+
caches: {}
|
|
101
|
+
};
|
|
102
|
+
this.cacheConfig.createDate ??= date;
|
|
103
|
+
this.cacheConfig.updateDate ??= date;
|
|
104
|
+
this.cacheConfig.caches ??= {};
|
|
105
|
+
}
|
|
106
|
+
saveCacheConfig() {
|
|
107
|
+
if (this.config.config.cacheDir && this.cacheConfig) {
|
|
108
|
+
FileUtils.write(JSON.stringify(this.cacheConfig), { path: [this.config.config.cacheDir, "cacheConfig.json"] });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
69
111
|
deleteChunk(path2) {
|
|
70
112
|
if (this.config.config.cacheDir && FileUtils.existsSync(path2)) {
|
|
71
113
|
FileUtils.deleteFileSync(path2);
|
|
@@ -104,9 +146,7 @@ class CacheFilter {
|
|
|
104
146
|
lifeTime: sessionData.lifeTime,
|
|
105
147
|
responseHeader: responseHeaders
|
|
106
148
|
};
|
|
107
|
-
|
|
108
|
-
FileUtils.write(JSON.stringify(this.cacheConfig), { path: [this.config.config.cacheDir, "cacheConfig.json"] });
|
|
109
|
-
}
|
|
149
|
+
this.saveCacheConfig();
|
|
110
150
|
} catch (e) {
|
|
111
151
|
console.log("---", e);
|
|
112
152
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/filters/CacheFilter.ts"],
|
|
4
|
-
"sourcesContent": ["import { Filter } from '../filters/Filter';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {
|
|
5
|
-
"mappings": "AAMA,
|
|
4
|
+
"sourcesContent": ["import { Filter } from '../filters/Filter';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { FileUtils } from '@dooboostore/core-node';\nimport { ConvertUtils } from '@dooboostore/core-node';\nimport { RandomUtils } from '@dooboostore/core';\n\nexport type CacheFilterSessionType = { key: string; lifeTime: number; isUpdate: boolean; responseHeaders?: string[] };\n\ntype CacheConfigCacheItemType = { path: string; createTime: number; lifeTime: number; responseHeader: { [key: string]: string | number | string[] } };\n\ntype KeyAndConfig = { key: string; lifeTime?: number; responseHeaders?: string[] };\n\nexport class CacheFilter implements Filter {\n public static readonly SYMBOL = Symbol.for('CacheFilter');\n public static readonly CARRIER_KEY_NAME = '_CARRIER_CACHE_FILTER_KEY_NAME';\n private storage = new Map<string, string | Buffer>();\n private cacheConfig: {\n createDate: string;\n updateDate: string;\n caches: { [key: string]: CacheConfigCacheItemType };\n };\n\n constructor(\n private config: {\n config: {\n cacheDir?: string;\n lifeTime: number;\n startUpClean?: boolean;\n };\n filter?: (rr: RequestResponse, app: SimpleBootHttpServer) => boolean;\n key: (rr: RequestResponse, app: SimpleBootHttpServer) => KeyAndConfig;\n }\n ) {\n if (config.config.cacheDir && config.config.startUpClean) {\n FileUtils.deleteSync(config.config.cacheDir, { options: { recursive: true } });\n }\n }\n\n async onInit(app: SimpleBootHttpServer) {}\n\n async proceedBefore({ rr, app, carrier }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n // this.key = undefined;\n // this.lifeTime = undefined;\n // this.isUpdate = false;\n const filter = this.config.filter?.(rr, app);\n if (!filter) {\n return true;\n }\n this.initCacheConfig();\n const rkey = this.config.key(rr, app);\n // console.log('--path filter', rr.reqMethod(), rr.reqUrlPathName, filter, rkey)\n const sessionData: CacheFilterSessionType = { key: rkey.key, lifeTime: rkey.lifeTime ?? this.config.config.lifeTime, isUpdate: false, responseHeaders: rkey.responseHeaders };\n\n const cache = this.cacheConfig.caches[sessionData.key];\n if (cache) {\n const existes = this.config.config.cacheDir ? FileUtils.existsSync(cache.path) : this.storage.has(cache.path);\n const diffTime = Date.now() - cache.createTime;\n if (!existes || diffTime > cache.lifeTime) {\n this.clear(sessionData.key);\n sessionData.isUpdate = true;\n } else {\n rr.resSetHeaders({\n ...cache.responseHeader,\n cacheFilter: `true;remainTime=${cache.lifeTime - diffTime}`\n });\n // console.log('chunk--->', cache.path);\n try {\n const chunk = this.getChunk(cache.path);\n // console.log('chunk--->', chunk);\n await rr.resEnd(chunk);\n } catch (e) {\n console.log('--------e', e);\n }\n }\n } else {\n sessionData.isUpdate = true;\n }\n carrier.set(CacheFilter.CARRIER_KEY_NAME, sessionData);\n return sessionData.isUpdate;\n }\n\n public async refresh(path: string, app: SimpleBootHttpServer) {\n // 1. \uAE30\uC874 \uCE90\uC2DC \uD30C\uC77C \uC0AD\uC81C\n this.clear(path);\n\n // 2. HTTP Fetch\uB97C \uD1B5\uD55C \uC678\uBD80 \uD638\uCD9C (GET)\n // \uC544\uD0A4\uD14D\uD2B8\uB2D8\uC758 \uC9C0\uC2DC\uC5D0 \uB530\uB77C \uB124\uD2B8\uC6CC\uD06C \uB808\uC774\uC5B4\uB97C \uD1B5\uD574 \uC815\uC11D\uB300\uB85C \uD638\uCD9C\uD569\uB2C8\uB2E4.\n const url = `${app.option.protocol}://${app.option.hostname}:${app.option.port}${path}`;\n try {\n await fetch(url, {\n method: 'GET',\n headers: {\n 'x-cache-force-refresh': 'true',\n 'User-Agent': 'SimpleBootHttpServer-Internal-Refresh'\n }\n });\n } catch (e) {\n console.error('CacheFilter.refresh fetch error:', e);\n }\n }\n\n public clear(key: string) {\n this.initCacheConfig();\n const cache = this.cacheConfig.caches[key];\n if (cache) {\n this.deleteChunk(cache.path);\n delete this.cacheConfig.caches[key];\n this.saveCacheConfig();\n }\n }\n\n public clearAll() {\n this.initCacheConfig();\n Object.keys(this.cacheConfig.caches).forEach(key => {\n this.deleteChunk(this.cacheConfig.caches[key].path);\n });\n this.cacheConfig.caches = {};\n this.saveCacheConfig();\n }\n\n private initCacheConfig() {\n if (this.config.config.cacheDir) {\n FileUtils.mkdirSync(this.config.config.cacheDir, { recursive: true });\n }\n if (!this.cacheConfig && this.config.config.cacheDir) {\n try {\n this.cacheConfig = JSON.parse(ConvertUtils.toString(FileUtils.readSync([this.config.config.cacheDir, 'cacheConfig.json'], { option: { encoding: 'utf-8' } })));\n } catch (e) {}\n }\n const date = new Date().toISOString();\n this.cacheConfig ??= {\n createDate: date,\n updateDate: date,\n // accessDate: date,\n caches: {}\n };\n this.cacheConfig.createDate ??= date;\n this.cacheConfig.updateDate ??= date;\n // this.cacheConfig.accessDate ??= date;\n this.cacheConfig.caches ??= {};\n }\n\n private saveCacheConfig() {\n if (this.config.config.cacheDir && this.cacheConfig) {\n FileUtils.write(JSON.stringify(this.cacheConfig), { path: [this.config.config.cacheDir, 'cacheConfig.json'] });\n }\n }\n\n private deleteChunk(path: string) {\n if (this.config.config.cacheDir && FileUtils.existsSync(path)) {\n FileUtils.deleteFileSync(path);\n } else if (this.storage.has(path)) {\n this.storage.delete(path);\n }\n }\n\n private getChunk(path: string) {\n return this.config.config.cacheDir ? FileUtils.readSync(path) : this.storage.get(path);\n }\n\n async proceedAfter({ rr, app, carrier }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n // const data = await rr.resBodyStringData()\n const sessionData = carrier.get(CacheFilter.CARRIER_KEY_NAME) as CacheFilterSessionType;\n if (sessionData && sessionData.isUpdate) {\n try {\n if (this.config.config.cacheDir) {\n FileUtils.mkdirSync([this.config.config.cacheDir, 'caches'], { recursive: true });\n }\n const resBody = rr.resBodyData();\n if (!resBody) {\n return true;\n }\n let p: string | undefined = undefined;\n const destFileUUID = RandomUtils.uuid4();\n p = this.writeChunk(destFileUUID, resBody);\n const updateDateNow = Date.now();\n const updateDate = new Date(updateDateNow).toISOString();\n this.cacheConfig.createDate ??= updateDate;\n this.cacheConfig.updateDate = updateDate;\n const responseHeaders: { [key: string]: string | number | string[] } = {};\n sessionData.responseHeaders\n ?.map(it => it.toLowerCase())\n .forEach(it => {\n responseHeaders[it] = rr.resHeader(it);\n });\n this.cacheConfig.caches[sessionData.key] = {\n path: p,\n createTime: updateDateNow,\n lifeTime: sessionData.lifeTime,\n responseHeader: responseHeaders\n };\n\n this.saveCacheConfig();\n } catch (e) {\n console.log('---', e);\n }\n }\n\n return true;\n }\n\n private writeChunk(destFileUUID: string, resBody: string | Buffer) {\n if (this.config.config.cacheDir) {\n return FileUtils.write(resBody, { path: [this.config.config.cacheDir, 'caches', destFileUUID] });\n } else {\n this.storage.set(destFileUUID, resBody);\n return destFileUUID;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["path"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __decorate = function(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = function(k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var _a;
|
|
11
|
+
import { HttpHeaders } from "../codes/HttpHeaders.js";
|
|
12
|
+
import { Intent, sim } from "@dooboostore/simple-boot";
|
|
13
|
+
import { IntentManager } from "@dooboostore/simple-boot";
|
|
14
|
+
import { HttpStatus } from "../codes/HttpStatus.js";
|
|
15
|
+
import { Mimes } from "../codes/Mimes.js";
|
|
16
|
+
import { NotFoundError } from "../errors/NotFoundError.js";
|
|
17
|
+
let IntentSchemeFilter = class IntentSchemeFilter2 {
|
|
18
|
+
constructor(intentManager) {
|
|
19
|
+
this.intentManager = intentManager;
|
|
20
|
+
}
|
|
21
|
+
async onInit(app) {
|
|
22
|
+
}
|
|
23
|
+
async proceedBefore({ rr, app }) {
|
|
24
|
+
const url = rr.reqUrl;
|
|
25
|
+
const contentLength = Number(rr.reqHeader(HttpHeaders.ContentLength.toLowerCase() ?? "0"));
|
|
26
|
+
const acceptType = rr.reqHeader(HttpHeaders.Accept);
|
|
27
|
+
const contentType = rr.reqHeader(HttpHeaders.ContentType);
|
|
28
|
+
const intentScheme = rr.reqHeader(HttpHeaders.XSimpleBootSsrIntentScheme);
|
|
29
|
+
if (acceptType === Mimes.ApplicationJsonPostSimpleBootSsrIntentScheme && intentScheme) {
|
|
30
|
+
let intent = new Intent(`${intentScheme}:/${url}`);
|
|
31
|
+
if (contentLength > 0) {
|
|
32
|
+
if (contentType.includes(Mimes.ApplicationJson)) {
|
|
33
|
+
intent.data = [await rr.reqBodyJsonData(), rr];
|
|
34
|
+
} else if (contentType.includes(Mimes.MultipartFormData)) {
|
|
35
|
+
intent.data = [await rr.reqBodyMultipartFormDataObject(), rr];
|
|
36
|
+
}
|
|
37
|
+
const { return: rdatas, target } = await this.intentManager.publishMeta(intent);
|
|
38
|
+
if (target.length <= 0) {
|
|
39
|
+
throw new NotFoundError({ message: "Not found intent target" });
|
|
40
|
+
}
|
|
41
|
+
const rdata = rdatas[0];
|
|
42
|
+
const wdata = rdata instanceof Promise ? await rdata : rdata;
|
|
43
|
+
rr.resStatusCode(HttpStatus.Ok);
|
|
44
|
+
rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]);
|
|
45
|
+
await rr.resEnd(wdata ? JSON.stringify(wdata) : void 0);
|
|
46
|
+
} else {
|
|
47
|
+
intent.data = rr.reqUrlSearchParamTuples.length > 0 ? [rr.reqUrlSearchParamsObj, rr] : [rr];
|
|
48
|
+
const { return: rdatas, target } = await this.intentManager.publishMeta(intent);
|
|
49
|
+
if (target.length <= 0) {
|
|
50
|
+
throw new NotFoundError({ message: "Not found intent target" });
|
|
51
|
+
}
|
|
52
|
+
const rdata = rdatas[0];
|
|
53
|
+
const wdata = rdata instanceof Promise ? await rdata : rdata;
|
|
54
|
+
rr.resStatusCode(HttpStatus.Ok);
|
|
55
|
+
rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]);
|
|
56
|
+
await rr.resEnd(wdata ? JSON.stringify(wdata) : void 0);
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
} else {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async proceedAfter({ rr, app }) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
IntentSchemeFilter = __decorate([
|
|
68
|
+
sim,
|
|
69
|
+
__metadata("design:paramtypes", [typeof (_a = typeof IntentManager !== "undefined" && IntentManager) === "function" ? _a : Object])
|
|
70
|
+
], IntentSchemeFilter);
|
|
71
|
+
export {
|
|
72
|
+
IntentSchemeFilter
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=IntentSchemeFilter.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/filters/IntentSchemeFilter.ts"],
|
|
4
|
+
"sourcesContent": ["import { Filter } from './Filter';\nimport { HttpHeaders } from '../codes/HttpHeaders';\nimport {Intent, sim} from '@dooboostore/simple-boot';\nimport { IntentManager } from '@dooboostore/simple-boot';\nimport { Sim } from '@dooboostore/simple-boot';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport { Mimes } from '../codes/Mimes';\nimport { NotFoundError } from '../errors/NotFoundError';\n\n@sim\nexport class IntentSchemeFilter implements Filter {\n constructor(private intentManager: IntentManager) {}\n\n async onInit(app: SimpleBootHttpServer) {}\n\n async proceedBefore({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n // const rr = rrr;\n const url = rr.reqUrl;\n const contentLength = Number(rr.reqHeader(HttpHeaders.ContentLength.toLowerCase() ?? '0'));\n const acceptType = rr.reqHeader(HttpHeaders.Accept);\n const contentType = rr.reqHeader(HttpHeaders.ContentType);\n const intentScheme = rr.reqHeader(HttpHeaders.XSimpleBootSsrIntentScheme);\n if (acceptType === Mimes.ApplicationJsonPostSimpleBootSsrIntentScheme && intentScheme) {\n let intent = new Intent(`${intentScheme}:/${url}`);\n // console.log('---------1--intent request', intentScheme, url, contentLength, contentType );\n // const responseHeader = {} as any;\n // responseHeader[HttpHeaders.ContentType] = Mimes.ApplicationJson;\n if (contentLength > 0) {\n if (contentType.includes(Mimes.ApplicationJson)) {\n intent.data = [await rr.reqBodyJsonData(), rr];\n } else if (contentType.includes(Mimes.MultipartFormData)) {\n intent.data = [await rr.reqBodyMultipartFormDataObject(), rr];\n }\n // console.log('---------2--intent request',intent);\n const { return: rdatas, target } = await this.intentManager.publishMeta(intent);\n if (target.length <= 0) {\n throw new NotFoundError({ message: 'Not found intent target' });\n }\n const rdata = rdatas[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]);\n await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined);\n } else {\n intent.data = rr.reqUrlSearchParamTuples.length > 0 ? [rr.reqUrlSearchParamsObj, rr] : [rr];\n const { return: rdatas, target } = await this.intentManager.publishMeta(intent);\n if (target.length <= 0) {\n throw new NotFoundError({ message: 'Not found intent target' });\n }\n const rdata = rdatas[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n // const wdata =undefined;\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]);\n await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined);\n }\n // console.log('---------3--intent request', rr.req.readable, rr.req.readableLength);\n return false;\n } else {\n return true;\n }\n }\n\n async proceedAfter({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n return true;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AACA,SAAS,mBAAmB;AAC5B,SAAQ,QAAQ,WAAU;AAC1B,SAAS,qBAAqB;AAE9B,SAAS,kBAAkB;AAG3B,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAGvB,IAAM,qBAAN,MAAMA,oBAAkB;EAC7B,YAAoB,eAA4B;AAA5B,SAAA,gBAAA;EAA+B;EAEnD,MAAM,OAAO,KAAyB;EAAG;EAEzC,MAAM,cAAc,EAAE,IAAI,IAAG,GAAiF;AAE5G,UAAM,MAAM,GAAG;AACf,UAAM,gBAAgB,OAAO,GAAG,UAAU,YAAY,cAAc,YAAW,KAAM,GAAG,CAAC;AACzF,UAAM,aAAa,GAAG,UAAU,YAAY,MAAM;AAClD,UAAM,cAAc,GAAG,UAAU,YAAY,WAAW;AACxD,UAAM,eAAe,GAAG,UAAU,YAAY,0BAA0B;AACxE,QAAI,eAAe,MAAM,gDAAgD,cAAc;AACrF,UAAI,SAAS,IAAI,OAAO,GAAG,YAAY,KAAK,GAAG,EAAE;AAIjD,UAAI,gBAAgB,GAAG;AACrB,YAAI,YAAY,SAAS,MAAM,eAAe,GAAG;AAC/C,iBAAO,OAAO,CAAC,MAAM,GAAG,gBAAe,GAAI,EAAE;QAC/C,WAAW,YAAY,SAAS,MAAM,iBAAiB,GAAG;AACxD,iBAAO,OAAO,CAAC,MAAM,GAAG,+BAA8B,GAAI,EAAE;QAC9D;AAEA,cAAM,EAAE,QAAQ,QAAQ,OAAM,IAAK,MAAM,KAAK,cAAc,YAAY,MAAM;AAC9E,YAAI,OAAO,UAAU,GAAG;AACtB,gBAAM,IAAI,cAAc,EAAE,SAAS,0BAAyB,CAAE;QAChE;AACA,cAAM,QAAQ,OAAO,CAAC;AACtB,cAAM,QAAQ,iBAAiB,UAAU,MAAM,QAAQ;AACvD,WAAG,cAAc,WAAW,EAAE;AAC9B,WAAG,aAAa,YAAY,aAAa,CAAC,MAAM,eAAe,CAAC;AAChE,cAAM,GAAG,OAAO,QAAQ,KAAK,UAAU,KAAK,IAAI,MAAS;MAC3D,OAAO;AACL,eAAO,OAAO,GAAG,wBAAwB,SAAS,IAAI,CAAC,GAAG,uBAAuB,EAAE,IAAI,CAAC,EAAE;AAC1F,cAAM,EAAE,QAAQ,QAAQ,OAAM,IAAK,MAAM,KAAK,cAAc,YAAY,MAAM;AAC9E,YAAI,OAAO,UAAU,GAAG;AACtB,gBAAM,IAAI,cAAc,EAAE,SAAS,0BAAyB,CAAE;QAChE;AACA,cAAM,QAAQ,OAAO,CAAC;AACtB,cAAM,QAAQ,iBAAiB,UAAU,MAAM,QAAQ;AAEvD,WAAG,cAAc,WAAW,EAAE;AAC9B,WAAG,aAAa,YAAY,aAAa,CAAC,MAAM,eAAe,CAAC;AAChE,cAAM,GAAG,OAAO,QAAQ,KAAK,UAAU,KAAK,IAAI,MAAS;MAC3D;AAEA,aAAO;IACT,OAAO;AACL,aAAO;IACT;EACF;EAEA,MAAM,aAAa,EAAE,IAAI,IAAG,GAAiF;AAC3G,WAAO;EACT;;AAvDW,qBAAkB,WAAA;EAD9B;uDAEoC,kBAAa,eAAb,mBAAa,aAAA,KAAA,MAAA,CAAA;GADrC,kBAAkB;",
|
|
6
|
+
"names": ["IntentSchemeFilter"]
|
|
7
|
+
}
|
|
@@ -32,7 +32,8 @@ class ResourceFilter {
|
|
|
32
32
|
return it.test(url);
|
|
33
33
|
}
|
|
34
34
|
if (typeof it === "string") {
|
|
35
|
-
|
|
35
|
+
console.log("url!!!!!!!", url);
|
|
36
|
+
return it === url;
|
|
36
37
|
}
|
|
37
38
|
if (typeof it === "function") {
|
|
38
39
|
return it(rr, app);
|
|
@@ -40,8 +41,11 @@ class ResourceFilter {
|
|
|
40
41
|
if (typeof it === "object" && "request" in it) {
|
|
41
42
|
if (typeof it.request === "function") {
|
|
42
43
|
return it.request(rr, app);
|
|
44
|
+
} else if (it.request instanceof RegExp) {
|
|
45
|
+
return it.request.test(url);
|
|
46
|
+
} else {
|
|
47
|
+
return it.request === url;
|
|
43
48
|
}
|
|
44
|
-
return RegExp(it.request).test(url);
|
|
45
49
|
}
|
|
46
50
|
}) ?? [];
|
|
47
51
|
for (const it of regExps) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/filters/ResourceFilter.ts"],
|
|
4
|
-
"sourcesContent": ["import { Filter } from '../filters/Filter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport mime from 'mime-types';\nimport { HttpHeaders } from '../codes/HttpHeaders';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { Blob } from 'node:buffer';\n\nexport type RequestFilterType = string | RegExp | ((rr: RequestResponse, app: SimpleBootHttpServer) => boolean) | ((rr: RequestResponse, app: SimpleBootHttpServer) => Promise<boolean>);\n\ntype PathDist = RequestFilterType|{request: RequestFilterType, dist: string | ((rr: RequestResponse, app: SimpleBootHttpServer) => string)};\n\ntype DataDist = {request: RequestFilterType, response: (rr: RequestResponse, app: SimpleBootHttpServer) => (string | Promise<Blob | ArrayBuffer | Response>)};\nexport const isPathDist = (item: any): item is PathDist => {\n return typeof item === 'object' && ('request' in item) && ('dist' in item);\n};\nexport const isDataDist = (item: any): item is DataDist => {\n return typeof item === 'object' && ('request' in item) && ('response' in item);\n};\nexport class ResourceFilter implements Filter {\n // private requestFilter: RequestFilterType;\n private resourceDistPath?: string;\n private resources?: (DataDist|PathDist)[];\n constructor(resourceDistPath: string, resourceRegex: PathDist[]);\n constructor(resourceRegex: DataDist[]);\n constructor(resourceDistPathOrResourceRegex: string | DataDist[], resourceRegex?: PathDist[]) {\n if (typeof resourceDistPathOrResourceRegex === 'string') {\n this.resourceDistPath = resourceDistPathOrResourceRegex;\n this.resources = resourceRegex;\n } else {\n this.resources = resourceDistPathOrResourceRegex;\n // this.requestFilter = resourceDistPathOrResourceRegex\n }\n }\n // constructor(private resourceDistPath: string, private resourceRegex: (RequestFilterType | { request: RequestFilterType, dist: string | ((rr: RequestResponse, app: SimpleBootHttpServer) => (string|Promise<Blob |ArrayBuffer| Response>)) })[] = []) {\n // }\n\n async onInit(app: SimpleBootHttpServer) {\n }\n\n async proceedBefore({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n const url = (rr.reqUrlPathName ?? '').replace(/\\.\\./g, '');\n const urlObj = rr.reqUrlObject;\n // const requestUrl = parse(rr.reqUrl ?? '', true);\n // console.log('resource filter!!**-------', url);\n let sw = true;\n const regExps = this.resources?.filter(it => {\n if (it instanceof RegExp) {\n return it.test(url);\n }\n\n if (typeof it === 'string') {\n return RegExp(it).test(url);\n }\n\n if (typeof it === 'function') {\n return it(rr, app);\n }\n\n if (typeof it === 'object' && 'request' in it) {\n if (typeof it.request === 'function') {\n return it.request(rr, app);\n }\n return RegExp(it.request).test(url);\n }\n })??[]\n // console.log('regExps', regExps, url);\n // eslint-disable-next-line no-unused-vars\n for (const it of regExps) {\n sw = false;\n //DataDist\n if (isDataDist(it)) {\n let distValue = typeof it.response === 'function' ? it.response(rr,app) : it.response;\n if (distValue instanceof Promise) {\n const result = await distValue;\n if (result instanceof Response) {\n await rr.resEnd(result);\n break;\n } else if (result instanceof Blob) {\n rr.resStatusCode(HttpStatus.Ok);\n await rr.resEnd(result);\n break;\n }\n }\n } else {\n //PathDist or undefined\n const dist = typeof it === 'object' && 'dist' in it ? it.dist : urlObj.pathname;\n let distValue = typeof dist === 'function' ? dist(rr, app) : dist;\n if (this.resourceDistPath) {\n // It's a string path\n const resourcePath = path.join(this.resourceDistPath, distValue);\n // console.log('-----------',this.resourceDistPath, resourcePath);\n if (fs.existsSync(resourcePath)) {\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, mime.lookup(resourcePath).toString());\n await rr.resEnd(fs.readFileSync(resourcePath));\n break;\n } else {\n rr.resStatusCode(HttpStatus.NotFound);\n await rr.resEnd();\n break;\n }\n } else {\n rr.resStatusCode(HttpStatus.InternalServerError);\n await rr.resEnd();\n break;\n }\n }\n sw = true;\n }\n return sw;\n }\n\n async proceedAfter({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n // console.log('resource filter!!end@@**-------');\n return true;\n }\n}"],
|
|
5
|
-
"mappings": "AACA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAG3B,SAAS,YAAY;AAOd,MAAM,aAAa,CAAC,SAAgC;AACvD,SAAO,OAAO,SAAS,YAAa,aAAa,QAAU,UAAU;AACzE;AACO,MAAM,aAAa,CAAC,SAAgC;AACvD,SAAO,OAAO,SAAS,YAAa,aAAa,QAAU,cAAc;AAC7E;AACO,MAAM,eAAiC;AAAA,EAM5C,YAAY,iCAAuD,eAA4B;AAC7F,QAAI,OAAO,oCAAoC,UAAU;AACvD,WAAK,mBAAmB;AACxB,WAAK,YAAY;AAAA,IACnB,OAAO;AACL,WAAK,YAAY;AAAA,IAEnB;AAAA,EACF;AAAA;AAAA;AAAA,EAIE,MAAM,OAAO,KAA2B;AAAA,EACxC;AAAA,EAEA,MAAM,cAAc,EAAC,IAAI,IAAG,GAAgF;AACxG,UAAM,OAAO,GAAG,kBAAkB,IAAI,QAAQ,SAAS,EAAE;AACzD,UAAM,SAAS,GAAG;AAGlB,QAAI,KAAK;AACT,UAAM,UAAU,KAAK,WAAW,OAAO,QAAM;
|
|
4
|
+
"sourcesContent": ["import { Filter } from '../filters/Filter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport mime from 'mime-types';\nimport { HttpHeaders } from '../codes/HttpHeaders';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { Blob } from 'node:buffer';\n\nexport type RequestFilterType = string | RegExp | ((rr: RequestResponse, app: SimpleBootHttpServer) => boolean) | ((rr: RequestResponse, app: SimpleBootHttpServer) => Promise<boolean>);\n\ntype PathDist = RequestFilterType|{request: RequestFilterType, dist: string | ((rr: RequestResponse, app: SimpleBootHttpServer) => string)};\n\ntype DataDist = {request: RequestFilterType, response: (rr: RequestResponse, app: SimpleBootHttpServer) => (string | Promise<Blob | ArrayBuffer | Response>)};\nexport const isPathDist = (item: any): item is PathDist => {\n return typeof item === 'object' && ('request' in item) && ('dist' in item);\n};\nexport const isDataDist = (item: any): item is DataDist => {\n return typeof item === 'object' && ('request' in item) && ('response' in item);\n};\nexport class ResourceFilter implements Filter {\n // private requestFilter: RequestFilterType;\n private resourceDistPath?: string;\n private resources?: (DataDist|PathDist)[];\n constructor(resourceDistPath: string, resourceRegex: PathDist[]);\n constructor(resourceRegex: DataDist[]);\n constructor(resourceDistPathOrResourceRegex: string | DataDist[], resourceRegex?: PathDist[]) {\n if (typeof resourceDistPathOrResourceRegex === 'string') {\n this.resourceDistPath = resourceDistPathOrResourceRegex;\n this.resources = resourceRegex;\n } else {\n this.resources = resourceDistPathOrResourceRegex;\n // this.requestFilter = resourceDistPathOrResourceRegex\n }\n }\n // constructor(private resourceDistPath: string, private resourceRegex: (RequestFilterType | { request: RequestFilterType, dist: string | ((rr: RequestResponse, app: SimpleBootHttpServer) => (string|Promise<Blob |ArrayBuffer| Response>)) })[] = []) {\n // }\n\n async onInit(app: SimpleBootHttpServer) {\n }\n\n async proceedBefore({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n const url = (rr.reqUrlPathName ?? '').replace(/\\.\\./g, '');\n const urlObj = rr.reqUrlObject;\n // const requestUrl = parse(rr.reqUrl ?? '', true);\n // console.log('resource filter!!**-------', url);\n let sw = true;\n const regExps = this.resources?.filter(it => {\n // console.log('---it', it, it instanceof RegExp, typeof it)\n if (it instanceof RegExp) {\n // console.log('--------', it.test(url))\n return it.test(url);\n }\n\n if (typeof it === 'string') {\n console.log('url!!!!!!!', url)\n return it === url;\n // return RegExp(it).test(url);\n }\n\n if (typeof it === 'function') {\n return it(rr, app);\n }\n\n if (typeof it === 'object' && 'request' in it) {\n if (typeof it.request === 'function') {\n return it.request(rr, app);\n } else if (it .request instanceof RegExp) {\n return it.request.test(url);\n } else {\n // return RegExp(it.request).test(url);\n return it.request === url\n }\n }\n })??[]\n // console.log('regExps', regExps, url);\n // eslint-disable-next-line no-unused-vars\n for (const it of regExps) {\n sw = false;\n //DataDist\n if (isDataDist(it)) {\n let distValue = typeof it.response === 'function' ? it.response(rr,app) : it.response;\n if (distValue instanceof Promise) {\n const result = await distValue;\n if (result instanceof Response) {\n await rr.resEnd(result);\n break;\n } else if (result instanceof Blob) {\n rr.resStatusCode(HttpStatus.Ok);\n await rr.resEnd(result);\n break;\n }\n }\n } else {\n //PathDist or undefined\n const dist = typeof it === 'object' && 'dist' in it ? it.dist : urlObj.pathname;\n let distValue = typeof dist === 'function' ? dist(rr, app) : dist;\n if (this.resourceDistPath) {\n // It's a string path\n const resourcePath = path.join(this.resourceDistPath, distValue);\n // console.log('-----------',this.resourceDistPath, resourcePath);\n if (fs.existsSync(resourcePath)) {\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, mime.lookup(resourcePath).toString());\n await rr.resEnd(fs.readFileSync(resourcePath));\n break;\n } else {\n rr.resStatusCode(HttpStatus.NotFound);\n await rr.resEnd();\n break;\n }\n } else {\n rr.resStatusCode(HttpStatus.InternalServerError);\n await rr.resEnd();\n break;\n }\n }\n sw = true;\n }\n return sw;\n }\n\n async proceedAfter({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n // console.log('resource filter!!end@@**-------');\n return true;\n }\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|