@athosjs/pro 0.1.4-alpha

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 (94) hide show
  1. package/README.md +518 -0
  2. package/bootstrap.cjs +107 -0
  3. package/bootstrap.cjs.map +1 -0
  4. package/bootstrap.d.ts +8 -0
  5. package/bootstrap.d.ts.map +1 -0
  6. package/bootstrap.js +103 -0
  7. package/bootstrap.js.map +1 -0
  8. package/core/athos-application.cjs +362 -0
  9. package/core/athos-application.cjs.map +1 -0
  10. package/core/athos-application.d.ts +17 -0
  11. package/core/athos-application.d.ts.map +1 -0
  12. package/core/athos-application.js +357 -0
  13. package/core/athos-application.js.map +1 -0
  14. package/core/discovery.cjs +47 -0
  15. package/core/discovery.cjs.map +1 -0
  16. package/core/discovery.d.ts +6 -0
  17. package/core/discovery.d.ts.map +1 -0
  18. package/core/discovery.js +45 -0
  19. package/core/discovery.js.map +1 -0
  20. package/core/i18n.cjs +12 -0
  21. package/core/i18n.cjs.map +1 -0
  22. package/core/i18n.d.ts +4 -0
  23. package/core/i18n.d.ts.map +1 -0
  24. package/core/i18n.js +10 -0
  25. package/core/i18n.js.map +1 -0
  26. package/core/pipeline.cjs +251 -0
  27. package/core/pipeline.cjs.map +1 -0
  28. package/core/pipeline.d.ts +11 -0
  29. package/core/pipeline.d.ts.map +1 -0
  30. package/core/pipeline.js +246 -0
  31. package/core/pipeline.js.map +1 -0
  32. package/core/router-initializer.cjs +158 -0
  33. package/core/router-initializer.cjs.map +1 -0
  34. package/core/router-initializer.d.ts +26 -0
  35. package/core/router-initializer.d.ts.map +1 -0
  36. package/core/router-initializer.js +156 -0
  37. package/core/router-initializer.js.map +1 -0
  38. package/core/scanner.cjs +141 -0
  39. package/core/scanner.cjs.map +1 -0
  40. package/core/scanner.d.ts +7 -0
  41. package/core/scanner.d.ts.map +1 -0
  42. package/core/scanner.js +139 -0
  43. package/core/scanner.js.map +1 -0
  44. package/experimental.cjs +23 -0
  45. package/experimental.cjs.map +1 -0
  46. package/experimental.d.ts +9 -0
  47. package/experimental.d.ts.map +1 -0
  48. package/experimental.js +5 -0
  49. package/experimental.js.map +1 -0
  50. package/functions.cjs +67 -0
  51. package/functions.cjs.map +1 -0
  52. package/functions.d.ts +10 -0
  53. package/functions.d.ts.map +1 -0
  54. package/functions.js +62 -0
  55. package/functions.js.map +1 -0
  56. package/http-profile.cjs +48 -0
  57. package/http-profile.cjs.map +1 -0
  58. package/http-profile.d.ts +6 -0
  59. package/http-profile.d.ts.map +1 -0
  60. package/http-profile.js +44 -0
  61. package/http-profile.js.map +1 -0
  62. package/index.cjs +281 -0
  63. package/index.cjs.map +1 -0
  64. package/index.d.ts +23 -0
  65. package/index.d.ts.map +1 -0
  66. package/index.js +23 -0
  67. package/index.js.map +1 -0
  68. package/observability.cjs +191 -0
  69. package/observability.cjs.map +1 -0
  70. package/observability.d.ts +8 -0
  71. package/observability.d.ts.map +1 -0
  72. package/observability.js +188 -0
  73. package/observability.js.map +1 -0
  74. package/package.json +42 -0
  75. package/policies.cjs +30 -0
  76. package/policies.cjs.map +1 -0
  77. package/policies.d.ts +21 -0
  78. package/policies.d.ts.map +1 -0
  79. package/policies.js +27 -0
  80. package/policies.js.map +1 -0
  81. package/resilience.cjs +280 -0
  82. package/resilience.cjs.map +1 -0
  83. package/resilience.d.ts +6 -0
  84. package/resilience.d.ts.map +1 -0
  85. package/resilience.js +276 -0
  86. package/resilience.js.map +1 -0
  87. package/security.cjs +142 -0
  88. package/security.cjs.map +1 -0
  89. package/security.d.ts +11 -0
  90. package/security.d.ts.map +1 -0
  91. package/security.js +136 -0
  92. package/security.js.map +1 -0
  93. package/types.d.ts +3 -0
  94. package/types.d.ts.map +1 -0
@@ -0,0 +1,251 @@
1
+ 'use strict';
2
+
3
+ var core = require('@athosjs/core');
4
+ var http = require('@athosjs/http');
5
+ var metadata = require('@athosjs/metadata');
6
+
7
+ function isRegisteredConstructable(container, value) {
8
+ return typeof value === "function" && container.has(value);
9
+ }
10
+ function isSingleton(target) {
11
+ if (typeof target !== "function") return true;
12
+ const metadata$1 = metadata.getInjectableMetadata(target);
13
+ return !metadata$1 || metadata$1.scope === "singleton";
14
+ }
15
+ function isProMiddlewareRegistration(value) {
16
+ return typeof value === "object" && value !== null && "use" in value;
17
+ }
18
+ function normalizeRouteMatchers(input) {
19
+ if (input === undefined) {
20
+ return [];
21
+ }
22
+ return Array.isArray(input) ? [
23
+ ...input
24
+ ] : [
25
+ input
26
+ ];
27
+ }
28
+ function matchesRouteMatchers(path, input) {
29
+ const matchers = normalizeRouteMatchers(input);
30
+ if (matchers.length === 0) {
31
+ return true;
32
+ }
33
+ return matchers.some((matcher)=>{
34
+ if (matcher instanceof RegExp) {
35
+ return matcher.test(path);
36
+ }
37
+ if (typeof matcher === "function") {
38
+ return matcher(path);
39
+ }
40
+ return http.matchPathPattern(http.compilePathPattern(matcher), path, {
41
+ end: false
42
+ }) !== undefined;
43
+ });
44
+ }
45
+ function normalizeProMiddlewareInput(container, middleware, routes) {
46
+ if (!isRegisteredConstructable(container, middleware)) {
47
+ const scopedMiddleware = middleware;
48
+ if (routes === undefined && typeof scopedMiddleware?.forRoutes !== "function") {
49
+ if (typeof middleware === "function") {
50
+ let cached;
51
+ let pending;
52
+ const resolveInstance = (resolved)=>{
53
+ cached = resolved;
54
+ pending = undefined;
55
+ return resolved;
56
+ };
57
+ const run = (resolved, context, next)=>{
58
+ const matcherInput = routes ?? resolved.forRoutes?.();
59
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
60
+ return next();
61
+ }
62
+ return resolved.handle ? runClassMiddleware(resolved, context, next) : resolved(context, next);
63
+ };
64
+ return (context, next)=>{
65
+ if (cached !== undefined) return run(cached, context, next);
66
+ if (!pending) pending = Promise.resolve(middleware()).then(resolveInstance);
67
+ return pending.then((resolved)=>run(resolved, context, next));
68
+ };
69
+ }
70
+ return middleware;
71
+ }
72
+ return async (context, next)=>{
73
+ const matcherInput = routes ?? scopedMiddleware.forRoutes?.();
74
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
75
+ return next();
76
+ }
77
+ return scopedMiddleware(context, next);
78
+ };
79
+ }
80
+ return resolveMiddlewareInstance(container, middleware, routes);
81
+ }
82
+ async function normalizeConfiguredProMiddlewareInput(container, middleware) {
83
+ if (isProMiddlewareRegistration(middleware)) {
84
+ return normalizeProMiddlewareInput(container, middleware.use, middleware.routes);
85
+ }
86
+ return normalizeProMiddlewareInput(container, middleware);
87
+ }
88
+ function normalizeProPolicyInput(container, policy) {
89
+ if (isRegisteredConstructable(container, policy)) {
90
+ const metadata$1 = metadata.getInjectableMetadata(policy);
91
+ const scope = metadata$1?.scope ?? "singleton";
92
+ if (scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(policy))) {
93
+ return container.resolve(policy);
94
+ }
95
+ const singletonInstance = isSingleton(policy) ? container.resolve(policy) : undefined;
96
+ return (context)=>{
97
+ const profiler = context.kernel?.profiler;
98
+ const startedAt = profiler.enabled ? profiler.now() : 0;
99
+ const resolved = singletonInstance ?? context.execution.services.resolve(policy);
100
+ if (startedAt !== 0 && !singletonInstance) {
101
+ profiler.recordTiming(`pro.policy.resolve:${policy.name || "anonymous"}`, profiler.now() - startedAt);
102
+ }
103
+ const checkStartedAt = startedAt;
104
+ const result = resolved.check(context);
105
+ if (startedAt !== 0) {
106
+ if (result instanceof Promise) {
107
+ return result.finally(()=>{
108
+ profiler.recordTiming(`pro.policy.check:${policy.name || "anonymous"}`, profiler.now() - checkStartedAt);
109
+ });
110
+ }
111
+ profiler.recordTiming(`pro.policy.check:${policy.name || "anonymous"}`, profiler.now() - checkStartedAt);
112
+ }
113
+ return result;
114
+ };
115
+ }
116
+ if (typeof policy === "function") {
117
+ let cached;
118
+ let pending;
119
+ return (context)=>{
120
+ if (cached) return cached.check(context);
121
+ if (!pending) {
122
+ pending = Promise.resolve(policy()).then((resolved)=>{
123
+ if (resolved && typeof resolved === "object" && "check" in resolved) {
124
+ cached = resolved;
125
+ return;
126
+ }
127
+ pending = undefined;
128
+ });
129
+ }
130
+ return pending.then(()=>{
131
+ if (cached) return cached.check(context);
132
+ return policy(context);
133
+ });
134
+ };
135
+ }
136
+ return policy;
137
+ }
138
+ function resolveMiddlewareInstance(container, middleware, routes) {
139
+ const metadata$1 = metadata.getInjectableMetadata(middleware);
140
+ const scope = metadata$1?.scope ?? "singleton";
141
+ const hasStaticForRoutes = typeof middleware?.forRoutes === "function";
142
+ const singletonInstance = isSingleton(middleware) ? container.resolve(middleware) : undefined;
143
+ if (routes === undefined && !hasStaticForRoutes && scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(middleware))) {
144
+ const resolved = container.resolve(middleware);
145
+ if (typeof resolved?.forRoutes !== "function") {
146
+ return resolved;
147
+ }
148
+ }
149
+ return (context, next)=>{
150
+ const profiler = context.kernel?.profiler;
151
+ const startedAt = profiler.enabled ? profiler.now() : 0;
152
+ const resolved = singletonInstance ?? context.execution.services.resolve(middleware);
153
+ const matcherInput = routes ?? resolved?.forRoutes?.();
154
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
155
+ return next();
156
+ }
157
+ if (startedAt !== 0 && !singletonInstance) {
158
+ profiler.recordTiming(`pro.middleware.resolve:${middleware.name || "anonymous"}`, profiler.now() - startedAt);
159
+ }
160
+ if (resolved && typeof resolved.handle === "function") {
161
+ return runClassMiddleware(resolved, context, next);
162
+ }
163
+ const handleStartedAt = startedAt;
164
+ const result = resolved(context, next);
165
+ if (startedAt !== 0) {
166
+ if (result instanceof Promise) {
167
+ return result.finally(()=>{
168
+ profiler.recordTiming(`pro.middleware.invoke:${middleware.name || "anonymous"}`, profiler.now() - handleStartedAt);
169
+ });
170
+ }
171
+ profiler.recordTiming(`pro.middleware.invoke:${middleware.name || "anonymous"}`, profiler.now() - handleStartedAt);
172
+ }
173
+ return result;
174
+ };
175
+ }
176
+ function normalizeProInterceptorInput(container, interceptor) {
177
+ if (!isRegisteredConstructable(container, interceptor)) {
178
+ if (typeof interceptor === "function") {
179
+ let cached;
180
+ let pending;
181
+ return (context, next)=>{
182
+ if (cached !== undefined) return Promise.resolve(cached.intercept(context, next));
183
+ if (!pending) pending = Promise.resolve(interceptor()).then((resolved)=>{
184
+ cached = resolved;
185
+ pending = undefined;
186
+ return resolved;
187
+ });
188
+ return pending.then((resolved)=>resolved.intercept(context, next));
189
+ };
190
+ }
191
+ return interceptor;
192
+ }
193
+ const metadata$1 = metadata.getInjectableMetadata(interceptor);
194
+ const scope = metadata$1?.scope ?? "singleton";
195
+ if (scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(interceptor))) {
196
+ return container.resolve(interceptor);
197
+ }
198
+ const singletonInstance = isSingleton(interceptor) ? container.resolve(interceptor) : undefined;
199
+ return (context, next)=>{
200
+ const profiler = context.kernel?.profiler;
201
+ const startedAt = profiler.enabled ? profiler.now() : 0;
202
+ const resolved = singletonInstance ?? context.execution.services.resolve(interceptor);
203
+ if (startedAt !== 0 && !singletonInstance) {
204
+ profiler.recordTiming(`pro.interceptor.resolve:${interceptor.name || "anonymous"}`, profiler.now() - startedAt);
205
+ }
206
+ const interceptStartedAt = startedAt;
207
+ const result = Promise.resolve(resolved.intercept(context, next));
208
+ if (startedAt !== 0) {
209
+ return result.finally(()=>{
210
+ profiler.recordTiming(`pro.interceptor.invoke:${interceptor.name || "anonymous"}`, profiler.now() - interceptStartedAt);
211
+ });
212
+ }
213
+ return result;
214
+ };
215
+ }
216
+ function runClassMiddleware(middleware, context, next) {
217
+ const profiler = context.kernel?.profiler;
218
+ let syncResult;
219
+ let asyncPromise;
220
+ const startedAt = core.profileStart(profiler);
221
+ const returned = middleware.handle(context.request, context.execution.response, (error)=>{
222
+ if (error !== undefined) throw error;
223
+ const res = next();
224
+ if (res instanceof Promise) {
225
+ asyncPromise = res;
226
+ } else {
227
+ syncResult = res;
228
+ }
229
+ });
230
+ if (returned instanceof Promise) {
231
+ return returned.finally(()=>{
232
+ core.profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
233
+ });
234
+ }
235
+ if (returned !== undefined) {
236
+ core.profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
237
+ return returned;
238
+ }
239
+ if (asyncPromise) {
240
+ core.profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
241
+ return asyncPromise;
242
+ }
243
+ core.profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
244
+ return syncResult;
245
+ }
246
+
247
+ exports.normalizeConfiguredProMiddlewareInput = normalizeConfiguredProMiddlewareInput;
248
+ exports.normalizeProInterceptorInput = normalizeProInterceptorInput;
249
+ exports.normalizeProMiddlewareInput = normalizeProMiddlewareInput;
250
+ exports.normalizeProPolicyInput = normalizeProPolicyInput;
251
+ //# sourceMappingURL=pipeline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.cjs","sources":["../../../../packages/pro/src/core/pipeline.ts"],"sourcesContent":["import { profileEnd, profileStart, type InternalProfiler } from \"@athosjs/core\";\nimport type { AthosContainer } from \"@athosjs/di\";\nimport type { HttpResponse } from \"@athosjs/http\";\nimport {\n\tcompilePathPattern,\n\ttype HttpContext,\n\ttype HttpInterceptor,\n\ttype HttpMiddleware,\n\ttype HttpMiddlewareRouteMatcher,\n\ttype HttpMiddlewareRouteMatcherInput,\n\ttype HttpPolicy,\n\tmatchPathPattern,\n} from \"@athosjs/http\";\nimport { type Constructable, getInjectableMetadata } from \"@athosjs/metadata\";\nimport type { ProConfiguredMiddleware, ProMiddlewareRegistration } from \"../types\";\n\nexport const PRO_REQUEST_SCOPE_STATE_KEY = \"__haven_pro_request_scope\";\n\nfunction isRegisteredConstructable<T>(container: AthosContainer, value: unknown): value is Constructable<T> {\n\treturn typeof value === \"function\" && container.has(value as Constructable<T>);\n}\n\nfunction isSingleton(target: any): boolean {\n\tif (typeof target !== \"function\") return true;\n\tconst metadata = getInjectableMetadata(target);\n\treturn !metadata || metadata.scope === \"singleton\";\n}\n\nfunction isProMiddlewareRegistration(value: unknown): value is ProMiddlewareRegistration {\n\treturn typeof value === \"object\" && value !== null && \"use\" in value;\n}\n\nfunction normalizeRouteMatchers(input: HttpMiddlewareRouteMatcherInput | undefined): HttpMiddlewareRouteMatcher[] {\n\tif (input === undefined) {\n\t\treturn [];\n\t}\n\n\treturn Array.isArray(input) ? [...input] : [input as HttpMiddlewareRouteMatcher];\n}\n\nfunction matchesRouteMatchers(path: string, input: HttpMiddlewareRouteMatcherInput | undefined): boolean {\n\tconst matchers = normalizeRouteMatchers(input);\n\n\tif (matchers.length === 0) {\n\t\treturn true;\n\t}\n\n\treturn matchers.some((matcher) => {\n\t\tif (matcher instanceof RegExp) {\n\t\t\treturn matcher.test(path);\n\t\t}\n\n\t\tif (typeof matcher === \"function\") {\n\t\t\treturn matcher(path);\n\t\t}\n\n\t\treturn matchPathPattern(compilePathPattern(matcher), path, { end: false }) !== undefined;\n\t});\n}\n\nexport function normalizeProMiddlewareInput(\n\tcontainer: AthosContainer,\n\tmiddleware: HttpMiddleware,\n\troutes?: HttpMiddlewareRouteMatcherInput,\n): HttpMiddleware {\n\tif (!isRegisteredConstructable(container, middleware)) {\n\t\tconst scopedMiddleware = middleware as any;\n\n\t\tif (routes === undefined && typeof scopedMiddleware?.forRoutes !== \"function\") {\n\t\t\tif (typeof middleware === \"function\") {\n\t\t\t\tlet cached: any;\n\t\t\t\tlet pending: Promise<any> | undefined;\n\t\t\t\tconst resolveInstance = (resolved: any) => {\n\t\t\t\t\tcached = resolved;\n\t\t\t\t\tpending = undefined;\n\t\t\t\t\treturn resolved;\n\t\t\t\t};\n\t\t\t\tconst run = (resolved: any, context: HttpContext, next: any) => {\n\t\t\t\t\tconst matcherInput = routes ?? resolved.forRoutes?.();\n if (!matchesRouteMatchers(context.request.path, matcherInput)) {\n return next();\n\t\t\t\t\t}\n\t\t\t\t\treturn resolved.handle ? runClassMiddleware(resolved, context, next) : resolved(context, next);\n\t\t\t\t};\n\t\t\t\treturn (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\t\t\t\tif (cached !== undefined) return run(cached, context, next);\n\t\t\t\t\tif (!pending) pending = Promise.resolve((middleware as any)()).then(resolveInstance);\n\t\t\t\t\treturn pending.then((resolved) => run(resolved, context, next)) as any;\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn middleware;\n\t\t}\n\n\t\treturn async (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\t\tconst matcherInput = routes ?? scopedMiddleware.forRoutes?.();\n\n\t\t\tif (!matchesRouteMatchers(context.request.path, matcherInput)) {\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\treturn scopedMiddleware(context, next);\n\t\t};\n\t}\n\n\treturn resolveMiddlewareInstance(container, middleware, routes);\n}\n\nexport async function normalizeConfiguredProMiddlewareInput(\n\tcontainer: AthosContainer,\n\tmiddleware: ProConfiguredMiddleware,\n): Promise<HttpMiddleware> {\n\tif (isProMiddlewareRegistration(middleware)) {\n\t\treturn normalizeProMiddlewareInput(container, middleware.use as HttpMiddleware, middleware.routes as any);\n\t}\n\n\treturn normalizeProMiddlewareInput(container, middleware as HttpMiddleware);\n}\n\nexport function normalizeProPolicyInput(container: AthosContainer, policy: HttpPolicy): HttpPolicy {\n\tif (isRegisteredConstructable(container, policy)) {\n\t\tconst metadata = getInjectableMetadata(policy);\n\t\tconst scope = metadata?.scope ?? \"singleton\";\n\n\t\tif (\n\t\t\tscope === \"singleton\" &&\n\t\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(policy as Constructable<any>))\n\t\t) {\n\t\t\treturn container.resolve(policy as Constructable<HttpPolicy>);\n\t\t}\n\n\t\tconst singletonInstance = isSingleton(policy) ? container.resolve(policy as any) : undefined;\n\n\t\treturn (context: HttpContext) => {\n\t\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(policy as any)) as any;\n\n\t\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\t\tprofiler.recordTiming(`pro.policy.resolve:${(policy as any).name || \"anonymous\"}`, profiler.now() - startedAt);\n\t\t\t}\n\n\t\t\tconst checkStartedAt = startedAt;\n\t\t\tconst result = resolved.check(context);\n\t\t\tif (startedAt !== 0) {\n\t\t\t\tif (result instanceof Promise) {\n\t\t\t\t\treturn result.finally(() => {\n\t\t\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t\t\t`pro.policy.check:${(policy as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\t\t\tprofiler.now() - checkStartedAt,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t`pro.policy.check:${(policy as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\tprofiler.now() - checkStartedAt,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tif (typeof policy === \"function\") {\n\t\tlet cached: { check(ctx: HttpContext): boolean | Promise<boolean> } | undefined;\n\t\tlet pending: Promise<void> | undefined;\n\t\treturn (context: HttpContext) => {\n\t\t\tif (cached) return cached.check(context);\n\t\t\tif (!pending) {\n\t\t\t\tpending = Promise.resolve((policy as any)()).then((resolved: unknown) => {\n\t\t\t\t\tif (resolved && typeof resolved === \"object\" && \"check\" in resolved) {\n\t\t\t\t\t\tcached = resolved as { check(ctx: HttpContext): boolean | Promise<boolean> };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tpending = undefined;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn pending.then(() => {\n\t\t\t\tif (cached) return cached.check(context);\n\t\t\t\treturn (policy as (ctx: HttpContext) => boolean | Promise<boolean>)(context);\n\t\t\t});\n\t\t};\n\t}\n\n\treturn policy;\n}\n\nfunction resolveMiddlewareInstance(\n\tcontainer: AthosContainer,\n\tmiddleware: any,\n\troutes?: any,\n): HttpMiddleware {\n\tconst metadata = getInjectableMetadata(middleware);\n\tconst scope = metadata?.scope ?? \"singleton\";\n\n\tconst hasStaticForRoutes = typeof middleware?.forRoutes === \"function\";\n\tconst singletonInstance = isSingleton(middleware) ? container.resolve(middleware as any) : undefined;\n\n\tif (\n\t\troutes === undefined &&\n\t\t!hasStaticForRoutes &&\n\t\tscope === \"singleton\" &&\n\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(middleware as Constructable<any>))\n\t) {\n\t\tconst resolved = container.resolve(middleware as Constructable<HttpMiddleware>) as any;\n\t\tif (typeof resolved?.forRoutes !== \"function\") {\n\t\t\treturn resolved as HttpMiddleware;\n\t\t}\n\t}\n\n\treturn (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(middleware as any)) as any;\n\n\t\tconst matcherInput = routes ?? resolved?.forRoutes?.();\n\t\tif (!matchesRouteMatchers(context.request.path, matcherInput)) {\n\t\t\treturn next();\n\t\t}\n\n\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.middleware.resolve:${(middleware as any).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - startedAt,\n\t\t\t);\n\t\t}\n\n\t\tif (resolved && typeof resolved.handle === \"function\") {\n\t\t\treturn runClassMiddleware(resolved, context, next);\n\t\t}\n\n\t\tconst handleStartedAt = startedAt;\n\t\tconst result = resolved(context, next);\n\t\tif (startedAt !== 0) {\n\t\t\tif (result instanceof Promise) {\n\t\t\t\treturn result.finally(() => {\n\t\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t\t`pro.middleware.invoke:${(middleware as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\t\tprofiler.now() - handleStartedAt,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.middleware.invoke:${(middleware as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - handleStartedAt,\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n}\n\nexport function normalizeProInterceptorInput(container: AthosContainer, interceptor: HttpInterceptor): HttpInterceptor {\n\tif (!isRegisteredConstructable(container, interceptor)) {\n\t\tif (typeof interceptor === \"function\") {\n\t\t\tlet cached: any;\n\t\t\tlet pending: Promise<any> | undefined;\n\t\t\treturn ((context: HttpContext, next: () => Promise<HttpResponse>): Promise<HttpResponse> => {\n\t\t\t\tif (cached !== undefined) return Promise.resolve(cached.intercept(context, next));\n\t\t\t\tif (!pending) pending = Promise.resolve((interceptor as any)()).then((resolved: any) => {\n\t\t\t\t\tcached = resolved;\n\t\t\t\t\tpending = undefined;\n\t\t\t\t\treturn resolved;\n\t\t\t\t});\n\t\t\t\treturn pending.then((resolved: any) => resolved.intercept(context, next));\n\t\t\t}) as unknown as HttpInterceptor;\n\t\t}\n\t\treturn interceptor;\n\t}\n\n\tconst metadata = getInjectableMetadata(interceptor);\n\tconst scope = metadata?.scope ?? \"singleton\";\n\n\tif (\n\t\tscope === \"singleton\" &&\n\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(interceptor as Constructable<any>))\n\t) {\n\t\treturn container.resolve(interceptor as Constructable<HttpInterceptor>);\n\t}\n\n\tconst singletonInstance = isSingleton(interceptor) ? container.resolve(interceptor as any) : undefined;\n\n\treturn ((context: HttpContext, next: () => Promise<HttpResponse>): Promise<HttpResponse> => {\n\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(interceptor as any)) as any;\n\n\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.interceptor.resolve:${(interceptor as any).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - startedAt,\n\t\t\t);\n\t\t}\n\n\t\tconst interceptStartedAt = startedAt;\n\t\tconst result: Promise<HttpResponse> = Promise.resolve(resolved.intercept(context, next));\n\t\tif (startedAt !== 0) {\n\t\t\treturn result.finally(() => {\n\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t`pro.interceptor.invoke:${(interceptor as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\tprofiler.now() - interceptStartedAt,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}) as unknown as HttpInterceptor;\n}\n\nexport function getOrCreateProRequestScope(context: HttpContext, container: AthosContainer): AthosContainer {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\n\tif ((context.execution as any).container) {\n\t\tprofiler.incrementCounter(\"pro.scope.core_reused\");\n\t\treturn (context.execution as any).container;\n\t}\n\n\tconst existing = (context.state as { get<T>(k: string | symbol): T | undefined }).get<AthosContainer>(\n\t\tPRO_REQUEST_SCOPE_STATE_KEY,\n\t);\n\tif (existing) {\n\t\tprofiler.incrementCounter(\"pro.scope.state_reused\");\n\t\treturn existing;\n\t}\n\n\tconst startedAt = profileStart(profiler);\n\tconst scoped = container.createScope();\n\tcontext.state.set(PRO_REQUEST_SCOPE_STATE_KEY, scoped);\n\tprofiler.incrementCounter(\"pro.scope.created\");\n\tprofileEnd(profiler, \"pro.scope.create\", startedAt);\n\treturn scoped;\n}\n\nexport function releaseProRequestScope(context: HttpContext): void | Promise<void> {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\tconst scoped = ((context.state as { get<T>(k: string | symbol): T | undefined }).get<AthosContainer>(\n\t\tPRO_REQUEST_SCOPE_STATE_KEY,\n\t) ?? (context.execution as any).container) as any;\n\tif (!scoped) {\n\t\tprofiler.incrementCounter(\"pro.scope.release_missing\");\n\t\treturn;\n\t}\n\n\tcontext.state.set(PRO_REQUEST_SCOPE_STATE_KEY, undefined);\n\tprofiler.incrementCounter(\"pro.scope.release_calls\");\n\tconst startedAt = profileStart(profiler);\n\tconst result = scoped.dispose();\n\tif (result instanceof Promise) {\n\t\treturn result.finally(() => {\n\t\t\tprofileEnd(profiler, \"pro.scope.release\", startedAt);\n\t\t});\n\t}\n\tprofileEnd(profiler, \"pro.scope.release\", startedAt);\n\treturn result;\n}\n\nfunction runClassMiddleware(\n\tmiddleware: { handle(req: any, res: any, next: (error?: unknown) => void | Promise<void>): unknown },\n\tcontext: HttpContext,\n\tnext: () => HttpResponse | Promise<HttpResponse>,\n): HttpResponse | Promise<HttpResponse> {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\tlet syncResult: HttpResponse | undefined;\n\tlet asyncPromise: Promise<HttpResponse> | undefined;\n\tconst startedAt = profileStart(profiler);\n\n\tconst returned = middleware.handle(context.request, context.execution.response, (error?: unknown) => {\n\t\tif (error !== undefined) throw error;\n\t\tconst res = next();\n\t\tif (res instanceof Promise) {\n\t\t\tasyncPromise = res;\n\t\t} else {\n\t\t\tsyncResult = res;\n\t\t}\n\t});\n\n\tif (returned instanceof Promise) {\n\t\treturn (returned as Promise<unknown>).finally(() => {\n\t\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\t}) as any;\n\t}\n\tif (returned !== undefined) {\n\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\treturn returned as HttpResponse;\n\t}\n\tif (asyncPromise) {\n\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\treturn asyncPromise;\n\t}\n\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\treturn syncResult!;\n}\n"],"names":["isRegisteredConstructable","container","value","has","isSingleton","target","metadata","getInjectableMetadata","scope","isProMiddlewareRegistration","normalizeRouteMatchers","input","undefined","Array","isArray","matchesRouteMatchers","path","matchers","length","some","matcher","RegExp","test","matchPathPattern","compilePathPattern","end","normalizeProMiddlewareInput","middleware","routes","scopedMiddleware","forRoutes","cached","pending","resolveInstance","resolved","run","context","next","matcherInput","request","handle","runClassMiddleware","Promise","resolve","then","resolveMiddlewareInstance","normalizeConfiguredProMiddlewareInput","use","normalizeProPolicyInput","policy","requiresScope","singletonInstance","profiler","kernel","startedAt","enabled","now","execution","services","recordTiming","name","checkStartedAt","result","check","finally","hasStaticForRoutes","handleStartedAt","normalizeProInterceptorInput","interceptor","intercept","interceptStartedAt","syncResult","asyncPromise","profileStart","returned","response","error","res","profileEnd"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AthosContainer } from "@athosjs/di";
2
+ import { type HttpContext, type HttpInterceptor, type HttpMiddleware, type HttpMiddlewareRouteMatcherInput, type HttpPolicy } from "@athosjs/http";
3
+ import type { ProConfiguredMiddleware } from "../types";
4
+ export declare const PRO_REQUEST_SCOPE_STATE_KEY = "__haven_pro_request_scope";
5
+ export declare function normalizeProMiddlewareInput(container: AthosContainer, middleware: HttpMiddleware, routes?: HttpMiddlewareRouteMatcherInput): HttpMiddleware;
6
+ export declare function normalizeConfiguredProMiddlewareInput(container: AthosContainer, middleware: ProConfiguredMiddleware): Promise<HttpMiddleware>;
7
+ export declare function normalizeProPolicyInput(container: AthosContainer, policy: HttpPolicy): HttpPolicy;
8
+ export declare function normalizeProInterceptorInput(container: AthosContainer, interceptor: HttpInterceptor): HttpInterceptor;
9
+ export declare function getOrCreateProRequestScope(context: HttpContext, container: AthosContainer): AthosContainer;
10
+ export declare function releaseProRequestScope(context: HttpContext): void | Promise<void>;
11
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../../../../packages/pro/src/core/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,+BAA+B,EACpC,KAAK,UAAU,EAEf,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,uBAAuB,EAA6B,MAAM,UAAU,CAAC;AAEnF,eAAO,MAAM,2BAA2B,8BAA8B,CAAC;AA4CvE,wBAAgB,2BAA2B,CAC1C,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,cAAc,EAC1B,MAAM,CAAC,EAAE,+BAA+B,GACtC,cAAc,CAyChB;AAED,wBAAsB,qCAAqC,CAC1D,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,uBAAuB,GACjC,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CAkEjG;AAmED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,GAAG,eAAe,CAuDrH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,cAAc,CAsB1G;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF"}
@@ -0,0 +1,246 @@
1
+ import { profileStart, profileEnd } from '@athosjs/core';
2
+ import { matchPathPattern, compilePathPattern } from '@athosjs/http';
3
+ import { getInjectableMetadata } from '@athosjs/metadata';
4
+
5
+ function isRegisteredConstructable(container, value) {
6
+ return typeof value === "function" && container.has(value);
7
+ }
8
+ function isSingleton(target) {
9
+ if (typeof target !== "function") return true;
10
+ const metadata = getInjectableMetadata(target);
11
+ return !metadata || metadata.scope === "singleton";
12
+ }
13
+ function isProMiddlewareRegistration(value) {
14
+ return typeof value === "object" && value !== null && "use" in value;
15
+ }
16
+ function normalizeRouteMatchers(input) {
17
+ if (input === undefined) {
18
+ return [];
19
+ }
20
+ return Array.isArray(input) ? [
21
+ ...input
22
+ ] : [
23
+ input
24
+ ];
25
+ }
26
+ function matchesRouteMatchers(path, input) {
27
+ const matchers = normalizeRouteMatchers(input);
28
+ if (matchers.length === 0) {
29
+ return true;
30
+ }
31
+ return matchers.some((matcher)=>{
32
+ if (matcher instanceof RegExp) {
33
+ return matcher.test(path);
34
+ }
35
+ if (typeof matcher === "function") {
36
+ return matcher(path);
37
+ }
38
+ return matchPathPattern(compilePathPattern(matcher), path, {
39
+ end: false
40
+ }) !== undefined;
41
+ });
42
+ }
43
+ function normalizeProMiddlewareInput(container, middleware, routes) {
44
+ if (!isRegisteredConstructable(container, middleware)) {
45
+ const scopedMiddleware = middleware;
46
+ if (routes === undefined && typeof scopedMiddleware?.forRoutes !== "function") {
47
+ if (typeof middleware === "function") {
48
+ let cached;
49
+ let pending;
50
+ const resolveInstance = (resolved)=>{
51
+ cached = resolved;
52
+ pending = undefined;
53
+ return resolved;
54
+ };
55
+ const run = (resolved, context, next)=>{
56
+ const matcherInput = routes ?? resolved.forRoutes?.();
57
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
58
+ return next();
59
+ }
60
+ return resolved.handle ? runClassMiddleware(resolved, context, next) : resolved(context, next);
61
+ };
62
+ return (context, next)=>{
63
+ if (cached !== undefined) return run(cached, context, next);
64
+ if (!pending) pending = Promise.resolve(middleware()).then(resolveInstance);
65
+ return pending.then((resolved)=>run(resolved, context, next));
66
+ };
67
+ }
68
+ return middleware;
69
+ }
70
+ return async (context, next)=>{
71
+ const matcherInput = routes ?? scopedMiddleware.forRoutes?.();
72
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
73
+ return next();
74
+ }
75
+ return scopedMiddleware(context, next);
76
+ };
77
+ }
78
+ return resolveMiddlewareInstance(container, middleware, routes);
79
+ }
80
+ async function normalizeConfiguredProMiddlewareInput(container, middleware) {
81
+ if (isProMiddlewareRegistration(middleware)) {
82
+ return normalizeProMiddlewareInput(container, middleware.use, middleware.routes);
83
+ }
84
+ return normalizeProMiddlewareInput(container, middleware);
85
+ }
86
+ function normalizeProPolicyInput(container, policy) {
87
+ if (isRegisteredConstructable(container, policy)) {
88
+ const metadata = getInjectableMetadata(policy);
89
+ const scope = metadata?.scope ?? "singleton";
90
+ if (scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(policy))) {
91
+ return container.resolve(policy);
92
+ }
93
+ const singletonInstance = isSingleton(policy) ? container.resolve(policy) : undefined;
94
+ return (context)=>{
95
+ const profiler = context.kernel?.profiler;
96
+ const startedAt = profiler.enabled ? profiler.now() : 0;
97
+ const resolved = singletonInstance ?? context.execution.services.resolve(policy);
98
+ if (startedAt !== 0 && !singletonInstance) {
99
+ profiler.recordTiming(`pro.policy.resolve:${policy.name || "anonymous"}`, profiler.now() - startedAt);
100
+ }
101
+ const checkStartedAt = startedAt;
102
+ const result = resolved.check(context);
103
+ if (startedAt !== 0) {
104
+ if (result instanceof Promise) {
105
+ return result.finally(()=>{
106
+ profiler.recordTiming(`pro.policy.check:${policy.name || "anonymous"}`, profiler.now() - checkStartedAt);
107
+ });
108
+ }
109
+ profiler.recordTiming(`pro.policy.check:${policy.name || "anonymous"}`, profiler.now() - checkStartedAt);
110
+ }
111
+ return result;
112
+ };
113
+ }
114
+ if (typeof policy === "function") {
115
+ let cached;
116
+ let pending;
117
+ return (context)=>{
118
+ if (cached) return cached.check(context);
119
+ if (!pending) {
120
+ pending = Promise.resolve(policy()).then((resolved)=>{
121
+ if (resolved && typeof resolved === "object" && "check" in resolved) {
122
+ cached = resolved;
123
+ return;
124
+ }
125
+ pending = undefined;
126
+ });
127
+ }
128
+ return pending.then(()=>{
129
+ if (cached) return cached.check(context);
130
+ return policy(context);
131
+ });
132
+ };
133
+ }
134
+ return policy;
135
+ }
136
+ function resolveMiddlewareInstance(container, middleware, routes) {
137
+ const metadata = getInjectableMetadata(middleware);
138
+ const scope = metadata?.scope ?? "singleton";
139
+ const hasStaticForRoutes = typeof middleware?.forRoutes === "function";
140
+ const singletonInstance = isSingleton(middleware) ? container.resolve(middleware) : undefined;
141
+ if (routes === undefined && !hasStaticForRoutes && scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(middleware))) {
142
+ const resolved = container.resolve(middleware);
143
+ if (typeof resolved?.forRoutes !== "function") {
144
+ return resolved;
145
+ }
146
+ }
147
+ return (context, next)=>{
148
+ const profiler = context.kernel?.profiler;
149
+ const startedAt = profiler.enabled ? profiler.now() : 0;
150
+ const resolved = singletonInstance ?? context.execution.services.resolve(middleware);
151
+ const matcherInput = routes ?? resolved?.forRoutes?.();
152
+ if (!matchesRouteMatchers(context.request.path, matcherInput)) {
153
+ return next();
154
+ }
155
+ if (startedAt !== 0 && !singletonInstance) {
156
+ profiler.recordTiming(`pro.middleware.resolve:${middleware.name || "anonymous"}`, profiler.now() - startedAt);
157
+ }
158
+ if (resolved && typeof resolved.handle === "function") {
159
+ return runClassMiddleware(resolved, context, next);
160
+ }
161
+ const handleStartedAt = startedAt;
162
+ const result = resolved(context, next);
163
+ if (startedAt !== 0) {
164
+ if (result instanceof Promise) {
165
+ return result.finally(()=>{
166
+ profiler.recordTiming(`pro.middleware.invoke:${middleware.name || "anonymous"}`, profiler.now() - handleStartedAt);
167
+ });
168
+ }
169
+ profiler.recordTiming(`pro.middleware.invoke:${middleware.name || "anonymous"}`, profiler.now() - handleStartedAt);
170
+ }
171
+ return result;
172
+ };
173
+ }
174
+ function normalizeProInterceptorInput(container, interceptor) {
175
+ if (!isRegisteredConstructable(container, interceptor)) {
176
+ if (typeof interceptor === "function") {
177
+ let cached;
178
+ let pending;
179
+ return (context, next)=>{
180
+ if (cached !== undefined) return Promise.resolve(cached.intercept(context, next));
181
+ if (!pending) pending = Promise.resolve(interceptor()).then((resolved)=>{
182
+ cached = resolved;
183
+ pending = undefined;
184
+ return resolved;
185
+ });
186
+ return pending.then((resolved)=>resolved.intercept(context, next));
187
+ };
188
+ }
189
+ return interceptor;
190
+ }
191
+ const metadata = getInjectableMetadata(interceptor);
192
+ const scope = metadata?.scope ?? "singleton";
193
+ if (scope === "singleton" && (typeof container.requiresScope !== "function" || !container.requiresScope(interceptor))) {
194
+ return container.resolve(interceptor);
195
+ }
196
+ const singletonInstance = isSingleton(interceptor) ? container.resolve(interceptor) : undefined;
197
+ return (context, next)=>{
198
+ const profiler = context.kernel?.profiler;
199
+ const startedAt = profiler.enabled ? profiler.now() : 0;
200
+ const resolved = singletonInstance ?? context.execution.services.resolve(interceptor);
201
+ if (startedAt !== 0 && !singletonInstance) {
202
+ profiler.recordTiming(`pro.interceptor.resolve:${interceptor.name || "anonymous"}`, profiler.now() - startedAt);
203
+ }
204
+ const interceptStartedAt = startedAt;
205
+ const result = Promise.resolve(resolved.intercept(context, next));
206
+ if (startedAt !== 0) {
207
+ return result.finally(()=>{
208
+ profiler.recordTiming(`pro.interceptor.invoke:${interceptor.name || "anonymous"}`, profiler.now() - interceptStartedAt);
209
+ });
210
+ }
211
+ return result;
212
+ };
213
+ }
214
+ function runClassMiddleware(middleware, context, next) {
215
+ const profiler = context.kernel?.profiler;
216
+ let syncResult;
217
+ let asyncPromise;
218
+ const startedAt = profileStart(profiler);
219
+ const returned = middleware.handle(context.request, context.execution.response, (error)=>{
220
+ if (error !== undefined) throw error;
221
+ const res = next();
222
+ if (res instanceof Promise) {
223
+ asyncPromise = res;
224
+ } else {
225
+ syncResult = res;
226
+ }
227
+ });
228
+ if (returned instanceof Promise) {
229
+ return returned.finally(()=>{
230
+ profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
231
+ });
232
+ }
233
+ if (returned !== undefined) {
234
+ profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
235
+ return returned;
236
+ }
237
+ if (asyncPromise) {
238
+ profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
239
+ return asyncPromise;
240
+ }
241
+ profileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || "anonymous"}`, startedAt);
242
+ return syncResult;
243
+ }
244
+
245
+ export { normalizeConfiguredProMiddlewareInput, normalizeProInterceptorInput, normalizeProMiddlewareInput, normalizeProPolicyInput };
246
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sources":["../../../../packages/pro/src/core/pipeline.ts"],"sourcesContent":["import { profileEnd, profileStart, type InternalProfiler } from \"@athosjs/core\";\nimport type { AthosContainer } from \"@athosjs/di\";\nimport type { HttpResponse } from \"@athosjs/http\";\nimport {\n\tcompilePathPattern,\n\ttype HttpContext,\n\ttype HttpInterceptor,\n\ttype HttpMiddleware,\n\ttype HttpMiddlewareRouteMatcher,\n\ttype HttpMiddlewareRouteMatcherInput,\n\ttype HttpPolicy,\n\tmatchPathPattern,\n} from \"@athosjs/http\";\nimport { type Constructable, getInjectableMetadata } from \"@athosjs/metadata\";\nimport type { ProConfiguredMiddleware, ProMiddlewareRegistration } from \"../types\";\n\nexport const PRO_REQUEST_SCOPE_STATE_KEY = \"__haven_pro_request_scope\";\n\nfunction isRegisteredConstructable<T>(container: AthosContainer, value: unknown): value is Constructable<T> {\n\treturn typeof value === \"function\" && container.has(value as Constructable<T>);\n}\n\nfunction isSingleton(target: any): boolean {\n\tif (typeof target !== \"function\") return true;\n\tconst metadata = getInjectableMetadata(target);\n\treturn !metadata || metadata.scope === \"singleton\";\n}\n\nfunction isProMiddlewareRegistration(value: unknown): value is ProMiddlewareRegistration {\n\treturn typeof value === \"object\" && value !== null && \"use\" in value;\n}\n\nfunction normalizeRouteMatchers(input: HttpMiddlewareRouteMatcherInput | undefined): HttpMiddlewareRouteMatcher[] {\n\tif (input === undefined) {\n\t\treturn [];\n\t}\n\n\treturn Array.isArray(input) ? [...input] : [input as HttpMiddlewareRouteMatcher];\n}\n\nfunction matchesRouteMatchers(path: string, input: HttpMiddlewareRouteMatcherInput | undefined): boolean {\n\tconst matchers = normalizeRouteMatchers(input);\n\n\tif (matchers.length === 0) {\n\t\treturn true;\n\t}\n\n\treturn matchers.some((matcher) => {\n\t\tif (matcher instanceof RegExp) {\n\t\t\treturn matcher.test(path);\n\t\t}\n\n\t\tif (typeof matcher === \"function\") {\n\t\t\treturn matcher(path);\n\t\t}\n\n\t\treturn matchPathPattern(compilePathPattern(matcher), path, { end: false }) !== undefined;\n\t});\n}\n\nexport function normalizeProMiddlewareInput(\n\tcontainer: AthosContainer,\n\tmiddleware: HttpMiddleware,\n\troutes?: HttpMiddlewareRouteMatcherInput,\n): HttpMiddleware {\n\tif (!isRegisteredConstructable(container, middleware)) {\n\t\tconst scopedMiddleware = middleware as any;\n\n\t\tif (routes === undefined && typeof scopedMiddleware?.forRoutes !== \"function\") {\n\t\t\tif (typeof middleware === \"function\") {\n\t\t\t\tlet cached: any;\n\t\t\t\tlet pending: Promise<any> | undefined;\n\t\t\t\tconst resolveInstance = (resolved: any) => {\n\t\t\t\t\tcached = resolved;\n\t\t\t\t\tpending = undefined;\n\t\t\t\t\treturn resolved;\n\t\t\t\t};\n\t\t\t\tconst run = (resolved: any, context: HttpContext, next: any) => {\n\t\t\t\t\tconst matcherInput = routes ?? resolved.forRoutes?.();\n if (!matchesRouteMatchers(context.request.path, matcherInput)) {\n return next();\n\t\t\t\t\t}\n\t\t\t\t\treturn resolved.handle ? runClassMiddleware(resolved, context, next) : resolved(context, next);\n\t\t\t\t};\n\t\t\t\treturn (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\t\t\t\tif (cached !== undefined) return run(cached, context, next);\n\t\t\t\t\tif (!pending) pending = Promise.resolve((middleware as any)()).then(resolveInstance);\n\t\t\t\t\treturn pending.then((resolved) => run(resolved, context, next)) as any;\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn middleware;\n\t\t}\n\n\t\treturn async (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\t\tconst matcherInput = routes ?? scopedMiddleware.forRoutes?.();\n\n\t\t\tif (!matchesRouteMatchers(context.request.path, matcherInput)) {\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\treturn scopedMiddleware(context, next);\n\t\t};\n\t}\n\n\treturn resolveMiddlewareInstance(container, middleware, routes);\n}\n\nexport async function normalizeConfiguredProMiddlewareInput(\n\tcontainer: AthosContainer,\n\tmiddleware: ProConfiguredMiddleware,\n): Promise<HttpMiddleware> {\n\tif (isProMiddlewareRegistration(middleware)) {\n\t\treturn normalizeProMiddlewareInput(container, middleware.use as HttpMiddleware, middleware.routes as any);\n\t}\n\n\treturn normalizeProMiddlewareInput(container, middleware as HttpMiddleware);\n}\n\nexport function normalizeProPolicyInput(container: AthosContainer, policy: HttpPolicy): HttpPolicy {\n\tif (isRegisteredConstructable(container, policy)) {\n\t\tconst metadata = getInjectableMetadata(policy);\n\t\tconst scope = metadata?.scope ?? \"singleton\";\n\n\t\tif (\n\t\t\tscope === \"singleton\" &&\n\t\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(policy as Constructable<any>))\n\t\t) {\n\t\t\treturn container.resolve(policy as Constructable<HttpPolicy>);\n\t\t}\n\n\t\tconst singletonInstance = isSingleton(policy) ? container.resolve(policy as any) : undefined;\n\n\t\treturn (context: HttpContext) => {\n\t\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(policy as any)) as any;\n\n\t\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\t\tprofiler.recordTiming(`pro.policy.resolve:${(policy as any).name || \"anonymous\"}`, profiler.now() - startedAt);\n\t\t\t}\n\n\t\t\tconst checkStartedAt = startedAt;\n\t\t\tconst result = resolved.check(context);\n\t\t\tif (startedAt !== 0) {\n\t\t\t\tif (result instanceof Promise) {\n\t\t\t\t\treturn result.finally(() => {\n\t\t\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t\t\t`pro.policy.check:${(policy as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\t\t\tprofiler.now() - checkStartedAt,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t`pro.policy.check:${(policy as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\tprofiler.now() - checkStartedAt,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tif (typeof policy === \"function\") {\n\t\tlet cached: { check(ctx: HttpContext): boolean | Promise<boolean> } | undefined;\n\t\tlet pending: Promise<void> | undefined;\n\t\treturn (context: HttpContext) => {\n\t\t\tif (cached) return cached.check(context);\n\t\t\tif (!pending) {\n\t\t\t\tpending = Promise.resolve((policy as any)()).then((resolved: unknown) => {\n\t\t\t\t\tif (resolved && typeof resolved === \"object\" && \"check\" in resolved) {\n\t\t\t\t\t\tcached = resolved as { check(ctx: HttpContext): boolean | Promise<boolean> };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tpending = undefined;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn pending.then(() => {\n\t\t\t\tif (cached) return cached.check(context);\n\t\t\t\treturn (policy as (ctx: HttpContext) => boolean | Promise<boolean>)(context);\n\t\t\t});\n\t\t};\n\t}\n\n\treturn policy;\n}\n\nfunction resolveMiddlewareInstance(\n\tcontainer: AthosContainer,\n\tmiddleware: any,\n\troutes?: any,\n): HttpMiddleware {\n\tconst metadata = getInjectableMetadata(middleware);\n\tconst scope = metadata?.scope ?? \"singleton\";\n\n\tconst hasStaticForRoutes = typeof middleware?.forRoutes === \"function\";\n\tconst singletonInstance = isSingleton(middleware) ? container.resolve(middleware as any) : undefined;\n\n\tif (\n\t\troutes === undefined &&\n\t\t!hasStaticForRoutes &&\n\t\tscope === \"singleton\" &&\n\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(middleware as Constructable<any>))\n\t) {\n\t\tconst resolved = container.resolve(middleware as Constructable<HttpMiddleware>) as any;\n\t\tif (typeof resolved?.forRoutes !== \"function\") {\n\t\t\treturn resolved as HttpMiddleware;\n\t\t}\n\t}\n\n\treturn (context: HttpContext, next: () => HttpResponse | Promise<HttpResponse>) => {\n\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(middleware as any)) as any;\n\n\t\tconst matcherInput = routes ?? resolved?.forRoutes?.();\n\t\tif (!matchesRouteMatchers(context.request.path, matcherInput)) {\n\t\t\treturn next();\n\t\t}\n\n\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.middleware.resolve:${(middleware as any).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - startedAt,\n\t\t\t);\n\t\t}\n\n\t\tif (resolved && typeof resolved.handle === \"function\") {\n\t\t\treturn runClassMiddleware(resolved, context, next);\n\t\t}\n\n\t\tconst handleStartedAt = startedAt;\n\t\tconst result = resolved(context, next);\n\t\tif (startedAt !== 0) {\n\t\t\tif (result instanceof Promise) {\n\t\t\t\treturn result.finally(() => {\n\t\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t\t`pro.middleware.invoke:${(middleware as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\t\tprofiler.now() - handleStartedAt,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.middleware.invoke:${(middleware as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - handleStartedAt,\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n}\n\nexport function normalizeProInterceptorInput(container: AthosContainer, interceptor: HttpInterceptor): HttpInterceptor {\n\tif (!isRegisteredConstructable(container, interceptor)) {\n\t\tif (typeof interceptor === \"function\") {\n\t\t\tlet cached: any;\n\t\t\tlet pending: Promise<any> | undefined;\n\t\t\treturn ((context: HttpContext, next: () => Promise<HttpResponse>): Promise<HttpResponse> => {\n\t\t\t\tif (cached !== undefined) return Promise.resolve(cached.intercept(context, next));\n\t\t\t\tif (!pending) pending = Promise.resolve((interceptor as any)()).then((resolved: any) => {\n\t\t\t\t\tcached = resolved;\n\t\t\t\t\tpending = undefined;\n\t\t\t\t\treturn resolved;\n\t\t\t\t});\n\t\t\t\treturn pending.then((resolved: any) => resolved.intercept(context, next));\n\t\t\t}) as unknown as HttpInterceptor;\n\t\t}\n\t\treturn interceptor;\n\t}\n\n\tconst metadata = getInjectableMetadata(interceptor);\n\tconst scope = metadata?.scope ?? \"singleton\";\n\n\tif (\n\t\tscope === \"singleton\" &&\n\t\t(typeof container.requiresScope !== \"function\" || !container.requiresScope(interceptor as Constructable<any>))\n\t) {\n\t\treturn container.resolve(interceptor as Constructable<HttpInterceptor>);\n\t}\n\n\tconst singletonInstance = isSingleton(interceptor) ? container.resolve(interceptor as any) : undefined;\n\n\treturn ((context: HttpContext, next: () => Promise<HttpResponse>): Promise<HttpResponse> => {\n\t\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\t\tconst startedAt = profiler.enabled ? profiler.now() : 0;\n\n\t\tconst resolved = (singletonInstance ?? context.execution.services.resolve(interceptor as any)) as any;\n\n\t\tif (startedAt !== 0 && !singletonInstance) {\n\t\t\tprofiler.recordTiming(\n\t\t\t\t`pro.interceptor.resolve:${(interceptor as any).name || \"anonymous\"}`,\n\t\t\t\tprofiler.now() - startedAt,\n\t\t\t);\n\t\t}\n\n\t\tconst interceptStartedAt = startedAt;\n\t\tconst result: Promise<HttpResponse> = Promise.resolve(resolved.intercept(context, next));\n\t\tif (startedAt !== 0) {\n\t\t\treturn result.finally(() => {\n\t\t\t\tprofiler.recordTiming(\n\t\t\t\t\t`pro.interceptor.invoke:${(interceptor as Constructable<any>).name || \"anonymous\"}`,\n\t\t\t\t\tprofiler.now() - interceptStartedAt,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}) as unknown as HttpInterceptor;\n}\n\nexport function getOrCreateProRequestScope(context: HttpContext, container: AthosContainer): AthosContainer {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\n\tif ((context.execution as any).container) {\n\t\tprofiler.incrementCounter(\"pro.scope.core_reused\");\n\t\treturn (context.execution as any).container;\n\t}\n\n\tconst existing = (context.state as { get<T>(k: string | symbol): T | undefined }).get<AthosContainer>(\n\t\tPRO_REQUEST_SCOPE_STATE_KEY,\n\t);\n\tif (existing) {\n\t\tprofiler.incrementCounter(\"pro.scope.state_reused\");\n\t\treturn existing;\n\t}\n\n\tconst startedAt = profileStart(profiler);\n\tconst scoped = container.createScope();\n\tcontext.state.set(PRO_REQUEST_SCOPE_STATE_KEY, scoped);\n\tprofiler.incrementCounter(\"pro.scope.created\");\n\tprofileEnd(profiler, \"pro.scope.create\", startedAt);\n\treturn scoped;\n}\n\nexport function releaseProRequestScope(context: HttpContext): void | Promise<void> {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\tconst scoped = ((context.state as { get<T>(k: string | symbol): T | undefined }).get<AthosContainer>(\n\t\tPRO_REQUEST_SCOPE_STATE_KEY,\n\t) ?? (context.execution as any).container) as any;\n\tif (!scoped) {\n\t\tprofiler.incrementCounter(\"pro.scope.release_missing\");\n\t\treturn;\n\t}\n\n\tcontext.state.set(PRO_REQUEST_SCOPE_STATE_KEY, undefined);\n\tprofiler.incrementCounter(\"pro.scope.release_calls\");\n\tconst startedAt = profileStart(profiler);\n\tconst result = scoped.dispose();\n\tif (result instanceof Promise) {\n\t\treturn result.finally(() => {\n\t\t\tprofileEnd(profiler, \"pro.scope.release\", startedAt);\n\t\t});\n\t}\n\tprofileEnd(profiler, \"pro.scope.release\", startedAt);\n\treturn result;\n}\n\nfunction runClassMiddleware(\n\tmiddleware: { handle(req: any, res: any, next: (error?: unknown) => void | Promise<void>): unknown },\n\tcontext: HttpContext,\n\tnext: () => HttpResponse | Promise<HttpResponse>,\n): HttpResponse | Promise<HttpResponse> {\n\tconst profiler = context.kernel?.profiler as InternalProfiler;\n\tlet syncResult: HttpResponse | undefined;\n\tlet asyncPromise: Promise<HttpResponse> | undefined;\n\tconst startedAt = profileStart(profiler);\n\n\tconst returned = middleware.handle(context.request, context.execution.response, (error?: unknown) => {\n\t\tif (error !== undefined) throw error;\n\t\tconst res = next();\n\t\tif (res instanceof Promise) {\n\t\t\tasyncPromise = res;\n\t\t} else {\n\t\t\tsyncResult = res;\n\t\t}\n\t});\n\n\tif (returned instanceof Promise) {\n\t\treturn (returned as Promise<unknown>).finally(() => {\n\t\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\t}) as any;\n\t}\n\tif (returned !== undefined) {\n\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\treturn returned as HttpResponse;\n\t}\n\tif (asyncPromise) {\n\t\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\t\treturn asyncPromise;\n\t}\n\tprofileEnd(profiler, `pro.middleware.class_handle:${middleware.constructor?.name || \"anonymous\"}`, startedAt);\n\treturn syncResult!;\n}\n"],"names":["isRegisteredConstructable","container","value","has","isSingleton","target","metadata","getInjectableMetadata","scope","isProMiddlewareRegistration","normalizeRouteMatchers","input","undefined","Array","isArray","matchesRouteMatchers","path","matchers","length","some","matcher","RegExp","test","matchPathPattern","compilePathPattern","end","normalizeProMiddlewareInput","middleware","routes","scopedMiddleware","forRoutes","cached","pending","resolveInstance","resolved","run","context","next","matcherInput","request","handle","runClassMiddleware","Promise","resolve","then","resolveMiddlewareInstance","normalizeConfiguredProMiddlewareInput","use","normalizeProPolicyInput","policy","requiresScope","singletonInstance","profiler","kernel","startedAt","enabled","now","execution","services","recordTiming","name","checkStartedAt","result","check","finally","hasStaticForRoutes","handleStartedAt","normalizeProInterceptorInput","interceptor","intercept","interceptStartedAt","syncResult","asyncPromise","profileStart","returned","response","error","res","profileEnd"],"mappings":"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"}