@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.
Files changed (52) hide show
  1. package/dist/browser/index.iife.js +429 -714
  2. package/dist/browser/index.iife.js.map +4 -4
  3. package/dist/browser/index.mjs +1272 -750
  4. package/dist/browser/index.mjs.map +4 -4
  5. package/dist/node/index.cjs +563 -676
  6. package/dist/node/index.cjs.map +4 -4
  7. package/dist/node/index.mjs +543 -647
  8. package/dist/node/index.mjs.map +4 -4
  9. package/dist/types/browser/factory.d.ts +1 -1
  10. package/dist/types/browser/factory.d.ts.map +1 -1
  11. package/dist/types/browser/modules/router_module/navigate.d.ts +13 -5
  12. package/dist/types/browser/modules/router_module/navigate.d.ts.map +1 -1
  13. package/dist/types/browser/modules/router_module/outlet.d.ts +3 -2
  14. package/dist/types/browser/modules/router_module/outlet.d.ts.map +1 -1
  15. package/dist/types/index.browser.d.ts +0 -2
  16. package/dist/types/index.browser.d.ts.map +1 -1
  17. package/dist/types/index.node.d.ts +0 -2
  18. package/dist/types/index.node.d.ts.map +1 -1
  19. package/dist/types/node/factory.d.ts +1 -0
  20. package/dist/types/node/factory.d.ts.map +1 -1
  21. package/dist/types/shared/decorators.d.ts +13 -1
  22. package/dist/types/shared/decorators.d.ts.map +1 -1
  23. package/dist/types/shared/dom/osc.d.ts.map +1 -1
  24. package/dist/types/shared/index.d.ts +0 -2
  25. package/dist/types/shared/index.d.ts.map +1 -1
  26. package/dist/types/shared/jsx/types.d.ts +3 -0
  27. package/dist/types/shared/jsx/types.d.ts.map +1 -1
  28. package/dist/types/shared/module/compiler.d.ts +3 -0
  29. package/dist/types/shared/module/compiler.d.ts.map +1 -1
  30. package/dist/types/shared/module/injector.d.ts +8 -1
  31. package/dist/types/shared/module/injector.d.ts.map +1 -1
  32. package/dist/types/shared/module_libs/http_client/module.d.ts +1 -1
  33. package/dist/types/shared/module_libs/http_client/module.d.ts.map +1 -1
  34. package/dist/types/shared/signal/index.d.ts +1 -0
  35. package/dist/types/shared/signal/index.d.ts.map +1 -1
  36. package/dist/types/shared/signal/utils.d.ts +4 -0
  37. package/dist/types/shared/signal/utils.d.ts.map +1 -0
  38. package/dist/types/shared/symbols.d.ts +3 -0
  39. package/dist/types/shared/symbols.d.ts.map +1 -1
  40. package/dist/types/shared/types.d.ts +40 -4
  41. package/dist/types/shared/types.d.ts.map +1 -1
  42. package/package.json +3 -1
  43. package/dist/types/shared/macros/index.d.ts +0 -2
  44. package/dist/types/shared/macros/index.d.ts.map +0 -1
  45. package/dist/types/shared/observable/bsubject.d.ts +0 -11
  46. package/dist/types/shared/observable/bsubject.d.ts.map +0 -1
  47. package/dist/types/shared/observable/index.d.ts +0 -4
  48. package/dist/types/shared/observable/index.d.ts.map +0 -1
  49. package/dist/types/shared/observable/observable.d.ts +0 -39
  50. package/dist/types/shared/observable/observable.d.ts.map +0 -1
  51. package/dist/types/shared/observable/subject.d.ts +0 -15
  52. package/dist/types/shared/observable/subject.d.ts.map +0 -1
@@ -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
- assert$: () => assert$,
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
- map: () => map,
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.deps || [], target);
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
- if (this.nodes.has(target.name))
380
- return this.nodes.get(target.name);
381
- const node = new Node(target.name);
382
- this.nodes.set(target.name, node);
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" && "deps" in item && item.deps)
518
- return item.deps;
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 instance = this.createInstance(provider);
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 && provider.useValue !== void 0)
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 = (provider.deps || []).map((d) => this.resolve(d));
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.deps || this.getConstructorDeps(Ctor);
642
- return new Ctor(...deps.map((d) => this.resolve(d)));
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 map2 = {
1018
+ const map = {
815
1019
  "&": "&",
816
1020
  "<": "&lt;",
817
1021
  ">": "&gt;",
818
1022
  '"': "&quot;",
819
1023
  "'": "&#039;"
820
1024
  };
821
- return text.replace(/[&<>"']/g, (m) => map2[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.resolve(ComponentClass);
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/observable/observable.ts
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
- instance.props = cleanProps;
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(/.*/, (req, res) => {
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 instanceof Observable) {
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 args = this.buildMethodArgs(req, paramsMeta, designParams);
2723
- const result = await instance[methodKey](...args);
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 createRootInjector(appNode, app, rootModule) {
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
- (provider) => Reflect.getMetadata(CONTROLLER, provider.provide)
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) => injector.resolve(p.provide));
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 rootInjector = this.createRootInjector(appNode, app, rootModule);
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
- assert$,
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
- map,
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
  };