@dooboostore/simple-boot-http-server 1.0.19 → 1.0.21
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 +24 -248
- package/dist/cjs/SimpleBootHttpServer.js +2 -4
- package/dist/cjs/SimpleBootHttpServer.js.map +2 -2
- package/dist/cjs/bundle-entry.js +44 -0
- package/dist/cjs/bundle-entry.js.map +7 -0
- package/dist/cjs/codes/HttpHeaders.js +42 -42
- package/dist/cjs/codes/HttpHeaders.js.map +3 -3
- package/dist/cjs/errors/HttpError.js +1 -5
- package/dist/cjs/errors/HttpError.js.map +1 -1
- package/dist/cjs/filters/CacheFilter.js +4 -3
- package/dist/cjs/filters/CacheFilter.js.map +1 -1
- package/dist/cjs/filters/OpenApi3Filter.js +0 -1
- package/dist/cjs/filters/OpenApi3Filter.js.map +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/models/RequestResponse.js +0 -5
- package/dist/cjs/models/RequestResponse.js.map +2 -2
- package/dist/cjs/models/datas/ReqHeader.js +0 -63
- package/dist/cjs/models/datas/ReqHeader.js.map +1 -1
- package/dist/cjs/option/HttpServerOption.js +6 -13
- package/dist/cjs/option/HttpServerOption.js.map +1 -1
- package/dist/cjs/package.json +2 -0
- package/dist/cjs/session/SessionManager.js +1 -2
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/esm/SimpleBootHttpServer.js +2 -4
- package/dist/esm/SimpleBootHttpServer.js.map +2 -2
- package/dist/esm/bundle-entry.js +13 -0
- package/dist/esm/bundle-entry.js.map +7 -0
- package/dist/esm/codes/HttpHeaders.js +42 -42
- package/dist/esm/codes/HttpHeaders.js.map +3 -3
- package/dist/esm/errors/HttpError.js +1 -5
- package/dist/esm/errors/HttpError.js.map +1 -1
- package/dist/esm/filters/CacheFilter.js +4 -3
- package/dist/esm/filters/CacheFilter.js.map +1 -1
- package/dist/esm/filters/OpenApi3Filter.js +0 -1
- package/dist/esm/filters/OpenApi3Filter.js.map +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/models/RequestResponse.js +0 -5
- package/dist/esm/models/RequestResponse.js.map +2 -2
- package/dist/esm/models/datas/ReqHeader.js +0 -63
- package/dist/esm/models/datas/ReqHeader.js.map +1 -1
- package/dist/esm/option/HttpServerOption.js +6 -13
- package/dist/esm/option/HttpServerOption.js.map +1 -1
- package/dist/esm/session/SessionManager.js +1 -2
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js +15391 -3
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js.map +4 -4
- package/dist/{cjs → types}/SimpleBootHttpServer.d.ts +1 -2
- package/dist/types/SimpleBootHttpServer.d.ts.map +1 -0
- package/dist/types/bundle-entry.d.ts +13 -0
- package/dist/types/bundle-entry.d.ts.map +1 -0
- package/dist/types/codes/HttpHeaders.d.ts +43 -0
- package/dist/types/codes/HttpHeaders.d.ts.map +1 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/{esm → types}/index.d.ts.map +1 -1
- package/dist/{esm → types}/models/RequestResponse.d.ts +7 -7
- package/dist/types/models/RequestResponse.d.ts.map +1 -0
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js +15384 -7
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js.map +4 -4
- package/package.json +28 -16
- package/src/SimpleBootHttpServer.ts +329 -0
- package/src/bundle-entry.ts +12 -0
- package/src/codes/HttpHeaders.ts +43 -0
- package/src/codes/HttpMethod.ts +11 -0
- package/{dist/esm/codes/HttpStatus.d.ts → src/codes/HttpStatus.ts} +2 -2
- package/src/codes/Mimes.ts +27 -0
- package/{dist/esm/codes/index.d.ts → src/codes/index.ts} +0 -1
- package/src/decorators/MethodMapping.ts +233 -0
- package/src/decorators/index.ts +1 -0
- package/src/endpoints/CrossDomainHeaderEndPoint.ts +38 -0
- package/src/endpoints/EndPoint.ts +7 -0
- package/src/endpoints/HeaderEndPoint.ts +17 -0
- package/{dist/esm/endpoints/index.d.ts → src/endpoints/index.ts} +0 -1
- package/src/errors/BadRequestError.ts +8 -0
- package/src/errors/ForbiddenError.ts +8 -0
- package/src/errors/HttpError.ts +14 -0
- package/src/errors/InternalServerError.ts +8 -0
- package/src/errors/NotFoundError.ts +8 -0
- package/src/errors/UnauthorizedError.ts +8 -0
- package/{dist/esm/errors/index.d.ts → src/errors/index.ts} +0 -1
- package/src/filters/CacheFilter.ts +169 -0
- package/src/filters/Filter.ts +10 -0
- package/src/filters/HttpStatusFilter.ts +24 -0
- package/src/filters/OpenApi3Filter.ts +158 -0
- package/src/filters/ResourceFilter.ts +72 -0
- package/src/filters/ThrowFilter.ts +23 -0
- package/{dist/esm/filters/index.d.ts → src/filters/index.ts} +0 -1
- package/src/index.ts +13 -0
- package/src/inject/InjectSituationType.ts +3 -0
- package/{dist/esm/inject/index.d.ts → src/inject/index.ts} +0 -1
- package/src/lifecycle/OnInit.ts +5 -0
- package/src/lifecycle/index.ts +1 -0
- package/src/models/RequestResponse.ts +658 -0
- package/src/models/datas/HeaderData.ts +4 -0
- package/src/models/datas/MultipartData.ts +27 -0
- package/{dist/esm/models/datas/ReqHeader.d.ts → src/models/datas/ReqHeader.ts} +5 -4
- package/src/models/datas/Resource.ts +44 -0
- package/src/models/datas/body/ReqFormUrlBody.ts +3 -0
- package/src/models/datas/body/ReqJsonBody.ts +3 -0
- package/src/models/datas/body/ReqMultipartFormBody.ts +6 -0
- package/{dist/esm/models/index.d.ts → src/models/index.ts} +0 -1
- package/src/models/method/patch/PatchJson.ts +46 -0
- package/src/option/HttpServerOption.ts +81 -0
- package/{dist/esm/option/index.d.ts → src/option/index.ts} +0 -1
- package/src/resolvers/Resolver.ts +5 -0
- package/src/resolvers/ResourceResolver.ts +11 -0
- package/{dist/esm/resolvers/index.d.ts → src/resolvers/index.ts} +0 -1
- package/src/session/SessionManager.ts +89 -0
- package/src/session/index.ts +1 -0
- package/tsconfig.json +23 -0
- package/dist/cjs/SimpleBootHttpServer.d.ts.map +0 -1
- package/dist/cjs/codes/HttpHeaders.d.ts +0 -42
- package/dist/cjs/codes/HttpHeaders.d.ts.map +0 -1
- package/dist/cjs/index.d.ts +0 -3
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/models/RequestResponse.d.ts +0 -100
- package/dist/cjs/models/RequestResponse.d.ts.map +0 -1
- package/dist/esm/SimpleBootHttpServer.d.ts +0 -15
- package/dist/esm/SimpleBootHttpServer.d.ts.map +0 -1
- package/dist/esm/codes/HttpHeaders.d.ts +0 -42
- package/dist/esm/codes/HttpHeaders.d.ts.map +0 -1
- package/dist/esm/codes/HttpMethod.d.ts +0 -12
- package/dist/esm/codes/HttpMethod.d.ts.map +0 -1
- package/dist/esm/codes/HttpStatus.d.ts.map +0 -1
- package/dist/esm/codes/Mimes.d.ts +0 -28
- package/dist/esm/codes/Mimes.d.ts.map +0 -1
- package/dist/esm/codes/index.d.ts.map +0 -1
- package/dist/esm/decorators/MethodMapping.d.ts +0 -73
- package/dist/esm/decorators/MethodMapping.d.ts.map +0 -1
- package/dist/esm/decorators/index.d.ts +0 -2
- package/dist/esm/decorators/index.d.ts.map +0 -1
- package/dist/esm/endpoints/CrossDomainHeaderEndPoint.d.ts +0 -16
- package/dist/esm/endpoints/CrossDomainHeaderEndPoint.d.ts.map +0 -1
- package/dist/esm/endpoints/EndPoint.d.ts +0 -7
- package/dist/esm/endpoints/EndPoint.d.ts.map +0 -1
- package/dist/esm/endpoints/HeaderEndPoint.d.ts +0 -12
- package/dist/esm/endpoints/HeaderEndPoint.d.ts.map +0 -1
- package/dist/esm/endpoints/index.d.ts.map +0 -1
- package/dist/esm/errors/BadRequestError.d.ts +0 -8
- package/dist/esm/errors/BadRequestError.d.ts.map +0 -1
- package/dist/esm/errors/ForbiddenError.d.ts +0 -8
- package/dist/esm/errors/ForbiddenError.d.ts.map +0 -1
- package/dist/esm/errors/HttpError.d.ts +0 -12
- package/dist/esm/errors/HttpError.d.ts.map +0 -1
- package/dist/esm/errors/InternalServerError.d.ts +0 -8
- package/dist/esm/errors/InternalServerError.d.ts.map +0 -1
- package/dist/esm/errors/NotFoundError.d.ts +0 -8
- package/dist/esm/errors/NotFoundError.d.ts.map +0 -1
- package/dist/esm/errors/UnauthorizedError.d.ts +0 -8
- package/dist/esm/errors/UnauthorizedError.d.ts.map +0 -1
- package/dist/esm/errors/index.d.ts.map +0 -1
- package/dist/esm/filters/CacheFilter.d.ts +0 -45
- package/dist/esm/filters/CacheFilter.d.ts.map +0 -1
- package/dist/esm/filters/Filter.d.ts +0 -17
- package/dist/esm/filters/Filter.d.ts.map +0 -1
- package/dist/esm/filters/HttpStatusFilter.d.ts +0 -20
- package/dist/esm/filters/HttpStatusFilter.d.ts.map +0 -1
- package/dist/esm/filters/OpenApi3Filter.d.ts +0 -142
- package/dist/esm/filters/OpenApi3Filter.d.ts.map +0 -1
- package/dist/esm/filters/ResourceFilter.d.ts +0 -24
- package/dist/esm/filters/ResourceFilter.d.ts.map +0 -1
- package/dist/esm/filters/ThrowFilter.d.ts +0 -19
- package/dist/esm/filters/ThrowFilter.d.ts.map +0 -1
- package/dist/esm/filters/index.d.ts.map +0 -1
- package/dist/esm/index.d.ts +0 -3
- package/dist/esm/inject/InjectSituationType.d.ts +0 -4
- package/dist/esm/inject/InjectSituationType.d.ts.map +0 -1
- package/dist/esm/inject/index.d.ts.map +0 -1
- package/dist/esm/lifecycle/OnInit.d.ts +0 -5
- package/dist/esm/lifecycle/OnInit.d.ts.map +0 -1
- package/dist/esm/lifecycle/index.d.ts +0 -2
- package/dist/esm/lifecycle/index.d.ts.map +0 -1
- package/dist/esm/models/RequestResponse.d.ts.map +0 -1
- package/dist/esm/models/datas/HeaderData.d.ts +0 -10
- package/dist/esm/models/datas/HeaderData.d.ts.map +0 -1
- package/dist/esm/models/datas/MultipartData.d.ts +0 -12
- package/dist/esm/models/datas/MultipartData.d.ts.map +0 -1
- package/dist/esm/models/datas/ReqHeader.d.ts.map +0 -1
- package/dist/esm/models/datas/Resource.d.ts +0 -11
- package/dist/esm/models/datas/Resource.d.ts.map +0 -1
- package/dist/esm/models/datas/body/ReqFormUrlBody.d.ts +0 -4
- package/dist/esm/models/datas/body/ReqFormUrlBody.d.ts.map +0 -1
- package/dist/esm/models/datas/body/ReqJsonBody.d.ts +0 -4
- package/dist/esm/models/datas/body/ReqJsonBody.d.ts.map +0 -1
- package/dist/esm/models/datas/body/ReqMultipartFormBody.d.ts +0 -6
- package/dist/esm/models/datas/body/ReqMultipartFormBody.d.ts.map +0 -1
- package/dist/esm/models/index.d.ts.map +0 -1
- package/dist/esm/models/method/patch/PatchJson.d.ts +0 -8
- package/dist/esm/models/method/patch/PatchJson.d.ts.map +0 -1
- package/dist/esm/option/HttpServerOption.d.ts +0 -83
- package/dist/esm/option/HttpServerOption.d.ts.map +0 -1
- package/dist/esm/option/index.d.ts.map +0 -1
- package/dist/esm/resolvers/Resolver.d.ts +0 -5
- package/dist/esm/resolvers/Resolver.d.ts.map +0 -1
- package/dist/esm/resolvers/ResourceResolver.d.ts +0 -6
- package/dist/esm/resolvers/ResourceResolver.d.ts.map +0 -1
- package/dist/esm/resolvers/index.d.ts.map +0 -1
- package/dist/esm/session/SessionManager.d.ts +0 -57
- package/dist/esm/session/SessionManager.d.ts.map +0 -1
- package/dist/esm/session/index.d.ts +0 -2
- package/dist/esm/session/index.d.ts.map +0 -1
- /package/dist/{cjs → types}/codes/HttpMethod.d.ts +0 -0
- /package/dist/{cjs → types}/codes/HttpMethod.d.ts.map +0 -0
- /package/dist/{cjs → types}/codes/HttpStatus.d.ts +0 -0
- /package/dist/{cjs → types}/codes/HttpStatus.d.ts.map +0 -0
- /package/dist/{cjs → types}/codes/Mimes.d.ts +0 -0
- /package/dist/{cjs → types}/codes/Mimes.d.ts.map +0 -0
- /package/dist/{cjs → types}/codes/index.d.ts +0 -0
- /package/dist/{cjs → types}/codes/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/decorators/MethodMapping.d.ts +0 -0
- /package/dist/{cjs → types}/decorators/MethodMapping.d.ts.map +0 -0
- /package/dist/{cjs → types}/decorators/index.d.ts +0 -0
- /package/dist/{cjs → types}/decorators/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/endpoints/CrossDomainHeaderEndPoint.d.ts +0 -0
- /package/dist/{cjs → types}/endpoints/CrossDomainHeaderEndPoint.d.ts.map +0 -0
- /package/dist/{cjs → types}/endpoints/EndPoint.d.ts +0 -0
- /package/dist/{cjs → types}/endpoints/EndPoint.d.ts.map +0 -0
- /package/dist/{cjs → types}/endpoints/HeaderEndPoint.d.ts +0 -0
- /package/dist/{cjs → types}/endpoints/HeaderEndPoint.d.ts.map +0 -0
- /package/dist/{cjs → types}/endpoints/index.d.ts +0 -0
- /package/dist/{cjs → types}/endpoints/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/BadRequestError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/BadRequestError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/ForbiddenError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/ForbiddenError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/HttpError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/HttpError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/InternalServerError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/InternalServerError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/NotFoundError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/NotFoundError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/UnauthorizedError.d.ts +0 -0
- /package/dist/{cjs → types}/errors/UnauthorizedError.d.ts.map +0 -0
- /package/dist/{cjs → types}/errors/index.d.ts +0 -0
- /package/dist/{cjs → types}/errors/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/CacheFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/CacheFilter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/Filter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/Filter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/HttpStatusFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/HttpStatusFilter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/OpenApi3Filter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/OpenApi3Filter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/ResourceFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/ResourceFilter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/ThrowFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/ThrowFilter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/index.d.ts +0 -0
- /package/dist/{cjs → types}/filters/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/inject/InjectSituationType.d.ts +0 -0
- /package/dist/{cjs → types}/inject/InjectSituationType.d.ts.map +0 -0
- /package/dist/{cjs → types}/inject/index.d.ts +0 -0
- /package/dist/{cjs → types}/inject/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/lifecycle/OnInit.d.ts +0 -0
- /package/dist/{cjs → types}/lifecycle/OnInit.d.ts.map +0 -0
- /package/dist/{cjs → types}/lifecycle/index.d.ts +0 -0
- /package/dist/{cjs → types}/lifecycle/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/HeaderData.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/HeaderData.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/MultipartData.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/MultipartData.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/ReqHeader.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/ReqHeader.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/Resource.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/Resource.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqFormUrlBody.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqFormUrlBody.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqJsonBody.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqJsonBody.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqMultipartFormBody.d.ts +0 -0
- /package/dist/{cjs → types}/models/datas/body/ReqMultipartFormBody.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/index.d.ts +0 -0
- /package/dist/{cjs → types}/models/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/models/method/patch/PatchJson.d.ts +0 -0
- /package/dist/{cjs → types}/models/method/patch/PatchJson.d.ts.map +0 -0
- /package/dist/{cjs → types}/option/HttpServerOption.d.ts +0 -0
- /package/dist/{cjs → types}/option/HttpServerOption.d.ts.map +0 -0
- /package/dist/{cjs → types}/option/index.d.ts +0 -0
- /package/dist/{cjs → types}/option/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/resolvers/Resolver.d.ts +0 -0
- /package/dist/{cjs → types}/resolvers/Resolver.d.ts.map +0 -0
- /package/dist/{cjs → types}/resolvers/ResourceResolver.d.ts +0 -0
- /package/dist/{cjs → types}/resolvers/ResourceResolver.d.ts.map +0 -0
- /package/dist/{cjs → types}/resolvers/index.d.ts +0 -0
- /package/dist/{cjs → types}/resolvers/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/session/SessionManager.d.ts +0 -0
- /package/dist/{cjs → types}/session/SessionManager.d.ts.map +0 -0
- /package/dist/{cjs → types}/session/index.d.ts +0 -0
- /package/dist/{cjs → types}/session/index.d.ts.map +0 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { ConstructorType } from '@dooboostore/core/types';
|
|
2
|
+
import { ReflectMethod } from '@dooboostore/simple-boot/types/Types';
|
|
3
|
+
import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';
|
|
4
|
+
import { Resolver } from '../resolvers/Resolver';
|
|
5
|
+
import { Mimes } from '../codes/Mimes';
|
|
6
|
+
import { HttpMethod } from '../codes/HttpMethod';
|
|
7
|
+
|
|
8
|
+
export enum UrlMappingSituationType {
|
|
9
|
+
REQ_JSON_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_JSON_BODY',
|
|
10
|
+
REQ_FORM_URL_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_FORM_URL_BODY'
|
|
11
|
+
}
|
|
12
|
+
export type MappingConfig = {
|
|
13
|
+
method: HttpMethod | string,
|
|
14
|
+
description?: {
|
|
15
|
+
name?: string;
|
|
16
|
+
detail?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
req?: {
|
|
20
|
+
contentType?: (Mimes|string)[];
|
|
21
|
+
accept?: (Mimes|string)[];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
res?: {
|
|
25
|
+
status?: number;
|
|
26
|
+
header?: {[key: string]: string};
|
|
27
|
+
contentType?: Mimes | string;
|
|
28
|
+
}
|
|
29
|
+
resolver?: Resolver|ConstructorType<Resolver>;
|
|
30
|
+
}
|
|
31
|
+
export type SaveMappingConfig = {propertyKey: string | symbol; config: MappingConfig}
|
|
32
|
+
const MappingMetadataKey = Symbol('MappingMetadataKey');
|
|
33
|
+
// const GETSMappingMetadataKey = Symbol('GET_METHODS');
|
|
34
|
+
// const GETMappingMetadataKey = Symbol('GET_METHOD');
|
|
35
|
+
|
|
36
|
+
const process = (config: MappingConfig, target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
37
|
+
const saveMappingConfigs = (ReflectUtils.getMetadata(MappingMetadataKey, target.constructor) ?? []) as SaveMappingConfig[];
|
|
38
|
+
saveMappingConfigs.push({propertyKey, config});
|
|
39
|
+
ReflectUtils.defineMetadata(MappingMetadataKey, saveMappingConfigs, target.constructor);
|
|
40
|
+
ReflectUtils.defineMetadata(MappingMetadataKey, config, target, propertyKey);
|
|
41
|
+
}
|
|
42
|
+
export function UrlMapping(config: MappingConfig): ReflectMethod;
|
|
43
|
+
export function UrlMapping(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
44
|
+
export function UrlMapping(configOrtarget?: MappingConfig | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
45
|
+
if (propertyKey && descriptor) {
|
|
46
|
+
process({method: HttpMethod.GET}, configOrtarget, propertyKey, descriptor);
|
|
47
|
+
} else {
|
|
48
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
49
|
+
process(configOrtarget, target, propertyKey, descriptor);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export const getUrlMapping = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
54
|
+
return ReflectUtils.getMetadata(MappingMetadataKey, target, propertyKey);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const getUrlMappings = (target: any): SaveMappingConfig[] => {
|
|
58
|
+
if (target !== null && undefined !== target && typeof target === 'object') {
|
|
59
|
+
target = target.constructor;
|
|
60
|
+
}
|
|
61
|
+
return ReflectUtils.getMetadata(MappingMetadataKey, target);
|
|
62
|
+
}
|
|
63
|
+
export function GET(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
64
|
+
export function GET(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
65
|
+
export function GET(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
66
|
+
if (propertyKey && descriptor) {
|
|
67
|
+
process({method: HttpMethod.GET}, configOrTarget, propertyKey, descriptor);
|
|
68
|
+
} else {
|
|
69
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
70
|
+
configOrTarget.method = HttpMethod.GET;
|
|
71
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const getGET = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
77
|
+
return getUrlMapping(target, propertyKey);
|
|
78
|
+
}
|
|
79
|
+
export const getGETS = (target: any): SaveMappingConfig[] => {
|
|
80
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);
|
|
81
|
+
}
|
|
82
|
+
export function POST(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
83
|
+
export function POST(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
84
|
+
export function POST(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
85
|
+
if (propertyKey && descriptor) {
|
|
86
|
+
process({method: HttpMethod.POST}, configOrTarget, propertyKey, descriptor);
|
|
87
|
+
} else {
|
|
88
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
89
|
+
configOrTarget.method = HttpMethod.POST;
|
|
90
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const getPOST = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
96
|
+
return getUrlMapping(target, propertyKey);
|
|
97
|
+
}
|
|
98
|
+
export const getPOSTS = (target: any): SaveMappingConfig[] => {
|
|
99
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.POST);
|
|
100
|
+
}
|
|
101
|
+
export function DELETE(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
102
|
+
export function DELETE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
103
|
+
export function DELETE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
104
|
+
if (propertyKey && descriptor) {
|
|
105
|
+
process({method: HttpMethod.DELETE}, configOrTarget, propertyKey, descriptor);
|
|
106
|
+
} else {
|
|
107
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
108
|
+
configOrTarget.method = HttpMethod.DELETE;
|
|
109
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const getDELETE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
115
|
+
return getUrlMapping(target, propertyKey);
|
|
116
|
+
}
|
|
117
|
+
export const getDELETES = (target: any): SaveMappingConfig[] => {
|
|
118
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.DELETE);
|
|
119
|
+
}
|
|
120
|
+
export function PUT(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
121
|
+
export function PUT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
122
|
+
export function PUT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
123
|
+
if (propertyKey && descriptor) {
|
|
124
|
+
process({method: HttpMethod.PUT}, configOrTarget, propertyKey, descriptor);
|
|
125
|
+
} else {
|
|
126
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
127
|
+
configOrTarget.method = HttpMethod.PUT;
|
|
128
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export const getPUT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
134
|
+
return getUrlMapping(target, propertyKey);
|
|
135
|
+
}
|
|
136
|
+
export const getPUTS = (target: any): SaveMappingConfig[] => {
|
|
137
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PUT);
|
|
138
|
+
}
|
|
139
|
+
export function PATCH(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
140
|
+
export function PATCH(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
141
|
+
export function PATCH(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
142
|
+
if (propertyKey && descriptor) {
|
|
143
|
+
process({method: HttpMethod.PATCH}, configOrTarget, propertyKey, descriptor);
|
|
144
|
+
} else {
|
|
145
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
146
|
+
configOrTarget.method = HttpMethod.PATCH;
|
|
147
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export const getPATCH = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
153
|
+
return getUrlMapping(target, propertyKey);
|
|
154
|
+
}
|
|
155
|
+
export const getPATCHS = (target: any): SaveMappingConfig[] => {
|
|
156
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);
|
|
157
|
+
}
|
|
158
|
+
export function OPTIONS(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
159
|
+
export function OPTIONS(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
160
|
+
export function OPTIONS(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
161
|
+
if (propertyKey && descriptor) {
|
|
162
|
+
process({method: HttpMethod.OPTIONS}, configOrTarget, propertyKey, descriptor);
|
|
163
|
+
} else {
|
|
164
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
165
|
+
configOrTarget.method = HttpMethod.OPTIONS;
|
|
166
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export const getOPTIONS = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
172
|
+
return getUrlMapping(target, propertyKey);
|
|
173
|
+
}
|
|
174
|
+
export const getOPTIONSS = (target: any): SaveMappingConfig[] => {
|
|
175
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.OPTIONS);
|
|
176
|
+
}
|
|
177
|
+
export function HEAD(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
178
|
+
export function HEAD(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
179
|
+
export function HEAD(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
180
|
+
if (propertyKey && descriptor) {
|
|
181
|
+
process({method: HttpMethod.HEAD}, configOrTarget, propertyKey, descriptor);
|
|
182
|
+
} else {
|
|
183
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
184
|
+
configOrTarget.method = HttpMethod.HEAD;
|
|
185
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export const getHEAD = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
191
|
+
return getUrlMapping(target, propertyKey);
|
|
192
|
+
}
|
|
193
|
+
export const getHEADS = (target: any): SaveMappingConfig[] => {
|
|
194
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);
|
|
195
|
+
}
|
|
196
|
+
export function TRACE(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
197
|
+
export function TRACE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
198
|
+
export function TRACE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
199
|
+
if (propertyKey && descriptor) {
|
|
200
|
+
process({method: HttpMethod.TRACE}, configOrTarget, propertyKey, descriptor);
|
|
201
|
+
} else {
|
|
202
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
203
|
+
configOrTarget.method = HttpMethod.TRACE;
|
|
204
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export const getTRACE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
210
|
+
return getUrlMapping(target, propertyKey);
|
|
211
|
+
}
|
|
212
|
+
export const getTRACES = (target: any): SaveMappingConfig[] => {
|
|
213
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.TRACE);
|
|
214
|
+
}
|
|
215
|
+
export function CONNECT(config: Omit<MappingConfig, 'method'>): ReflectMethod;
|
|
216
|
+
export function CONNECT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;
|
|
217
|
+
export function CONNECT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {
|
|
218
|
+
if (propertyKey && descriptor) {
|
|
219
|
+
process({method: HttpMethod.CONNECT}, configOrTarget, propertyKey, descriptor);
|
|
220
|
+
} else {
|
|
221
|
+
return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
|
|
222
|
+
configOrTarget.method = HttpMethod.CONNECT;
|
|
223
|
+
process(configOrTarget, target, propertyKey, descriptor);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export const getCONNECT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {
|
|
229
|
+
return getUrlMapping(target, propertyKey);
|
|
230
|
+
}
|
|
231
|
+
export const getCONNECTS = (target: any): SaveMappingConfig[] => {
|
|
232
|
+
return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.CONNECT);
|
|
233
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './MethodMapping';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {EndPoint} from './EndPoint';
|
|
2
|
+
import {SimpleBootHttpServer} from '../SimpleBootHttpServer';
|
|
3
|
+
import {RequestResponse} from '../models/RequestResponse';
|
|
4
|
+
import { HttpHeaders } from '../codes/HttpHeaders';
|
|
5
|
+
|
|
6
|
+
export type CrossDomainHeaderEndPointConfig = {
|
|
7
|
+
accessControlAllowOrigin?: string | string[],
|
|
8
|
+
accessControlAllowMethods?: string | string[],
|
|
9
|
+
accessControlAllowHeaders?: string | string[],
|
|
10
|
+
accessControlExposeHeaders?: string | string[]
|
|
11
|
+
}
|
|
12
|
+
export class CrossDomainHeaderEndPoint implements EndPoint {
|
|
13
|
+
constructor(private config?: CrossDomainHeaderEndPointConfig) {
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
rr.resSetHeader("Access-Control-Allow-Origin", "*")
|
|
18
|
+
rr.resSetHeader("Access-Control-Allow-Methods", "DELETE, POST, GET, OPTIONS")
|
|
19
|
+
rr.resSetHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With")
|
|
20
|
+
*/
|
|
21
|
+
async endPoint(rr: RequestResponse, app: SimpleBootHttpServer) {
|
|
22
|
+
if (this.config?.accessControlAllowOrigin) {
|
|
23
|
+
rr.resSetHeader(HttpHeaders.AccessControlAllowOrigin, Array.isArray(this.config.accessControlAllowOrigin) ? this.config.accessControlAllowOrigin.join(', ') : this.config.accessControlAllowOrigin);
|
|
24
|
+
}
|
|
25
|
+
if (this.config?.accessControlAllowMethods) {
|
|
26
|
+
rr.resSetHeader(HttpHeaders.AccessControlAllowMethods, Array.isArray(this.config.accessControlAllowMethods) ? this.config.accessControlAllowMethods.join(', ') : this.config.accessControlAllowMethods);
|
|
27
|
+
}
|
|
28
|
+
if (this.config?.accessControlAllowHeaders) {
|
|
29
|
+
rr.resSetHeader(HttpHeaders.AccessControlAllowHeaders, Array.isArray(this.config.accessControlAllowHeaders) ? this.config.accessControlAllowHeaders.join(', ') : this.config.accessControlAllowHeaders);
|
|
30
|
+
}
|
|
31
|
+
if (this.config?.accessControlExposeHeaders) {
|
|
32
|
+
rr.resSetHeader(HttpHeaders.AccessControlExposeHeaders, Array.isArray(this.config.accessControlExposeHeaders) ? this.config.accessControlExposeHeaders.join(', ') : this.config.accessControlExposeHeaders);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async onInit(app: SimpleBootHttpServer) {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import {RequestResponse} from '../models/RequestResponse';
|
|
2
|
+
import {SimpleBootHttpServer} from '../SimpleBootHttpServer';
|
|
3
|
+
import {OnInit} from '../lifecycle/OnInit';
|
|
4
|
+
|
|
5
|
+
export interface EndPoint extends OnInit {
|
|
6
|
+
endPoint(rr: RequestResponse, app: SimpleBootHttpServer): Promise<any>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {EndPoint} from './EndPoint';
|
|
2
|
+
import {SimpleBootHttpServer} from '../SimpleBootHttpServer';
|
|
3
|
+
import {RequestResponse} from '../models/RequestResponse';
|
|
4
|
+
|
|
5
|
+
export class HeaderEndPoint implements EndPoint {
|
|
6
|
+
constructor(private headers?: { [key: string]: string | string[] }) {
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async endPoint(rr: RequestResponse, app: SimpleBootHttpServer) {
|
|
10
|
+
if (this.headers) {
|
|
11
|
+
rr.resSetHeaders(this.headers);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async onInit(app: SimpleBootHttpServer) {
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {HttpError} from './HttpError';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
|
|
4
|
+
export class BadRequestError extends HttpError {
|
|
5
|
+
constructor({status = HttpStatus.BadRequest, message = 'Bad Request'}: {status?: number, message?: string} = {}) {
|
|
6
|
+
super({status, message});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {HttpError} from './HttpError';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
|
|
4
|
+
export class ForbiddenError extends HttpError {
|
|
5
|
+
constructor({status = HttpStatus.Forbidden, message = 'Forbidden'}: {status?: number, message?: string} = {}) {
|
|
6
|
+
super({status, message});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
export class HttpError {
|
|
3
|
+
name: string = 'Error'
|
|
4
|
+
message: string;
|
|
5
|
+
stack?: string
|
|
6
|
+
data?: any;
|
|
7
|
+
public status: number;
|
|
8
|
+
|
|
9
|
+
constructor({status, message = 'HttpError'}: { status: number, message?: string }) {
|
|
10
|
+
// super(message);
|
|
11
|
+
this.message = message;
|
|
12
|
+
this.status = status;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {HttpError} from './HttpError';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
|
|
4
|
+
export class InternalServerError extends HttpError {
|
|
5
|
+
constructor({status = HttpStatus.InternalServerError, message = 'Internal Server Error'}: {status?: number, message?: string} = {}) {
|
|
6
|
+
super({status, message});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {HttpError} from './HttpError';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
|
|
4
|
+
export class NotFoundError extends HttpError {
|
|
5
|
+
constructor({status = HttpStatus.NotFound, message = 'Not Found'}: {status?: number, message?: string} = {}) {
|
|
6
|
+
super({status, message});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {HttpError} from './HttpError';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
|
|
4
|
+
export class UnauthorizedError extends HttpError {
|
|
5
|
+
constructor({status = HttpStatus.Unauthorized, message = 'Unauthorized'}: {status?: number, message?: string} = {}) {
|
|
6
|
+
super({status, message});
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { Filter } from '../filters/Filter';
|
|
2
|
+
import { HttpStatus } from '../codes/HttpStatus';
|
|
3
|
+
import { RequestResponse } from '../models/RequestResponse';
|
|
4
|
+
import { SimpleBootHttpServer } from '../SimpleBootHttpServer';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { FileUtils } from '@dooboostore/core-node/file/FileUtils';
|
|
8
|
+
import { ConvertUtils } from '@dooboostore/core-node/convert/ConvertUtils';
|
|
9
|
+
import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
|
|
10
|
+
|
|
11
|
+
export type CacheFilterSessionType = { key: string, lifeTime: number, isUpdate: boolean, responseHeaders?: string[] };
|
|
12
|
+
|
|
13
|
+
type CacheConfigCacheItemType = { path: string, createTime: number, lifeTime: number, responseHeader: { [key: string]: string | number | string[] } };
|
|
14
|
+
|
|
15
|
+
type KeyAndConfig = { key: string, lifeTime?: number, responseHeaders?: string[] } ;
|
|
16
|
+
|
|
17
|
+
export class CacheFilter implements Filter {
|
|
18
|
+
public static readonly CARRIER_KEY_NAME = '_CARRIER_CACHE_FILTER_KEY_NAME';
|
|
19
|
+
private storage = new Map<string, string | Buffer>();
|
|
20
|
+
private cacheConfig: {
|
|
21
|
+
createDate: string;
|
|
22
|
+
updateDate: string;
|
|
23
|
+
caches: { [key: string]: CacheConfigCacheItemType }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
constructor(private config: {
|
|
27
|
+
config: {
|
|
28
|
+
cacheDir?: string;
|
|
29
|
+
lifeTime: number;
|
|
30
|
+
startUpClean?: boolean;
|
|
31
|
+
},
|
|
32
|
+
filter?: (rr: RequestResponse, app: SimpleBootHttpServer) => boolean;
|
|
33
|
+
key: (rr: RequestResponse, app: SimpleBootHttpServer) => KeyAndConfig;
|
|
34
|
+
}) {
|
|
35
|
+
|
|
36
|
+
if (config.config.cacheDir && config.config.startUpClean) {
|
|
37
|
+
FileUtils.deleteSync(config.config.cacheDir, {options: {recursive: true}});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async onInit(app: SimpleBootHttpServer) {
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async proceedBefore({rr, app, carrier}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {
|
|
45
|
+
// this.key = undefined;
|
|
46
|
+
// this.lifeTime = undefined;
|
|
47
|
+
// this.isUpdate = false;
|
|
48
|
+
const filter = this.config.filter?.(rr,app);
|
|
49
|
+
if (!filter) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (this.config.config.cacheDir) {
|
|
53
|
+
FileUtils.mkdirSync(this.config.config.cacheDir, {recursive: true});
|
|
54
|
+
}
|
|
55
|
+
if (!this.cacheConfig && this.config.config.cacheDir) {
|
|
56
|
+
try {
|
|
57
|
+
this.cacheConfig = JSON.parse(ConvertUtils.toString(FileUtils.readSync([this.config.config.cacheDir, 'cacheConfig.json'], { option: {encoding: 'utf-8'}})));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const date = new Date().toISOString();
|
|
62
|
+
this.cacheConfig ??= {
|
|
63
|
+
createDate: date,
|
|
64
|
+
updateDate: date,
|
|
65
|
+
// accessDate: date,
|
|
66
|
+
caches: {}
|
|
67
|
+
};
|
|
68
|
+
this.cacheConfig.createDate ??= date;
|
|
69
|
+
this.cacheConfig.updateDate ??= date;
|
|
70
|
+
// this.cacheConfig.accessDate ??= date;
|
|
71
|
+
this.cacheConfig.caches ??= {};
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
const rkey = this.config.key(rr, app);
|
|
75
|
+
// console.log('--path filter', rr.reqMethod(), rr.reqUrlPathName, filter, rkey)
|
|
76
|
+
const sessionData: CacheFilterSessionType = {key: rkey.key, lifeTime: rkey.lifeTime ?? this.config.config.lifeTime, isUpdate: false, responseHeaders: rkey.responseHeaders};
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
const cache = this.cacheConfig.caches[sessionData.key];
|
|
80
|
+
if (cache) {
|
|
81
|
+
const existes = this.config.config.cacheDir ? FileUtils.existsSync(cache.path) : this.storage.has(cache.path);
|
|
82
|
+
const diffTime = Date.now() - cache.createTime;
|
|
83
|
+
if (!existes || diffTime > cache.lifeTime) {
|
|
84
|
+
delete this.cacheConfig[sessionData.key];
|
|
85
|
+
this.deleteChunk(cache.path);
|
|
86
|
+
sessionData.isUpdate = true;
|
|
87
|
+
} else {
|
|
88
|
+
rr.resSetHeaders({
|
|
89
|
+
...cache.responseHeader,
|
|
90
|
+
cacheFilter: `true;remainTime=${cache.lifeTime - diffTime}`
|
|
91
|
+
});
|
|
92
|
+
// console.log('chunk--->', cache.path);
|
|
93
|
+
try {
|
|
94
|
+
const chunk = this.getChunk(cache.path);
|
|
95
|
+
// console.log('chunk--->', chunk);
|
|
96
|
+
await rr.resEnd(chunk);
|
|
97
|
+
} catch (e) {
|
|
98
|
+
console.log('--------e', e)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
sessionData.isUpdate = true;
|
|
103
|
+
}
|
|
104
|
+
carrier.set(CacheFilter.CARRIER_KEY_NAME, sessionData);
|
|
105
|
+
return sessionData.isUpdate;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private deleteChunk(path: string) {
|
|
109
|
+
if (this.config.config.cacheDir && FileUtils.existsSync(path)) {
|
|
110
|
+
FileUtils.deleteFileSync(path);
|
|
111
|
+
} else if (this.storage.has(path)) {
|
|
112
|
+
this.storage.delete(path);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private getChunk(path: string) {
|
|
117
|
+
return this.config.config.cacheDir ? FileUtils.readSync(path) : this.storage.get(path);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async proceedAfter({rr, app, carrier}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {
|
|
121
|
+
// const data = await rr.resBodyStringData()
|
|
122
|
+
const sessionData = carrier.get(CacheFilter.CARRIER_KEY_NAME) as CacheFilterSessionType ;
|
|
123
|
+
if (sessionData && sessionData.isUpdate) {
|
|
124
|
+
try {
|
|
125
|
+
if (this.config.config.cacheDir) {
|
|
126
|
+
FileUtils.mkdirSync([this.config.config.cacheDir, 'caches'], {recursive: true});
|
|
127
|
+
}
|
|
128
|
+
const resBody = rr.resBodyData();
|
|
129
|
+
if (!resBody) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
let p: string | undefined = undefined;
|
|
133
|
+
const destFileUUID = RandomUtils.uuid4();
|
|
134
|
+
p = this.writeChunk(destFileUUID, resBody);
|
|
135
|
+
const updateDateNow = Date.now();
|
|
136
|
+
const updateDate = new Date(updateDateNow).toISOString();
|
|
137
|
+
this.cacheConfig.createDate ??= updateDate;
|
|
138
|
+
this.cacheConfig.updateDate = updateDate;
|
|
139
|
+
const responseHeaders: {[key: string]: string | number | string[]} = {}
|
|
140
|
+
sessionData.responseHeaders?.map(it=>it.toLowerCase()).forEach(it => {
|
|
141
|
+
responseHeaders[it] = rr.resHeader(it);
|
|
142
|
+
})
|
|
143
|
+
this.cacheConfig.caches[sessionData.key] = {
|
|
144
|
+
path: p,
|
|
145
|
+
createTime: updateDateNow,
|
|
146
|
+
lifeTime: sessionData.lifeTime,
|
|
147
|
+
responseHeader: responseHeaders
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
if (this.config.config.cacheDir) {
|
|
151
|
+
FileUtils.write(JSON.stringify(this.cacheConfig), {path: [this.config.config.cacheDir, 'cacheConfig.json']});
|
|
152
|
+
}
|
|
153
|
+
} catch (e) {
|
|
154
|
+
console.log('---', e)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private writeChunk(destFileUUID: string, resBody: string | Buffer ) {
|
|
162
|
+
if (this.config.config.cacheDir) {
|
|
163
|
+
return FileUtils.write(resBody, {path: [this.config.config.cacheDir, 'caches', destFileUUID]});
|
|
164
|
+
} else {
|
|
165
|
+
this.storage.set(destFileUUID, resBody);
|
|
166
|
+
return destFileUUID;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SimpleBootHttpServer } from '../SimpleBootHttpServer';
|
|
2
|
+
import {RequestResponse} from '../models/RequestResponse';
|
|
3
|
+
import {OnInit} from '../lifecycle/OnInit';
|
|
4
|
+
|
|
5
|
+
export interface Filter extends OnInit {
|
|
6
|
+
// false 뒤로는 안흐르게 해주세요
|
|
7
|
+
// true 나를 스킵스켜주새요 (내뒤로 흐르게해주세요)
|
|
8
|
+
proceedBefore(data: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}): Promise<boolean>;
|
|
9
|
+
proceedAfter(data: {rr: RequestResponse, app: SimpleBootHttpServer, before: boolean, carrier: Map<string, any>}): Promise<boolean>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {Filter} from '../filters/Filter';
|
|
2
|
+
import {HttpStatus} from '../codes/HttpStatus';
|
|
3
|
+
import {RequestResponse} from '../models/RequestResponse';
|
|
4
|
+
import {SimpleBootHttpServer} from '../SimpleBootHttpServer';
|
|
5
|
+
|
|
6
|
+
export class HttpStatusFilter implements Filter {
|
|
7
|
+
|
|
8
|
+
constructor(private httpStatus: HttpStatus | number) {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async proceedBefore({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {
|
|
12
|
+
// res.writeHead(this.httpStatus);
|
|
13
|
+
rr.resStatusCode(this.httpStatus);
|
|
14
|
+
rr.resEnd();
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async proceedAfter({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async onInit(app: SimpleBootHttpServer){
|
|
23
|
+
}
|
|
24
|
+
}
|