@eggjs/controller-decorator 4.0.0-beta.8 → 4.0.0-beta.9
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/dist/builder/ControllerMetaBuilderFactory.d.ts +7 -0
- package/dist/builder/ControllerMetaBuilderFactory.js +41 -0
- package/dist/builder/index.d.ts +1 -0
- package/dist/builder/index.js +2 -0
- package/dist/decorator/Acl.d.ts +1 -0
- package/dist/decorator/Acl.js +22 -0
- package/dist/decorator/Context.d.ts +1 -0
- package/dist/decorator/Context.js +11 -0
- package/dist/decorator/Middleware.d.ts +2 -0
- package/dist/decorator/Middleware.js +69 -0
- package/dist/decorator/http/HTTPController.d.ts +2 -0
- package/dist/decorator/http/HTTPController.js +29 -0
- package/dist/decorator/http/HTTPMethod.d.ts +2 -0
- package/dist/decorator/http/HTTPMethod.js +17 -0
- package/dist/decorator/http/HTTPParam.d.ts +8 -0
- package/dist/decorator/http/HTTPParam.js +75 -0
- package/dist/decorator/http/Host.d.ts +2 -0
- package/dist/decorator/http/Host.js +25 -0
- package/dist/decorator/http/index.d.ts +4 -0
- package/dist/decorator/http/index.js +5 -0
- package/dist/decorator/index.d.ts +4 -0
- package/dist/decorator/index.js +5 -0
- package/dist/impl/http/HTTPControllerMetaBuilder.d.ts +9 -0
- package/dist/impl/http/HTTPControllerMetaBuilder.js +57 -0
- package/dist/impl/http/HTTPControllerMethodMetaBuilder.d.ts +11 -0
- package/dist/impl/http/HTTPControllerMethodMetaBuilder.js +100 -0
- package/dist/impl/http/index.d.ts +2 -0
- package/dist/impl/http/index.js +3 -0
- package/dist/impl/index.d.ts +1 -0
- package/dist/impl/index.js +2 -0
- package/dist/index.d.ts +6 -248
- package/dist/index.js +7 -752
- package/dist/model/HTTPControllerMeta.d.ts +22 -0
- package/dist/model/HTTPControllerMeta.js +60 -0
- package/dist/model/HTTPCookies.d.ts +3 -0
- package/dist/model/HTTPCookies.js +4 -0
- package/dist/model/HTTPMethodMeta.d.ts +56 -0
- package/dist/model/HTTPMethodMeta.js +124 -0
- package/dist/model/HTTPRequest.d.ts +7 -0
- package/dist/model/HTTPRequest.js +3 -0
- package/dist/model/HTTPResponse.d.ts +10 -0
- package/dist/model/HTTPResponse.js +3 -0
- package/dist/model/index.d.ts +5 -0
- package/dist/model/index.js +6 -0
- package/dist/util/ControllerInfoUtil.d.ts +17 -0
- package/dist/util/ControllerInfoUtil.js +46 -0
- package/dist/util/ControllerMetadataUtil.d.ts +5 -0
- package/dist/util/ControllerMetadataUtil.js +20 -0
- package/dist/util/HTTPInfoUtil.d.ts +16 -0
- package/dist/util/HTTPInfoUtil.js +64 -0
- package/dist/util/HTTPPriorityUtil.d.ts +19 -0
- package/dist/util/HTTPPriorityUtil.js +42 -0
- package/dist/util/MethodInfoUtil.d.ts +20 -0
- package/dist/util/MethodInfoUtil.js +72 -0
- package/dist/util/index.d.ts +6 -0
- package/dist/util/index.js +7 -0
- package/dist/util/validator/ControllerValidator.d.ts +4 -0
- package/dist/util/validator/ControllerValidator.js +15 -0
- package/dist/util/validator/MethodValidator.d.ts +4 -0
- package/dist/util/validator/MethodValidator.js +31 -0
- package/dist/util/validator/index.d.ts +2 -0
- package/dist/util/validator/index.js +3 -0
- package/package.json +7 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ControllerMetaBuilder, ControllerMetaBuilderCreator, ControllerMetadata, ControllerTypeLike, EggProtoImplClass } from '@eggjs/tegg-types';
|
|
2
|
+
export declare class ControllerMetaBuilderFactory {
|
|
3
|
+
private static builderCreatorMap;
|
|
4
|
+
static registerControllerMetaBuilder(controllerType: ControllerTypeLike, controllerBuilderCreator: ControllerMetaBuilderCreator): void;
|
|
5
|
+
static createControllerMetaBuilder(clazz: EggProtoImplClass, controllerType?: ControllerTypeLike): ControllerMetaBuilder | undefined;
|
|
6
|
+
static build(clazz: EggProtoImplClass, controllerType?: ControllerTypeLike): ControllerMetadata | undefined;
|
|
7
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Pointcut } from '@eggjs/aop-decorator';
|
|
2
|
+
import { ControllerInfoUtil, MethodInfoUtil } from "../util/index.js";
|
|
3
|
+
export class ControllerMetaBuilderFactory {
|
|
4
|
+
static builderCreatorMap = new Map();
|
|
5
|
+
static registerControllerMetaBuilder(controllerType, controllerBuilderCreator) {
|
|
6
|
+
this.builderCreatorMap.set(controllerType, controllerBuilderCreator);
|
|
7
|
+
}
|
|
8
|
+
static createControllerMetaBuilder(clazz, controllerType) {
|
|
9
|
+
if (!controllerType) {
|
|
10
|
+
controllerType = ControllerInfoUtil.getControllerType(clazz);
|
|
11
|
+
}
|
|
12
|
+
if (!controllerType) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const creator = this.builderCreatorMap.get(controllerType);
|
|
16
|
+
if (!creator) {
|
|
17
|
+
throw new Error(`not found controller meta builder for type ${controllerType}`);
|
|
18
|
+
}
|
|
19
|
+
return creator(clazz);
|
|
20
|
+
}
|
|
21
|
+
static build(clazz, controllerType) {
|
|
22
|
+
const builder = ControllerMetaBuilderFactory.createControllerMetaBuilder(clazz, controllerType);
|
|
23
|
+
if (!builder)
|
|
24
|
+
return;
|
|
25
|
+
const metadata = builder.build();
|
|
26
|
+
if (!metadata)
|
|
27
|
+
return;
|
|
28
|
+
const controllerAopMws = ControllerInfoUtil.getControllerAopMiddlewares(clazz);
|
|
29
|
+
for (const { name } of metadata.methods) {
|
|
30
|
+
const methodAopMws = MethodInfoUtil.getMethodAopMiddlewares(clazz, name);
|
|
31
|
+
if (MethodInfoUtil.shouldRegisterAopMiddlewarePointCut(clazz, name)) {
|
|
32
|
+
for (const mw of [...methodAopMws, ...controllerAopMws].reverse()) {
|
|
33
|
+
Pointcut(mw)(clazz.prototype, name);
|
|
34
|
+
}
|
|
35
|
+
MethodInfoUtil.registerAopMiddlewarePointcut(clazz, name);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return metadata;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlck1ldGFCdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL0NvbnRyb2xsZXJNZXRhQnVpbGRlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RSxNQUFNLE9BQU8sNEJBQTRCO0lBQy9CLE1BQU0sQ0FBQyxpQkFBaUIsR0FBMEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVwRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsY0FBa0MsRUFBRSx3QkFBc0Q7UUFDN0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLDJCQUEyQixDQUFDLEtBQXdCLEVBQUUsY0FBbUM7UUFDOUYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUF3QixFQUFFLGNBQW1DO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLDRCQUE0QixDQUFDLDJCQUEyQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9FLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksY0FBYyxDQUFDLG1DQUFtQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwRSxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQ3BFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ControllerMetaBuilderFactory.ts';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./ControllerMetaBuilderFactory.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Acl(code?: string): (target: any, propertyKey?: PropertyKey) => void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { ControllerInfoUtil, MethodInfoUtil } from "../util/index.js";
|
|
3
|
+
export function Acl(code) {
|
|
4
|
+
function classAcl(constructor) {
|
|
5
|
+
ControllerInfoUtil.setControllerAcl(code, constructor);
|
|
6
|
+
}
|
|
7
|
+
function methodAcl(target, propertyKey) {
|
|
8
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
9
|
+
const controllerClazz = target.constructor;
|
|
10
|
+
const methodName = propertyKey;
|
|
11
|
+
MethodInfoUtil.setMethodAcl(code, controllerClazz, methodName);
|
|
12
|
+
}
|
|
13
|
+
return function (target, propertyKey) {
|
|
14
|
+
if (propertyKey === undefined) {
|
|
15
|
+
classAcl(target);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
methodAcl(target, propertyKey);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlY29yYXRvci9BY2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBSWpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RSxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQWE7SUFDL0IsU0FBUyxRQUFRLENBQUMsV0FBOEI7UUFDOUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUFXLEVBQUUsV0FBd0I7UUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLFdBQVcsRUFBRSxRQUFRLEVBQ3ZDLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE9BQU8sVUFBUyxNQUFXLEVBQUUsV0FBeUI7UUFDcEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Context(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { MethodInfoUtil } from "../util/index.js";
|
|
3
|
+
export function Context() {
|
|
4
|
+
return function (target, propertyKey, parameterIndex) {
|
|
5
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
6
|
+
const methodName = propertyKey;
|
|
7
|
+
const controllerClazz = target.constructor;
|
|
8
|
+
MethodInfoUtil.setMethodContextIndexInArgs(parameterIndex, controllerClazz, methodName);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFJakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE1BQU0sVUFBVSxPQUFPO0lBQ3JCLE9BQU8sVUFBUyxNQUFXLEVBQUUsV0FBd0IsRUFBRSxjQUFzQjtRQUMzRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sV0FBVyxFQUFFLFFBQVEsRUFDdkMsZUFBZSxNQUFNLENBQUMsSUFBSSxxREFBcUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RyxNQUFNLFVBQVUsR0FBRyxXQUFxQixDQUFDO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFnQyxDQUFDO1FBQ2hFLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { isClass } from 'is-type-of';
|
|
3
|
+
import { AdviceInfoUtil } from '@eggjs/aop-decorator';
|
|
4
|
+
import { ControllerInfoUtil, MethodInfoUtil } from "../util/index.js";
|
|
5
|
+
var MiddlewareType;
|
|
6
|
+
(function (MiddlewareType) {
|
|
7
|
+
MiddlewareType["AOP"] = "AOP";
|
|
8
|
+
MiddlewareType["MiddlewareFunc"] = "MiddlewareFunc";
|
|
9
|
+
})(MiddlewareType || (MiddlewareType = {}));
|
|
10
|
+
function isAop(mw) {
|
|
11
|
+
return isClass(mw) && AdviceInfoUtil.isAdvice(mw);
|
|
12
|
+
}
|
|
13
|
+
function isAopTypeOrMiddlewareType(middlewares) {
|
|
14
|
+
const adviceCount = middlewares.filter(t => isAop(t)).length;
|
|
15
|
+
if (adviceCount) {
|
|
16
|
+
if (adviceCount === middlewares.length) {
|
|
17
|
+
return MiddlewareType.AOP;
|
|
18
|
+
}
|
|
19
|
+
throw new Error('AOP and MiddlewareFunc can not be mixed');
|
|
20
|
+
}
|
|
21
|
+
return MiddlewareType.MiddlewareFunc;
|
|
22
|
+
}
|
|
23
|
+
export function Middleware(...middlewares) {
|
|
24
|
+
function functionTypeClassMiddleware(constructor) {
|
|
25
|
+
middlewares.forEach(mid => {
|
|
26
|
+
ControllerInfoUtil.addControllerMiddleware(mid, constructor);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function aopTypeClassMiddleware(constructor) {
|
|
30
|
+
for (const aopAdvice of middlewares) {
|
|
31
|
+
ControllerInfoUtil.addControllerAopMiddleware(aopAdvice, constructor);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function functionTypeMethodMiddleware(target, propertyKey) {
|
|
35
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
36
|
+
const controllerClazz = target.constructor;
|
|
37
|
+
const methodName = propertyKey;
|
|
38
|
+
middlewares.forEach(mid => {
|
|
39
|
+
MethodInfoUtil.addMethodMiddleware(mid, controllerClazz, methodName);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function aopTypeMethodMiddleware(target, propertyKey) {
|
|
43
|
+
const controllerClazz = target.constructor;
|
|
44
|
+
const methodName = propertyKey;
|
|
45
|
+
for (const aopAdvice of middlewares) {
|
|
46
|
+
MethodInfoUtil.addMethodAopMiddleware(aopAdvice, controllerClazz, methodName);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return function (target, propertyKey) {
|
|
50
|
+
const type = isAopTypeOrMiddlewareType(middlewares);
|
|
51
|
+
if (propertyKey === undefined) {
|
|
52
|
+
if (type === MiddlewareType.AOP) {
|
|
53
|
+
aopTypeClassMiddleware(target);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
functionTypeClassMiddleware(target);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
if (type === MiddlewareType.AOP) {
|
|
61
|
+
aopTypeMethodMiddleware(target, propertyKey);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
functionTypeMethodMiddleware(target, propertyKey);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFHakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRFLElBQUssY0FHSjtBQUhELFdBQUssY0FBYztJQUNqQiw2QkFBVyxDQUFBO0lBQ1gsbURBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUhJLGNBQWMsS0FBZCxjQUFjLFFBR2xCO0FBRUQsU0FBUyxLQUFLLENBQUMsRUFBK0M7SUFDNUQsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFnQyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsV0FBc0U7SUFDdkcsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQUcsV0FBc0U7SUFDbEcsU0FBUywyQkFBMkIsQ0FBQyxXQUE4QjtRQUNqRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLEdBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxzQkFBc0IsQ0FBQyxXQUE4QjtRQUM1RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQTJDLEVBQUUsQ0FBQztZQUNwRSxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLDRCQUE0QixDQUFDLE1BQVcsRUFBRSxXQUF3QjtRQUN6RSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sV0FBVyxFQUFFLFFBQVEsRUFDdkMsZUFBZSxNQUFNLENBQUMsSUFBSSxxREFBcUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBZ0MsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxXQUFxQixDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQXFCLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsdUJBQXVCLENBQUMsTUFBVyxFQUFFLFdBQXdCO1FBQ3BFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFnQyxDQUFDO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLFdBQXFCLENBQUM7UUFDekMsS0FBSyxNQUFNLFNBQVMsSUFBSSxXQUEyQyxFQUFFLENBQUM7WUFDcEUsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEYsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFVBQVMsTUFBVyxFQUFFLFdBQXlCO1FBQ3BELE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxLQUFLLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxLQUFLLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDTiw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PrototypeUtil, SingletonProto } from '@eggjs/core-decorator';
|
|
2
|
+
import { StackUtil } from '@eggjs/tegg-common-util';
|
|
3
|
+
import { AccessLevel, ControllerType } from '@eggjs/tegg-types';
|
|
4
|
+
import { ControllerInfoUtil, HTTPInfoUtil } from "../../util/index.js";
|
|
5
|
+
export function HTTPController(param) {
|
|
6
|
+
return function (constructor) {
|
|
7
|
+
ControllerInfoUtil.setControllerType(constructor, ControllerType.HTTP);
|
|
8
|
+
if (param?.controllerName) {
|
|
9
|
+
ControllerInfoUtil.setControllerName(constructor, param.controllerName);
|
|
10
|
+
}
|
|
11
|
+
if (param?.path) {
|
|
12
|
+
HTTPInfoUtil.setHTTPPath(param.path, constructor);
|
|
13
|
+
}
|
|
14
|
+
// TODO elegant?
|
|
15
|
+
const func = SingletonProto({
|
|
16
|
+
accessLevel: AccessLevel.PUBLIC,
|
|
17
|
+
name: param?.protoName,
|
|
18
|
+
});
|
|
19
|
+
func(constructor);
|
|
20
|
+
// './tegg/core/common-util/src/StackUtil.ts',
|
|
21
|
+
// './tegg/core/core-decorator/src/decorator/Prototype.ts',
|
|
22
|
+
// './tegg/core/controller-decorator/src/decorator/http/HTTPController.ts',
|
|
23
|
+
// './tegg/core/core-decorator/node_modules/_reflect-metadata@0.1.13@reflect-metadata/Reflect.js',
|
|
24
|
+
// './tegg/core/core-decorator/node_modules/_reflect-metadata@0.1.13@reflect-metadata/Reflect.js',
|
|
25
|
+
// './tegg/core/controller-decorator/test/fixtures/TRFooController.ts',
|
|
26
|
+
PrototypeUtil.setFilePath(constructor, StackUtil.getCalleeFromStack(false, 5));
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9yL2h0dHAvSFRUUENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUE0QjtJQUN6RCxPQUFPLFVBQVMsV0FBOEI7UUFDNUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxJQUFJLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUMxQixrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELGdCQUFnQjtRQUNoQixNQUFNLElBQUksR0FBRyxjQUFjLENBQUM7WUFDMUIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQy9CLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEIsOENBQThDO1FBQzlDLDJEQUEyRDtRQUMzRCwyRUFBMkU7UUFDM0Usa0dBQWtHO1FBQ2xHLGtHQUFrRztRQUNsRyx1RUFBdUU7UUFDdkUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { ControllerType } from '@eggjs/tegg-types';
|
|
3
|
+
import { HTTPInfoUtil, MethodInfoUtil } from "../../util/index.js";
|
|
4
|
+
export function HTTPMethod(param) {
|
|
5
|
+
return function (target, propertyKey) {
|
|
6
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
7
|
+
const controllerClazz = target.constructor;
|
|
8
|
+
const methodName = propertyKey;
|
|
9
|
+
MethodInfoUtil.setMethodControllerType(controllerClazz, methodName, ControllerType.HTTP);
|
|
10
|
+
HTTPInfoUtil.setHTTPMethodPath(param.path, controllerClazz, methodName);
|
|
11
|
+
HTTPInfoUtil.setHTTPMethodMethod(param.method, controllerClazz, methodName);
|
|
12
|
+
if (param.priority !== undefined) {
|
|
13
|
+
HTTPInfoUtil.setHTTPMethodPriority(param.priority, controllerClazz, methodName);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUE1ldGhvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3IvaHR0cC9IVFRQTWV0aG9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQXVCO0lBQ2hELE9BQU8sVUFBUyxNQUFXLEVBQUUsV0FBd0I7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLFdBQVcsRUFBRSxRQUFRLEVBQ3ZDLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxjQUFjLENBQUMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HTTPParamParams, HTTPQueriesParams, HTTPQueryParams } from '@eggjs/tegg-types';
|
|
2
|
+
export declare function HTTPBody(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
3
|
+
export declare function HTTPHeaders(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
4
|
+
export declare function HTTPQuery(param?: HTTPQueryParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
5
|
+
export declare function HTTPQueries(param?: HTTPQueriesParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
6
|
+
export declare function HTTPParam(param?: HTTPParamParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
7
|
+
export declare function Request(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
8
|
+
export declare function Cookies(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { HTTPParamType } from '@eggjs/tegg-types';
|
|
3
|
+
import { ObjectUtils } from '@eggjs/tegg-common-util';
|
|
4
|
+
import { HTTPInfoUtil } from "../../util/index.js";
|
|
5
|
+
// TODO url params
|
|
6
|
+
// /foo/:id
|
|
7
|
+
// refactor HTTPQuery, HTTPBody, HTTPParam
|
|
8
|
+
export function HTTPBody() {
|
|
9
|
+
return function (target, propertyKey, parameterIndex) {
|
|
10
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
11
|
+
const methodName = propertyKey;
|
|
12
|
+
const controllerClazz = target.constructor;
|
|
13
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.BODY, parameterIndex, controllerClazz, methodName);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function HTTPHeaders() {
|
|
17
|
+
return function (target, propertyKey, parameterIndex) {
|
|
18
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
19
|
+
const methodName = propertyKey;
|
|
20
|
+
const controllerClazz = target.constructor;
|
|
21
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.HEADERS, parameterIndex, controllerClazz, methodName);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function HTTPQuery(param) {
|
|
25
|
+
return function (target, propertyKey, parameterIndex) {
|
|
26
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
27
|
+
const methodName = propertyKey;
|
|
28
|
+
const controllerClazz = target.constructor;
|
|
29
|
+
const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
|
|
30
|
+
const name = param?.name || argNames[parameterIndex];
|
|
31
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.QUERY, parameterIndex, controllerClazz, methodName);
|
|
32
|
+
HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function HTTPQueries(param) {
|
|
36
|
+
return function (target, propertyKey, parameterIndex) {
|
|
37
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
38
|
+
const methodName = propertyKey;
|
|
39
|
+
const controllerClazz = target.constructor;
|
|
40
|
+
const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
|
|
41
|
+
const name = param?.name || argNames[parameterIndex];
|
|
42
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.QUERIES, parameterIndex, controllerClazz, methodName);
|
|
43
|
+
HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function HTTPParam(param) {
|
|
47
|
+
return function (target, propertyKey, parameterIndex) {
|
|
48
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
49
|
+
const methodName = propertyKey;
|
|
50
|
+
const controllerClazz = target.constructor;
|
|
51
|
+
const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
|
|
52
|
+
const name = param?.name || argNames[parameterIndex];
|
|
53
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.PARAM, parameterIndex, controllerClazz, methodName);
|
|
54
|
+
HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function Request() {
|
|
58
|
+
return function (target, propertyKey, parameterIndex) {
|
|
59
|
+
const [nodeMajor] = process.versions.node.split('.').map(v => Number(v));
|
|
60
|
+
assert(nodeMajor >= 16, `[controller/${target.name}] expect node version >=16, but now is ${nodeMajor}`);
|
|
61
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
62
|
+
const methodName = propertyKey;
|
|
63
|
+
const controllerClazz = target.constructor;
|
|
64
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.REQUEST, parameterIndex, controllerClazz, methodName);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function Cookies() {
|
|
68
|
+
return function (target, propertyKey, parameterIndex) {
|
|
69
|
+
assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
70
|
+
const methodName = propertyKey;
|
|
71
|
+
const controllerClazz = target.constructor;
|
|
72
|
+
HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.COOKIES, parameterIndex, controllerClazz, methodName);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUFBhcmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RlY29yYXRvci9odHRwL0hUVFBQYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsa0JBQWtCO0FBQ2xCLFdBQVc7QUFDWCwwQ0FBMEM7QUFFMUMsTUFBTSxVQUFVLFFBQVE7SUFDdEIsT0FBTyxVQUFTLE1BQVcsRUFBRSxXQUF3QixFQUFFLGNBQXNCO1FBQzNFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxXQUFXLEVBQUUsUUFBUSxFQUN2QyxlQUFlLE1BQU0sQ0FBQyxJQUFJLHFEQUFxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sVUFBVSxHQUFHLFdBQXFCLENBQUM7UUFDekMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxVQUFTLE1BQVcsRUFBRSxXQUF3QixFQUFFLGNBQXNCO1FBQzNFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxXQUFXLEVBQUUsUUFBUSxFQUN2QyxlQUFlLE1BQU0sQ0FBQyxJQUFJLHFEQUFxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sVUFBVSxHQUFHLFdBQXFCLENBQUM7UUFDekMs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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { ControllerInfoUtil, MethodInfoUtil } from "../../util/index.js";
|
|
3
|
+
export function Host(host) {
|
|
4
|
+
function parseHost() {
|
|
5
|
+
return Array.isArray(host) ? host : [host];
|
|
6
|
+
}
|
|
7
|
+
function classHost(constructor) {
|
|
8
|
+
ControllerInfoUtil.addControllerHosts(parseHost(), constructor);
|
|
9
|
+
}
|
|
10
|
+
function methodHost(target, propertyKey) {
|
|
11
|
+
assert(typeof propertyKey === 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
|
|
12
|
+
const controllerClazz = target.constructor;
|
|
13
|
+
const methodName = propertyKey;
|
|
14
|
+
MethodInfoUtil.setMethodHosts(parseHost(), controllerClazz, methodName);
|
|
15
|
+
}
|
|
16
|
+
return function (target, propertyKey) {
|
|
17
|
+
if (propertyKey === undefined) {
|
|
18
|
+
classHost(target);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
methodHost(target, propertyKey);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3IvaHR0cC9Ib3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUlqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekUsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFjO0lBRWpDLFNBQVMsU0FBUztRQUNoQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsV0FBOEI7UUFDL0Msa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFNBQVMsVUFBVSxDQUFDLE1BQVcsRUFBRSxXQUF3QjtRQUN2RCxNQUFNLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxFQUNwQyxlQUFlLE1BQU0sQ0FBQyxJQUFJLHFEQUFxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFnQyxDQUFDO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLFdBQXFCLENBQUM7UUFDekMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELE9BQU8sVUFBUyxNQUFXLEVBQUUsV0FBeUI7UUFDcEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./Host.js";
|
|
2
|
+
export * from "./HTTPController.js";
|
|
3
|
+
export * from "./HTTPMethod.js";
|
|
4
|
+
export * from "./HTTPParam.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9yL2h0dHAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUMifQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./http/index.js";
|
|
2
|
+
export * from "./Acl.js";
|
|
3
|
+
export * from "./Context.js";
|
|
4
|
+
export * from "./Middleware.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxpQkFBaUIsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EggProtoImplClass } from '@eggjs/tegg-types';
|
|
2
|
+
import { HTTPControllerMeta } from '../../model/index.ts';
|
|
3
|
+
export declare class HTTPControllerMetaBuilder {
|
|
4
|
+
private readonly clazz;
|
|
5
|
+
constructor(clazz: EggProtoImplClass);
|
|
6
|
+
private buildMethod;
|
|
7
|
+
build(): HTTPControllerMeta;
|
|
8
|
+
static create(clazz: EggProtoImplClass): HTTPControllerMetaBuilder;
|
|
9
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
3
|
+
import { ObjectUtils } from '@eggjs/tegg-common-util';
|
|
4
|
+
import { ClassUtil } from '@eggjs/tegg-metadata';
|
|
5
|
+
import { ControllerType } from '@eggjs/tegg-types';
|
|
6
|
+
import { ControllerMetaBuilderFactory } from "../../builder/index.js";
|
|
7
|
+
import { HTTPControllerMeta, HTTPMethodMeta } from "../../model/index.js";
|
|
8
|
+
import { ControllerInfoUtil, ControllerMetadataUtil, HTTPInfoUtil, ControllerValidator } from "../../util/index.js";
|
|
9
|
+
import { HTTPControllerMethodMetaBuilder } from "./HTTPControllerMethodMetaBuilder.js";
|
|
10
|
+
export class HTTPControllerMetaBuilder {
|
|
11
|
+
clazz;
|
|
12
|
+
constructor(clazz) {
|
|
13
|
+
this.clazz = clazz;
|
|
14
|
+
}
|
|
15
|
+
buildMethod() {
|
|
16
|
+
const methodNames = ObjectUtils.getProperties(this.clazz.prototype);
|
|
17
|
+
const methods = [];
|
|
18
|
+
for (const methodName of methodNames) {
|
|
19
|
+
const builder = new HTTPControllerMethodMetaBuilder(this.clazz, methodName);
|
|
20
|
+
const methodMeta = builder.build();
|
|
21
|
+
if (methodMeta) {
|
|
22
|
+
methods.push(methodMeta);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return methods;
|
|
26
|
+
}
|
|
27
|
+
build() {
|
|
28
|
+
ControllerValidator.validate(this.clazz);
|
|
29
|
+
const controllerType = ControllerInfoUtil.getControllerType(this.clazz);
|
|
30
|
+
assert.equal(controllerType, ControllerType.HTTP, 'invalidate controller type');
|
|
31
|
+
const httpPath = HTTPInfoUtil.getHTTPPath(this.clazz);
|
|
32
|
+
const httpMiddlewares = ControllerInfoUtil.getControllerMiddlewares(this.clazz);
|
|
33
|
+
const methods = this.buildMethod();
|
|
34
|
+
const clazzName = this.clazz.name;
|
|
35
|
+
const controllerName = ControllerInfoUtil.getControllerName(this.clazz) || clazzName;
|
|
36
|
+
const property = PrototypeUtil.getProperty(this.clazz);
|
|
37
|
+
const protoName = property.name;
|
|
38
|
+
const needAcl = ControllerInfoUtil.hasControllerAcl(this.clazz);
|
|
39
|
+
const aclCode = ControllerInfoUtil.getControllerAcl(this.clazz);
|
|
40
|
+
const hosts = ControllerInfoUtil.getControllerHosts(this.clazz);
|
|
41
|
+
const metadata = new HTTPControllerMeta(clazzName, protoName, controllerName, httpPath, httpMiddlewares, methods, needAcl, aclCode, hosts);
|
|
42
|
+
ControllerMetadataUtil.setControllerMetadata(this.clazz, metadata);
|
|
43
|
+
for (const method of metadata.methods) {
|
|
44
|
+
const realPath = metadata.getMethodRealPath(method);
|
|
45
|
+
if (!realPath.startsWith('/')) {
|
|
46
|
+
const desc = ClassUtil.classDescription(this.clazz);
|
|
47
|
+
throw new Error(`class ${desc} method ${method.name} path ${realPath} not start with /`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return metadata;
|
|
51
|
+
}
|
|
52
|
+
static create(clazz) {
|
|
53
|
+
return new HTTPControllerMetaBuilder(clazz);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
ControllerMetaBuilderFactory.registerControllerMetaBuilder(ControllerType.HTTP, HTTPControllerMetaBuilder.create);
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXJNZXRhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbXBsL2h0dHAvSFRUUENvbnRyb2xsZXJNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdkYsTUFBTSxPQUFPLHlCQUF5QjtJQUNuQixLQUFLLENBQW9CO0lBRTFDLFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sT0FBTyxHQUFxQixFQUFFLENBQUM7UUFDckMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLEVB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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EggProtoImplClass } from '@eggjs/tegg-types';
|
|
2
|
+
import { HTTPMethodMeta } from '../../model/index.ts';
|
|
3
|
+
export declare class HTTPControllerMethodMetaBuilder {
|
|
4
|
+
private readonly clazz;
|
|
5
|
+
private readonly methodName;
|
|
6
|
+
constructor(clazz: EggProtoImplClass, methodName: string);
|
|
7
|
+
private checkParamDecorators;
|
|
8
|
+
private buildParamType;
|
|
9
|
+
getPriority(): number;
|
|
10
|
+
build(): HTTPMethodMeta | undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { ClassUtil } from '@eggjs/tegg-metadata';
|
|
3
|
+
import { HTTPMethodMeta, ParamMeta, ParamMetaUtil } from "../../model/index.js";
|
|
4
|
+
import { MethodValidator, HTTPInfoUtil, MethodInfoUtil, HTTPPriorityUtil } from "../../util/index.js";
|
|
5
|
+
export class HTTPControllerMethodMetaBuilder {
|
|
6
|
+
clazz;
|
|
7
|
+
methodName;
|
|
8
|
+
constructor(clazz, methodName) {
|
|
9
|
+
this.clazz = clazz;
|
|
10
|
+
this.methodName = methodName;
|
|
11
|
+
}
|
|
12
|
+
// 检查 HTTP 方法上参数是否都加上了注解
|
|
13
|
+
// foo(a, b=233, c); foo.length = 2;
|
|
14
|
+
// 由于这种情况的存在, 所以需要对 function 参数检查进行特殊处理
|
|
15
|
+
// 如果有注解的参数比 function.length 长, 长度应该取有注解参数总数(包括 @Context)
|
|
16
|
+
//
|
|
17
|
+
// 但是有两种特殊情况无法处理
|
|
18
|
+
// foo(@Context() ctx, @HTTPParam() id1, id2 = 233)
|
|
19
|
+
// foo(@Context() ctx, @HTTPParam() id1, id2 = 233, id3)
|
|
20
|
+
// 这两种情况均为默认值参数在
|
|
21
|
+
checkParamDecorators() {
|
|
22
|
+
const method = this.clazz.prototype[this.methodName];
|
|
23
|
+
// 获取函数参数长度
|
|
24
|
+
const functionLength = method.length;
|
|
25
|
+
// 计算带注解参数
|
|
26
|
+
const paramIndexList = HTTPInfoUtil.getParamIndexList(this.clazz, this.methodName);
|
|
27
|
+
const contextIndex = MethodInfoUtil.getMethodContextIndex(this.clazz, this.methodName);
|
|
28
|
+
const hasAnnotationParamCount = typeof contextIndex === 'undefined'
|
|
29
|
+
? paramIndexList.length
|
|
30
|
+
: paramIndexList.length + 1;
|
|
31
|
+
const maxParamCount = Math.max(functionLength, hasAnnotationParamCount);
|
|
32
|
+
for (let i = 0; i < maxParamCount; ++i) {
|
|
33
|
+
// 上下文参数, 跳过检查
|
|
34
|
+
if (i === contextIndex) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const paramType = HTTPInfoUtil.getHTTPMethodParamType(i, this.clazz, this.methodName);
|
|
38
|
+
if (!paramType) {
|
|
39
|
+
const classDesc = ClassUtil.classDescription(this.clazz);
|
|
40
|
+
throw new Error(`${classDesc}:${this.methodName} param ${i} has no http param type, Please add @HTTPBody, @HTTPParam, @HTTPQuery, @HTTPQueries`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
buildParamType(httpPath) {
|
|
45
|
+
this.checkParamDecorators();
|
|
46
|
+
const paramTypeMap = new Map();
|
|
47
|
+
const paramIndexList = HTTPInfoUtil.getParamIndexList(this.clazz, this.methodName);
|
|
48
|
+
for (const paramIndex of paramIndexList) {
|
|
49
|
+
const paramType = HTTPInfoUtil.getHTTPMethodParamType(paramIndex, this.clazz, this.methodName);
|
|
50
|
+
const paramName = HTTPInfoUtil.getHTTPMethodParamName(paramIndex, this.clazz, this.methodName);
|
|
51
|
+
const paramMeta = ParamMetaUtil.createParam(paramType, paramName);
|
|
52
|
+
try {
|
|
53
|
+
paramMeta.validate(httpPath);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
const classDesc = ClassUtil.classDescription(this.clazz);
|
|
57
|
+
e.message = `build controller ${classDesc} method ${this.methodName} param ${paramName} failed: ${e.message}`;
|
|
58
|
+
throw e;
|
|
59
|
+
}
|
|
60
|
+
paramTypeMap.set(paramIndex, paramMeta);
|
|
61
|
+
}
|
|
62
|
+
return paramTypeMap;
|
|
63
|
+
}
|
|
64
|
+
getPriority() {
|
|
65
|
+
const priority = HTTPInfoUtil.getHTTPMethodPriority(this.clazz, this.methodName);
|
|
66
|
+
if (priority !== undefined) {
|
|
67
|
+
return priority;
|
|
68
|
+
}
|
|
69
|
+
const controllerPath = HTTPInfoUtil.getHTTPPath(this.clazz);
|
|
70
|
+
const methodPath = HTTPInfoUtil.getHTTPMethodPath(this.clazz, this.methodName);
|
|
71
|
+
const realPath = controllerPath ? path.posix.join(controllerPath, methodPath) : methodPath;
|
|
72
|
+
const defaultPriority = HTTPPriorityUtil.calcPathPriority(realPath);
|
|
73
|
+
if (defaultPriority > HTTPPriorityUtil.DEFAULT_PRIORITY) {
|
|
74
|
+
throw new Error(`path ${realPath} is too long, should set priority manually`);
|
|
75
|
+
}
|
|
76
|
+
return defaultPriority;
|
|
77
|
+
}
|
|
78
|
+
build() {
|
|
79
|
+
MethodValidator.validate(this.clazz, this.methodName);
|
|
80
|
+
const controllerType = MethodInfoUtil.getMethodControllerType(this.clazz, this.methodName);
|
|
81
|
+
if (!controllerType) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const httpMethod = HTTPInfoUtil.getHTTPMethodMethod(this.clazz, this.methodName);
|
|
85
|
+
const parentPath = HTTPInfoUtil.getHTTPPath(this.clazz);
|
|
86
|
+
const httpPath = HTTPInfoUtil.getHTTPMethodPath(this.clazz, this.methodName);
|
|
87
|
+
const contextIndex = MethodInfoUtil.getMethodContextIndex(this.clazz, this.methodName);
|
|
88
|
+
const middlewares = MethodInfoUtil.getMethodMiddlewares(this.clazz, this.methodName);
|
|
89
|
+
const needAcl = MethodInfoUtil.hasMethodAcl(this.clazz, this.methodName);
|
|
90
|
+
const aclCode = MethodInfoUtil.getMethodAcl(this.clazz, this.methodName);
|
|
91
|
+
const hosts = MethodInfoUtil.getMethodHosts(this.clazz, this.methodName);
|
|
92
|
+
const realPath = parentPath
|
|
93
|
+
? path.posix.join(parentPath, httpPath)
|
|
94
|
+
: httpPath;
|
|
95
|
+
const paramTypeMap = this.buildParamType(realPath);
|
|
96
|
+
const priority = this.getPriority();
|
|
97
|
+
return new HTTPMethodMeta(this.methodName, httpPath, httpMethod, middlewares, contextIndex, paramTypeMap, priority, needAcl, aclCode, hosts);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXJNZXRob2RNZXRhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbXBsL2h0dHAvSFRUUENvbnRyb2xsZXJNZXRob2RNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRHLE1BQU0sT0FBTywrQkFBK0I7SUFDekIsS0FBSyxDQUFvQjtJQUN6QixVQUFVLENBQVM7SUFFcEMsWUFBWSxLQUF3QixFQUFFLFVBQWtCO1FBQ3RELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsb0NBQW9DO0lBQ3BDLHVDQUF1QztJQUN2Qyx5REFBeUQ7SUFDekQsRUFBRTtJQUNGLGdCQUFnQjtJQUNoQixtREFBbUQ7SUFDbkQsd0RBQXdEO0lBQ3hELGdCQUFnQjtJQUNSLG9CQUFvQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsV0FBVztRQUNYLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFckMsVUFBVTtRQUNWLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNu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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./HTTPControllerMetaBuilder.js";
|
|
2
|
+
export * from "./HTTPControllerMethodMetaBuilder.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW1wbC9odHRwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQ0FBc0MsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './http/index.ts';
|