exisjs 0.7.8 → 0.7.10

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 (147) hide show
  1. package/dist/cli/commands/dev.d.ts.map +1 -1
  2. package/dist/cli/commands/dev.js +14 -4
  3. package/dist/cli/commands/dev.js.map +1 -1
  4. package/dist/cli/resolve-aliases.js +1 -1
  5. package/dist/cli/resolve-aliases.js.map +1 -1
  6. package/dist/config/config.js +1 -1
  7. package/dist/config/config.js.map +1 -1
  8. package/dist/decorators/caching.d.ts +53 -0
  9. package/dist/decorators/caching.d.ts.map +1 -0
  10. package/dist/decorators/caching.js +154 -0
  11. package/dist/decorators/caching.js.map +1 -0
  12. package/dist/decorators/constants.d.ts +6 -0
  13. package/dist/decorators/constants.d.ts.map +1 -1
  14. package/dist/decorators/constants.js +7 -1
  15. package/dist/decorators/constants.js.map +1 -1
  16. package/dist/decorators/core.d.ts +14 -0
  17. package/dist/decorators/core.d.ts.map +1 -1
  18. package/dist/decorators/core.js +156 -41
  19. package/dist/decorators/core.js.map +1 -1
  20. package/dist/decorators/filters.d.ts +29 -0
  21. package/dist/decorators/filters.d.ts.map +1 -0
  22. package/dist/decorators/filters.js +30 -0
  23. package/dist/decorators/filters.js.map +1 -0
  24. package/dist/decorators/index.d.ts +7 -0
  25. package/dist/decorators/index.d.ts.map +1 -1
  26. package/dist/decorators/index.js +7 -0
  27. package/dist/decorators/index.js.map +1 -1
  28. package/dist/decorators/lifecycle.d.ts +66 -0
  29. package/dist/decorators/lifecycle.d.ts.map +1 -0
  30. package/dist/decorators/lifecycle.js +3 -0
  31. package/dist/decorators/lifecycle.js.map +1 -0
  32. package/dist/decorators/middleware.d.ts +24 -3
  33. package/dist/decorators/middleware.d.ts.map +1 -1
  34. package/dist/decorators/middleware.js +24 -3
  35. package/dist/decorators/middleware.js.map +1 -1
  36. package/dist/decorators/params.d.ts +3 -7
  37. package/dist/decorators/params.d.ts.map +1 -1
  38. package/dist/decorators/params.js +1 -7
  39. package/dist/decorators/params.js.map +1 -1
  40. package/dist/decorators/pipes.d.ts +91 -0
  41. package/dist/decorators/pipes.d.ts.map +1 -0
  42. package/dist/decorators/pipes.js +283 -0
  43. package/dist/decorators/pipes.js.map +1 -0
  44. package/dist/decorators/profile.d.ts +32 -0
  45. package/dist/decorators/profile.d.ts.map +1 -0
  46. package/dist/decorators/profile.js +61 -0
  47. package/dist/decorators/profile.js.map +1 -0
  48. package/dist/decorators/response.d.ts +0 -1
  49. package/dist/decorators/response.d.ts.map +1 -1
  50. package/dist/decorators/response.js +1 -18
  51. package/dist/decorators/response.js.map +1 -1
  52. package/dist/decorators/routing.d.ts +22 -12
  53. package/dist/decorators/routing.d.ts.map +1 -1
  54. package/dist/decorators/routing.js +49 -3
  55. package/dist/decorators/routing.js.map +1 -1
  56. package/dist/decorators/security.d.ts +42 -0
  57. package/dist/decorators/security.d.ts.map +1 -0
  58. package/dist/decorators/security.js +110 -0
  59. package/dist/decorators/security.js.map +1 -0
  60. package/dist/decorators/transaction.d.ts +29 -0
  61. package/dist/decorators/transaction.d.ts.map +1 -0
  62. package/dist/decorators/transaction.js +91 -0
  63. package/dist/decorators/transaction.js.map +1 -0
  64. package/dist/di/container.d.ts +8 -3
  65. package/dist/di/container.d.ts.map +1 -1
  66. package/dist/di/container.js +214 -66
  67. package/dist/di/container.js.map +1 -1
  68. package/dist/di/decorators.d.ts +23 -5
  69. package/dist/di/decorators.d.ts.map +1 -1
  70. package/dist/di/decorators.js +83 -20
  71. package/dist/di/decorators.js.map +1 -1
  72. package/dist/di/forward-ref.d.ts +23 -0
  73. package/dist/di/forward-ref.d.ts.map +1 -0
  74. package/dist/di/forward-ref.js +30 -0
  75. package/dist/di/forward-ref.js.map +1 -0
  76. package/dist/di/index.d.ts +2 -1
  77. package/dist/di/index.d.ts.map +1 -1
  78. package/dist/di/index.js +8 -1
  79. package/dist/di/index.js.map +1 -1
  80. package/dist/docs/content/controllers.mdx +230 -0
  81. package/dist/docs/content/decorators.mdx +89 -4
  82. package/dist/docs/content/errors.mdx +44 -21
  83. package/dist/docs/content/modules.mdx +23 -4
  84. package/dist/docs/content/providers.mdx +90 -6
  85. package/dist/docs/content/requests.mdx +9 -3
  86. package/dist/docs/content/responses.mdx +19 -5
  87. package/dist/docs/reference/config.mdx +3 -2
  88. package/dist/docs/reference/decorators.mdx +42 -8
  89. package/dist/docs/reference/di.mdx +45 -12
  90. package/dist/docs/reference/router.mdx +75 -0
  91. package/dist/docs/reference/validator.mdx +2 -2
  92. package/dist/error/errors.d.ts +24 -12
  93. package/dist/error/errors.d.ts.map +1 -1
  94. package/dist/error/errors.js +48 -12
  95. package/dist/error/errors.js.map +1 -1
  96. package/dist/router/controller-registrar.d.ts.map +1 -1
  97. package/dist/router/controller-registrar.js +217 -94
  98. package/dist/router/controller-registrar.js.map +1 -1
  99. package/dist/router/index.d.ts.map +1 -1
  100. package/dist/router/index.js.map +1 -1
  101. package/dist/router/route-builder.d.ts +160 -29
  102. package/dist/router/route-builder.d.ts.map +1 -1
  103. package/dist/router/route-builder.js +105 -31
  104. package/dist/router/route-builder.js.map +1 -1
  105. package/dist/router/route-scanner.d.ts +3 -2
  106. package/dist/router/route-scanner.d.ts.map +1 -1
  107. package/dist/router/route-scanner.js.map +1 -1
  108. package/dist/router/router.d.ts.map +1 -1
  109. package/dist/router/router.js +44 -0
  110. package/dist/router/router.js.map +1 -1
  111. package/dist/router/scanner/functional-compiler.d.ts +1 -1
  112. package/dist/router/scanner/functional-compiler.d.ts.map +1 -1
  113. package/dist/router/scanner/functional-compiler.js +403 -64
  114. package/dist/router/scanner/functional-compiler.js.map +1 -1
  115. package/dist/router/types.d.ts +4 -2
  116. package/dist/router/types.d.ts.map +1 -1
  117. package/dist/server/app.d.ts +2 -0
  118. package/dist/server/app.d.ts.map +1 -1
  119. package/dist/server/app.js +40 -0
  120. package/dist/server/app.js.map +1 -1
  121. package/dist/server/helpers/etag.d.ts +1 -0
  122. package/dist/server/helpers/etag.d.ts.map +1 -1
  123. package/dist/server/helpers/etag.js +121 -10
  124. package/dist/server/helpers/etag.js.map +1 -1
  125. package/dist/server/helpers/ip.d.ts.map +1 -1
  126. package/dist/server/helpers/ip.js +75 -17
  127. package/dist/server/helpers/ip.js.map +1 -1
  128. package/dist/server/response.d.ts.map +1 -1
  129. package/dist/server/response.js +24 -9
  130. package/dist/server/response.js.map +1 -1
  131. package/dist/swagger/generator.d.ts.map +1 -1
  132. package/dist/swagger/generator.js +66 -22
  133. package/dist/swagger/generator.js.map +1 -1
  134. package/dist/testing/client.d.ts +16 -12
  135. package/dist/testing/client.d.ts.map +1 -1
  136. package/dist/testing/client.js +51 -15
  137. package/dist/testing/client.js.map +1 -1
  138. package/dist/testing/index.d.ts.map +1 -1
  139. package/dist/testing/index.js +10 -0
  140. package/dist/testing/index.js.map +1 -1
  141. package/dist/utils/logger.d.ts.map +1 -1
  142. package/dist/utils/logger.js +2 -0
  143. package/dist/utils/logger.js.map +1 -1
  144. package/dist/validator/engine.d.ts.map +1 -1
  145. package/dist/validator/engine.js +45 -0
  146. package/dist/validator/engine.js.map +1 -1
  147. package/package.json +1 -1
@@ -1,5 +1,15 @@
1
- import type { HttpMethod, RouteSchema } from '../types';
2
- export declare function createMethodDecorator(method: HttpMethod): (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
1
+ import type { HttpMethod, RouteSchema, RouteValidator } from '../types';
2
+ export type MethodSchemaInput<TBody = any, TQuery = any, TParams = any, THeaders = any> = RouteSchema<TBody, TQuery, TParams, THeaders> | RouteValidator<any> | {
3
+ parse: (val: any) => any;
4
+ } | {
5
+ _parse?: any;
6
+ } | {
7
+ _def?: any;
8
+ } | {
9
+ transform: (val: any, meta?: any) => any;
10
+ } | Record<string, any>;
11
+ export declare function normalizeRouteSchema(method: HttpMethod, path: string, rawSchema?: MethodSchemaInput): RouteSchema<any, any, any, any> | undefined;
12
+ export declare function createMethodDecorator(method: HttpMethod): (path?: string, schema?: MethodSchemaInput) => any;
3
13
  /**
4
14
  * Marks a controller method as an HTTP GET route handler.
5
15
  *
@@ -17,7 +27,7 @@ export declare function createMethodDecorator(method: HttpMethod): (path?: strin
17
27
  * }
18
28
  * ```
19
29
  */
20
- export declare const Get: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
30
+ export declare const Get: (path?: string, schema?: MethodSchemaInput) => any;
21
31
  /**
22
32
  * Marks a controller method as an HTTP POST route handler.
23
33
  *
@@ -35,7 +45,7 @@ export declare const Get: (path?: string, schema?: RouteSchema<any, any, any, an
35
45
  * }
36
46
  * ```
37
47
  */
38
- export declare const Post: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
48
+ export declare const Post: (path?: string, schema?: MethodSchemaInput) => any;
39
49
  /**
40
50
  * Marks a controller method as an HTTP PUT route handler.
41
51
  *
@@ -53,14 +63,14 @@ export declare const Post: (path?: string, schema?: RouteSchema<any, any, any, a
53
63
  * }
54
64
  * ```
55
65
  */
56
- export declare const Put: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
66
+ export declare const Put: (path?: string, schema?: MethodSchemaInput) => any;
57
67
  /**
58
68
  * Marks a controller method as an HTTP PATCH route handler.
59
69
  *
60
70
  * @param path Optional route path relative to controller prefix
61
71
  * @param schema Optional validation schema
62
72
  */
63
- export declare const Patch: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
73
+ export declare const Patch: (path?: string, schema?: MethodSchemaInput) => any;
64
74
  /**
65
75
  * Marks a controller method as an HTTP DELETE route handler.
66
76
  *
@@ -78,25 +88,25 @@ export declare const Patch: (path?: string, schema?: RouteSchema<any, any, any,
78
88
  * }
79
89
  * ```
80
90
  */
81
- export declare const Delete: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
91
+ export declare const Delete: (path?: string, schema?: MethodSchemaInput) => any;
82
92
  /**
83
93
  * Marks a controller method as an HTTP OPTIONS route handler.
84
94
  */
85
- export declare const Options: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
95
+ export declare const Options: (path?: string, schema?: MethodSchemaInput) => any;
86
96
  /**
87
97
  * Marks a controller method as an HTTP HEAD route handler.
88
98
  */
89
- export declare const Head: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
99
+ export declare const Head: (path?: string, schema?: MethodSchemaInput) => any;
90
100
  /**
91
101
  * Marks a controller method to handle any HTTP method (GET, POST, PUT, DELETE, PATCH, etc.).
92
102
  */
93
- export declare const All: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
103
+ export declare const All: (path?: string, schema?: MethodSchemaInput) => any;
94
104
  /**
95
105
  * Marks a controller method as an HTTP CONNECT route handler.
96
106
  */
97
- export declare const Connect: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
107
+ export declare const Connect: (path?: string, schema?: MethodSchemaInput) => any;
98
108
  /**
99
109
  * Marks a controller method as an HTTP TRACE route handler.
100
110
  */
101
- export declare const Trace: (path?: string, schema?: RouteSchema<any, any, any, any>) => any;
111
+ export declare const Trace: (path?: string, schema?: MethodSchemaInput) => any;
102
112
  //# sourceMappingURL=routing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/decorators/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAKvD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,IACrC,aAAS,EAAE,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAAG,CAoC3E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,GAAG,2BAvDuB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAuD1B,CAAA;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,IAAI,2BA1EsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GA0ExB,CAAA;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,GAAG,2BA7FuB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GA6F1B,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,KAAK,2BArGqB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAqGtB,CAAA;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM,2BAxHoB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAwHpB,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,OAAO,2BA7HmB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GA6HlB,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,IAAI,2BAlIsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAkIxB,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,GAAG,2BAvIuB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAuI1B,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,OAAO,2BA5ImB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GA4IlB,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,KAAK,2BAjJqB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,GAiJtB,CAAA"}
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/decorators/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAKvE,MAAM,MAAM,iBAAiB,CAC3B,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,OAAO,GAAG,GAAG,EACb,QAAQ,GAAG,GAAG,IAEZ,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,GAC7C,cAAc,CAAC,GAAG,CAAC,GACnB;IAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAA;CAAE,GAC5B;IAAE,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,GAChB;IAAE,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,GACd;IAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAA;CAAE,GAC5C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEvB,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,iBAAiB,GAC5B,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAiD7C;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,IACrC,aAAS,EAAE,SAAS,iBAAiB,KAAG,GAAG,CAsC7D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,GAAG,2BAzDuB,iBAAiB,KAAG,GAyDZ,CAAA;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,IAAI,2BA5EsB,iBAAiB,KAAG,GA4EV,CAAA;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,GAAG,2BA/FuB,iBAAiB,KAAG,GA+FZ,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,KAAK,2BAvGqB,iBAAiB,KAAG,GAuGR,CAAA;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM,2BA1HoB,iBAAiB,KAAG,GA0HN,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,OAAO,2BA/HmB,iBAAiB,KAAG,GA+HJ,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,IAAI,2BApIsB,iBAAiB,KAAG,GAoIV,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,GAAG,2BAzIuB,iBAAiB,KAAG,GAyIZ,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,OAAO,2BA9ImB,iBAAiB,KAAG,GA8IJ,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,KAAK,2BAnJqB,iBAAiB,KAAG,GAmJR,CAAA"}
@@ -1,13 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Trace = exports.Connect = exports.All = exports.Head = exports.Options = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = void 0;
4
+ exports.normalizeRouteSchema = normalizeRouteSchema;
4
5
  exports.createMethodDecorator = createMethodDecorator;
5
6
  const constants_1 = require("./constants");
6
7
  const metadata_1 = require("./core/metadata");
7
8
  const logger_1 = require("../logger");
9
+ function normalizeRouteSchema(method, path, rawSchema) {
10
+ if (!rawSchema)
11
+ return undefined;
12
+ // Check if it's already an explicit RouteSchema wrapper object (and not a direct TexEngine / Zod schema)
13
+ if (typeof rawSchema === 'object' &&
14
+ rawSchema !== null &&
15
+ !('parse' in rawSchema) &&
16
+ !('_parse' in rawSchema) &&
17
+ !('__isTex' in rawSchema) &&
18
+ ('body' in rawSchema ||
19
+ 'query' in rawSchema ||
20
+ 'params' in rawSchema ||
21
+ 'headers' in rawSchema ||
22
+ 'response' in rawSchema ||
23
+ 'responses' in rawSchema ||
24
+ 'timeout' in rawSchema ||
25
+ 'timeoutMs' in rawSchema ||
26
+ 'upload' in rawSchema ||
27
+ 'cors' in rawSchema ||
28
+ 'filters' in rawSchema ||
29
+ 'summary' in rawSchema ||
30
+ 'description' in rawSchema ||
31
+ 'tags' in rawSchema)) {
32
+ return rawSchema;
33
+ }
34
+ // If rawSchema is a direct validator (TexEngine, Zod, object/function with parse/transform):
35
+ if ((typeof rawSchema === 'object' && rawSchema !== null) ||
36
+ typeof rawSchema === 'function') {
37
+ if (['GET', 'DELETE', 'HEAD', 'OPTIONS'].includes(method)) {
38
+ if (path.includes(':') || path.includes('*')) {
39
+ return { params: rawSchema };
40
+ }
41
+ return { query: rawSchema };
42
+ }
43
+ if (['POST', 'PUT', 'PATCH'].includes(method)) {
44
+ return { body: rawSchema };
45
+ }
46
+ if (path.includes(':') || path.includes('*')) {
47
+ return { params: rawSchema };
48
+ }
49
+ return { query: rawSchema };
50
+ }
51
+ return rawSchema;
52
+ }
8
53
  function createMethodDecorator(method) {
9
54
  return function (path = '', schema) {
10
- if (method === 'GET' && schema?.body) {
55
+ const normalizedSchema = normalizeRouteSchema(method, path, schema);
56
+ if (method === 'GET' && normalizedSchema?.body) {
11
57
  logger_1.logger.warn(`GET route '${path}' defines a body schema, but GET requests cannot have bodies.`);
12
58
  }
13
59
  return function (target, contextOrPropertyKey, descriptor) {
@@ -18,7 +64,7 @@ function createMethodDecorator(method) {
18
64
  metadata_1.MetadataEngine.set(target, constants_1.ROUTE_META, {
19
65
  method,
20
66
  path,
21
- schema,
67
+ schema: normalizedSchema,
22
68
  });
23
69
  }
24
70
  else {
@@ -28,7 +74,7 @@ function createMethodDecorator(method) {
28
74
  metadata_1.MetadataEngine.push(proto, constants_1.ROUTE_REGISTRY, {
29
75
  method,
30
76
  path,
31
- schema,
77
+ schema: normalizedSchema,
32
78
  handlerName: name,
33
79
  });
34
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/decorators/routing.ts"],"names":[],"mappings":";;;AAKA,sDAqCC;AAzCD,2CAAwD;AACxD,8CAAgD;AAChD,sCAAkC;AAElC,SAAgB,qBAAqB,CAAC,MAAkB;IACtD,OAAO,UAAU,IAAI,GAAG,EAAE,EAAE,MAAwC;QAClE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YACrC,eAAM,CAAC,IAAI,CACT,cAAc,IAAI,+DAA+D,CAClF,CAAA;QACH,CAAC;QAED,OAAO,UACL,MAAW,EACX,oBAA4C,EAC5C,UAAqC;YAErC,IACE,OAAO,oBAAoB,KAAK,QAAQ;gBACxC,oBAAoB,KAAK,IAAI;gBAC7B,MAAM,IAAI,oBAAoB,EAC9B,CAAC;gBACD,mCAAmC;gBACnC,yBAAc,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAU,EAAE;oBACrC,MAAM;oBACN,IAAI;oBACJ,MAAM;iBACP,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,yCAAyC;gBACzC,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;gBACtE,MAAM,IAAI,GAAG,oBAAoB,IAAI,UAAU,EAAE,IAAI,CAAA;gBACrD,yBAAc,CAAC,IAAI,CAAC,KAAK,EAAE,0BAAc,EAAE;oBACzC,MAAM;oBACN,IAAI;oBACJ,MAAM;oBACN,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;AAE/C;;;;;GAKG;AACU,QAAA,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;AAErD;;GAEG;AACU,QAAA,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;AAEvD;;GAEG;AACU,QAAA,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;AAEjD;;GAEG;AACU,QAAA,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;AAE/C;;GAEG;AACU,QAAA,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;AAEvD;;GAEG;AACU,QAAA,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA"}
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/decorators/routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Declares required permission keys for a Controller class or route method.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * @Controller('/roles')
7
+ * export class RolesController {
8
+ * @Post('/')
9
+ * @Permissions('role:create', 'role:manage')
10
+ * async createRole() {}
11
+ * }
12
+ * ```
13
+ */
14
+ export declare function Permissions(...permissions: string[]): any;
15
+ /**
16
+ * Declares required roles for a Controller class or route method.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * @Controller('/admin')
21
+ * @Roles('admin', 'superadmin')
22
+ * export class AdminController {}
23
+ * ```
24
+ */
25
+ export declare function Roles(...roles: string[]): any;
26
+ /**
27
+ * Marks a Controller class or route method as public, bypassing global authentication guards.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * @Controller('/auth')
32
+ * export class AuthController {
33
+ * @Post('/login')
34
+ * @Public()
35
+ * async login() {}
36
+ * }
37
+ * ```
38
+ */
39
+ export declare function Public(): any;
40
+ export declare const IsPublic: typeof Public;
41
+ export declare const AllowAnonymous: typeof Public;
42
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/decorators/security.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,CA2BzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CA2B7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,IAAI,GAAG,CA2B5B;AAED,eAAO,MAAM,QAAQ,eAAS,CAAA;AAC9B,eAAO,MAAM,cAAc,eAAS,CAAA"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AllowAnonymous = exports.IsPublic = void 0;
4
+ exports.Permissions = Permissions;
5
+ exports.Roles = Roles;
6
+ exports.Public = Public;
7
+ const constants_1 = require("./constants");
8
+ const metadata_1 = require("./core/metadata");
9
+ /**
10
+ * Declares required permission keys for a Controller class or route method.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * @Controller('/roles')
15
+ * export class RolesController {
16
+ * @Post('/')
17
+ * @Permissions('role:create', 'role:manage')
18
+ * async createRole() {}
19
+ * }
20
+ * ```
21
+ */
22
+ function Permissions(...permissions) {
23
+ return function (target, contextOrPropertyKey, descriptor) {
24
+ const isStandard = typeof contextOrPropertyKey === 'object' && contextOrPropertyKey !== null;
25
+ const kind = isStandard ? contextOrPropertyKey.kind : undefined;
26
+ if (kind === 'class' ||
27
+ (!isStandard && typeof target === 'function' && !contextOrPropertyKey)) {
28
+ const proto = target.prototype || target;
29
+ metadata_1.MetadataEngine.set(proto, constants_1.PERMISSIONS_METADATA, permissions);
30
+ }
31
+ else {
32
+ const fn = isStandard
33
+ ? target
34
+ : descriptor
35
+ ? descriptor.value
36
+ : target[contextOrPropertyKey];
37
+ metadata_1.MetadataEngine.set(fn, constants_1.PERMISSIONS_METADATA, permissions);
38
+ const routeMeta = metadata_1.MetadataEngine.init(fn, constants_1.ROUTE_METADATA_PROP, {});
39
+ routeMeta.permissions = [...(routeMeta.permissions || []), ...permissions];
40
+ }
41
+ };
42
+ }
43
+ /**
44
+ * Declares required roles for a Controller class or route method.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * @Controller('/admin')
49
+ * @Roles('admin', 'superadmin')
50
+ * export class AdminController {}
51
+ * ```
52
+ */
53
+ function Roles(...roles) {
54
+ return function (target, contextOrPropertyKey, descriptor) {
55
+ const isStandard = typeof contextOrPropertyKey === 'object' && contextOrPropertyKey !== null;
56
+ const kind = isStandard ? contextOrPropertyKey.kind : undefined;
57
+ if (kind === 'class' ||
58
+ (!isStandard && typeof target === 'function' && !contextOrPropertyKey)) {
59
+ const proto = target.prototype || target;
60
+ metadata_1.MetadataEngine.set(proto, constants_1.ROLES_METADATA, roles);
61
+ }
62
+ else {
63
+ const fn = isStandard
64
+ ? target
65
+ : descriptor
66
+ ? descriptor.value
67
+ : target[contextOrPropertyKey];
68
+ metadata_1.MetadataEngine.set(fn, constants_1.ROLES_METADATA, roles);
69
+ const routeMeta = metadata_1.MetadataEngine.init(fn, constants_1.ROUTE_METADATA_PROP, {});
70
+ routeMeta.roles = [...(routeMeta.roles || []), ...roles];
71
+ }
72
+ };
73
+ }
74
+ /**
75
+ * Marks a Controller class or route method as public, bypassing global authentication guards.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * @Controller('/auth')
80
+ * export class AuthController {
81
+ * @Post('/login')
82
+ * @Public()
83
+ * async login() {}
84
+ * }
85
+ * ```
86
+ */
87
+ function Public() {
88
+ return function (target, contextOrPropertyKey, descriptor) {
89
+ const isStandard = typeof contextOrPropertyKey === 'object' && contextOrPropertyKey !== null;
90
+ const kind = isStandard ? contextOrPropertyKey.kind : undefined;
91
+ if (kind === 'class' ||
92
+ (!isStandard && typeof target === 'function' && !contextOrPropertyKey)) {
93
+ const proto = target.prototype || target;
94
+ metadata_1.MetadataEngine.set(proto, constants_1.IS_PUBLIC_METADATA, true);
95
+ }
96
+ else {
97
+ const fn = isStandard
98
+ ? target
99
+ : descriptor
100
+ ? descriptor.value
101
+ : target[contextOrPropertyKey];
102
+ metadata_1.MetadataEngine.set(fn, constants_1.IS_PUBLIC_METADATA, true);
103
+ const routeMeta = metadata_1.MetadataEngine.init(fn, constants_1.ROUTE_METADATA_PROP, {});
104
+ routeMeta.isPublic = true;
105
+ }
106
+ };
107
+ }
108
+ exports.IsPublic = Public;
109
+ exports.AllowAnonymous = Public;
110
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/decorators/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface TransactionalOptions {
2
+ /** Optional named database connection */
3
+ connection?: string;
4
+ /** Whether the transaction is read-only */
5
+ readOnly?: boolean;
6
+ }
7
+ /**
8
+ * Automatically wraps a service method inside a database transaction.
9
+ * Commits automatically on success, and rolls back if an unhandled exception is thrown.
10
+ *
11
+ * Compatible with ExisJS built-in Database client, Prisma, Drizzle, TypeORM, Knex, and raw SQL pools.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * @Injectable()
16
+ * export class OrderService {
17
+ * constructor(private db: DatabaseService) {}
18
+ *
19
+ * @Transactional()
20
+ * async placeOrder(userId: string, items: CartItem[]) {
21
+ * const order = await this.db.orders.create({ userId })
22
+ * await this.db.inventory.decrement(items)
23
+ * return order
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function Transactional(_options?: TransactionalOptions): MethodDecorator;
29
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/decorators/transaction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,oBAAyB,GAClC,eAAe,CAmEjB"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Transactional = Transactional;
4
+ /**
5
+ * Automatically wraps a service method inside a database transaction.
6
+ * Commits automatically on success, and rolls back if an unhandled exception is thrown.
7
+ *
8
+ * Compatible with ExisJS built-in Database client, Prisma, Drizzle, TypeORM, Knex, and raw SQL pools.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * @Injectable()
13
+ * export class OrderService {
14
+ * constructor(private db: DatabaseService) {}
15
+ *
16
+ * @Transactional()
17
+ * async placeOrder(userId: string, items: CartItem[]) {
18
+ * const order = await this.db.orders.create({ userId })
19
+ * await this.db.inventory.decrement(items)
20
+ * return order
21
+ * }
22
+ * }
23
+ * ```
24
+ */
25
+ function Transactional(_options = {}) {
26
+ return function (_target, _propertyKey, descriptor) {
27
+ const originalMethod = descriptor.value;
28
+ descriptor.value = async function (...args) {
29
+ const self = this;
30
+ const db = self.db ||
31
+ self.database ||
32
+ self.prisma ||
33
+ self.dataSource ||
34
+ self.connection ||
35
+ globalThis.__EXIS_DB__;
36
+ if (db) {
37
+ // 1. Functional transaction wrapper: db.transaction((tx) => ...)
38
+ if (typeof db.transaction === 'function') {
39
+ return db.transaction(async (tx) => {
40
+ const originalDb = self.db;
41
+ try {
42
+ self.db = tx;
43
+ return await originalMethod.apply(self, args);
44
+ }
45
+ finally {
46
+ self.db = originalDb;
47
+ }
48
+ });
49
+ }
50
+ // 2. Prisma-style $transaction: db.$transaction(async (tx) => ...)
51
+ if (typeof db.$transaction === 'function') {
52
+ return db.$transaction(async (tx) => {
53
+ const originalPrisma = self.prisma || self.db;
54
+ try {
55
+ if (self.prisma)
56
+ self.prisma = tx;
57
+ if (self.db)
58
+ self.db = tx;
59
+ return await originalMethod.apply(self, args);
60
+ }
61
+ finally {
62
+ if (self.prisma)
63
+ self.prisma = originalPrisma;
64
+ if (self.db)
65
+ self.db = originalPrisma;
66
+ }
67
+ });
68
+ }
69
+ // 3. Imperative beginTransaction / commit / rollback
70
+ if (typeof db.beginTransaction === 'function') {
71
+ await db.beginTransaction();
72
+ try {
73
+ const result = await originalMethod.apply(self, args);
74
+ if (typeof db.commit === 'function')
75
+ await db.commit();
76
+ return result;
77
+ }
78
+ catch (error) {
79
+ if (typeof db.rollback === 'function')
80
+ await db.rollback();
81
+ throw error;
82
+ }
83
+ }
84
+ }
85
+ // Default pass-through if no transaction provider is attached
86
+ return originalMethod.apply(self, args);
87
+ };
88
+ return descriptor;
89
+ };
90
+ }
91
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/decorators/transaction.ts"],"names":[],"mappings":";;AA4BA,sCAqEC;AA1FD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,aAAa,CAC3B,WAAiC,EAAE;IAEnC,OAAO,UACL,OAAY,EACZ,YAA6B,EAC7B,UAA8B;QAE9B,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAA;QAEvC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAW;YAC/C,MAAM,IAAI,GAAG,IAAW,CAAA;YACxB,MAAM,EAAE,GACN,IAAI,CAAC,EAAE;gBACP,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,UAAU;gBACd,UAAkB,CAAC,WAAW,CAAA;YAEjC,IAAI,EAAE,EAAE,CAAC;gBACP,iEAAiE;gBACjE,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;oBACzC,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAO,EAAE,EAAE;wBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAA;wBAC1B,IAAI,CAAC;4BACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;4BACZ,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;wBAC/C,CAAC;gCAAS,CAAC;4BACT,IAAI,CAAC,EAAE,GAAG,UAAU,CAAA;wBACtB,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAED,mEAAmE;gBACnE,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;oBAC1C,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAO,EAAE,EAAE;wBACvC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAA;wBAC7C,IAAI,CAAC;4BACH,IAAI,IAAI,CAAC,MAAM;gCAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;4BACjC,IAAI,IAAI,CAAC,EAAE;gCAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;4BACzB,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;wBAC/C,CAAC;gCAAS,CAAC;4BACT,IAAI,IAAI,CAAC,MAAM;gCAAE,IAAI,CAAC,MAAM,GAAG,cAAc,CAAA;4BAC7C,IAAI,IAAI,CAAC,EAAE;gCAAE,IAAI,CAAC,EAAE,GAAG,cAAc,CAAA;wBACvC,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAED,qDAAqD;gBACrD,IAAI,OAAO,EAAE,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;oBAC9C,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAA;oBAC3B,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;wBACrD,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,UAAU;4BAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAA;wBACtD,OAAO,MAAM,CAAA;oBACf,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,OAAO,EAAE,CAAC,QAAQ,KAAK,UAAU;4BAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAA;wBAC1D,MAAM,KAAK,CAAA;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACzC,CAAC,CAAA;QAED,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;AACH,CAAC"}
@@ -1,4 +1,5 @@
1
- export type ProviderToken<T = any> = string | symbol | (new (...args: any[]) => T);
1
+ import { type ForwardReference } from './forward-ref';
2
+ export type ProviderToken<T = any> = string | symbol | (new (...args: any[]) => T) | ForwardReference<T>;
2
3
  export interface BaseProvider {
3
4
  scope?: 'singleton' | 'request' | 'transient';
4
5
  }
@@ -13,14 +14,18 @@ export interface ClassProvider<T> extends BaseProvider {
13
14
  }
14
15
  export type ProviderDefinition<T> = ValueProvider<T> | FactoryProvider<T> | ClassProvider<T> | T;
15
16
  export declare const INJECT_METADATA: unique symbol;
17
+ export declare const PROPERTY_INJECT_METADATA: unique symbol;
16
18
  export declare const OPTIONAL_METADATA: unique symbol;
17
19
  export declare const SCOPE_METADATA: unique symbol;
18
20
  export declare class Container {
19
21
  private providers;
20
22
  private singletonCache;
23
+ private inFlight;
21
24
  provide<T>(token: ProviderToken<T>, provider: ProviderDefinition<T>): void;
22
25
  clearCache(): void;
23
- instantiateClass<T>(TargetClass: new (...args: any[]) => T, requestCache?: Map<ProviderToken, any>): T;
24
- resolve<T>(token: ProviderToken<T>, requestCache?: Map<ProviderToken, any>): T;
26
+ instantiateClass<T>(TargetClass: new (...args: any[]) => T, requestCache?: Map<any, any>): T;
27
+ resolve<T>(token: ProviderToken<T>, requestCache?: Map<any, any>): T;
28
+ initLifecycle(): Promise<void>;
29
+ destroyLifecycle(signal?: string): Promise<void>;
25
30
  }
26
31
  //# sourceMappingURL=container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAC/B,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAE/C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,CAAC,CAAA;CACZ;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACtD,UAAU,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC9B,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE9D,eAAO,MAAM,eAAe,eAAqC,CAAA;AACjE,eAAO,MAAM,iBAAiB,eAAuC,CAAA;AACrE,eAAO,MAAM,cAAc,eAA6B,CAAA;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,cAAc,CAAgC;IAEtD,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1E,UAAU,IAAI,IAAI;IAIlB,gBAAgB,CAAC,CAAC,EAChB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACtC,YAAY,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GACrC,CAAC;IAmDJ,OAAO,CAAC,CAAC,EACP,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,YAAY,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GACrC,CAAC;CAkGL"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAC/B,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAErE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,CAAC,CAAA;CACZ;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACtD,UAAU,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC9B,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE9D,eAAO,MAAM,eAAe,eAAqC,CAAA;AACjE,eAAO,MAAM,wBAAwB,eAEpC,CAAA;AACD,eAAO,MAAM,iBAAiB,eAAuC,CAAA;AACrE,eAAO,MAAM,cAAc,eAA6B,CAAA;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAM1E,UAAU,IAAI,IAAI;IAKlB,gBAAgB,CAAC,CAAC,EAChB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACtC,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAC3B,CAAC;IAoJJ,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IA0IvD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9D"}