@kithinji/orca 1.0.26 → 1.0.29
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.
- package/dist/browser/index.iife.js +429 -714
- package/dist/browser/index.iife.js.map +4 -4
- package/dist/browser/index.mjs +1272 -750
- package/dist/browser/index.mjs.map +4 -4
- package/dist/node/index.cjs +563 -676
- package/dist/node/index.cjs.map +4 -4
- package/dist/node/index.mjs +543 -647
- package/dist/node/index.mjs.map +4 -4
- package/dist/types/browser/factory.d.ts +1 -1
- package/dist/types/browser/factory.d.ts.map +1 -1
- package/dist/types/browser/modules/router_module/navigate.d.ts +13 -5
- package/dist/types/browser/modules/router_module/navigate.d.ts.map +1 -1
- package/dist/types/browser/modules/router_module/outlet.d.ts +3 -2
- package/dist/types/browser/modules/router_module/outlet.d.ts.map +1 -1
- package/dist/types/index.browser.d.ts +0 -2
- package/dist/types/index.browser.d.ts.map +1 -1
- package/dist/types/index.node.d.ts +0 -2
- package/dist/types/index.node.d.ts.map +1 -1
- package/dist/types/node/factory.d.ts +1 -0
- package/dist/types/node/factory.d.ts.map +1 -1
- package/dist/types/shared/decorators.d.ts +13 -1
- package/dist/types/shared/decorators.d.ts.map +1 -1
- package/dist/types/shared/dom/osc.d.ts.map +1 -1
- package/dist/types/shared/index.d.ts +0 -2
- package/dist/types/shared/index.d.ts.map +1 -1
- package/dist/types/shared/jsx/types.d.ts +3 -0
- package/dist/types/shared/jsx/types.d.ts.map +1 -1
- package/dist/types/shared/module/compiler.d.ts +3 -0
- package/dist/types/shared/module/compiler.d.ts.map +1 -1
- package/dist/types/shared/module/injector.d.ts +8 -1
- package/dist/types/shared/module/injector.d.ts.map +1 -1
- package/dist/types/shared/module_libs/http_client/module.d.ts +1 -1
- package/dist/types/shared/module_libs/http_client/module.d.ts.map +1 -1
- package/dist/types/shared/signal/index.d.ts +1 -0
- package/dist/types/shared/signal/index.d.ts.map +1 -1
- package/dist/types/shared/signal/utils.d.ts +4 -0
- package/dist/types/shared/signal/utils.d.ts.map +1 -0
- package/dist/types/shared/symbols.d.ts +3 -0
- package/dist/types/shared/symbols.d.ts.map +1 -1
- package/dist/types/shared/types.d.ts +40 -4
- package/dist/types/shared/types.d.ts.map +1 -1
- package/package.json +3 -1
- package/dist/types/shared/macros/index.d.ts +0 -2
- package/dist/types/shared/macros/index.d.ts.map +0 -1
- package/dist/types/shared/observable/bsubject.d.ts +0 -11
- package/dist/types/shared/observable/bsubject.d.ts.map +0 -1
- package/dist/types/shared/observable/index.d.ts +0 -4
- package/dist/types/shared/observable/index.d.ts.map +0 -1
- package/dist/types/shared/observable/observable.d.ts +0 -39
- package/dist/types/shared/observable/observable.d.ts.map +0 -1
- package/dist/types/shared/observable/subject.d.ts +0 -15
- package/dist/types/shared/observable/subject.d.ts.map +0 -1
package/dist/node/index.mjs
CHANGED
|
@@ -13,7 +13,6 @@ __export(shared_exports, {
|
|
|
13
13
|
BOOTSTRAP: () => BOOTSTRAP,
|
|
14
14
|
BOOTSTRAP_VNODE: () => BOOTSTRAP_VNODE,
|
|
15
15
|
BaseActor: () => BaseActor,
|
|
16
|
-
BehaviorSubject: () => BehaviorSubject,
|
|
17
16
|
Body: () => Body,
|
|
18
17
|
COMPONENT: () => COMPONENT,
|
|
19
18
|
COMPONENT_DEPS: () => COMPONENT_DEPS,
|
|
@@ -32,6 +31,7 @@ __export(shared_exports, {
|
|
|
32
31
|
EXPORTS_KEY: () => EXPORTS_KEY,
|
|
33
32
|
EXPRESS_ADAPTER_HOST: () => EXPRESS_ADAPTER_HOST,
|
|
34
33
|
Fragment: () => Fragment,
|
|
34
|
+
GUARDS_KEY: () => GUARDS_KEY,
|
|
35
35
|
Get: () => Get,
|
|
36
36
|
HTTP_METHOD_KEY: () => HTTP_METHOD_KEY,
|
|
37
37
|
HandlerParamType: () => HandlerParamType,
|
|
@@ -41,6 +41,7 @@ __export(shared_exports, {
|
|
|
41
41
|
IMPORTS_KEY: () => IMPORTS_KEY,
|
|
42
42
|
INJECTABLE: () => INJECTABLE,
|
|
43
43
|
INJECT_TOKENS_KEY: () => INJECT_TOKENS_KEY,
|
|
44
|
+
INTERCEPTORS_KEY: () => INTERCEPTORS_KEY,
|
|
44
45
|
Inject: () => Inject,
|
|
45
46
|
Injectable: () => Injectable,
|
|
46
47
|
Injector: () => Injector,
|
|
@@ -51,7 +52,6 @@ __export(shared_exports, {
|
|
|
51
52
|
ORCA_ELEMENT_TYPE: () => ORCA_ELEMENT_TYPE,
|
|
52
53
|
ORCA_FRAGMENT_TYPE: () => ORCA_FRAGMENT_TYPE,
|
|
53
54
|
OSC: () => OSC,
|
|
54
|
-
Observable: () => Observable,
|
|
55
55
|
OrcaComponent: () => OrcaComponent,
|
|
56
56
|
PARAMS_META_KEY: () => PARAMS_META_KEY,
|
|
57
57
|
PATH_KEY: () => PATH_KEY,
|
|
@@ -61,60 +61,54 @@ __export(shared_exports, {
|
|
|
61
61
|
Post: () => Post,
|
|
62
62
|
ProviderNormalizer: () => ProviderNormalizer,
|
|
63
63
|
Query: () => Query,
|
|
64
|
+
REQUEST_CONTEXT: () => REQUEST_CONTEXT,
|
|
65
|
+
Req: () => Req,
|
|
66
|
+
Res: () => Res,
|
|
64
67
|
SIGNATURE_METADATA_KEY: () => SIGNATURE_METADATA_KEY,
|
|
65
68
|
SSE_ROUTE: () => SSE_ROUTE,
|
|
69
|
+
SetMetadata: () => SetMetadata,
|
|
70
|
+
Shared: () => Shared,
|
|
66
71
|
Signature: () => Signature,
|
|
67
72
|
Sse: () => Sse,
|
|
68
73
|
StreamRenderer: () => StreamRenderer,
|
|
69
74
|
StringRenderer: () => StringRenderer,
|
|
70
|
-
Subject: () => Subject,
|
|
71
75
|
Subscribe: () => Subscribe,
|
|
76
|
+
UploadedFile: () => UploadedFile,
|
|
77
|
+
UploadedFiles: () => UploadedFiles,
|
|
78
|
+
UseGuards: () => UseGuards,
|
|
79
|
+
UseInterceptors: () => UseInterceptors,
|
|
72
80
|
VNode: () => VNode,
|
|
73
|
-
|
|
81
|
+
applyDecorators: () => applyDecorators,
|
|
74
82
|
batch: () => batch,
|
|
75
|
-
catchError: () => catchError,
|
|
76
83
|
collectAllProvidersFromNode: () => collectAllProvidersFromNode,
|
|
77
84
|
computed: () => computed,
|
|
78
|
-
concatMap: () => concatMap,
|
|
79
85
|
createRoot: () => createRoot,
|
|
80
|
-
debounceTime: () => debounceTime,
|
|
81
|
-
distinctUntilChanged: () => distinctUntilChanged,
|
|
82
86
|
effect: () => effect,
|
|
83
|
-
filter: () => filter,
|
|
84
|
-
from: () => from,
|
|
85
87
|
getCurrentInjector: () => getCurrentInjector,
|
|
88
|
+
getGuards: () => getGuards,
|
|
89
|
+
getInterceptors: () => getInterceptors,
|
|
86
90
|
getSignatureMetadata: () => getSignatureMetadata,
|
|
87
91
|
hasSignature: () => hasSignature,
|
|
88
|
-
interval: () => interval,
|
|
89
92
|
isClassComponent: () => isClassComponent,
|
|
90
93
|
isFragment: () => isFragment,
|
|
91
94
|
isIntrinsicElement: () => isIntrinsicElement,
|
|
92
|
-
isObservable: () => isObservable,
|
|
93
95
|
isSignal: () => isSignal,
|
|
94
96
|
jsx: () => jsx,
|
|
95
97
|
jsxs: () => jsxs,
|
|
96
|
-
|
|
97
|
-
mergeMap: () => mergeMap,
|
|
98
|
-
observable: () => observable,
|
|
99
|
-
of: () => of,
|
|
98
|
+
mixin: () => mixin,
|
|
100
99
|
parseSignatureSchemas: () => parseSignatureSchemas,
|
|
101
|
-
reduce: () => reduce,
|
|
102
|
-
scan: () => scan,
|
|
103
100
|
setCurrentInjector: () => setCurrentInjector,
|
|
104
101
|
signal: () => signal,
|
|
105
|
-
skip: () => skip,
|
|
106
|
-
startWith: () => startWith,
|
|
107
102
|
store: () => store,
|
|
108
|
-
switchMap: () => switchMap,
|
|
109
103
|
symbolValueReplacer: () => symbolValueReplacer,
|
|
110
104
|
symbolValueReviver: () => symbolValueReviver,
|
|
111
|
-
take: () => take,
|
|
112
|
-
tap: () => tap,
|
|
113
|
-
throttleTime: () => throttleTime,
|
|
114
105
|
toSignal: () => toSignal,
|
|
115
106
|
untracked: () => untracked
|
|
116
107
|
});
|
|
117
108
|
|
|
109
|
+
// src/shared/decorators.ts
|
|
110
|
+
import { uid } from "uid";
|
|
111
|
+
|
|
118
112
|
// src/shared/store.ts
|
|
119
113
|
var Store = class {
|
|
120
114
|
constructor() {
|
|
@@ -159,6 +153,9 @@ var EXPRESS_ADAPTER_HOST = /* @__PURE__ */ Symbol("orca:express");
|
|
|
159
153
|
var SIGNATURE_METADATA_KEY = /* @__PURE__ */ Symbol("orca:signature:schemas");
|
|
160
154
|
var SSE_ROUTE = /* @__PURE__ */ Symbol("orca:sse:route");
|
|
161
155
|
var EVENT_HANDLER = /* @__PURE__ */ Symbol("orca:event:handler");
|
|
156
|
+
var INTERCEPTORS_KEY = /* @__PURE__ */ Symbol("interceptors");
|
|
157
|
+
var GUARDS_KEY = /* @__PURE__ */ Symbol("guards");
|
|
158
|
+
var REQUEST_CONTEXT = /* @__PURE__ */ Symbol("orca:request");
|
|
162
159
|
var ERROR_ELEMENT = /* @__PURE__ */ Symbol.for("orca:error");
|
|
163
160
|
var ORCA_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("orca:element");
|
|
164
161
|
var ORCA_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("orca:fragment");
|
|
@@ -173,6 +170,8 @@ var HandlerParamType = /* @__PURE__ */ ((HandlerParamType2) => {
|
|
|
173
170
|
HandlerParamType2["HEADERS"] = "HEADERS";
|
|
174
171
|
HandlerParamType2["REQUEST"] = "REQUEST";
|
|
175
172
|
HandlerParamType2["RESPONSE"] = "RESPONSE";
|
|
173
|
+
HandlerParamType2["FILE"] = "FILE";
|
|
174
|
+
HandlerParamType2["FILES"] = "FILES";
|
|
176
175
|
return HandlerParamType2;
|
|
177
176
|
})(HandlerParamType || {});
|
|
178
177
|
var HttpMethod = /* @__PURE__ */ ((HttpMethod2) => {
|
|
@@ -198,6 +197,13 @@ function Injectable() {
|
|
|
198
197
|
return target;
|
|
199
198
|
};
|
|
200
199
|
}
|
|
200
|
+
function mixin(mixinClass) {
|
|
201
|
+
Object.defineProperty(mixinClass, "name", {
|
|
202
|
+
value: uid(21)
|
|
203
|
+
});
|
|
204
|
+
Injectable()(mixinClass);
|
|
205
|
+
return mixinClass;
|
|
206
|
+
}
|
|
201
207
|
function Component(params = {}) {
|
|
202
208
|
return function(target) {
|
|
203
209
|
store.update("components", (current) => {
|
|
@@ -214,7 +220,7 @@ function Component(params = {}) {
|
|
|
214
220
|
}
|
|
215
221
|
Reflect.defineMetadata(COMPONENT, true, target);
|
|
216
222
|
Reflect.defineMetadata(COMPONENT_PROVIDERS, params.providers || [], target);
|
|
217
|
-
Reflect.defineMetadata(COMPONENT_DEPS, params.
|
|
223
|
+
Reflect.defineMetadata(COMPONENT_DEPS, params.inject || [], target);
|
|
218
224
|
return target;
|
|
219
225
|
};
|
|
220
226
|
}
|
|
@@ -258,6 +264,18 @@ function Body(key) {
|
|
|
258
264
|
function Query(key) {
|
|
259
265
|
return getHandlerParamDecorator("QUERY" /* QUERY */, key);
|
|
260
266
|
}
|
|
267
|
+
function UploadedFile() {
|
|
268
|
+
return getHandlerParamDecorator("FILE" /* FILE */);
|
|
269
|
+
}
|
|
270
|
+
function UploadedFiles() {
|
|
271
|
+
return getHandlerParamDecorator("FILES" /* FILES */);
|
|
272
|
+
}
|
|
273
|
+
function Req() {
|
|
274
|
+
return getHandlerParamDecorator("REQUEST" /* REQUEST */);
|
|
275
|
+
}
|
|
276
|
+
function Res() {
|
|
277
|
+
return getHandlerParamDecorator("RESPONSE" /* RESPONSE */);
|
|
278
|
+
}
|
|
261
279
|
function getRouteDecorator(httpMethod, path2) {
|
|
262
280
|
return function(target, key, descriptor) {
|
|
263
281
|
Reflect.defineMetadata(HTTP_METHOD_KEY, httpMethod, target, key);
|
|
@@ -277,6 +295,10 @@ function Sse(path2) {
|
|
|
277
295
|
Reflect.defineMetadata(HTTP_METHOD_KEY, "get" /* GET */, target, propertyKey);
|
|
278
296
|
};
|
|
279
297
|
}
|
|
298
|
+
function Shared() {
|
|
299
|
+
return function(target, _propertyKey, parameterIndex) {
|
|
300
|
+
};
|
|
301
|
+
}
|
|
280
302
|
function Subscribe(pattern) {
|
|
281
303
|
return function(target, propertyKey, descriptor) {
|
|
282
304
|
Reflect.defineMetadata(EVENT_HANDLER, pattern, target, propertyKey);
|
|
@@ -315,6 +337,61 @@ function parseSignatureSchemas(schemas, paramCount) {
|
|
|
315
337
|
}
|
|
316
338
|
return { paramSchemas, returnSchema };
|
|
317
339
|
}
|
|
340
|
+
function UseInterceptors(...interceptors) {
|
|
341
|
+
return function(target, propertyKey, descriptor) {
|
|
342
|
+
if (propertyKey && descriptor) {
|
|
343
|
+
const existing = Reflect.getMetadata(INTERCEPTORS_KEY, target, propertyKey) || [];
|
|
344
|
+
Reflect.defineMetadata(INTERCEPTORS_KEY, [...existing, ...interceptors], target, propertyKey);
|
|
345
|
+
} else {
|
|
346
|
+
const existing = Reflect.getMetadata(INTERCEPTORS_KEY, target) || [];
|
|
347
|
+
Reflect.defineMetadata(INTERCEPTORS_KEY, [...existing, ...interceptors], target);
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function getInterceptors(target, propertyKey) {
|
|
352
|
+
const classInterceptors = Reflect.getMetadata(INTERCEPTORS_KEY, target.constructor) || [];
|
|
353
|
+
const methodInterceptors = Reflect.getMetadata(INTERCEPTORS_KEY, target, propertyKey) || [];
|
|
354
|
+
return [...classInterceptors, ...methodInterceptors];
|
|
355
|
+
}
|
|
356
|
+
function UseGuards(...guards) {
|
|
357
|
+
return function(target, propertyKey, descriptor) {
|
|
358
|
+
if (propertyKey && descriptor) {
|
|
359
|
+
const existing = Reflect.getMetadata(GUARDS_KEY, target, propertyKey) || [];
|
|
360
|
+
Reflect.defineMetadata(GUARDS_KEY, [...existing, ...guards], target, propertyKey);
|
|
361
|
+
} else {
|
|
362
|
+
const existing = Reflect.getMetadata(GUARDS_KEY, target) || [];
|
|
363
|
+
Reflect.defineMetadata(GUARDS_KEY, [...existing, ...guards], target);
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
function getGuards(target, propertyKey) {
|
|
368
|
+
const classGuards = Reflect.getMetadata(GUARDS_KEY, target.constructor) || [];
|
|
369
|
+
const methodGuards = Reflect.getMetadata(GUARDS_KEY, target, propertyKey) || [];
|
|
370
|
+
return [...classGuards, ...methodGuards];
|
|
371
|
+
}
|
|
372
|
+
var SetMetadata = (metadataKey, metadataValue) => {
|
|
373
|
+
const decoratorFactory = (target, key, descriptor) => {
|
|
374
|
+
if (descriptor) {
|
|
375
|
+
Reflect.defineMetadata(metadataKey, metadataValue, descriptor.value);
|
|
376
|
+
return descriptor;
|
|
377
|
+
}
|
|
378
|
+
Reflect.defineMetadata(metadataKey, metadataValue, target);
|
|
379
|
+
return target;
|
|
380
|
+
};
|
|
381
|
+
decoratorFactory.KEY = metadataKey;
|
|
382
|
+
return decoratorFactory;
|
|
383
|
+
};
|
|
384
|
+
function applyDecorators(...decorators) {
|
|
385
|
+
return (target, propertyKey, descriptor) => {
|
|
386
|
+
for (const decorator of decorators) {
|
|
387
|
+
if (target instanceof Function && !descriptor) {
|
|
388
|
+
decorator(target);
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
decorator(target, propertyKey, descriptor);
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
}
|
|
318
395
|
|
|
319
396
|
// src/shared/module/node.ts
|
|
320
397
|
var ProviderNormalizer = class {
|
|
@@ -376,10 +453,11 @@ var Compiler = class {
|
|
|
376
453
|
}
|
|
377
454
|
createNode(moduleOrDynamic) {
|
|
378
455
|
const target = this.isDynamicModule(moduleOrDynamic) ? moduleOrDynamic.module : moduleOrDynamic;
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
456
|
+
const nodeKey = this.getNodeKey(moduleOrDynamic, target);
|
|
457
|
+
if (this.nodes.has(nodeKey))
|
|
458
|
+
return this.nodes.get(nodeKey);
|
|
459
|
+
const node = new Node(nodeKey);
|
|
460
|
+
this.nodes.set(nodeKey, node);
|
|
383
461
|
const imports = this.getImports(moduleOrDynamic);
|
|
384
462
|
node.setChildren(imports.map((imp) => this.createNode(imp)));
|
|
385
463
|
const providers = this.getProviders(moduleOrDynamic);
|
|
@@ -418,6 +496,38 @@ var Compiler = class {
|
|
|
418
496
|
this.getExports(moduleOrDynamic).forEach((exp) => node.addExport(exp));
|
|
419
497
|
return node;
|
|
420
498
|
}
|
|
499
|
+
getNodeKey(moduleOrDynamic, target) {
|
|
500
|
+
if (this.isDynamicModule(moduleOrDynamic)) {
|
|
501
|
+
if (moduleOrDynamic.__uniqueId) {
|
|
502
|
+
return `${target.name}:${moduleOrDynamic.__uniqueId}`;
|
|
503
|
+
}
|
|
504
|
+
const autoId = this.generateAutoId(moduleOrDynamic);
|
|
505
|
+
if (autoId) {
|
|
506
|
+
return `${target.name}:${autoId}`;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
return target.name;
|
|
510
|
+
}
|
|
511
|
+
generateAutoId(dynamicModule) {
|
|
512
|
+
const parts = [];
|
|
513
|
+
if (dynamicModule.providers && dynamicModule.providers.length > 0) {
|
|
514
|
+
const providerTokens = dynamicModule.providers.map((p) => this.getProviderToken(p)).map((t) => typeof t === "function" ? t.name : String(t)).sort().join(",");
|
|
515
|
+
parts.push(`p:${providerTokens}`);
|
|
516
|
+
}
|
|
517
|
+
if (dynamicModule.exports && dynamicModule.exports.length > 0) {
|
|
518
|
+
const exportTokens = dynamicModule.exports.map((t) => typeof t === "function" ? t.name : String(t)).sort().join(",");
|
|
519
|
+
parts.push(`e:${exportTokens}`);
|
|
520
|
+
}
|
|
521
|
+
if (dynamicModule.controllers && dynamicModule.controllers.length > 0) {
|
|
522
|
+
const controllerNames = dynamicModule.controllers.map((c) => c.name).sort().join(",");
|
|
523
|
+
parts.push(`c:${controllerNames}`);
|
|
524
|
+
}
|
|
525
|
+
if (dynamicModule.declarations && dynamicModule.declarations.length > 0) {
|
|
526
|
+
const declarationNames = dynamicModule.declarations.map((d) => d.name).sort().join(",");
|
|
527
|
+
parts.push(`d:${declarationNames}`);
|
|
528
|
+
}
|
|
529
|
+
return parts.length > 0 ? parts.join("|") : null;
|
|
530
|
+
}
|
|
421
531
|
validate(rootNode) {
|
|
422
532
|
const errors = [];
|
|
423
533
|
const allNodes = /* @__PURE__ */ new Map();
|
|
@@ -514,14 +624,23 @@ var Compiler = class {
|
|
|
514
624
|
return typeof provider === "function" ? provider : provider.provide;
|
|
515
625
|
}
|
|
516
626
|
extractDependencies(item) {
|
|
517
|
-
if (typeof item === "object" && "
|
|
518
|
-
return item.
|
|
627
|
+
if (typeof item === "object" && "inject" in item && item.inject) {
|
|
628
|
+
return item.inject.filter((dep) => {
|
|
629
|
+
if (this.isOptionalDependency(dep)) {
|
|
630
|
+
return !dep.optional;
|
|
631
|
+
}
|
|
632
|
+
return true;
|
|
633
|
+
}).map((dep) => this.isOptionalDependency(dep) ? dep.token : dep);
|
|
634
|
+
}
|
|
519
635
|
if (typeof item === "object" && item.useClass)
|
|
520
636
|
return this.getConstructorDependencies(item.useClass);
|
|
521
637
|
if (typeof item === "function")
|
|
522
638
|
return this.getConstructorDependencies(item);
|
|
523
639
|
return [];
|
|
524
640
|
}
|
|
641
|
+
isOptionalDependency(dep) {
|
|
642
|
+
return typeof dep === "object" && "token" in dep && "optional" in dep;
|
|
643
|
+
}
|
|
525
644
|
getConstructorDependencies(constructor) {
|
|
526
645
|
const injectTokens = Reflect.getOwnMetadata(INJECT_TOKENS_KEY, constructor) || /* @__PURE__ */ new Map();
|
|
527
646
|
const paramTypes = Reflect.getMetadata(DESIGN_PARAMTYPES, constructor) || [];
|
|
@@ -596,9 +715,10 @@ var Compiler = class {
|
|
|
596
715
|
};
|
|
597
716
|
|
|
598
717
|
// src/shared/module/injector.ts
|
|
599
|
-
var Injector = class {
|
|
718
|
+
var Injector = class _Injector {
|
|
600
719
|
constructor(providers, parent) {
|
|
601
720
|
this.instanceCache = /* @__PURE__ */ new Map();
|
|
721
|
+
this.promiseCache = /* @__PURE__ */ new Map();
|
|
602
722
|
this.providerMap = /* @__PURE__ */ new Map();
|
|
603
723
|
this.parent = parent;
|
|
604
724
|
providers.forEach((p) => {
|
|
@@ -606,14 +726,20 @@ var Injector = class {
|
|
|
606
726
|
this.providerMap.set(normalized.provide, normalized);
|
|
607
727
|
});
|
|
608
728
|
}
|
|
729
|
+
createChild(providers) {
|
|
730
|
+
return new _Injector(providers, this);
|
|
731
|
+
}
|
|
609
732
|
addProvider(provider) {
|
|
610
733
|
const normalized = ProviderNormalizer.normalize(provider);
|
|
611
734
|
this.providerMap.set(normalized.provide, normalized);
|
|
612
735
|
}
|
|
613
|
-
resolve(token) {
|
|
736
|
+
async resolve(token) {
|
|
614
737
|
if (this.instanceCache.has(token)) {
|
|
615
738
|
return this.instanceCache.get(token);
|
|
616
739
|
}
|
|
740
|
+
if (this.promiseCache.has(token)) {
|
|
741
|
+
return this.promiseCache.get(token);
|
|
742
|
+
}
|
|
617
743
|
const provider = this.providerMap.get(token);
|
|
618
744
|
if (!provider) {
|
|
619
745
|
if (this.parent) {
|
|
@@ -623,23 +749,101 @@ var Injector = class {
|
|
|
623
749
|
`No provider for token: ${typeof token === "function" ? token.name : String(token)}`
|
|
624
750
|
);
|
|
625
751
|
}
|
|
626
|
-
const
|
|
752
|
+
const instancePromise = this.createInstance(provider);
|
|
753
|
+
this.promiseCache.set(token, instancePromise);
|
|
754
|
+
try {
|
|
755
|
+
const instance = await instancePromise;
|
|
756
|
+
if (provider.scope !== "transient") {
|
|
757
|
+
this.instanceCache.set(token, instance);
|
|
758
|
+
}
|
|
759
|
+
return instance;
|
|
760
|
+
} finally {
|
|
761
|
+
this.promiseCache.delete(token);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
resolveSync(token) {
|
|
765
|
+
if (this.instanceCache.has(token)) {
|
|
766
|
+
return this.instanceCache.get(token);
|
|
767
|
+
}
|
|
768
|
+
const provider = this.providerMap.get(token);
|
|
769
|
+
if (!provider) {
|
|
770
|
+
if (this.parent) {
|
|
771
|
+
return this.parent.resolveSync(token);
|
|
772
|
+
}
|
|
773
|
+
throw new Error(
|
|
774
|
+
`No provider for token: ${typeof token === "function" ? token.name : String(token)}`
|
|
775
|
+
);
|
|
776
|
+
}
|
|
777
|
+
const instance = this.createInstanceSync(provider);
|
|
627
778
|
if (provider.scope !== "transient") {
|
|
628
779
|
this.instanceCache.set(token, instance);
|
|
629
780
|
}
|
|
630
781
|
return instance;
|
|
631
782
|
}
|
|
632
|
-
createInstance(provider) {
|
|
633
|
-
if ("useValue" in provider
|
|
634
|
-
return provider.useValue;
|
|
783
|
+
async createInstance(provider) {
|
|
784
|
+
if ("useValue" in provider) return provider.useValue;
|
|
635
785
|
if (provider.useExisting) return this.resolve(provider.useExisting);
|
|
636
786
|
if (provider.useFactory) {
|
|
637
|
-
const deps2 =
|
|
787
|
+
const deps2 = await Promise.all(
|
|
788
|
+
(provider.inject || []).map((d) => this.resolveDependency(d))
|
|
789
|
+
);
|
|
638
790
|
return provider.useFactory(...deps2);
|
|
639
791
|
}
|
|
640
792
|
const Ctor = provider.useClass || provider.provide;
|
|
641
|
-
const deps = provider.
|
|
642
|
-
|
|
793
|
+
const deps = provider.inject || this.getConstructorDeps(Ctor);
|
|
794
|
+
const resolvedDeps = await Promise.all(
|
|
795
|
+
deps.map((d) => this.resolveDependency(d))
|
|
796
|
+
);
|
|
797
|
+
return new Ctor(...resolvedDeps);
|
|
798
|
+
}
|
|
799
|
+
createInstanceSync(provider) {
|
|
800
|
+
if ("useValue" in provider && provider.useValue !== void 0)
|
|
801
|
+
return provider.useValue;
|
|
802
|
+
if (provider.useExisting) return this.resolveSync(provider.useExisting);
|
|
803
|
+
if (provider.useFactory) {
|
|
804
|
+
const deps2 = (provider.inject || []).map(
|
|
805
|
+
(d) => this.resolveDependencySync(d)
|
|
806
|
+
);
|
|
807
|
+
const result = provider.useFactory(...deps2);
|
|
808
|
+
if (result instanceof Promise) {
|
|
809
|
+
throw new Error(
|
|
810
|
+
`Async factory detected but resolveSync() was called. Use resolve() instead.`
|
|
811
|
+
);
|
|
812
|
+
}
|
|
813
|
+
return result;
|
|
814
|
+
}
|
|
815
|
+
const Ctor = provider.useClass || provider.provide;
|
|
816
|
+
const deps = provider.inject || this.getConstructorDeps(Ctor);
|
|
817
|
+
return new Ctor(...deps.map((d) => this.resolveDependencySync(d)));
|
|
818
|
+
}
|
|
819
|
+
async resolveDependency(dep) {
|
|
820
|
+
if (this.isOptionalDependency(dep)) {
|
|
821
|
+
try {
|
|
822
|
+
return await this.resolve(dep.token);
|
|
823
|
+
} catch (error) {
|
|
824
|
+
if (dep.optional) {
|
|
825
|
+
return void 0;
|
|
826
|
+
}
|
|
827
|
+
throw error;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
return this.resolve(dep);
|
|
831
|
+
}
|
|
832
|
+
resolveDependencySync(dep) {
|
|
833
|
+
if (this.isOptionalDependency(dep)) {
|
|
834
|
+
try {
|
|
835
|
+
return this.resolveSync(dep.token);
|
|
836
|
+
} catch (error) {
|
|
837
|
+
if (dep.optional) {
|
|
838
|
+
return void 0;
|
|
839
|
+
}
|
|
840
|
+
throw error;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
return this.resolveSync(dep);
|
|
844
|
+
}
|
|
845
|
+
isOptionalDependency(dep) {
|
|
846
|
+
return typeof dep === "object" && dep !== null && "token" in dep && "optional" in dep;
|
|
643
847
|
}
|
|
644
848
|
getConstructorDeps(ctor) {
|
|
645
849
|
const injectTokens = Reflect.getOwnMetadata(INJECT_TOKENS_KEY, ctor) || /* @__PURE__ */ new Map();
|
|
@@ -811,14 +1015,14 @@ var StringRenderer = class {
|
|
|
811
1015
|
return "";
|
|
812
1016
|
}
|
|
813
1017
|
escapeHtml(text) {
|
|
814
|
-
const
|
|
1018
|
+
const map = {
|
|
815
1019
|
"&": "&",
|
|
816
1020
|
"<": "<",
|
|
817
1021
|
">": ">",
|
|
818
1022
|
'"': """,
|
|
819
1023
|
"'": "'"
|
|
820
1024
|
};
|
|
821
|
-
return text.replace(/[&<>"']/g, (m) =>
|
|
1025
|
+
return text.replace(/[&<>"']/g, (m) => map[m]);
|
|
822
1026
|
}
|
|
823
1027
|
};
|
|
824
1028
|
|
|
@@ -932,7 +1136,7 @@ var StreamRenderer = class {
|
|
|
932
1136
|
);
|
|
933
1137
|
}
|
|
934
1138
|
}
|
|
935
|
-
const instance = componentInjector.
|
|
1139
|
+
const instance = componentInjector.resolveSync(ComponentClass);
|
|
936
1140
|
const mergedProps = Object.create(
|
|
937
1141
|
Object.getPrototypeOf(instance.props || {})
|
|
938
1142
|
);
|
|
@@ -1300,86 +1504,7 @@ function untracked(fn) {
|
|
|
1300
1504
|
}
|
|
1301
1505
|
}
|
|
1302
1506
|
|
|
1303
|
-
// src/shared/
|
|
1304
|
-
var Observable = class {
|
|
1305
|
-
constructor(producer) {
|
|
1306
|
-
this.producer = producer;
|
|
1307
|
-
this.__isObservable = true;
|
|
1308
|
-
}
|
|
1309
|
-
subscribe(observerOrNext, error, complete) {
|
|
1310
|
-
const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
|
|
1311
|
-
let cleanup;
|
|
1312
|
-
let isUnsubscribed = false;
|
|
1313
|
-
if (this.producer) {
|
|
1314
|
-
try {
|
|
1315
|
-
cleanup = this.producer(observer);
|
|
1316
|
-
} catch (err) {
|
|
1317
|
-
if (observer.error) {
|
|
1318
|
-
try {
|
|
1319
|
-
observer.error(err);
|
|
1320
|
-
} catch (e) {
|
|
1321
|
-
console.error("Error in error handler during subscription:", e);
|
|
1322
|
-
}
|
|
1323
|
-
} else {
|
|
1324
|
-
throw err;
|
|
1325
|
-
}
|
|
1326
|
-
}
|
|
1327
|
-
}
|
|
1328
|
-
return {
|
|
1329
|
-
unsubscribe: () => {
|
|
1330
|
-
if (isUnsubscribed) return;
|
|
1331
|
-
isUnsubscribed = true;
|
|
1332
|
-
if (cleanup) {
|
|
1333
|
-
try {
|
|
1334
|
-
cleanup();
|
|
1335
|
-
} catch (err) {
|
|
1336
|
-
console.error("Error during cleanup:", err);
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
};
|
|
1341
|
-
}
|
|
1342
|
-
pipe(...operations) {
|
|
1343
|
-
if (operations.length === 0) {
|
|
1344
|
-
return this;
|
|
1345
|
-
}
|
|
1346
|
-
return operations.reduce((prev, fn) => fn(prev), this);
|
|
1347
|
-
}
|
|
1348
|
-
};
|
|
1349
|
-
function from(iterable) {
|
|
1350
|
-
return new Observable((observer) => {
|
|
1351
|
-
try {
|
|
1352
|
-
for (const value of iterable) {
|
|
1353
|
-
observer.next(value);
|
|
1354
|
-
}
|
|
1355
|
-
observer.complete?.();
|
|
1356
|
-
} catch (err) {
|
|
1357
|
-
observer.error?.(err);
|
|
1358
|
-
}
|
|
1359
|
-
});
|
|
1360
|
-
}
|
|
1361
|
-
function interval(ms) {
|
|
1362
|
-
return new Observable((observer) => {
|
|
1363
|
-
let count = 0;
|
|
1364
|
-
const id = setInterval(() => {
|
|
1365
|
-
observer.next(count++);
|
|
1366
|
-
}, ms);
|
|
1367
|
-
return () => clearInterval(id);
|
|
1368
|
-
});
|
|
1369
|
-
}
|
|
1370
|
-
function of(...values) {
|
|
1371
|
-
return new Observable((observer) => {
|
|
1372
|
-
try {
|
|
1373
|
-
values.forEach((value) => observer.next(value));
|
|
1374
|
-
observer.complete?.();
|
|
1375
|
-
} catch (err) {
|
|
1376
|
-
observer.error?.(err);
|
|
1377
|
-
}
|
|
1378
|
-
});
|
|
1379
|
-
}
|
|
1380
|
-
function observable(producer) {
|
|
1381
|
-
return new Observable(producer);
|
|
1382
|
-
}
|
|
1507
|
+
// src/shared/signal/utils.ts
|
|
1383
1508
|
function toSignal(obs, instance) {
|
|
1384
1509
|
const sig = signal(void 0);
|
|
1385
1510
|
const subst = obs.subscribe((val) => {
|
|
@@ -1391,480 +1516,6 @@ function toSignal(obs, instance) {
|
|
|
1391
1516
|
];
|
|
1392
1517
|
return sig;
|
|
1393
1518
|
}
|
|
1394
|
-
function isObservable(value) {
|
|
1395
|
-
return value && value.__isObservable === true;
|
|
1396
|
-
}
|
|
1397
|
-
function map(fn) {
|
|
1398
|
-
return (source) => {
|
|
1399
|
-
return new Observable((observer) => {
|
|
1400
|
-
const subscription = source.subscribe(
|
|
1401
|
-
(value) => {
|
|
1402
|
-
try {
|
|
1403
|
-
observer.next(fn(value));
|
|
1404
|
-
} catch (err) {
|
|
1405
|
-
observer.error?.(err);
|
|
1406
|
-
}
|
|
1407
|
-
},
|
|
1408
|
-
(err) => observer.error?.(err),
|
|
1409
|
-
() => observer.complete?.()
|
|
1410
|
-
);
|
|
1411
|
-
return () => subscription.unsubscribe();
|
|
1412
|
-
});
|
|
1413
|
-
};
|
|
1414
|
-
}
|
|
1415
|
-
function filter(predicate) {
|
|
1416
|
-
return (source) => {
|
|
1417
|
-
return new Observable((observer) => {
|
|
1418
|
-
const subscription = source.subscribe(
|
|
1419
|
-
(value) => {
|
|
1420
|
-
try {
|
|
1421
|
-
if (predicate(value)) {
|
|
1422
|
-
observer.next(value);
|
|
1423
|
-
}
|
|
1424
|
-
} catch (err) {
|
|
1425
|
-
observer.error?.(err);
|
|
1426
|
-
}
|
|
1427
|
-
},
|
|
1428
|
-
(err) => observer.error?.(err),
|
|
1429
|
-
() => observer.complete?.()
|
|
1430
|
-
);
|
|
1431
|
-
return () => subscription.unsubscribe();
|
|
1432
|
-
});
|
|
1433
|
-
};
|
|
1434
|
-
}
|
|
1435
|
-
function tap(fn) {
|
|
1436
|
-
return (source) => {
|
|
1437
|
-
return new Observable((observer) => {
|
|
1438
|
-
const subscription = source.subscribe(
|
|
1439
|
-
(value) => {
|
|
1440
|
-
try {
|
|
1441
|
-
fn(value);
|
|
1442
|
-
observer.next(value);
|
|
1443
|
-
} catch (err) {
|
|
1444
|
-
observer.error?.(err);
|
|
1445
|
-
}
|
|
1446
|
-
},
|
|
1447
|
-
(err) => observer.error?.(err),
|
|
1448
|
-
() => observer.complete?.()
|
|
1449
|
-
);
|
|
1450
|
-
return () => subscription.unsubscribe();
|
|
1451
|
-
});
|
|
1452
|
-
};
|
|
1453
|
-
}
|
|
1454
|
-
function take(count) {
|
|
1455
|
-
return (source) => {
|
|
1456
|
-
return new Observable((observer) => {
|
|
1457
|
-
let taken = 0;
|
|
1458
|
-
const subscription = source.subscribe(
|
|
1459
|
-
(value) => {
|
|
1460
|
-
if (taken < count) {
|
|
1461
|
-
observer.next(value);
|
|
1462
|
-
taken++;
|
|
1463
|
-
if (taken === count) {
|
|
1464
|
-
observer.complete?.();
|
|
1465
|
-
subscription.unsubscribe();
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
},
|
|
1469
|
-
(err) => observer.error?.(err),
|
|
1470
|
-
() => observer.complete?.()
|
|
1471
|
-
);
|
|
1472
|
-
return () => subscription.unsubscribe();
|
|
1473
|
-
});
|
|
1474
|
-
};
|
|
1475
|
-
}
|
|
1476
|
-
function skip(count) {
|
|
1477
|
-
return (source) => {
|
|
1478
|
-
return new Observable((observer) => {
|
|
1479
|
-
let skipped = 0;
|
|
1480
|
-
const subscription = source.subscribe(
|
|
1481
|
-
(value) => {
|
|
1482
|
-
if (skipped < count) {
|
|
1483
|
-
skipped++;
|
|
1484
|
-
} else {
|
|
1485
|
-
observer.next(value);
|
|
1486
|
-
}
|
|
1487
|
-
},
|
|
1488
|
-
(err) => observer.error?.(err),
|
|
1489
|
-
() => observer.complete?.()
|
|
1490
|
-
);
|
|
1491
|
-
return () => subscription.unsubscribe();
|
|
1492
|
-
});
|
|
1493
|
-
};
|
|
1494
|
-
}
|
|
1495
|
-
function debounceTime(ms) {
|
|
1496
|
-
return (source) => {
|
|
1497
|
-
return new Observable((observer) => {
|
|
1498
|
-
let timeoutId;
|
|
1499
|
-
const subscription = source.subscribe(
|
|
1500
|
-
(value) => {
|
|
1501
|
-
clearTimeout(timeoutId);
|
|
1502
|
-
timeoutId = setTimeout(() => {
|
|
1503
|
-
observer.next(value);
|
|
1504
|
-
}, ms);
|
|
1505
|
-
},
|
|
1506
|
-
(err) => observer.error?.(err),
|
|
1507
|
-
() => observer.complete?.()
|
|
1508
|
-
);
|
|
1509
|
-
return () => {
|
|
1510
|
-
clearTimeout(timeoutId);
|
|
1511
|
-
subscription.unsubscribe();
|
|
1512
|
-
};
|
|
1513
|
-
});
|
|
1514
|
-
};
|
|
1515
|
-
}
|
|
1516
|
-
function throttleTime(ms) {
|
|
1517
|
-
return (source) => {
|
|
1518
|
-
return new Observable((observer) => {
|
|
1519
|
-
let lastEmit = 0;
|
|
1520
|
-
const subscription = source.subscribe(
|
|
1521
|
-
(value) => {
|
|
1522
|
-
const now = Date.now();
|
|
1523
|
-
if (now - lastEmit >= ms) {
|
|
1524
|
-
lastEmit = now;
|
|
1525
|
-
observer.next(value);
|
|
1526
|
-
}
|
|
1527
|
-
},
|
|
1528
|
-
(err) => observer.error?.(err),
|
|
1529
|
-
() => observer.complete?.()
|
|
1530
|
-
);
|
|
1531
|
-
return () => subscription.unsubscribe();
|
|
1532
|
-
});
|
|
1533
|
-
};
|
|
1534
|
-
}
|
|
1535
|
-
function distinctUntilChanged(compare) {
|
|
1536
|
-
return (source) => {
|
|
1537
|
-
return new Observable((observer) => {
|
|
1538
|
-
let hasLast = false;
|
|
1539
|
-
let last;
|
|
1540
|
-
const subscription = source.subscribe(
|
|
1541
|
-
(value) => {
|
|
1542
|
-
const isDistinct = !hasLast || (compare ? !compare(last, value) : last !== value);
|
|
1543
|
-
if (isDistinct) {
|
|
1544
|
-
hasLast = true;
|
|
1545
|
-
last = value;
|
|
1546
|
-
observer.next(value);
|
|
1547
|
-
}
|
|
1548
|
-
},
|
|
1549
|
-
(err) => observer.error?.(err),
|
|
1550
|
-
() => observer.complete?.()
|
|
1551
|
-
);
|
|
1552
|
-
return () => subscription.unsubscribe();
|
|
1553
|
-
});
|
|
1554
|
-
};
|
|
1555
|
-
}
|
|
1556
|
-
function switchMap(fn) {
|
|
1557
|
-
return (source) => {
|
|
1558
|
-
return new Observable((observer) => {
|
|
1559
|
-
let innerSubscription = null;
|
|
1560
|
-
const outerSubscription = source.subscribe(
|
|
1561
|
-
(value) => {
|
|
1562
|
-
if (innerSubscription) {
|
|
1563
|
-
innerSubscription.unsubscribe();
|
|
1564
|
-
}
|
|
1565
|
-
try {
|
|
1566
|
-
const innerObservable = fn(value);
|
|
1567
|
-
innerSubscription = innerObservable.subscribe(
|
|
1568
|
-
(innerValue) => observer.next(innerValue),
|
|
1569
|
-
(err) => observer.error?.(err)
|
|
1570
|
-
);
|
|
1571
|
-
} catch (err) {
|
|
1572
|
-
observer.error?.(err);
|
|
1573
|
-
}
|
|
1574
|
-
},
|
|
1575
|
-
(err) => observer.error?.(err),
|
|
1576
|
-
() => observer.complete?.()
|
|
1577
|
-
);
|
|
1578
|
-
return () => {
|
|
1579
|
-
if (innerSubscription) {
|
|
1580
|
-
innerSubscription.unsubscribe();
|
|
1581
|
-
}
|
|
1582
|
-
outerSubscription.unsubscribe();
|
|
1583
|
-
};
|
|
1584
|
-
});
|
|
1585
|
-
};
|
|
1586
|
-
}
|
|
1587
|
-
function mergeMap(fn) {
|
|
1588
|
-
return (source) => {
|
|
1589
|
-
return new Observable((observer) => {
|
|
1590
|
-
const innerSubscriptions = [];
|
|
1591
|
-
let outerComplete = false;
|
|
1592
|
-
let activeCount = 0;
|
|
1593
|
-
const checkComplete = () => {
|
|
1594
|
-
if (outerComplete && activeCount === 0) {
|
|
1595
|
-
observer.complete?.();
|
|
1596
|
-
}
|
|
1597
|
-
};
|
|
1598
|
-
const outerSubscription = source.subscribe(
|
|
1599
|
-
(value) => {
|
|
1600
|
-
try {
|
|
1601
|
-
const innerObservable = fn(value);
|
|
1602
|
-
activeCount++;
|
|
1603
|
-
const innerSub = innerObservable.subscribe(
|
|
1604
|
-
(innerValue) => observer.next(innerValue),
|
|
1605
|
-
(err) => observer.error?.(err),
|
|
1606
|
-
() => {
|
|
1607
|
-
activeCount--;
|
|
1608
|
-
checkComplete();
|
|
1609
|
-
}
|
|
1610
|
-
);
|
|
1611
|
-
innerSubscriptions.push(innerSub);
|
|
1612
|
-
} catch (err) {
|
|
1613
|
-
observer.error?.(err);
|
|
1614
|
-
}
|
|
1615
|
-
},
|
|
1616
|
-
(err) => observer.error?.(err),
|
|
1617
|
-
() => {
|
|
1618
|
-
outerComplete = true;
|
|
1619
|
-
checkComplete();
|
|
1620
|
-
}
|
|
1621
|
-
);
|
|
1622
|
-
return () => {
|
|
1623
|
-
innerSubscriptions.forEach((sub) => sub.unsubscribe());
|
|
1624
|
-
outerSubscription.unsubscribe();
|
|
1625
|
-
};
|
|
1626
|
-
});
|
|
1627
|
-
};
|
|
1628
|
-
}
|
|
1629
|
-
function concatMap(fn) {
|
|
1630
|
-
return (source) => {
|
|
1631
|
-
return new Observable((observer) => {
|
|
1632
|
-
const queue = [];
|
|
1633
|
-
let innerSubscription = null;
|
|
1634
|
-
let outerComplete = false;
|
|
1635
|
-
let isProcessing = false;
|
|
1636
|
-
const processNext = () => {
|
|
1637
|
-
if (isProcessing || queue.length === 0) {
|
|
1638
|
-
if (outerComplete && queue.length === 0) {
|
|
1639
|
-
observer.complete?.();
|
|
1640
|
-
}
|
|
1641
|
-
return;
|
|
1642
|
-
}
|
|
1643
|
-
isProcessing = true;
|
|
1644
|
-
const value = queue.shift();
|
|
1645
|
-
try {
|
|
1646
|
-
const innerObservable = fn(value);
|
|
1647
|
-
innerSubscription = innerObservable.subscribe(
|
|
1648
|
-
(innerValue) => observer.next(innerValue),
|
|
1649
|
-
(err) => observer.error?.(err),
|
|
1650
|
-
() => {
|
|
1651
|
-
isProcessing = false;
|
|
1652
|
-
processNext();
|
|
1653
|
-
}
|
|
1654
|
-
);
|
|
1655
|
-
} catch (err) {
|
|
1656
|
-
observer.error?.(err);
|
|
1657
|
-
}
|
|
1658
|
-
};
|
|
1659
|
-
const outerSubscription = source.subscribe(
|
|
1660
|
-
(value) => {
|
|
1661
|
-
queue.push(value);
|
|
1662
|
-
processNext();
|
|
1663
|
-
},
|
|
1664
|
-
(err) => observer.error?.(err),
|
|
1665
|
-
() => {
|
|
1666
|
-
outerComplete = true;
|
|
1667
|
-
if (queue.length === 0 && !isProcessing) {
|
|
1668
|
-
observer.complete?.();
|
|
1669
|
-
}
|
|
1670
|
-
}
|
|
1671
|
-
);
|
|
1672
|
-
return () => {
|
|
1673
|
-
if (innerSubscription) {
|
|
1674
|
-
innerSubscription.unsubscribe();
|
|
1675
|
-
}
|
|
1676
|
-
outerSubscription.unsubscribe();
|
|
1677
|
-
};
|
|
1678
|
-
});
|
|
1679
|
-
};
|
|
1680
|
-
}
|
|
1681
|
-
function catchError(handler) {
|
|
1682
|
-
return (source) => {
|
|
1683
|
-
return new Observable((observer) => {
|
|
1684
|
-
const subscription = source.subscribe(
|
|
1685
|
-
(value) => observer.next(value),
|
|
1686
|
-
(err) => {
|
|
1687
|
-
try {
|
|
1688
|
-
const fallback = handler(err);
|
|
1689
|
-
const fallbackSub = fallback.subscribe(
|
|
1690
|
-
(value) => observer.next(value),
|
|
1691
|
-
(e) => observer.error?.(e),
|
|
1692
|
-
() => observer.complete?.()
|
|
1693
|
-
);
|
|
1694
|
-
subscription.__fallback = fallbackSub;
|
|
1695
|
-
} catch (e) {
|
|
1696
|
-
observer.error?.(e);
|
|
1697
|
-
}
|
|
1698
|
-
},
|
|
1699
|
-
() => observer.complete?.()
|
|
1700
|
-
);
|
|
1701
|
-
return () => {
|
|
1702
|
-
if (subscription.__fallback) {
|
|
1703
|
-
subscription.__fallback.unsubscribe();
|
|
1704
|
-
}
|
|
1705
|
-
subscription.unsubscribe();
|
|
1706
|
-
};
|
|
1707
|
-
});
|
|
1708
|
-
};
|
|
1709
|
-
}
|
|
1710
|
-
function startWith(...values) {
|
|
1711
|
-
return (source) => {
|
|
1712
|
-
return new Observable((observer) => {
|
|
1713
|
-
values.forEach((value) => observer.next(value));
|
|
1714
|
-
const subscription = source.subscribe(
|
|
1715
|
-
(value) => observer.next(value),
|
|
1716
|
-
(err) => observer.error?.(err),
|
|
1717
|
-
() => observer.complete?.()
|
|
1718
|
-
);
|
|
1719
|
-
return () => subscription.unsubscribe();
|
|
1720
|
-
});
|
|
1721
|
-
};
|
|
1722
|
-
}
|
|
1723
|
-
function scan(accumulator, seed) {
|
|
1724
|
-
return (source) => {
|
|
1725
|
-
return new Observable((observer) => {
|
|
1726
|
-
let acc = seed;
|
|
1727
|
-
const subscription = source.subscribe(
|
|
1728
|
-
(value) => {
|
|
1729
|
-
try {
|
|
1730
|
-
acc = accumulator(acc, value);
|
|
1731
|
-
observer.next(acc);
|
|
1732
|
-
} catch (err) {
|
|
1733
|
-
observer.error?.(err);
|
|
1734
|
-
}
|
|
1735
|
-
},
|
|
1736
|
-
(err) => observer.error?.(err),
|
|
1737
|
-
() => observer.complete?.()
|
|
1738
|
-
);
|
|
1739
|
-
return () => subscription.unsubscribe();
|
|
1740
|
-
});
|
|
1741
|
-
};
|
|
1742
|
-
}
|
|
1743
|
-
function reduce(accumulator, seed) {
|
|
1744
|
-
return (source) => {
|
|
1745
|
-
return new Observable((observer) => {
|
|
1746
|
-
let acc = seed;
|
|
1747
|
-
const subscription = source.subscribe(
|
|
1748
|
-
(value) => {
|
|
1749
|
-
try {
|
|
1750
|
-
acc = accumulator(acc, value);
|
|
1751
|
-
} catch (err) {
|
|
1752
|
-
observer.error?.(err);
|
|
1753
|
-
}
|
|
1754
|
-
},
|
|
1755
|
-
(err) => observer.error?.(err),
|
|
1756
|
-
() => {
|
|
1757
|
-
observer.next(acc);
|
|
1758
|
-
observer.complete?.();
|
|
1759
|
-
}
|
|
1760
|
-
);
|
|
1761
|
-
return () => subscription.unsubscribe();
|
|
1762
|
-
});
|
|
1763
|
-
};
|
|
1764
|
-
}
|
|
1765
|
-
|
|
1766
|
-
// src/shared/observable/subject.ts
|
|
1767
|
-
var Subject = class extends Observable {
|
|
1768
|
-
constructor() {
|
|
1769
|
-
super();
|
|
1770
|
-
this.subscribers = /* @__PURE__ */ new Set();
|
|
1771
|
-
this._isCompleted = false;
|
|
1772
|
-
this._hasError = false;
|
|
1773
|
-
this._thrownError = null;
|
|
1774
|
-
}
|
|
1775
|
-
asObservable() {
|
|
1776
|
-
return new Observable((observer) => {
|
|
1777
|
-
const subscription = this.subscribe(observer);
|
|
1778
|
-
return () => subscription.unsubscribe();
|
|
1779
|
-
});
|
|
1780
|
-
}
|
|
1781
|
-
subscribe(observerOrNext, error, complete) {
|
|
1782
|
-
if (this._isCompleted) {
|
|
1783
|
-
const obs = typeof observerOrNext === "function" ? { complete } : observerOrNext;
|
|
1784
|
-
obs.complete?.();
|
|
1785
|
-
return { unsubscribe: () => {
|
|
1786
|
-
} };
|
|
1787
|
-
}
|
|
1788
|
-
if (this._hasError) {
|
|
1789
|
-
return { unsubscribe: () => {
|
|
1790
|
-
} };
|
|
1791
|
-
}
|
|
1792
|
-
const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
|
|
1793
|
-
this.subscribers.add(observer);
|
|
1794
|
-
return {
|
|
1795
|
-
unsubscribe: () => {
|
|
1796
|
-
this.subscribers.delete(observer);
|
|
1797
|
-
}
|
|
1798
|
-
};
|
|
1799
|
-
}
|
|
1800
|
-
next(value) {
|
|
1801
|
-
if (this._isCompleted || this._hasError) return;
|
|
1802
|
-
const currentSubscribers = Array.from(this.subscribers);
|
|
1803
|
-
currentSubscribers.forEach((observer) => {
|
|
1804
|
-
if (this.subscribers.has(observer)) {
|
|
1805
|
-
try {
|
|
1806
|
-
observer.next(value);
|
|
1807
|
-
} catch (err) {
|
|
1808
|
-
console.error("Error in observer:", err);
|
|
1809
|
-
}
|
|
1810
|
-
}
|
|
1811
|
-
});
|
|
1812
|
-
}
|
|
1813
|
-
error(err) {
|
|
1814
|
-
if (this._isCompleted || this._hasError) return;
|
|
1815
|
-
this._hasError = true;
|
|
1816
|
-
this._thrownError = err;
|
|
1817
|
-
for (const observer of this.subscribers) {
|
|
1818
|
-
observer.error?.(err);
|
|
1819
|
-
}
|
|
1820
|
-
this.subscribers.clear();
|
|
1821
|
-
}
|
|
1822
|
-
complete() {
|
|
1823
|
-
if (this._isCompleted || this._hasError) return;
|
|
1824
|
-
this._isCompleted = true;
|
|
1825
|
-
const currentSubscribers = Array.from(this.subscribers);
|
|
1826
|
-
currentSubscribers.forEach((observer) => {
|
|
1827
|
-
if (observer.complete) {
|
|
1828
|
-
try {
|
|
1829
|
-
observer.complete();
|
|
1830
|
-
} catch (err) {
|
|
1831
|
-
console.error("Error in complete handler:", err);
|
|
1832
|
-
}
|
|
1833
|
-
}
|
|
1834
|
-
});
|
|
1835
|
-
this.subscribers.clear();
|
|
1836
|
-
}
|
|
1837
|
-
};
|
|
1838
|
-
|
|
1839
|
-
// src/shared/observable/bsubject.ts
|
|
1840
|
-
var BehaviorSubject = class extends Subject {
|
|
1841
|
-
constructor(initialValue) {
|
|
1842
|
-
super();
|
|
1843
|
-
this._value = initialValue;
|
|
1844
|
-
}
|
|
1845
|
-
get $value() {
|
|
1846
|
-
return this._value;
|
|
1847
|
-
}
|
|
1848
|
-
next(value) {
|
|
1849
|
-
this._value = value;
|
|
1850
|
-
super.next(value);
|
|
1851
|
-
}
|
|
1852
|
-
subscribe(observerOrNext, error, complete) {
|
|
1853
|
-
const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
|
|
1854
|
-
if (this._hasError) {
|
|
1855
|
-
observer.error?.(this._thrownError);
|
|
1856
|
-
return { unsubscribe: () => {
|
|
1857
|
-
} };
|
|
1858
|
-
}
|
|
1859
|
-
if (this._isCompleted) {
|
|
1860
|
-
observer.complete?.();
|
|
1861
|
-
return { unsubscribe: () => {
|
|
1862
|
-
} };
|
|
1863
|
-
}
|
|
1864
|
-
observer.next(this._value);
|
|
1865
|
-
return super.subscribe(observer);
|
|
1866
|
-
}
|
|
1867
|
-
};
|
|
1868
1519
|
|
|
1869
1520
|
// src/shared/component.ts
|
|
1870
1521
|
var OrcaComponent = class {
|
|
@@ -1882,6 +1533,7 @@ var OrcaComponent = class {
|
|
|
1882
1533
|
};
|
|
1883
1534
|
|
|
1884
1535
|
// src/shared/module_libs/http_client/module.ts
|
|
1536
|
+
import { Observable } from "rxjs";
|
|
1885
1537
|
var __decorate = function(decorators, target, key, desc) {
|
|
1886
1538
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1887
1539
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -2329,9 +1981,21 @@ var OSC = class _OSC {
|
|
|
2329
1981
|
register2(ComponentClass, injector);
|
|
2330
1982
|
const cleanProps = { ...props };
|
|
2331
1983
|
delete cleanProps.__clientComponent;
|
|
2332
|
-
const instance = injector.resolve(ComponentClass);
|
|
1984
|
+
const instance = await injector.resolve(ComponentClass);
|
|
2333
1985
|
instance.__injector = injector;
|
|
2334
|
-
|
|
1986
|
+
const mergedProps = Object.create(
|
|
1987
|
+
Object.getPrototypeOf(instance.props || {})
|
|
1988
|
+
);
|
|
1989
|
+
Object.defineProperties(
|
|
1990
|
+
mergedProps,
|
|
1991
|
+
Object.getOwnPropertyDescriptors(instance.props || {})
|
|
1992
|
+
);
|
|
1993
|
+
Object.defineProperties(
|
|
1994
|
+
mergedProps,
|
|
1995
|
+
Object.getOwnPropertyDescriptors(cleanProps || {})
|
|
1996
|
+
);
|
|
1997
|
+
instance.props = mergedProps;
|
|
1998
|
+
instance.onInit?.();
|
|
2335
1999
|
if (typeof instance.build !== "function") {
|
|
2336
2000
|
throw new Error(`Component ${name} does not implement build()`);
|
|
2337
2001
|
}
|
|
@@ -2345,11 +2009,6 @@ var OSC = class _OSC {
|
|
|
2345
2009
|
}
|
|
2346
2010
|
};
|
|
2347
2011
|
|
|
2348
|
-
// src/shared/macros/index.ts
|
|
2349
|
-
function assert$(context) {
|
|
2350
|
-
return context?.factory.createStringLiteral("assert");
|
|
2351
|
-
}
|
|
2352
|
-
|
|
2353
2012
|
// src/shared/providers/actor.ts
|
|
2354
2013
|
var BaseActor = class {
|
|
2355
2014
|
constructor() {
|
|
@@ -2436,7 +2095,7 @@ var ServeStaticModule = class _ServeStaticModule {
|
|
|
2436
2095
|
const resolvedPath = path.resolve(options.rootPath);
|
|
2437
2096
|
const indexPath = path.join(resolvedPath, "index.html");
|
|
2438
2097
|
this.app.use(express.static(resolvedPath));
|
|
2439
|
-
this.app.get(
|
|
2098
|
+
this.app.get(/^\/(?!api).*/, (req, res) => {
|
|
2440
2099
|
res.sendFile(indexPath);
|
|
2441
2100
|
});
|
|
2442
2101
|
}
|
|
@@ -2535,6 +2194,7 @@ var RouterModule = class _RouterModule {
|
|
|
2535
2194
|
};
|
|
2536
2195
|
|
|
2537
2196
|
// src/node/factory.ts
|
|
2197
|
+
import { isObservable, Observable as Observable2 } from "rxjs";
|
|
2538
2198
|
function createErrorElement(message) {
|
|
2539
2199
|
return {
|
|
2540
2200
|
$$typeof: ORCA_ELEMENT_TYPE,
|
|
@@ -2621,6 +2281,174 @@ var RouteMatcherService = class {
|
|
|
2621
2281
|
return null;
|
|
2622
2282
|
}
|
|
2623
2283
|
};
|
|
2284
|
+
var ExecutionContextImpl = class {
|
|
2285
|
+
constructor(classRef, handler, request, response) {
|
|
2286
|
+
this.classRef = classRef;
|
|
2287
|
+
this.handler = handler;
|
|
2288
|
+
this.request = request;
|
|
2289
|
+
this.response = response;
|
|
2290
|
+
}
|
|
2291
|
+
getClass() {
|
|
2292
|
+
return this.classRef;
|
|
2293
|
+
}
|
|
2294
|
+
getHandler() {
|
|
2295
|
+
return this.handler;
|
|
2296
|
+
}
|
|
2297
|
+
switchToHttp() {
|
|
2298
|
+
return {
|
|
2299
|
+
getRequest: () => this.request,
|
|
2300
|
+
getResponse: () => this.response
|
|
2301
|
+
};
|
|
2302
|
+
}
|
|
2303
|
+
};
|
|
2304
|
+
var GuardPipeline = class {
|
|
2305
|
+
static async execute(guards, context, injector) {
|
|
2306
|
+
if (guards.length === 0) {
|
|
2307
|
+
return true;
|
|
2308
|
+
}
|
|
2309
|
+
for (const guardOrClass of guards) {
|
|
2310
|
+
let guardInstance;
|
|
2311
|
+
if (typeof guardOrClass === "function") {
|
|
2312
|
+
guardInstance = await injector.resolve(guardOrClass);
|
|
2313
|
+
} else {
|
|
2314
|
+
guardInstance = guardOrClass;
|
|
2315
|
+
}
|
|
2316
|
+
const result = guardInstance.canActivate(context);
|
|
2317
|
+
if (result && typeof result.subscribe === "function") {
|
|
2318
|
+
const canActivate = await new Promise((resolve2, reject) => {
|
|
2319
|
+
result.subscribe({
|
|
2320
|
+
next: (value) => resolve2(value),
|
|
2321
|
+
error: (err) => reject(err),
|
|
2322
|
+
complete: () => {
|
|
2323
|
+
}
|
|
2324
|
+
});
|
|
2325
|
+
});
|
|
2326
|
+
if (!canActivate) {
|
|
2327
|
+
return false;
|
|
2328
|
+
}
|
|
2329
|
+
} else if (result instanceof Promise) {
|
|
2330
|
+
const canActivate = await result;
|
|
2331
|
+
if (!canActivate) {
|
|
2332
|
+
return false;
|
|
2333
|
+
}
|
|
2334
|
+
} else {
|
|
2335
|
+
if (!result) {
|
|
2336
|
+
return false;
|
|
2337
|
+
}
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
return true;
|
|
2341
|
+
}
|
|
2342
|
+
};
|
|
2343
|
+
var InterceptorPipeline = class {
|
|
2344
|
+
static async execute(interceptors, context, handler, injector) {
|
|
2345
|
+
if (interceptors.length === 0) {
|
|
2346
|
+
return handler();
|
|
2347
|
+
}
|
|
2348
|
+
let index = 0;
|
|
2349
|
+
const createCallHandler = () => {
|
|
2350
|
+
const currentIndex = index++;
|
|
2351
|
+
return {
|
|
2352
|
+
handle: async () => {
|
|
2353
|
+
if (currentIndex >= interceptors.length) {
|
|
2354
|
+
return new Observable2((observer) => {
|
|
2355
|
+
handler().then((result2) => {
|
|
2356
|
+
observer.next(result2);
|
|
2357
|
+
observer.complete?.();
|
|
2358
|
+
}).catch((error) => {
|
|
2359
|
+
observer.error?.(error);
|
|
2360
|
+
});
|
|
2361
|
+
});
|
|
2362
|
+
}
|
|
2363
|
+
const interceptorOrClass = interceptors[currentIndex];
|
|
2364
|
+
let interceptorInstance;
|
|
2365
|
+
if (typeof interceptorOrClass === "function") {
|
|
2366
|
+
interceptorInstance = await injector.resolve(interceptorOrClass);
|
|
2367
|
+
} else {
|
|
2368
|
+
interceptorInstance = interceptorOrClass;
|
|
2369
|
+
}
|
|
2370
|
+
const result = interceptorInstance.intercept(
|
|
2371
|
+
context,
|
|
2372
|
+
createCallHandler()
|
|
2373
|
+
);
|
|
2374
|
+
if (result instanceof Promise) {
|
|
2375
|
+
return new Observable2((observer) => {
|
|
2376
|
+
result.then((observable) => {
|
|
2377
|
+
observable.subscribe({
|
|
2378
|
+
next: (value) => observer.next(value),
|
|
2379
|
+
error: (err) => observer.error?.(err),
|
|
2380
|
+
complete: () => observer.complete?.()
|
|
2381
|
+
});
|
|
2382
|
+
}).catch((error) => observer.error?.(error));
|
|
2383
|
+
});
|
|
2384
|
+
}
|
|
2385
|
+
return result;
|
|
2386
|
+
}
|
|
2387
|
+
};
|
|
2388
|
+
};
|
|
2389
|
+
return new Promise(async (resolve2, reject) => {
|
|
2390
|
+
const observable = createCallHandler().handle();
|
|
2391
|
+
let result;
|
|
2392
|
+
(await observable).subscribe({
|
|
2393
|
+
next: (value) => {
|
|
2394
|
+
result = value;
|
|
2395
|
+
},
|
|
2396
|
+
error: (error) => {
|
|
2397
|
+
reject(error);
|
|
2398
|
+
},
|
|
2399
|
+
complete: () => {
|
|
2400
|
+
resolve2(result);
|
|
2401
|
+
}
|
|
2402
|
+
});
|
|
2403
|
+
});
|
|
2404
|
+
}
|
|
2405
|
+
};
|
|
2406
|
+
var DependenciesScanner = class {
|
|
2407
|
+
constructor() {
|
|
2408
|
+
this.scannedGuards = /* @__PURE__ */ new Set();
|
|
2409
|
+
this.scannedInterceptors = /* @__PURE__ */ new Set();
|
|
2410
|
+
}
|
|
2411
|
+
scanController(controller) {
|
|
2412
|
+
this.scanGuardsFromMetadata(controller);
|
|
2413
|
+
this.scanInterceptorsFromMetadata(controller);
|
|
2414
|
+
const methodKeys = Reflect.ownKeys(controller.prototype);
|
|
2415
|
+
for (const methodKey of methodKeys) {
|
|
2416
|
+
this.scanGuardsFromMetadata(controller.prototype, methodKey);
|
|
2417
|
+
this.scanInterceptorsFromMetadata(controller.prototype, methodKey);
|
|
2418
|
+
}
|
|
2419
|
+
}
|
|
2420
|
+
scanGuardsFromMetadata(target, propertyKey) {
|
|
2421
|
+
const guards = propertyKey ? Reflect.getMetadata(GUARDS_KEY, target, propertyKey) : Reflect.getMetadata(GUARDS_KEY, target);
|
|
2422
|
+
if (!guards) return;
|
|
2423
|
+
for (const guard of guards) {
|
|
2424
|
+
if (typeof guard === "function") {
|
|
2425
|
+
this.scannedGuards.add(guard);
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
}
|
|
2429
|
+
scanInterceptorsFromMetadata(target, propertyKey) {
|
|
2430
|
+
const interceptors = propertyKey ? Reflect.getMetadata(INTERCEPTORS_KEY, target, propertyKey) : Reflect.getMetadata(INTERCEPTORS_KEY, target);
|
|
2431
|
+
if (!interceptors) return;
|
|
2432
|
+
for (const interceptor of interceptors) {
|
|
2433
|
+
if (typeof interceptor === "function") {
|
|
2434
|
+
this.scannedInterceptors.add(interceptor);
|
|
2435
|
+
}
|
|
2436
|
+
}
|
|
2437
|
+
}
|
|
2438
|
+
getGuards() {
|
|
2439
|
+
return Array.from(this.scannedGuards);
|
|
2440
|
+
}
|
|
2441
|
+
getInterceptors() {
|
|
2442
|
+
return Array.from(this.scannedInterceptors);
|
|
2443
|
+
}
|
|
2444
|
+
getProviders() {
|
|
2445
|
+
const guards = this.getGuards().map((g) => ProviderNormalizer.normalize(g));
|
|
2446
|
+
const interceptors = this.getInterceptors().map(
|
|
2447
|
+
(i) => ProviderNormalizer.normalize(i)
|
|
2448
|
+
);
|
|
2449
|
+
return [...guards, ...interceptors];
|
|
2450
|
+
}
|
|
2451
|
+
};
|
|
2624
2452
|
var ControllerRegistrationService = class {
|
|
2625
2453
|
constructor(injector, app) {
|
|
2626
2454
|
this.injector = injector;
|
|
@@ -2640,17 +2468,17 @@ var ControllerRegistrationService = class {
|
|
|
2640
2468
|
actor.subscribe(eventName, (data) => handler.call(instance, data));
|
|
2641
2469
|
}
|
|
2642
2470
|
}
|
|
2643
|
-
buildMethodArgs(req, paramsMeta, designParams) {
|
|
2471
|
+
buildMethodArgs(req, res, paramsMeta, designParams) {
|
|
2644
2472
|
const args = Array(designParams.length).fill(void 0);
|
|
2645
2473
|
for (let i = 0; i < designParams.length; i++) {
|
|
2646
2474
|
const meta = paramsMeta[i];
|
|
2647
2475
|
if (!meta) continue;
|
|
2648
|
-
const source = this.getParamSource(req, meta.type);
|
|
2476
|
+
const source = this.getParamSource(req, res, meta.type);
|
|
2649
2477
|
args[i] = meta.key ? source?.[meta.key] : source;
|
|
2650
2478
|
}
|
|
2651
2479
|
return args;
|
|
2652
2480
|
}
|
|
2653
|
-
getParamSource(req, type) {
|
|
2481
|
+
getParamSource(req, res, type) {
|
|
2654
2482
|
switch (type) {
|
|
2655
2483
|
case "BODY" /* BODY */:
|
|
2656
2484
|
return req.body;
|
|
@@ -2658,13 +2486,21 @@ var ControllerRegistrationService = class {
|
|
|
2658
2486
|
return req.params;
|
|
2659
2487
|
case "QUERY" /* QUERY */:
|
|
2660
2488
|
return req.query;
|
|
2489
|
+
case "FILE" /* FILE */:
|
|
2490
|
+
return req.file;
|
|
2491
|
+
case "FILES" /* FILES */:
|
|
2492
|
+
return req.files;
|
|
2493
|
+
case "REQUEST" /* REQUEST */:
|
|
2494
|
+
return req;
|
|
2495
|
+
case "RESPONSE" /* RESPONSE */:
|
|
2496
|
+
return res;
|
|
2661
2497
|
default:
|
|
2662
2498
|
return void 0;
|
|
2663
2499
|
}
|
|
2664
2500
|
}
|
|
2665
2501
|
async handleMethodResult(result, res, isSSE) {
|
|
2666
2502
|
if (res.headersSent) return;
|
|
2667
|
-
if (isSSE && result
|
|
2503
|
+
if (isSSE && isObservable(result)) {
|
|
2668
2504
|
result.subscribe({
|
|
2669
2505
|
next: (data) => {
|
|
2670
2506
|
res.write(`data: ${JSON.stringify(data)}
|
|
@@ -2707,6 +2543,8 @@ var ControllerRegistrationService = class {
|
|
|
2707
2543
|
methodKey
|
|
2708
2544
|
);
|
|
2709
2545
|
const paramsMeta = Reflect.getMetadata(PARAMS_META_KEY, CtrlCls.prototype, methodKey) ?? {};
|
|
2546
|
+
const guards = getGuards(CtrlCls.prototype, methodKey);
|
|
2547
|
+
const interceptors = getInterceptors(CtrlCls.prototype, methodKey);
|
|
2710
2548
|
this.app[httpMethod](fullPath, async (req, res) => {
|
|
2711
2549
|
try {
|
|
2712
2550
|
if (isSSE) {
|
|
@@ -2714,16 +2552,52 @@ var ControllerRegistrationService = class {
|
|
|
2714
2552
|
res.setHeader("Cache-Control", "no-cache");
|
|
2715
2553
|
res.setHeader("Connection", "keep-alive");
|
|
2716
2554
|
}
|
|
2555
|
+
const requestContext = {
|
|
2556
|
+
request: req,
|
|
2557
|
+
response: res,
|
|
2558
|
+
metadata: {}
|
|
2559
|
+
};
|
|
2717
2560
|
const designParams = Reflect.getMetadata(
|
|
2718
2561
|
DESIGN_PARAMTYPES,
|
|
2719
2562
|
CtrlCls.prototype,
|
|
2720
2563
|
methodKey
|
|
2721
2564
|
) ?? [];
|
|
2722
|
-
const
|
|
2723
|
-
|
|
2565
|
+
const context = new ExecutionContextImpl(
|
|
2566
|
+
CtrlCls,
|
|
2567
|
+
instance[methodKey],
|
|
2568
|
+
req,
|
|
2569
|
+
res
|
|
2570
|
+
);
|
|
2571
|
+
const canActivate = await GuardPipeline.execute(
|
|
2572
|
+
guards,
|
|
2573
|
+
context,
|
|
2574
|
+
this.injector
|
|
2575
|
+
);
|
|
2576
|
+
if (!canActivate) {
|
|
2577
|
+
res.status(403).json({
|
|
2578
|
+
statusCode: 403,
|
|
2579
|
+
message: "Forbidden",
|
|
2580
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
2581
|
+
});
|
|
2582
|
+
return;
|
|
2583
|
+
}
|
|
2584
|
+
const result = await InterceptorPipeline.execute(
|
|
2585
|
+
interceptors,
|
|
2586
|
+
context,
|
|
2587
|
+
async () => {
|
|
2588
|
+
const args = this.buildMethodArgs(
|
|
2589
|
+
req,
|
|
2590
|
+
res,
|
|
2591
|
+
paramsMeta,
|
|
2592
|
+
designParams
|
|
2593
|
+
);
|
|
2594
|
+
return instance[methodKey](...args);
|
|
2595
|
+
},
|
|
2596
|
+
this.injector
|
|
2597
|
+
);
|
|
2724
2598
|
await this.handleMethodResult(result, res, isSSE);
|
|
2725
2599
|
} catch (err) {
|
|
2726
|
-
res.send(err.message);
|
|
2600
|
+
res.status(500).send(err.message);
|
|
2727
2601
|
}
|
|
2728
2602
|
});
|
|
2729
2603
|
}
|
|
@@ -2731,10 +2605,10 @@ var ControllerRegistrationService = class {
|
|
|
2731
2605
|
const normalizedPrefix = prefix === "/" ? "" : `/${prefix.replace(/^\/+|\/+$/g, "")}`;
|
|
2732
2606
|
return `${normalizedPrefix}/${routePath}`.replace(/\/+/g, "/").replace(/\/$/, "") || "/";
|
|
2733
2607
|
}
|
|
2734
|
-
register(CtrlCls) {
|
|
2735
|
-
const instance = this.injector.resolve(CtrlCls);
|
|
2608
|
+
async register(CtrlCls) {
|
|
2609
|
+
const instance = await this.injector.resolve(CtrlCls);
|
|
2736
2610
|
const prefix = Reflect.getMetadata(CONTROLLER_PREFIX_KEY, CtrlCls) ?? "/";
|
|
2737
|
-
const actor = this.injector.resolve(Actor);
|
|
2611
|
+
const actor = await this.injector.resolve(Actor);
|
|
2738
2612
|
this.registerEventHandlers(CtrlCls, instance, actor);
|
|
2739
2613
|
this.registerHttpMethods(CtrlCls, instance, prefix);
|
|
2740
2614
|
}
|
|
@@ -2858,8 +2732,8 @@ var OscRouteHandler = class {
|
|
|
2858
2732
|
var SocketService = class {
|
|
2859
2733
|
static setup(server, injector) {
|
|
2860
2734
|
const io = new Server(server);
|
|
2861
|
-
io.on("connection", (socket) => {
|
|
2862
|
-
const actor = injector.resolve(Actor);
|
|
2735
|
+
io.on("connection", async (socket) => {
|
|
2736
|
+
const actor = await injector.resolve(Actor);
|
|
2863
2737
|
actor.register(socket.id, {
|
|
2864
2738
|
send: (message) => {
|
|
2865
2739
|
io.to(socket.id).emit("message", message);
|
|
@@ -2887,15 +2761,37 @@ var NodeFactory = class {
|
|
|
2887
2761
|
}
|
|
2888
2762
|
return appNode;
|
|
2889
2763
|
}
|
|
2890
|
-
static
|
|
2764
|
+
static scanDependencies(appNode) {
|
|
2765
|
+
const scanner = new DependenciesScanner();
|
|
2766
|
+
const rootControllers = [
|
|
2767
|
+
...store.get("root_controllers")
|
|
2768
|
+
];
|
|
2769
|
+
rootControllers.forEach((ctrl) => scanner.scanController(ctrl));
|
|
2770
|
+
appNode.traverse((node) => {
|
|
2771
|
+
const providers = [...node.getProviders().values()];
|
|
2772
|
+
const controllers = providers.filter((provider) => {
|
|
2773
|
+
const token = provider.provide;
|
|
2774
|
+
return typeof token === "function" && Reflect.getMetadata(CONTROLLER, token);
|
|
2775
|
+
});
|
|
2776
|
+
controllers.forEach((c) => {
|
|
2777
|
+
if (c.useClass) {
|
|
2778
|
+
scanner.scanController(c.useClass);
|
|
2779
|
+
}
|
|
2780
|
+
});
|
|
2781
|
+
});
|
|
2782
|
+
return scanner;
|
|
2783
|
+
}
|
|
2784
|
+
static createRootInjector(appNode, app, rootModule, scanner) {
|
|
2891
2785
|
const allProviders = collectAllProvidersFromNode(appNode);
|
|
2892
2786
|
const rootControllers = [
|
|
2893
2787
|
...store.get("root_controllers")
|
|
2894
2788
|
].map((p) => ProviderNormalizer.normalize(p));
|
|
2895
2789
|
const bootstrap = Reflect.getMetadata(BOOTSTRAP, rootModule);
|
|
2790
|
+
const guardAndInterceptorProviders = scanner.getProviders();
|
|
2896
2791
|
return new Injector([
|
|
2897
2792
|
...allProviders,
|
|
2898
2793
|
...rootControllers,
|
|
2794
|
+
...guardAndInterceptorProviders,
|
|
2899
2795
|
{ provide: "OSC_URL", useValue: "/osc" },
|
|
2900
2796
|
{ provide: EXPRESS_ADAPTER_HOST, useValue: app },
|
|
2901
2797
|
{
|
|
@@ -2916,11 +2812,14 @@ var NodeFactory = class {
|
|
|
2916
2812
|
rootControllers.forEach((ctrl) => registrationService.register(ctrl));
|
|
2917
2813
|
appNode.traverse((node) => {
|
|
2918
2814
|
const providers = [...node.getProviders().values()];
|
|
2919
|
-
const controllers = providers.filter(
|
|
2920
|
-
|
|
2921
|
-
|
|
2815
|
+
const controllers = providers.filter((provider) => {
|
|
2816
|
+
const token = provider.provide;
|
|
2817
|
+
return typeof token === "function" && Reflect.getMetadata(CONTROLLER, token);
|
|
2818
|
+
});
|
|
2922
2819
|
controllers.forEach((c) => registrationService.register(c.useClass));
|
|
2923
|
-
providers.filter((provider) => provider.eager).forEach((p) =>
|
|
2820
|
+
providers.filter((provider) => provider.eager).forEach(async (p) => {
|
|
2821
|
+
await injector.resolve(p.provide);
|
|
2822
|
+
});
|
|
2924
2823
|
});
|
|
2925
2824
|
}
|
|
2926
2825
|
static setupOscRoute(app, injector, rootModule) {
|
|
@@ -2933,7 +2832,13 @@ var NodeFactory = class {
|
|
|
2933
2832
|
app.use(express2.json());
|
|
2934
2833
|
const server = http.createServer(app);
|
|
2935
2834
|
const appNode = this.compileAndValidate(rootModule);
|
|
2936
|
-
const
|
|
2835
|
+
const scanner = this.scanDependencies(appNode);
|
|
2836
|
+
const rootInjector = this.createRootInjector(
|
|
2837
|
+
appNode,
|
|
2838
|
+
app,
|
|
2839
|
+
rootModule,
|
|
2840
|
+
scanner
|
|
2841
|
+
);
|
|
2937
2842
|
setCurrentInjector(rootInjector);
|
|
2938
2843
|
this.registerControllers(appNode, rootInjector, app);
|
|
2939
2844
|
this.setupOscRoute(app, rootInjector, rootModule);
|
|
@@ -2946,7 +2851,6 @@ export {
|
|
|
2946
2851
|
ActorModule,
|
|
2947
2852
|
BOOTSTRAP,
|
|
2948
2853
|
BOOTSTRAP_VNODE,
|
|
2949
|
-
BehaviorSubject,
|
|
2950
2854
|
Body,
|
|
2951
2855
|
COMPONENT,
|
|
2952
2856
|
COMPONENT_DEPS,
|
|
@@ -2965,6 +2869,7 @@ export {
|
|
|
2965
2869
|
EXPORTS_KEY,
|
|
2966
2870
|
EXPRESS_ADAPTER_HOST,
|
|
2967
2871
|
Fragment,
|
|
2872
|
+
GUARDS_KEY,
|
|
2968
2873
|
Get,
|
|
2969
2874
|
HTTP_METHOD_KEY,
|
|
2970
2875
|
HandlerParamType,
|
|
@@ -2974,6 +2879,7 @@ export {
|
|
|
2974
2879
|
IMPORTS_KEY,
|
|
2975
2880
|
INJECTABLE,
|
|
2976
2881
|
INJECT_TOKENS_KEY,
|
|
2882
|
+
INTERCEPTORS_KEY,
|
|
2977
2883
|
Inject,
|
|
2978
2884
|
Injectable,
|
|
2979
2885
|
Injector,
|
|
@@ -2986,7 +2892,6 @@ export {
|
|
|
2986
2892
|
ORCA_ELEMENT_TYPE,
|
|
2987
2893
|
ORCA_FRAGMENT_TYPE,
|
|
2988
2894
|
OSC,
|
|
2989
|
-
Observable,
|
|
2990
2895
|
OrcaComponent,
|
|
2991
2896
|
PARAMS_META_KEY,
|
|
2992
2897
|
PATH_KEY,
|
|
@@ -2996,56 +2901,47 @@ export {
|
|
|
2996
2901
|
Post,
|
|
2997
2902
|
ProviderNormalizer,
|
|
2998
2903
|
Query,
|
|
2904
|
+
REQUEST_CONTEXT,
|
|
2905
|
+
Req,
|
|
2906
|
+
Res,
|
|
2999
2907
|
RouterModule,
|
|
3000
2908
|
SIGNATURE_METADATA_KEY,
|
|
3001
2909
|
SSE_ROUTE,
|
|
3002
2910
|
ServeStaticModule,
|
|
2911
|
+
SetMetadata,
|
|
2912
|
+
Shared,
|
|
3003
2913
|
Signature,
|
|
3004
2914
|
Sse,
|
|
3005
|
-
Subject,
|
|
3006
2915
|
Subscribe,
|
|
3007
|
-
|
|
2916
|
+
UploadedFile,
|
|
2917
|
+
UploadedFiles,
|
|
2918
|
+
UseGuards,
|
|
2919
|
+
UseInterceptors,
|
|
2920
|
+
applyDecorators,
|
|
3008
2921
|
batch,
|
|
3009
|
-
catchError,
|
|
3010
2922
|
collectAllProvidersFromNode,
|
|
3011
2923
|
computed,
|
|
3012
|
-
concatMap,
|
|
3013
2924
|
createRoot,
|
|
3014
|
-
debounceTime,
|
|
3015
|
-
distinctUntilChanged,
|
|
3016
2925
|
effect,
|
|
3017
|
-
filter,
|
|
3018
|
-
from,
|
|
3019
2926
|
getCurrentInjector,
|
|
2927
|
+
getGuards,
|
|
2928
|
+
getInterceptors,
|
|
3020
2929
|
getSignatureMetadata,
|
|
3021
2930
|
hasSignature,
|
|
3022
|
-
interval,
|
|
3023
2931
|
isClassComponent,
|
|
3024
2932
|
isFragment,
|
|
3025
2933
|
isIntrinsicElement,
|
|
3026
|
-
isObservable,
|
|
3027
2934
|
isSignal,
|
|
3028
2935
|
jsx,
|
|
3029
2936
|
jsxs,
|
|
3030
|
-
|
|
3031
|
-
mergeMap,
|
|
2937
|
+
mixin,
|
|
3032
2938
|
node_exports as node,
|
|
3033
|
-
observable,
|
|
3034
|
-
of,
|
|
3035
2939
|
parseSignatureSchemas,
|
|
3036
|
-
reduce,
|
|
3037
|
-
scan,
|
|
3038
2940
|
setCurrentInjector,
|
|
3039
2941
|
shared_exports as shared,
|
|
3040
2942
|
signal,
|
|
3041
|
-
skip,
|
|
3042
|
-
startWith,
|
|
3043
|
-
switchMap,
|
|
3044
2943
|
symbolValueReplacer,
|
|
3045
2944
|
symbolValueReviver,
|
|
3046
|
-
take,
|
|
3047
|
-
tap,
|
|
3048
|
-
throttleTime,
|
|
3049
2945
|
toSignal,
|
|
3050
2946
|
untracked
|
|
3051
2947
|
};
|