@miiajs/core 0.1.0

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/app/app.d.ts +106 -0
  4. package/dist/app/app.d.ts.map +1 -0
  5. package/dist/app/app.js +449 -0
  6. package/dist/app/app.js.map +1 -0
  7. package/dist/app/index.d.ts +3 -0
  8. package/dist/app/index.d.ts.map +1 -0
  9. package/dist/app/index.js +2 -0
  10. package/dist/app/index.js.map +1 -0
  11. package/dist/app/module-loader.d.ts +16 -0
  12. package/dist/app/module-loader.d.ts.map +1 -0
  13. package/dist/app/module-loader.js +107 -0
  14. package/dist/app/module-loader.js.map +1 -0
  15. package/dist/app/router-explorer.d.ts +12 -0
  16. package/dist/app/router-explorer.d.ts.map +1 -0
  17. package/dist/app/router-explorer.js +76 -0
  18. package/dist/app/router-explorer.js.map +1 -0
  19. package/dist/app/routes-resolver.d.ts +11 -0
  20. package/dist/app/routes-resolver.d.ts.map +1 -0
  21. package/dist/app/routes-resolver.js +24 -0
  22. package/dist/app/routes-resolver.js.map +1 -0
  23. package/dist/cors.d.ts +22 -0
  24. package/dist/cors.d.ts.map +1 -0
  25. package/dist/cors.js +48 -0
  26. package/dist/cors.js.map +1 -0
  27. package/dist/decorators/apply-decorators.d.ts +19 -0
  28. package/dist/decorators/apply-decorators.d.ts.map +1 -0
  29. package/dist/decorators/apply-decorators.js +27 -0
  30. package/dist/decorators/apply-decorators.js.map +1 -0
  31. package/dist/decorators/class.d.ts +9 -0
  32. package/dist/decorators/class.d.ts.map +1 -0
  33. package/dist/decorators/class.js +15 -0
  34. package/dist/decorators/class.js.map +1 -0
  35. package/dist/decorators/create-decorator.d.ts +6 -0
  36. package/dist/decorators/create-decorator.d.ts.map +1 -0
  37. package/dist/decorators/create-decorator.js +31 -0
  38. package/dist/decorators/create-decorator.js.map +1 -0
  39. package/dist/decorators/http.d.ts +8 -0
  40. package/dist/decorators/http.d.ts.map +1 -0
  41. package/dist/decorators/http.js +24 -0
  42. package/dist/decorators/http.js.map +1 -0
  43. package/dist/decorators/index.d.ts +9 -0
  44. package/dist/decorators/index.d.ts.map +1 -0
  45. package/dist/decorators/index.js +7 -0
  46. package/dist/decorators/index.js.map +1 -0
  47. package/dist/decorators/metadata.d.ts +29 -0
  48. package/dist/decorators/metadata.d.ts.map +1 -0
  49. package/dist/decorators/metadata.js +40 -0
  50. package/dist/decorators/metadata.js.map +1 -0
  51. package/dist/decorators/middleware.d.ts +9 -0
  52. package/dist/decorators/middleware.d.ts.map +1 -0
  53. package/dist/decorators/middleware.js +82 -0
  54. package/dist/decorators/middleware.js.map +1 -0
  55. package/dist/di-container.d.ts +52 -0
  56. package/dist/di-container.d.ts.map +1 -0
  57. package/dist/di-container.js +177 -0
  58. package/dist/di-container.js.map +1 -0
  59. package/dist/discovery/discovery-service.d.ts +63 -0
  60. package/dist/discovery/discovery-service.d.ts.map +1 -0
  61. package/dist/discovery/discovery-service.js +65 -0
  62. package/dist/discovery/discovery-service.js.map +1 -0
  63. package/dist/discovery/index.d.ts +3 -0
  64. package/dist/discovery/index.d.ts.map +1 -0
  65. package/dist/discovery/index.js +2 -0
  66. package/dist/discovery/index.js.map +1 -0
  67. package/dist/exceptions.d.ts +28 -0
  68. package/dist/exceptions.d.ts.map +1 -0
  69. package/dist/exceptions.js +67 -0
  70. package/dist/exceptions.js.map +1 -0
  71. package/dist/index.d.ts +24 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +31 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/logger.d.ts +43 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +123 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/middleware.d.ts +4 -0
  80. package/dist/middleware.d.ts.map +1 -0
  81. package/dist/middleware.js +36 -0
  82. package/dist/middleware.js.map +1 -0
  83. package/dist/polyfill.d.ts +2 -0
  84. package/dist/polyfill.d.ts.map +1 -0
  85. package/dist/polyfill.js +6 -0
  86. package/dist/polyfill.js.map +1 -0
  87. package/dist/resolver.d.ts +36 -0
  88. package/dist/resolver.d.ts.map +1 -0
  89. package/dist/resolver.js +42 -0
  90. package/dist/resolver.js.map +1 -0
  91. package/dist/response.d.ts +19 -0
  92. package/dist/response.d.ts.map +1 -0
  93. package/dist/response.js +62 -0
  94. package/dist/response.js.map +1 -0
  95. package/dist/router.d.ts +35 -0
  96. package/dist/router.d.ts.map +1 -0
  97. package/dist/router.js +160 -0
  98. package/dist/router.js.map +1 -0
  99. package/dist/testing/index.d.ts +2 -0
  100. package/dist/testing/index.d.ts.map +1 -0
  101. package/dist/testing/index.js +2 -0
  102. package/dist/testing/index.js.map +1 -0
  103. package/dist/testing/test-app.d.ts +22 -0
  104. package/dist/testing/test-app.d.ts.map +1 -0
  105. package/dist/testing/test-app.js +76 -0
  106. package/dist/testing/test-app.js.map +1 -0
  107. package/dist/types.d.ts +85 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/index.d.ts +4 -0
  112. package/dist/utils/index.d.ts.map +1 -0
  113. package/dist/utils/index.js +3 -0
  114. package/dist/utils/index.js.map +1 -0
  115. package/dist/utils/join-paths.d.ts +2 -0
  116. package/dist/utils/join-paths.d.ts.map +1 -0
  117. package/dist/utils/join-paths.js +7 -0
  118. package/dist/utils/join-paths.js.map +1 -0
  119. package/dist/utils/resolve-options.d.ts +32 -0
  120. package/dist/utils/resolve-options.d.ts.map +1 -0
  121. package/dist/utils/resolve-options.js +10 -0
  122. package/dist/utils/resolve-options.js.map +1 -0
  123. package/package.json +57 -0
@@ -0,0 +1,3 @@
1
+ export { Miia } from './app.js';
2
+ export type { MiiaOptions } from './app.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Miia } from './app.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { Container } from '../di-container.js';
2
+ import type { Router } from '../router.js';
3
+ import type { ConfiguredModule, Constructor } from '../types.js';
4
+ export declare class ModuleLoader {
5
+ private container;
6
+ private logger;
7
+ private processedModules;
8
+ private registeredTokens;
9
+ private routesResolver;
10
+ private pendingRoutes;
11
+ constructor(router: Router, container: Container);
12
+ load(...modules: (Constructor | ConfiguredModule)[]): void;
13
+ private processModule;
14
+ private registerProvider;
15
+ }
16
+ //# sourceMappingURL=module-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/app/module-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAInD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAsD,MAAM,aAAa,CAAA;AASpH,qBAAa,YAAY;IASrB,OAAO,CAAC,SAAS;IARnB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAqB;gBAGxC,MAAM,EAAE,MAAM,EACN,SAAS,EAAE,SAAS;IAK9B,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,GAAG,IAAI;IAoB1D,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,gBAAgB;CAoCzB"}
@@ -0,0 +1,107 @@
1
+ import { Logger } from '../logger.js';
2
+ import { getMeta, setMeta, MODULE, INJECTABLE, PREFIX, RESOLVED_PREFIX } from '../decorators/index.js';
3
+ import { RoutesResolver } from './routes-resolver.js';
4
+ import { joinPaths } from '../utils/index.js';
5
+ export class ModuleLoader {
6
+ container;
7
+ logger = new Logger(ModuleLoader.name);
8
+ processedModules = new Set();
9
+ registeredTokens = new Set();
10
+ routesResolver;
11
+ pendingRoutes = [];
12
+ constructor(router, container) {
13
+ this.container = container;
14
+ this.routesResolver = new RoutesResolver(router, container);
15
+ }
16
+ load(...modules) {
17
+ // Phase 1: Load modules, register providers
18
+ for (const mod of modules) {
19
+ this.processModule(mod);
20
+ }
21
+ // Phase 2: Resolve routes
22
+ for (const { controller, prefix } of this.pendingRoutes) {
23
+ this.routesResolver.resolve(controller, prefix);
24
+ const ctrlPrefix = getMeta(controller, PREFIX) ?? '';
25
+ const resolvedPrefix = joinPaths(prefix, ctrlPrefix);
26
+ // Expose the fully-resolved prefix as class metadata so DiscoveryService
27
+ // consumers (e.g. @miiajs/swagger) can pair controllers with their live
28
+ // routing prefix without reaching into ModuleLoader internals.
29
+ const classMeta = controller[Symbol.metadata];
30
+ if (classMeta)
31
+ setMeta(classMeta, RESOLVED_PREFIX, resolvedPrefix);
32
+ }
33
+ this.pendingRoutes = [];
34
+ }
35
+ processModule(modOrConfigured, parentPrefix = '') {
36
+ let moduleCtor;
37
+ let extraProviders = [];
38
+ if (typeof modOrConfigured === 'function') {
39
+ moduleCtor = modOrConfigured;
40
+ }
41
+ else {
42
+ moduleCtor = modOrConfigured.module;
43
+ extraProviders = modOrConfigured.providers ?? [];
44
+ }
45
+ if (this.processedModules.has(moduleCtor))
46
+ return;
47
+ this.processedModules.add(moduleCtor);
48
+ const meta = getMeta(moduleCtor, MODULE);
49
+ const prefix = joinPaths(parentPrefix, meta?.prefix ?? '');
50
+ for (const provider of extraProviders) {
51
+ this.registerProvider(provider);
52
+ }
53
+ if (meta?.imports) {
54
+ for (const imp of meta.imports) {
55
+ this.processModule(imp, prefix);
56
+ }
57
+ }
58
+ if (meta?.providers) {
59
+ for (const provider of meta.providers) {
60
+ this.registerProvider(provider);
61
+ }
62
+ }
63
+ if (meta?.controllers) {
64
+ for (const controller of meta.controllers) {
65
+ this.pendingRoutes.push({ controller, prefix });
66
+ }
67
+ }
68
+ if (!this.container.has(moduleCtor)) {
69
+ this.container.register(moduleCtor, () => new moduleCtor(), 'singleton');
70
+ }
71
+ this.logger.log(`${moduleCtor.name} dependencies initialized`);
72
+ }
73
+ registerProvider(provider) {
74
+ if (typeof provider === 'function') {
75
+ if (this.container.has(provider)) {
76
+ if (this.registeredTokens.has(provider)) {
77
+ throw new Error(`[Miia] Duplicate provider: ${provider.name} is already registered. Remove it from one of the modules.`);
78
+ }
79
+ return;
80
+ }
81
+ const meta = getMeta(provider, INJECTABLE);
82
+ const scope = meta?.scope ?? 'singleton';
83
+ const token = meta?.token;
84
+ if (token) {
85
+ this.container.register(token, () => new provider(), scope);
86
+ this.container.register(provider, (resolve) => resolve(token), scope);
87
+ this.registeredTokens.add(token);
88
+ }
89
+ else {
90
+ this.container.register(provider, () => new provider(), scope);
91
+ }
92
+ this.registeredTokens.add(provider);
93
+ }
94
+ else {
95
+ const fp = provider;
96
+ if (this.container.has(fp.token)) {
97
+ if (this.registeredTokens.has(fp.token)) {
98
+ throw new Error(`[Miia] Duplicate provider: ${String(fp.token)} is already registered. Remove it from one of the modules.`);
99
+ }
100
+ return;
101
+ }
102
+ this.container.register(fp.token, fp.factory, fp.scope);
103
+ this.registeredTokens.add(fp.token);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=module-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-loader.js","sourceRoot":"","sources":["../../src/app/module-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Container } from '../di-container.js';
2
+ import type { Router } from '../router.js';
3
+ import type { Constructor } from '../types.js';
4
+ export declare class RouterExplorer {
5
+ private router;
6
+ private container;
7
+ private logger;
8
+ constructor(router: Router, container: Container);
9
+ explore(instance: any, controller: Constructor, controllerPrefix: string): void;
10
+ private resolveGuards;
11
+ }
12
+ //# sourceMappingURL=router-explorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-explorer.d.ts","sourceRoot":"","sources":["../../src/app/router-explorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAcnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAkE,MAAM,aAAa,CAAA;AAG9G,qBAAa,cAAc;IAIvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IAJnB,OAAO,CAAC,MAAM,CAAkC;gBAGtC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS;IAG9B,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAsC/E,OAAO,CAAC,aAAa;CAStB"}
@@ -0,0 +1,76 @@
1
+ import { Logger } from '../logger.js';
2
+ import { getMeta, CLASS_MW, CLASS_GUARDS, METHOD_GUARDS, METHOD_MW, ROUTES, STATUSES, SKIP_GUARDS, GUARD_FACTORY, } from '../decorators/index.js';
3
+ import { guardToMiddleware } from '../middleware.js';
4
+ import { joinPaths } from '../utils/index.js';
5
+ export class RouterExplorer {
6
+ router;
7
+ container;
8
+ logger = new Logger(RouterExplorer.name);
9
+ constructor(router, container) {
10
+ this.router = router;
11
+ this.container = container;
12
+ }
13
+ explore(instance, controller, controllerPrefix) {
14
+ const ctrlMws = getMeta(controller, CLASS_MW) ?? [];
15
+ const ctrlGuards = getMeta(controller, CLASS_GUARDS) ?? [];
16
+ const routes = getMeta(controller, ROUTES) ?? [];
17
+ const mwMap = getMeta(controller, METHOD_MW);
18
+ const guardMap = getMeta(controller, METHOD_GUARDS);
19
+ const statusMap = getMeta(controller, STATUSES);
20
+ for (const route of routes) {
21
+ const fullPath = joinPaths(controllerPrefix, route.path);
22
+ const handler = instance[route.handlerName].bind(instance);
23
+ const methodMws = mwMap?.get(route.handlerName) ?? [];
24
+ const methodGuards = guardMap?.get(route.handlerName) ?? [];
25
+ const customStatus = statusMap?.get(route.handlerName);
26
+ const skipSet = getSkipSet(controller, route.handlerName);
27
+ const ctrlGuardMws = this.resolveGuards(filterGuards(ctrlGuards, skipSet));
28
+ const methodGuardMws = this.resolveGuards(filterGuards(methodGuards, skipSet));
29
+ const routeMws = [...ctrlGuardMws, ...ctrlMws, ...methodGuardMws, ...methodMws];
30
+ const finalHandler = customStatus
31
+ ? (ctx) => {
32
+ ctx.res.status(customStatus);
33
+ return handler(ctx);
34
+ }
35
+ : handler;
36
+ this.router.add(route.method, fullPath, finalHandler, {
37
+ middlewares: routeMws,
38
+ skippedGuardClasses: skipSet,
39
+ });
40
+ this.logger.log(`Mapped {/${fullPath}, ${route.method}} route`);
41
+ }
42
+ }
43
+ resolveGuards(guards) {
44
+ return guards.map((guardCtor) => {
45
+ if (!this.container.has(guardCtor)) {
46
+ this.container.register(guardCtor, () => new guardCtor(), 'singleton');
47
+ }
48
+ const instance = this.container.resolve(guardCtor);
49
+ return guardToMiddleware((ctx) => instance.canActivate(ctx));
50
+ });
51
+ }
52
+ }
53
+ function getSkipSet(controller, handlerName) {
54
+ const map = getMeta(controller, SKIP_GUARDS);
55
+ if (!map)
56
+ return null;
57
+ const methodSet = map.get(handlerName);
58
+ const classSet = map.get('*');
59
+ if (!methodSet && !classSet)
60
+ return null;
61
+ if (methodSet && classSet)
62
+ return new Set([...classSet, ...methodSet]);
63
+ return methodSet ?? classSet ?? null;
64
+ }
65
+ function shouldSkip(guardCtor, skipSet) {
66
+ if (skipSet.has(guardCtor))
67
+ return true;
68
+ const factory = guardCtor[GUARD_FACTORY];
69
+ return factory != null && skipSet.has(factory);
70
+ }
71
+ function filterGuards(guards, skipSet) {
72
+ if (!skipSet)
73
+ return guards;
74
+ return guards.filter((g) => !shouldSkip(g, skipSet));
75
+ }
76
+ //# sourceMappingURL=router-explorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-explorer.js","sourceRoot":"","sources":["../../src/app/router-explorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Container } from '../di-container.js';
2
+ import type { Router } from '../router.js';
3
+ import type { Constructor } from '../types.js';
4
+ export declare class RoutesResolver {
5
+ private container;
6
+ private logger;
7
+ private routerExplorer;
8
+ constructor(router: Router, container: Container);
9
+ resolve(controller: Constructor, modulePrefix: string): void;
10
+ }
11
+ //# sourceMappingURL=routes-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-resolver.d.ts","sourceRoot":"","sources":["../../src/app/routes-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,qBAAa,cAAc;IAMvB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAgB;gBAGpC,MAAM,EAAE,MAAM,EACN,SAAS,EAAE,SAAS;IAK9B,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;CAa7D"}
@@ -0,0 +1,24 @@
1
+ import { Logger } from '../logger.js';
2
+ import { getMeta, PREFIX } from '../decorators/index.js';
3
+ import { joinPaths } from '../utils/index.js';
4
+ import { RouterExplorer } from './router-explorer.js';
5
+ export class RoutesResolver {
6
+ container;
7
+ logger = new Logger(RoutesResolver.name);
8
+ routerExplorer;
9
+ constructor(router, container) {
10
+ this.container = container;
11
+ this.routerExplorer = new RouterExplorer(router, container);
12
+ }
13
+ resolve(controller, modulePrefix) {
14
+ if (!this.container.has(controller)) {
15
+ this.container.register(controller, () => new controller(), 'singleton');
16
+ }
17
+ const instance = this.container.resolve(controller);
18
+ const prefix = getMeta(controller, PREFIX) ?? '';
19
+ const fullPrefix = joinPaths(modulePrefix, prefix);
20
+ this.logger.log(`${controller.name} {/${fullPrefix}}`);
21
+ this.routerExplorer.explore(instance, controller, fullPrefix);
22
+ }
23
+ }
24
+ //# sourceMappingURL=routes-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-resolver.js","sourceRoot":"","sources":["../../src/app/routes-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,OAAO,cAAc;IAMf;IALF,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACxC,cAAc,CAAgB;IAEtC,YACE,MAAc,EACN,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAE5B,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,UAAuB,EAAE,YAAoB;QACnD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,EAAE,EAAE,WAAW,CAAC,CAAA;QAC1E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,OAAO,CAAS,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QACxD,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAElD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,MAAM,UAAU,GAAG,CAAC,CAAA;QAEtD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;IAC/D,CAAC;CACF"}
package/dist/cors.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import type { Middleware } from './types.js';
2
+ export interface CorsOptions {
3
+ /**
4
+ * Allowed origin(s). Pass `'*'` to allow any origin (cannot be combined with
5
+ * `credentials: true`), a specific string, an array of allowed strings, or a
6
+ * predicate function.
7
+ *
8
+ * **Security note for function form:** the callback receives the raw `Origin`
9
+ * header - validate the full origin string, not just a suffix. Naive checks
10
+ * like `o.endsWith('.example.com')` are bypassed by `evil.example.com.attacker.net`.
11
+ * Prefer comparing against a whitelist or parsing with `new URL(origin)` and
12
+ * checking `.hostname` exactly.
13
+ */
14
+ origin?: string | string[] | ((origin: string) => boolean);
15
+ methods?: string[];
16
+ allowedHeaders?: string[];
17
+ exposedHeaders?: string[];
18
+ credentials?: boolean;
19
+ maxAge?: number;
20
+ }
21
+ export declare function cors(options?: CorsOptions): Middleware;
22
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CA+D1D"}
package/dist/cors.js ADDED
@@ -0,0 +1,48 @@
1
+ export function cors(options = {}) {
2
+ const { origin = '*', methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], allowedHeaders = ['Content-Type', 'Authorization'], exposedHeaders = [], credentials = false, maxAge = 86400, } = options;
3
+ // Fail fast on a configuration the CORS spec forbids. Some proxies/CDNs would
4
+ // happily cache the response, turning it into a reflection vulnerability.
5
+ if (credentials && origin === '*') {
6
+ throw new Error("cors: 'credentials: true' is incompatible with 'origin: \"*\"'. " +
7
+ 'Provide explicit origin(s) or a predicate function.');
8
+ }
9
+ return async (ctx, next) => {
10
+ const requestOrigin = ctx.req.headers.get('origin') ?? '';
11
+ // Determine allowed origin
12
+ let allowOrigin = '*';
13
+ if (typeof origin === 'string') {
14
+ allowOrigin = origin;
15
+ }
16
+ else if (Array.isArray(origin)) {
17
+ allowOrigin = origin.includes(requestOrigin) ? requestOrigin : '';
18
+ }
19
+ else if (typeof origin === 'function') {
20
+ allowOrigin = origin(requestOrigin) ? requestOrigin : '';
21
+ }
22
+ if (!allowOrigin) {
23
+ await next();
24
+ return;
25
+ }
26
+ ctx.res.header('Access-Control-Allow-Origin', allowOrigin);
27
+ // Dynamic origin requires Vary header for correct CDN/proxy caching
28
+ if (typeof origin !== 'string' || origin !== '*') {
29
+ ctx.res.header('Vary', 'Origin');
30
+ }
31
+ if (credentials) {
32
+ ctx.res.header('Access-Control-Allow-Credentials', 'true');
33
+ }
34
+ if (exposedHeaders.length > 0) {
35
+ ctx.res.header('Access-Control-Expose-Headers', exposedHeaders.join(', '));
36
+ }
37
+ // Preflight
38
+ if (ctx.req.method === 'OPTIONS') {
39
+ ctx.res.header('Access-Control-Allow-Methods', methods.join(', '));
40
+ ctx.res.header('Access-Control-Allow-Headers', allowedHeaders.join(', '));
41
+ ctx.res.header('Access-Control-Max-Age', String(maxAge));
42
+ ctx.res.status(204);
43
+ return;
44
+ }
45
+ await next();
46
+ };
47
+ }
48
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,IAAI,CAAC,UAAuB,EAAE;IAC5C,MAAM,EACJ,MAAM,GAAG,GAAG,EACZ,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC9D,cAAc,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,EAClD,cAAc,GAAG,EAAE,EACnB,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAA;IAEX,8EAA8E;IAC9E,0EAA0E;IAC1E,IAAI,WAAW,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,qDAAqD,CACxD,CAAA;IACH,CAAC;IAED,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAEzD,2BAA2B;QAC3B,IAAI,WAAW,GAAG,GAAG,CAAA;QACrB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,WAAW,GAAG,MAAM,CAAA;QACtB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,CAAC;aAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1D,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,EAAE,CAAA;YACZ,OAAM;QACR,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAA;QAE1D,oEAAoE;QACpE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClC,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,+BAA+B,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5E,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACzE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YACxD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QAED,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ type MethodDecorator = (value: any, context: ClassMethodDecoratorContext) => any;
2
+ /**
3
+ * Compose multiple method decorators into a single one.
4
+ *
5
+ * Each passed decorator runs with the same target and context, so all
6
+ * side-effects on `context.metadata` accumulate naturally. Useful for
7
+ * building higher-level decorators (e.g. `Admin = applyDecorators(UseGuard(...), Status(200))`)
8
+ * without re-implementing metadata writes by hand.
9
+ *
10
+ * Order matches argument order: the first decorator in the list runs first.
11
+ * If a decorator returns a replacement function, subsequent decorators
12
+ * receive the replacement.
13
+ *
14
+ * Currently method-level only. For class-level composition, stack decorators
15
+ * directly or add a dedicated helper later.
16
+ */
17
+ export declare function applyDecorators(...decorators: MethodDecorator[]): <V extends Function>(value: V, context: ClassMethodDecoratorContext) => V | void;
18
+ export {};
19
+ //# sourceMappingURL=apply-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/apply-decorators.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,KAAK,GAAG,CAAA;AAEhF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,GAAG,UAAU,EAAE,eAAe,EAAE,GAC/B,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,2BAA2B,KAAK,CAAC,GAAG,IAAI,CASlF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Compose multiple method decorators into a single one.
3
+ *
4
+ * Each passed decorator runs with the same target and context, so all
5
+ * side-effects on `context.metadata` accumulate naturally. Useful for
6
+ * building higher-level decorators (e.g. `Admin = applyDecorators(UseGuard(...), Status(200))`)
7
+ * without re-implementing metadata writes by hand.
8
+ *
9
+ * Order matches argument order: the first decorator in the list runs first.
10
+ * If a decorator returns a replacement function, subsequent decorators
11
+ * receive the replacement.
12
+ *
13
+ * Currently method-level only. For class-level composition, stack decorators
14
+ * directly or add a dedicated helper later.
15
+ */
16
+ export function applyDecorators(...decorators) {
17
+ return (value, context) => {
18
+ let current = value;
19
+ for (const decorator of decorators) {
20
+ const result = decorator(current, context);
21
+ if (typeof result === 'function')
22
+ current = result;
23
+ }
24
+ return current;
25
+ };
26
+ }
27
+ //# sourceMappingURL=apply-decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-decorators.js","sourceRoot":"","sources":["../../src/decorators/apply-decorators.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAG,UAA6B;IAEhC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,GAAQ,KAAK,CAAA;QACxB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC1C,IAAI,OAAO,MAAM,KAAK,UAAU;gBAAE,OAAO,GAAG,MAAM,CAAA;QACpD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ModuleOptions, Scope } from '../types.js';
2
+ export interface InjectableOptions {
3
+ scope?: Scope;
4
+ token?: string;
5
+ }
6
+ export declare const Injectable: (options?: InjectableOptions | undefined) => <T extends import("../types.js").Constructor>(target: T, context: ClassDecoratorContext<T>) => T;
7
+ export declare const Controller: (prefix?: string | undefined) => <T extends import("../types.js").Constructor>(target: T, context: ClassDecoratorContext<T>) => T;
8
+ export declare const Module: (options: ModuleOptions) => <T extends import("../types.js").Constructor>(target: T, context: ClassDecoratorContext<T>) => T;
9
+ //# sourceMappingURL=class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/decorators/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAKvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,UAAU,+IAKrB,CAAA;AAEF,eAAO,MAAM,UAAU,mIAErB,CAAA;AAEF,eAAO,MAAM,MAAM,8HAEjB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { INJECTABLE, MODULE, PREFIX, setMeta } from './metadata.js';
2
+ import { createClassDecorator } from './create-decorator.js';
3
+ export const Injectable = createClassDecorator((_target, context, options) => {
4
+ setMeta(context.metadata, INJECTABLE, {
5
+ scope: options?.scope ?? 'singleton',
6
+ token: options?.token,
7
+ });
8
+ });
9
+ export const Controller = createClassDecorator((_target, context, prefix = '') => {
10
+ setMeta(context.metadata, PREFIX, prefix);
11
+ });
12
+ export const Module = createClassDecorator((_target, context, options) => {
13
+ setMeta(context.metadata, MODULE, options);
14
+ });
15
+ //# sourceMappingURL=class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/decorators/class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAO5D,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC1G,OAAO,CAAiB,OAAO,CAAC,QAAS,EAAE,UAAU,EAAE;QACrD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,WAAW;QACpC,KAAK,EAAE,OAAO,EAAE,KAAK;KACtB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;IAClG,OAAO,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjG,OAAO,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { Constructor } from '../types.js';
2
+ export declare function createClassDecorator<TArgs extends any[] = []>(handler: (target: Constructor, context: ClassDecoratorContext, ...args: TArgs) => void): (...args: TArgs) => <T extends Constructor>(target: T, context: ClassDecoratorContext<T>) => T;
3
+ export declare function createMethodDecorator<TArgs extends any[] = []>(handler: (target: Function, context: ClassMethodDecoratorContext, ...args: TArgs) => void): (...args: TArgs) => (target: Function, context: ClassMethodDecoratorContext) => void;
4
+ export declare function createFieldDecorator<TArgs extends any[] = []>(handler: (context: ClassFieldDecoratorContext, ...args: TArgs) => void): (...args: TArgs) => (target: undefined, context: ClassFieldDecoratorContext) => void;
5
+ export declare function createDecorator<TArgs extends any[] = []>(handler: (context: ClassDecoratorContext | ClassMethodDecoratorContext, ...args: TArgs) => void): (...args: TArgs) => (target: any, context: ClassDecoratorContext | ClassMethodDecoratorContext) => any;
6
+ //# sourceMappingURL=create-decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/create-decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,EAC3D,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,GACrF,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAOhG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,EAC5D,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,GACxF,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAMtF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,EAC3D,OAAO,EAAE,CAAC,OAAO,EAAE,0BAA0B,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,GACrE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAMtF;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,EACtD,OAAO,EAAE,CAAC,OAAO,EAAE,qBAAqB,GAAG,2BAA2B,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,GAC9F,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,qBAAqB,GAAG,2BAA2B,KAAK,GAAG,CAOxG"}
@@ -0,0 +1,31 @@
1
+ export function createClassDecorator(handler) {
2
+ return (...args) => {
3
+ return (target, context) => {
4
+ handler(target, context, ...args);
5
+ return target;
6
+ };
7
+ };
8
+ }
9
+ export function createMethodDecorator(handler) {
10
+ return (...args) => {
11
+ return (target, context) => {
12
+ handler(target, context, ...args);
13
+ };
14
+ };
15
+ }
16
+ export function createFieldDecorator(handler) {
17
+ return (...args) => {
18
+ return (_target, context) => {
19
+ handler(context, ...args);
20
+ };
21
+ };
22
+ }
23
+ export function createDecorator(handler) {
24
+ return (...args) => {
25
+ return (target, context) => {
26
+ handler(context, ...args);
27
+ return target;
28
+ };
29
+ };
30
+ }
31
+ //# sourceMappingURL=create-decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-decorator.js","sourceRoot":"","sources":["../../src/decorators/create-decorator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,OAAsF;IAEtF,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,CAAwB,MAAS,EAAE,OAAiC,EAAK,EAAE;YAChF,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;YACjC,OAAO,MAAM,CAAA;QACf,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAyF;IAEzF,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,CAAC,MAAgB,EAAE,OAAoC,EAAQ,EAAE;YACtE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;QACnC,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAsE;IAEtE,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,CAAC,OAAkB,EAAE,OAAmC,EAAQ,EAAE;YACvE,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAA+F;IAE/F,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,CAAC,MAAW,EAAE,OAA4D,EAAO,EAAE;YACxF,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;YACzB,OAAO,MAAM,CAAA;QACf,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const Get: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
2
+ export declare const Post: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
3
+ export declare const Put: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
4
+ export declare const Patch: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
5
+ export declare const Delete: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
6
+ export declare const Head: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
7
+ export declare const Options: (path?: string | undefined) => (target: Function, context: ClassMethodDecoratorContext) => void;
8
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/decorators/http.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG,iGAEd,CAAA;AAEF,eAAO,MAAM,IAAI,iGAEf,CAAA;AAEF,eAAO,MAAM,GAAG,iGAEd,CAAA;AAEF,eAAO,MAAM,KAAK,iGAEhB,CAAA;AAEF,eAAO,MAAM,MAAM,iGAEjB,CAAA;AAEF,eAAO,MAAM,IAAI,iGAEf,CAAA;AAEF,eAAO,MAAM,OAAO,iGAElB,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { ROUTES, pushMeta } from './metadata.js';
2
+ import { createMethodDecorator } from './create-decorator.js';
3
+ export const Get = createMethodDecorator((_target, context, path = '') => {
4
+ pushMeta(context.metadata, ROUTES, { method: 'GET', path, handlerName: String(context.name) });
5
+ });
6
+ export const Post = createMethodDecorator((_target, context, path = '') => {
7
+ pushMeta(context.metadata, ROUTES, { method: 'POST', path, handlerName: String(context.name) });
8
+ });
9
+ export const Put = createMethodDecorator((_target, context, path = '') => {
10
+ pushMeta(context.metadata, ROUTES, { method: 'PUT', path, handlerName: String(context.name) });
11
+ });
12
+ export const Patch = createMethodDecorator((_target, context, path = '') => {
13
+ pushMeta(context.metadata, ROUTES, { method: 'PATCH', path, handlerName: String(context.name) });
14
+ });
15
+ export const Delete = createMethodDecorator((_target, context, path = '') => {
16
+ pushMeta(context.metadata, ROUTES, { method: 'DELETE', path, handlerName: String(context.name) });
17
+ });
18
+ export const Head = createMethodDecorator((_target, context, path = '') => {
19
+ pushMeta(context.metadata, ROUTES, { method: 'HEAD', path, handlerName: String(context.name) });
20
+ });
21
+ export const Options = createMethodDecorator((_target, context, path = '') => {
22
+ pushMeta(context.metadata, ROUTES, { method: 'OPTIONS', path, handlerName: String(context.name) });
23
+ });
24
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/decorators/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACxF,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACzF,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACxF,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IAC1F,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IAC3F,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACzF,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClG,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,qBAAqB,CAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IAC5F,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ export { Injectable, Controller, Module } from './class.js';
2
+ export type { InjectableOptions } from './class.js';
3
+ export { Get, Post, Put, Patch, Delete, Head, Options } from './http.js';
4
+ export { Use, UseGuard, SkipGuard, ValidateBody, ValidateQuery, ValidateParams, Status } from './middleware.js';
5
+ export { INJECTABLE, MODULE, PREFIX, RESOLVED_PREFIX, ROUTES, CLASS_MW, METHOD_MW, STATUSES, CLASS_GUARDS, METHOD_GUARDS, SKIP_GUARDS, GUARD_FACTORY, BODY_SCHEMAS, QUERY_SCHEMAS, PARAMS_SCHEMAS, getMeta, setMeta, pushMeta, addToMapMeta, setInMapMeta, } from './metadata.js';
6
+ export type { InjectableMeta } from './metadata.js';
7
+ export { createClassDecorator, createMethodDecorator, createFieldDecorator, createDecorator, } from './create-decorator.js';
8
+ export { applyDecorators } from './apply-decorators.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC/G,OAAO,EACL,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,7 @@
1
+ export { Injectable, Controller, Module } from './class.js';
2
+ export { Get, Post, Put, Patch, Delete, Head, Options } from './http.js';
3
+ export { Use, UseGuard, SkipGuard, ValidateBody, ValidateQuery, ValidateParams, Status } from './middleware.js';
4
+ export { INJECTABLE, MODULE, PREFIX, RESOLVED_PREFIX, ROUTES, CLASS_MW, METHOD_MW, STATUSES, CLASS_GUARDS, METHOD_GUARDS, SKIP_GUARDS, GUARD_FACTORY, BODY_SCHEMAS, QUERY_SCHEMAS, PARAMS_SCHEMAS, getMeta, setMeta, pushMeta, addToMapMeta, setInMapMeta, } from './metadata.js';
5
+ export { createClassDecorator, createMethodDecorator, createFieldDecorator, createDecorator, } from './create-decorator.js';
6
+ export { applyDecorators } from './apply-decorators.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE3D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC/G,OAAO,EACL,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA"}