@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.
Files changed (63) hide show
  1. package/dist/builder/ControllerMetaBuilderFactory.d.ts +7 -0
  2. package/dist/builder/ControllerMetaBuilderFactory.js +41 -0
  3. package/dist/builder/index.d.ts +1 -0
  4. package/dist/builder/index.js +2 -0
  5. package/dist/decorator/Acl.d.ts +1 -0
  6. package/dist/decorator/Acl.js +22 -0
  7. package/dist/decorator/Context.d.ts +1 -0
  8. package/dist/decorator/Context.js +11 -0
  9. package/dist/decorator/Middleware.d.ts +2 -0
  10. package/dist/decorator/Middleware.js +69 -0
  11. package/dist/decorator/http/HTTPController.d.ts +2 -0
  12. package/dist/decorator/http/HTTPController.js +29 -0
  13. package/dist/decorator/http/HTTPMethod.d.ts +2 -0
  14. package/dist/decorator/http/HTTPMethod.js +17 -0
  15. package/dist/decorator/http/HTTPParam.d.ts +8 -0
  16. package/dist/decorator/http/HTTPParam.js +75 -0
  17. package/dist/decorator/http/Host.d.ts +2 -0
  18. package/dist/decorator/http/Host.js +25 -0
  19. package/dist/decorator/http/index.d.ts +4 -0
  20. package/dist/decorator/http/index.js +5 -0
  21. package/dist/decorator/index.d.ts +4 -0
  22. package/dist/decorator/index.js +5 -0
  23. package/dist/impl/http/HTTPControllerMetaBuilder.d.ts +9 -0
  24. package/dist/impl/http/HTTPControllerMetaBuilder.js +57 -0
  25. package/dist/impl/http/HTTPControllerMethodMetaBuilder.d.ts +11 -0
  26. package/dist/impl/http/HTTPControllerMethodMetaBuilder.js +100 -0
  27. package/dist/impl/http/index.d.ts +2 -0
  28. package/dist/impl/http/index.js +3 -0
  29. package/dist/impl/index.d.ts +1 -0
  30. package/dist/impl/index.js +2 -0
  31. package/dist/index.d.ts +6 -248
  32. package/dist/index.js +7 -752
  33. package/dist/model/HTTPControllerMeta.d.ts +22 -0
  34. package/dist/model/HTTPControllerMeta.js +60 -0
  35. package/dist/model/HTTPCookies.d.ts +3 -0
  36. package/dist/model/HTTPCookies.js +4 -0
  37. package/dist/model/HTTPMethodMeta.d.ts +56 -0
  38. package/dist/model/HTTPMethodMeta.js +124 -0
  39. package/dist/model/HTTPRequest.d.ts +7 -0
  40. package/dist/model/HTTPRequest.js +3 -0
  41. package/dist/model/HTTPResponse.d.ts +10 -0
  42. package/dist/model/HTTPResponse.js +3 -0
  43. package/dist/model/index.d.ts +5 -0
  44. package/dist/model/index.js +6 -0
  45. package/dist/util/ControllerInfoUtil.d.ts +17 -0
  46. package/dist/util/ControllerInfoUtil.js +46 -0
  47. package/dist/util/ControllerMetadataUtil.d.ts +5 -0
  48. package/dist/util/ControllerMetadataUtil.js +20 -0
  49. package/dist/util/HTTPInfoUtil.d.ts +16 -0
  50. package/dist/util/HTTPInfoUtil.js +64 -0
  51. package/dist/util/HTTPPriorityUtil.d.ts +19 -0
  52. package/dist/util/HTTPPriorityUtil.js +42 -0
  53. package/dist/util/MethodInfoUtil.d.ts +20 -0
  54. package/dist/util/MethodInfoUtil.js +72 -0
  55. package/dist/util/index.d.ts +6 -0
  56. package/dist/util/index.js +7 -0
  57. package/dist/util/validator/ControllerValidator.d.ts +4 -0
  58. package/dist/util/validator/ControllerValidator.js +15 -0
  59. package/dist/util/validator/MethodValidator.d.ts +4 -0
  60. package/dist/util/validator/MethodValidator.js +31 -0
  61. package/dist/util/validator/index.d.ts +2 -0
  62. package/dist/util/validator/index.js +3 -0
  63. 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,2 @@
1
+ import type { IAdvice, EggProtoImplClass, MiddlewareFunc } from '@eggjs/tegg-types';
2
+ export declare function Middleware(...middlewares: Array<MiddlewareFunc> | Array<EggProtoImplClass<IAdvice>>): (target: any, propertyKey?: PropertyKey) => void;
@@ -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,2 @@
1
+ import type { EggProtoImplClass, HTTPControllerParams } from '@eggjs/tegg-types';
2
+ export declare function HTTPController(param?: HTTPControllerParams): (constructor: EggProtoImplClass) => void;
@@ -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,2 @@
1
+ import type { HTTPMethodParams } from '@eggjs/tegg-types';
2
+ export declare function HTTPMethod(param: HTTPMethodParams): (target: any, propertyKey: PropertyKey) => void;
@@ -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,2 @@
1
+ import type { HostType } from '@eggjs/tegg-types';
2
+ export declare function Host(host: HostType): (target: any, propertyKey?: PropertyKey) => void;
@@ -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,4 @@
1
+ export * from './Host.ts';
2
+ export * from './HTTPController.ts';
3
+ export * from './HTTPMethod.ts';
4
+ export * from './HTTPParam.ts';
@@ -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,4 @@
1
+ export * from './http/index.ts';
2
+ export * from './Acl.ts';
3
+ export * from './Context.ts';
4
+ export * from './Middleware.ts';
@@ -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,2 @@
1
+ export * from './HTTPControllerMetaBuilder.ts';
2
+ export * from './HTTPControllerMethodMetaBuilder.ts';
@@ -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';
@@ -0,0 +1,2 @@
1
+ export * from "./http/index.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDIn0=