@eggjs/controller-decorator 4.0.0-beta.3 → 4.0.0-beta.30

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 (103) hide show
  1. package/README.md +13 -1
  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.js +22 -0
  6. package/dist/decorator/Context.d.ts +1 -0
  7. package/dist/decorator/Context.js +11 -0
  8. package/dist/decorator/Middleware.js +68 -0
  9. package/{src → dist}/decorator/http/HTTPController.js +2 -2
  10. package/dist/decorator/http/HTTPMethod.js +17 -0
  11. package/dist/decorator/http/HTTPParam.d.ts +173 -0
  12. package/dist/decorator/http/HTTPParam.js +241 -0
  13. package/dist/decorator/http/Host.js +25 -0
  14. package/dist/decorator/http/index.d.ts +4 -0
  15. package/dist/decorator/http/index.js +5 -0
  16. package/dist/decorator/index.d.ts +4 -0
  17. package/dist/decorator/index.js +5 -0
  18. package/{src → dist}/impl/http/HTTPControllerMetaBuilder.d.ts +1 -1
  19. package/dist/impl/http/HTTPControllerMetaBuilder.js +57 -0
  20. package/{src → dist}/impl/http/HTTPControllerMethodMetaBuilder.d.ts +1 -1
  21. package/dist/impl/http/HTTPControllerMethodMetaBuilder.js +96 -0
  22. package/dist/impl/http/index.d.ts +2 -0
  23. package/dist/impl/http/index.js +3 -0
  24. package/dist/impl/index.d.ts +1 -0
  25. package/dist/impl/index.js +2 -0
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.js +7 -0
  28. package/{src → dist}/model/HTTPControllerMeta.d.ts +2 -2
  29. package/dist/model/HTTPControllerMeta.js +57 -0
  30. package/dist/model/HTTPCookies.d.ts +1 -0
  31. package/dist/model/HTTPCookies.js +2 -0
  32. package/{src → dist}/model/HTTPMethodMeta.d.ts +1 -1
  33. package/dist/model/HTTPMethodMeta.js +124 -0
  34. package/dist/model/index.d.ts +3 -0
  35. package/dist/model/index.js +4 -0
  36. package/{src → dist}/util/ControllerInfoUtil.d.ts +1 -1
  37. package/dist/util/ControllerInfoUtil.js +46 -0
  38. package/dist/util/ControllerMetadataUtil.js +20 -0
  39. package/dist/util/HTTPInfoUtil.js +64 -0
  40. package/{src → dist}/util/HTTPPriorityUtil.d.ts +2 -1
  41. package/{src → dist}/util/HTTPPriorityUtil.js +4 -3
  42. package/{src → dist}/util/MethodInfoUtil.d.ts +1 -1
  43. package/dist/util/MethodInfoUtil.js +72 -0
  44. package/dist/util/index.d.ts +6 -0
  45. package/dist/util/index.js +7 -0
  46. package/dist/util/validator/ControllerValidator.js +15 -0
  47. package/dist/util/validator/MethodValidator.js +31 -0
  48. package/dist/util/validator/index.d.ts +2 -0
  49. package/dist/util/validator/index.js +3 -0
  50. package/package.json +29 -31
  51. package/src/builder/ControllerMetaBuilderFactory.js +0 -41
  52. package/src/builder/index.d.ts +0 -1
  53. package/src/builder/index.js +0 -2
  54. package/src/decorator/Acl.js +0 -22
  55. package/src/decorator/Context.d.ts +0 -1
  56. package/src/decorator/Context.js +0 -11
  57. package/src/decorator/Middleware.js +0 -69
  58. package/src/decorator/http/HTTPMethod.js +0 -17
  59. package/src/decorator/http/HTTPParam.d.ts +0 -8
  60. package/src/decorator/http/HTTPParam.js +0 -75
  61. package/src/decorator/http/Host.js +0 -25
  62. package/src/decorator/http/index.d.ts +0 -4
  63. package/src/decorator/http/index.js +0 -5
  64. package/src/decorator/index.d.ts +0 -4
  65. package/src/decorator/index.js +0 -5
  66. package/src/impl/http/HTTPControllerMetaBuilder.js +0 -57
  67. package/src/impl/http/HTTPControllerMethodMetaBuilder.js +0 -100
  68. package/src/impl/http/index.d.ts +0 -2
  69. package/src/impl/http/index.js +0 -3
  70. package/src/impl/index.d.ts +0 -1
  71. package/src/impl/index.js +0 -2
  72. package/src/index.d.ts +0 -6
  73. package/src/index.js +0 -7
  74. package/src/model/HTTPControllerMeta.js +0 -59
  75. package/src/model/HTTPCookies.d.ts +0 -3
  76. package/src/model/HTTPCookies.js +0 -4
  77. package/src/model/HTTPMethodMeta.js +0 -124
  78. package/src/model/HTTPRequest.d.ts +0 -7
  79. package/src/model/HTTPRequest.js +0 -3
  80. package/src/model/HTTPResponse.d.ts +0 -10
  81. package/src/model/HTTPResponse.js +0 -3
  82. package/src/model/index.d.ts +0 -5
  83. package/src/model/index.js +0 -6
  84. package/src/util/ControllerInfoUtil.js +0 -46
  85. package/src/util/ControllerMetadataUtil.js +0 -20
  86. package/src/util/HTTPInfoUtil.js +0 -64
  87. package/src/util/MethodInfoUtil.js +0 -72
  88. package/src/util/index.d.ts +0 -6
  89. package/src/util/index.js +0 -7
  90. package/src/util/validator/ControllerValidator.js +0 -15
  91. package/src/util/validator/MethodValidator.js +0 -31
  92. package/src/util/validator/index.d.ts +0 -2
  93. package/src/util/validator/index.js +0 -3
  94. /package/{src → dist}/builder/ControllerMetaBuilderFactory.d.ts +0 -0
  95. /package/{src → dist}/decorator/Acl.d.ts +0 -0
  96. /package/{src → dist}/decorator/Middleware.d.ts +0 -0
  97. /package/{src → dist}/decorator/http/HTTPController.d.ts +0 -0
  98. /package/{src → dist}/decorator/http/HTTPMethod.d.ts +0 -0
  99. /package/{src → dist}/decorator/http/Host.d.ts +0 -0
  100. /package/{src → dist}/util/ControllerMetadataUtil.d.ts +0 -0
  101. /package/{src → dist}/util/HTTPInfoUtil.d.ts +0 -0
  102. /package/{src → dist}/util/validator/ControllerValidator.d.ts +0 -0
  103. /package/{src → dist}/util/validator/MethodValidator.d.ts +0 -0
package/README.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @eggjs/controller-decorator
2
2
 
3
+ [![NPM version][npm-image]][npm-url]
4
+ [![Known Vulnerabilities][snyk-image]][snyk-url]
5
+ [![npm download][download-image]][download-url]
6
+ [![Node.js Version](https://img.shields.io/node/v/@eggjs/controller-decorator.svg?style=flat)](https://nodejs.org/en/download/)
7
+
8
+ [npm-image]: https://img.shields.io/npm/v/@eggjs/controller-decorator.svg?style=flat-square
9
+ [npm-url]: https://npmjs.org/package/@eggjs/controller-decorator
10
+ [snyk-image]: https://snyk.io/test/npm/@eggjs/controller-decorator/badge.svg?style=flat-square
11
+ [snyk-url]: https://snyk.io/test/npm/@eggjs/controller-decorator
12
+ [download-image]: https://img.shields.io/npm/dm/@eggjs/controller-decorator.svg?style=flat-square
13
+ [download-url]: https://npmjs.org/package/@eggjs/controller-decorator
14
+
3
15
  ## Usage
4
16
 
5
- Please read [@eggjs/tegg-controller-plugin](../../plugin/controller/README.md)
17
+ Please read [@eggjs/controller-plugin](../../plugin/controller/README.md)
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlck1ldGFCdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL0NvbnRyb2xsZXJNZXRhQnVpbGRlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RSxNQUFNLE9BQU8sNEJBQTRCO0lBQy9CLE1BQU0sQ0FBQyxpQkFBaUIsR0FBMEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVwRyxNQUFNLENBQUMsNkJBQTZCLENBQ2xDLGNBQWtDLEVBQ2xDLHdCQUFzRDtRQUV0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsMkJBQTJCLENBQ2hDLEtBQXdCLEVBQ3hCLGNBQW1DO1FBRW5DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixjQUFjLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBd0IsRUFBRSxjQUFtQztRQUN4RSxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RSxJQUFJLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNsRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxjQUFjLENBQUMsNkJBQTZCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyJ9
@@ -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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlY29yYXRvci9BY2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBSWpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RSxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQWE7SUFDL0IsU0FBUyxRQUFRLENBQUMsV0FBOEI7UUFDOUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUFXLEVBQUUsV0FBd0I7UUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FDVixPQUFPLFdBQVcsRUFDbEIsUUFBUSxFQUNSLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNyRyxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBeUI7UUFDckQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1 @@
1
+ export declare function InjectContext(): (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 InjectContext() {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFJakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBd0IsRUFBRSxjQUFzQjtRQUM1RSxNQUFNLENBQUMsS0FBSyxDQUNWLE9BQU8sV0FBVyxFQUNsQixRQUFRLEVBQ1IsZUFBZSxNQUFNLENBQUMsSUFBSSxxREFBcUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ3JHLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxXQUFxQixDQUFDO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFnQyxDQUFDO1FBQ2hFLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,68 @@
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
+ const MiddlewareType = {
6
+ AOP: 'AOP',
7
+ MiddlewareFunc: 'MiddlewareFunc',
8
+ };
9
+ function isAop(mw) {
10
+ return isClass(mw) && AdviceInfoUtil.isAdvice(mw);
11
+ }
12
+ function isAopTypeOrMiddlewareType(middlewares) {
13
+ const adviceCount = middlewares.filter((t) => isAop(t)).length;
14
+ if (adviceCount) {
15
+ if (adviceCount === middlewares.length) {
16
+ return MiddlewareType.AOP;
17
+ }
18
+ throw new Error('AOP and MiddlewareFunc can not be mixed');
19
+ }
20
+ return MiddlewareType.MiddlewareFunc;
21
+ }
22
+ export function Middleware(...middlewares) {
23
+ function functionTypeClassMiddleware(constructor) {
24
+ middlewares.forEach((mid) => {
25
+ ControllerInfoUtil.addControllerMiddleware(mid, constructor);
26
+ });
27
+ }
28
+ function aopTypeClassMiddleware(constructor) {
29
+ for (const aopAdvice of middlewares) {
30
+ ControllerInfoUtil.addControllerAopMiddleware(aopAdvice, constructor);
31
+ }
32
+ }
33
+ function functionTypeMethodMiddleware(target, propertyKey) {
34
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
35
+ const controllerClazz = target.constructor;
36
+ const methodName = propertyKey;
37
+ middlewares.forEach((mid) => {
38
+ MethodInfoUtil.addMethodMiddleware(mid, controllerClazz, methodName);
39
+ });
40
+ }
41
+ function aopTypeMethodMiddleware(target, propertyKey) {
42
+ const controllerClazz = target.constructor;
43
+ const methodName = propertyKey;
44
+ for (const aopAdvice of middlewares) {
45
+ MethodInfoUtil.addMethodAopMiddleware(aopAdvice, controllerClazz, methodName);
46
+ }
47
+ }
48
+ return function (target, propertyKey) {
49
+ const type = isAopTypeOrMiddlewareType(middlewares);
50
+ if (propertyKey === undefined) {
51
+ if (type === MiddlewareType.AOP) {
52
+ aopTypeClassMiddleware(target);
53
+ }
54
+ else {
55
+ functionTypeClassMiddleware(target);
56
+ }
57
+ }
58
+ else {
59
+ if (type === MiddlewareType.AOP) {
60
+ aopTypeMethodMiddleware(target, propertyKey);
61
+ }
62
+ else {
63
+ functionTypeMethodMiddleware(target, propertyKey);
64
+ }
65
+ }
66
+ };
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFHakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsY0FBYyxFQUFFLGdCQUFnQjtDQUN4QixDQUFDO0FBR1gsU0FBUyxLQUFLLENBQUMsRUFBK0M7SUFDNUQsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFnQyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQ2hDLFdBQXNFO0lBRXRFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMvRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQUcsV0FBc0U7SUFDbEcsU0FBUywyQkFBMkIsQ0FBQyxXQUE4QjtRQUNqRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUIsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsR0FBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLHNCQUFzQixDQUFDLFdBQThCO1FBQzVELEtBQUssTUFBTSxTQUFTLElBQUksV0FBMkMsRUFBRSxDQUFDO1lBQ3BFLGtCQUFrQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBVyxFQUFFLFdBQXdCO1FBQ3pFLE1BQU0sQ0FBQyxLQUFLLENBQ1YsT0FBTyxXQUFXLEVBQ2xCLFFBQVEsRUFDUixlQUFlLE1BQU0sQ0FBQyxJQUFJLHFEQUFxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDckcsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFnQyxDQUFDO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLFdBQXFCLENBQUM7UUFDekMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFxQixFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQUFDLE1BQVcsRUFBRSxXQUF3QjtRQUNwRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBZ0MsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxXQUFxQixDQUFDO1FBQ3pDLEtBQUssTUFBTSxTQUFTLElBQUksV0FBMkMsRUFBRSxDQUFDO1lBQ3BFLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLE1BQVcsRUFBRSxXQUF5QjtRQUNyRCxNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sNEJBQTRCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -1,7 +1,7 @@
1
1
  import { PrototypeUtil, SingletonProto } from '@eggjs/core-decorator';
2
2
  import { StackUtil } from '@eggjs/tegg-common-util';
3
3
  import { AccessLevel, ControllerType } from '@eggjs/tegg-types';
4
- import { ControllerInfoUtil, HTTPInfoUtil } from '../../util/index.js';
4
+ import { ControllerInfoUtil, HTTPInfoUtil } from "../../util/index.js";
5
5
  export function HTTPController(param) {
6
6
  return function (constructor) {
7
7
  ControllerInfoUtil.setControllerType(constructor, ControllerType.HTTP);
@@ -26,4 +26,4 @@ export function HTTPController(param) {
26
26
  PrototypeUtil.setFilePath(constructor, StackUtil.getCalleeFromStack(false, 5));
27
27
  };
28
28
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJIVFRQQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQTRCO0lBQ3pELE9BQU8sVUFBUyxXQUE4QjtRQUM1QyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQzFCLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2hCLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsZ0JBQWdCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUMxQixXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDL0IsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsQiw4Q0FBOEM7UUFDOUMsMkRBQTJEO1FBQzNELDJFQUEyRTtRQUMzRSxrR0FBa0c7UUFDbEcsa0dBQWtHO1FBQ2xHLHVFQUF1RTtRQUN2RSxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9yL2h0dHAvSFRUUENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUE0QjtJQUN6RCxPQUFPLFVBQVUsV0FBOEI7UUFDN0Msa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxJQUFJLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUMxQixrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELGdCQUFnQjtRQUNoQixNQUFNLElBQUksR0FBRyxjQUFjLENBQUM7WUFDMUIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQy9CLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEIsOENBQThDO1FBQzlDLDJEQUEyRDtRQUMzRCwyRUFBMkU7UUFDM0Usa0dBQWtHO1FBQ2xHLGtHQUFrRztRQUNsRyx1RUFBdUU7UUFDdkUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUE1ldGhvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3IvaHR0cC9IVFRQTWV0aG9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQXVCO0lBQ2hELE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBd0I7UUFDcEQsTUFBTSxDQUFDLEtBQUssQ0FDVixPQUFPLFdBQVcsRUFDbEIsUUFBUSxFQUNSLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNyRyxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxjQUFjLENBQUMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,173 @@
1
+ import type { HTTPParamParams, HTTPQueriesParams, HTTPQueryParams } from '@eggjs/tegg-types';
2
+ import { InjectContext } from '../Context.ts';
3
+ /**
4
+ * Inject the request body.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPBody } from 'egg';
9
+ *
10
+ * @HTTPController()
11
+ * export class FooController {
12
+ * @HTTPMethod({
13
+ * path: '/foo',
14
+ * method: HTTPMethodEnum.GET,
15
+ * })
16
+ * // POST /foo -H 'Content-Type: application/json' -d '{"foo": "bar"}'
17
+ * // body = { "foo": "bar" }
18
+ * async bar(@HTTPBody() body: any): Promise<void> {
19
+ * console.log(body);
20
+ * }
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function HTTPBody(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
25
+ /**
26
+ * Inject the request headers.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPHeaders, type IncomingHttpHeaders } from 'egg';
31
+ *
32
+ * @HTTPController()
33
+ * export class FooController {
34
+ * @HTTPMethod({
35
+ * path: '/foo',
36
+ * method: HTTPMethodEnum.GET,
37
+ * })
38
+ * // GET /foo -H 'X-Custom: custom'
39
+ * // headers['x-custom'] = 'custom'
40
+ * async bar(@HTTPHeaders() headers: IncomingHttpHeaders): Promise<void> {
41
+ * console.log(headers);
42
+ * }
43
+ * }
44
+ * ```
45
+ */
46
+ export declare function HTTPHeaders(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
47
+ /**
48
+ * Inject the request query string, the value is string type.
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPQuery } from 'egg';
53
+ *
54
+ * @HTTPController()
55
+ * export class FooController {
56
+ * @HTTPMethod({
57
+ * path: '/foo',
58
+ * method: HTTPMethodEnum.GET,
59
+ * })
60
+ * // GET /foo?user=asd
61
+ * // user = 'asd'
62
+ * async bar(@HTTPQuery() user?: string): Promise<void> {
63
+ * console.log(user);
64
+ * }
65
+ * }
66
+ * ```
67
+ */
68
+ export declare function HTTPQuery(param?: HTTPQueryParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
69
+ /**
70
+ * Inject the request query strings, all value are Array type.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPQueries } from 'egg';
75
+ *
76
+ * @HTTPController()
77
+ * export class FooController {
78
+ * @HTTPMethod({
79
+ * path: '/foo',
80
+ * method: HTTPMethodEnum.GET,
81
+ * })
82
+ * // GET /foo?user=asd&user=fgh
83
+ * // user = ['asd', 'fgh']
84
+ * async bar(@HTTPQueries({ name: 'user' }) users?: string[]): Promise<void> {
85
+ * console.log(users);
86
+ * }
87
+ * }
88
+ * ```
89
+ */
90
+ export declare function HTTPQueries(param?: HTTPQueriesParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
91
+ /**
92
+ * Inject the request path parameter, the value is string type.
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPParam } from 'egg';
97
+ *
98
+ * @HTTPController()
99
+ * export class FooController {
100
+ * @HTTPMethod({
101
+ * path: '/foo/:id',
102
+ * method: HTTPMethodEnum.GET,
103
+ * })
104
+ * // GET /foo/123
105
+ * // id = '123'
106
+ * async bar(@HTTPParam() id: string): Promise<void> {
107
+ * console.log(id);
108
+ * }
109
+ * }
110
+ * ```
111
+ */
112
+ export declare function HTTPParam(param?: HTTPParamParams): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
113
+ /**
114
+ * Inject the request object.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPRequest } from 'egg';
119
+ *
120
+ * @HTTPController()
121
+ * export class FooController {
122
+ * @HTTPMethod({
123
+ * path: '/foo',
124
+ * method: HTTPMethodEnum.GET,
125
+ * })
126
+ * async bar(@HTTPRequest() request: Request): Promise<void> {
127
+ * console.log(request);
128
+ * }
129
+ * }
130
+ * ```
131
+ */
132
+ export declare function HTTPRequest(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
133
+ /**
134
+ * Inject the request cookies.
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPCookies, type Cookies } from 'egg';
139
+ *
140
+ * @HTTPController()
141
+ * export class FooController {
142
+ * @HTTPMethod({
143
+ * path: '/foo',
144
+ * method: HTTPMethodEnum.GET,
145
+ * })
146
+ * // GET /foo -H 'Cookie: foo=bar; bar=baz'
147
+ * // cookies = cookies
148
+ * async bar(@HTTPCookies() cookies: Cookies): Promise<void> {
149
+ * console.log(cookies);
150
+ * }
151
+ * }
152
+ * ```
153
+ */
154
+ export declare function HTTPCookies(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
155
+ export {
156
+ /**
157
+ * @example
158
+ *
159
+ * ```typescript
160
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPContext, type Context } from 'egg';
161
+ *
162
+ * @HTTPController()
163
+ * export class FooController {
164
+ * @HTTPMethod({
165
+ * path: '/foo',
166
+ * method: HTTPMethodEnum.GET,
167
+ * })
168
+ * async bar(@HTTPContext() ctx: Context): Promise<void> {
169
+ * console.log(ctx);
170
+ * }
171
+ * ```
172
+ */
173
+ InjectContext as HTTPContext, };
@@ -0,0 +1,241 @@
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
+ import { InjectContext } from "../Context.js";
6
+ // TODO url params
7
+ // /foo/:id
8
+ // refactor HTTPQuery, HTTPBody, HTTPParam
9
+ /**
10
+ * Inject the request body.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPBody } from 'egg';
15
+ *
16
+ * @HTTPController()
17
+ * export class FooController {
18
+ * @HTTPMethod({
19
+ * path: '/foo',
20
+ * method: HTTPMethodEnum.GET,
21
+ * })
22
+ * // POST /foo -H 'Content-Type: application/json' -d '{"foo": "bar"}'
23
+ * // body = { "foo": "bar" }
24
+ * async bar(@HTTPBody() body: any): Promise<void> {
25
+ * console.log(body);
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export function HTTPBody() {
31
+ return function (target, propertyKey, parameterIndex) {
32
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
33
+ const methodName = propertyKey;
34
+ const controllerClazz = target.constructor;
35
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.BODY, parameterIndex, controllerClazz, methodName);
36
+ };
37
+ }
38
+ /**
39
+ * Inject the request headers.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPHeaders, type IncomingHttpHeaders } from 'egg';
44
+ *
45
+ * @HTTPController()
46
+ * export class FooController {
47
+ * @HTTPMethod({
48
+ * path: '/foo',
49
+ * method: HTTPMethodEnum.GET,
50
+ * })
51
+ * // GET /foo -H 'X-Custom: custom'
52
+ * // headers['x-custom'] = 'custom'
53
+ * async bar(@HTTPHeaders() headers: IncomingHttpHeaders): Promise<void> {
54
+ * console.log(headers);
55
+ * }
56
+ * }
57
+ * ```
58
+ */
59
+ export function HTTPHeaders() {
60
+ return function (target, propertyKey, parameterIndex) {
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.HEADERS, parameterIndex, controllerClazz, methodName);
65
+ };
66
+ }
67
+ /**
68
+ * Inject the request query string, the value is string type.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPQuery } from 'egg';
73
+ *
74
+ * @HTTPController()
75
+ * export class FooController {
76
+ * @HTTPMethod({
77
+ * path: '/foo',
78
+ * method: HTTPMethodEnum.GET,
79
+ * })
80
+ * // GET /foo?user=asd
81
+ * // user = 'asd'
82
+ * async bar(@HTTPQuery() user?: string): Promise<void> {
83
+ * console.log(user);
84
+ * }
85
+ * }
86
+ * ```
87
+ */
88
+ export function HTTPQuery(param) {
89
+ return function (target, propertyKey, parameterIndex) {
90
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
91
+ const methodName = propertyKey;
92
+ const controllerClazz = target.constructor;
93
+ const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
94
+ // if param.name is not set, use the argument name as the param name
95
+ const name = param?.name || argNames[parameterIndex];
96
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.QUERY, parameterIndex, controllerClazz, methodName);
97
+ HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
98
+ };
99
+ }
100
+ /**
101
+ * Inject the request query strings, all value are Array type.
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPQueries } from 'egg';
106
+ *
107
+ * @HTTPController()
108
+ * export class FooController {
109
+ * @HTTPMethod({
110
+ * path: '/foo',
111
+ * method: HTTPMethodEnum.GET,
112
+ * })
113
+ * // GET /foo?user=asd&user=fgh
114
+ * // user = ['asd', 'fgh']
115
+ * async bar(@HTTPQueries({ name: 'user' }) users?: string[]): Promise<void> {
116
+ * console.log(users);
117
+ * }
118
+ * }
119
+ * ```
120
+ */
121
+ export function HTTPQueries(param) {
122
+ return function (target, propertyKey, parameterIndex) {
123
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
124
+ const methodName = propertyKey;
125
+ const controllerClazz = target.constructor;
126
+ const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
127
+ const name = param?.name || argNames[parameterIndex];
128
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.QUERIES, parameterIndex, controllerClazz, methodName);
129
+ HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
130
+ };
131
+ }
132
+ /**
133
+ * Inject the request path parameter, the value is string type.
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPParam } from 'egg';
138
+ *
139
+ * @HTTPController()
140
+ * export class FooController {
141
+ * @HTTPMethod({
142
+ * path: '/foo/:id',
143
+ * method: HTTPMethodEnum.GET,
144
+ * })
145
+ * // GET /foo/123
146
+ * // id = '123'
147
+ * async bar(@HTTPParam() id: string): Promise<void> {
148
+ * console.log(id);
149
+ * }
150
+ * }
151
+ * ```
152
+ */
153
+ export function HTTPParam(param) {
154
+ return function (target, propertyKey, parameterIndex) {
155
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
156
+ const methodName = propertyKey;
157
+ const controllerClazz = target.constructor;
158
+ const argNames = ObjectUtils.getFunctionArgNameList(target[propertyKey]);
159
+ const name = param?.name || argNames[parameterIndex];
160
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.PARAM, parameterIndex, controllerClazz, methodName);
161
+ HTTPInfoUtil.setHTTPMethodParamName(name, parameterIndex, controllerClazz, methodName);
162
+ };
163
+ }
164
+ /**
165
+ * Inject the request object.
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPRequest } from 'egg';
170
+ *
171
+ * @HTTPController()
172
+ * export class FooController {
173
+ * @HTTPMethod({
174
+ * path: '/foo',
175
+ * method: HTTPMethodEnum.GET,
176
+ * })
177
+ * async bar(@HTTPRequest() request: Request): Promise<void> {
178
+ * console.log(request);
179
+ * }
180
+ * }
181
+ * ```
182
+ */
183
+ export function HTTPRequest() {
184
+ return function (target, propertyKey, parameterIndex) {
185
+ const [nodeMajor] = process.versions.node.split('.').map((v) => Number(v));
186
+ assert(nodeMajor >= 16, `[controller/${target.name}] expect node version >=16, but now is ${nodeMajor}`);
187
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
188
+ const methodName = propertyKey;
189
+ const controllerClazz = target.constructor;
190
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.REQUEST, parameterIndex, controllerClazz, methodName);
191
+ };
192
+ }
193
+ /**
194
+ * Inject the request cookies.
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPCookies, type Cookies } from 'egg';
199
+ *
200
+ * @HTTPController()
201
+ * export class FooController {
202
+ * @HTTPMethod({
203
+ * path: '/foo',
204
+ * method: HTTPMethodEnum.GET,
205
+ * })
206
+ * // GET /foo -H 'Cookie: foo=bar; bar=baz'
207
+ * // cookies = cookies
208
+ * async bar(@HTTPCookies() cookies: Cookies): Promise<void> {
209
+ * console.log(cookies);
210
+ * }
211
+ * }
212
+ * ```
213
+ */
214
+ export function HTTPCookies() {
215
+ return function (target, propertyKey, parameterIndex) {
216
+ assert.equal(typeof propertyKey, 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
217
+ const methodName = propertyKey;
218
+ const controllerClazz = target.constructor;
219
+ HTTPInfoUtil.setHTTPMethodParamType(HTTPParamType.COOKIES, parameterIndex, controllerClazz, methodName);
220
+ };
221
+ }
222
+ export {
223
+ /**
224
+ * @example
225
+ *
226
+ * ```typescript
227
+ * import { HTTPController, HTTPMethod, HTTPMethodEnum, HTTPContext, type Context } from 'egg';
228
+ *
229
+ * @HTTPController()
230
+ * export class FooController {
231
+ * @HTTPMethod({
232
+ * path: '/foo',
233
+ * method: HTTPMethodEnum.GET,
234
+ * })
235
+ * async bar(@HTTPContext() ctx: Context): Promise<void> {
236
+ * console.log(ctx);
237
+ * }
238
+ * ```
239
+ */
240
+ InjectContext as HTTPContext, };
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUFBhcmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RlY29yYXRvci9odHRwL0hUVFBQYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5QyxrQkFBa0I7QUFDbEIsV0FBVztBQUNYLDBDQUEwQztBQUUxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsUUFBUTtJQUN0QixPQUFPLFVBQVUsTUFBVyxFQUFFLFdBQXdCLEVBQUUsY0FBc0I7UUFDNUUsTUFBTSxDQUFDLEtBQUssQ0FDVixPQUFPLFdBQVcsRUFDbEIsUUFBUSxFQUNSLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNyRyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBZ0MsQ0FBQztRQUNoRSxZQUFZLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLFVBQVUsTUFBVyxFQUFFLFdBQXdCLEVBQUUsY0FBc0I7UUFDNUUsTUFBTSxDQUFDLEtBQUssQ0FDVixPQUFPLFdBQVcsRUFDbEIsUUFBUSxFQUNS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