@ibyar/core 2.5.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/annotation/decorators.d.ts +2 -30
  2. package/annotation/decorators.d.ts.map +1 -1
  3. package/annotation/decorators.js +2 -89
  4. package/annotation/decorators.js.map +1 -1
  5. package/annotation/options.d.ts +11 -6
  6. package/annotation/options.d.ts.map +1 -1
  7. package/annotation/options.js.map +1 -1
  8. package/binding/binding.expressions copy.d.ts +43 -0
  9. package/binding/binding.expressions copy.d.ts.map +1 -0
  10. package/binding/binding.expressions copy.js +161 -0
  11. package/binding/binding.expressions copy.js.map +1 -0
  12. package/binding/signal.expressions.d.ts +50 -0
  13. package/binding/signal.expressions.d.ts.map +1 -0
  14. package/binding/signal.expressions.js +182 -0
  15. package/binding/signal.expressions.js.map +1 -0
  16. package/component/component.d.ts +1 -1
  17. package/component/component.d.ts.map +1 -1
  18. package/component/component.js +5 -8
  19. package/component/component.js.map +1 -1
  20. package/component/custom-element.d.ts +4 -15
  21. package/component/custom-element.d.ts.map +1 -1
  22. package/component/custom-element.js +1 -2
  23. package/component/custom-element.js.map +1 -1
  24. package/component/initializer.d.ts +39 -27
  25. package/component/initializer.d.ts.map +1 -1
  26. package/component/initializer.js +47 -29
  27. package/component/initializer.js.map +1 -1
  28. package/component/reflect.d.ts.map +1 -1
  29. package/component/reflect.js +8 -2
  30. package/component/reflect.js.map +1 -1
  31. package/di/provider.d.ts +1 -0
  32. package/di/provider.d.ts.map +1 -1
  33. package/di/provider.js +11 -0
  34. package/di/provider.js.map +1 -1
  35. package/directive/directive.d.ts +21 -12
  36. package/directive/directive.d.ts.map +1 -1
  37. package/directive/directive.js +76 -27
  38. package/directive/directive.js.map +1 -1
  39. package/html/deserialize.d.ts.map +1 -1
  40. package/html/deserialize.js +7 -0
  41. package/html/deserialize.js.map +1 -1
  42. package/html/expression.d.ts.map +1 -1
  43. package/html/expression.js +41 -8
  44. package/html/expression.js.map +1 -1
  45. package/linker/change-detector-ref.d.ts +3 -3
  46. package/linker/change-detector-ref.js.map +1 -1
  47. package/linker/template-ref.js +3 -3
  48. package/linker/template-ref.js.map +1 -1
  49. package/linker/view-container-ref.d.ts.map +1 -1
  50. package/linker/view-container-ref.js +4 -4
  51. package/linker/view-container-ref.js.map +1 -1
  52. package/linker/view-ref.d.ts +2 -2
  53. package/linker/view-ref.js.map +1 -1
  54. package/package.json +7 -7
  55. package/pipe/pipe.d.ts +2 -2
  56. package/pipe/pipe.js +2 -2
  57. package/pipe/pipe.js.map +1 -1
  58. package/signals/factory.d.ts +3 -7
  59. package/signals/factory.d.ts.map +1 -1
  60. package/signals/factory.js +6 -12
  61. package/signals/factory.js.map +1 -1
  62. package/signals/runtime.d.ts +6 -6
  63. package/signals/runtime.d.ts.map +1 -1
  64. package/signals/runtime.js +29 -18
  65. package/signals/runtime.js.map +1 -1
  66. package/signals/scopes.d.ts +4 -0
  67. package/signals/scopes.d.ts.map +1 -0
  68. package/signals/scopes.js +4 -0
  69. package/signals/scopes.js.map +1 -0
  70. package/signals/signals.d.ts +2 -7
  71. package/signals/signals.d.ts.map +1 -1
  72. package/signals/signals.js +0 -9
  73. package/signals/signals.js.map +1 -1
  74. package/utils/elements-util.d.ts +0 -1
  75. package/utils/elements-util.d.ts.map +1 -1
  76. package/utils/elements-util.js +0 -9
  77. package/utils/elements-util.js.map +1 -1
  78. package/view/base-view.d.ts.map +1 -1
  79. package/view/base-view.js +38 -84
  80. package/view/base-view.js.map +1 -1
  81. package/view/render.d.ts +5 -3
  82. package/view/render.d.ts.map +1 -1
  83. package/view/render.js +64 -30
  84. package/view/render.js.map +1 -1
  85. package/view/view.d.ts.map +1 -1
  86. package/view/view.js +3 -16
  87. package/view/view.js.map +1 -1
@@ -10,30 +10,24 @@ class SignalScopeFactory {
10
10
  throw new Error('expect scope is not matching');
11
11
  }
12
12
  }
13
- signal(initValue, signalType) {
13
+ factory(creator) {
14
14
  this.assertValidContext();
15
- return this.scopes.at(-1).createSignal(initValue, signalType);
15
+ const scope = this.scopes.at(-1);
16
+ return creator(scope, scope.getNextKey());
16
17
  }
17
- signalFn(initValue, signalType) {
18
+ signal(initValue) {
18
19
  this.assertValidContext();
19
- return this.scopes.at(-1).createSignalFn(initValue, signalType);
20
+ const scope = this.scopes.at(-1);
21
+ return this.scopes.at(-1).createSignal(initValue);
20
22
  }
21
23
  computed(computation) {
22
24
  this.assertValidContext();
23
25
  return this.scopes.at(-1).createComputed(computation);
24
26
  }
25
- computedFn(computation) {
26
- this.assertValidContext();
27
- return this.scopes.at(-1).createComputedFn(computation);
28
- }
29
27
  lazy(computation) {
30
28
  this.assertValidContext();
31
29
  return this.scopes.at(-1).createLazy(computation);
32
30
  }
33
- lazyFn(computation) {
34
- this.assertValidContext();
35
- return this.scopes.at(-1).createLazyFn(computation);
36
- }
37
31
  effect(effectFn) {
38
32
  this.assertValidContext();
39
33
  const scope = this.scopes.at(-1);
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/core/signals/factory.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveNode, Signal, SignalScope } from '@ibyar/expressions';\n\ntype EffectFn = (onCleanup?: (clean: () => void) => void) => void;\n\nclass SignalScopeFactory {\n\n\tprivate scopes: SignalScope[] = [SignalScope.create()];\n\tprivate effectState: SignalScope[] = [];\n\n\tpush(scope: SignalScope) {\n\t\tthis.scopes.push(scope);\n\t}\n\n\tpop(scop: SignalScope) {\n\t\tif (this.scopes.pop() !== scop) {\n\t\t\tthrow new Error('expect scope is not matching');\n\t\t}\n\t}\n\n\tsignal<T, S extends typeof Signal<T>>(initValue?: T, signalType?: S): InstanceType<S> {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createSignal(initValue, signalType);\n\t}\n\n\tsignalFn<T, S extends typeof Signal<T>>(initValue: T, signalType?: S) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createSignalFn(initValue, signalType);\n\t}\n\n\tcomputed<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createComputed(computation);\n\t}\n\tcomputedFn<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createComputedFn(computation);\n\t}\n\n\tlazy<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createLazy(computation);\n\t}\n\tlazyFn<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createLazyFn(computation);\n\t}\n\teffect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\t\tthis.assertValidContext();\n\t\tconst scope = this.scopes.at(-1)!;\n\t\treturn scope.createEffect(this.wrapEffect(scope, effectFn));\n\t}\n\tuntracked<T>(reactiveNode: ReactiveNode<T>): T;\n\tuntracked<T>(nonReactiveReadsFn: () => T): T;\n\tuntracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\t\tconst scope = this.effectState.at(-1);\n\t\tscope?.untrack();\n\t\tconst value = nonReactiveReads instanceof ReactiveNode\n\t\t\t? nonReactiveReads.get()\n\t\t\t: nonReactiveReads();\n\t\tscope?.track();\n\t\treturn value;\n\t}\n\tprivate assertValidContext(): void {\n\t\tif (this.scopes.length <= 0) {\n\t\t\tthrow new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');\n\t\t}\n\t}\n\tprivate wrapEffect<T>(scope: SignalScope, effectFn: EffectFn): EffectFn {\n\t\treturn (onCleanup) => {\n\t\t\tthis.effectState.push(scope);\n\t\t\teffectFn(onCleanup);\n\t\t\tthis.effectState.pop();\n\t\t};\n\t}\n}\n\nexport const signalScopeFactory = new SignalScopeFactory();\n"]}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/core/signals/factory.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveNode, Signal, SignalScope } from '@ibyar/expressions';\n\ntype EffectFn = (onCleanup?: (clean: () => void) => void) => void;\n\nclass SignalScopeFactory {\n\n\tprivate scopes: SignalScope[] = [SignalScope.create()];\n\tprivate effectState: SignalScope[] = [];\n\n\tpush(scope: SignalScope) {\n\t\tthis.scopes.push(scope);\n\t}\n\n\tpop(scop: SignalScope) {\n\t\tif (this.scopes.pop() !== scop) {\n\t\t\tthrow new Error('expect scope is not matching');\n\t\t}\n\t}\n\tfactory<T, S = Signal<T>>(creator: (scope: SignalScope, key: number) => S): S {\n\t\tthis.assertValidContext();\n\t\tconst scope = this.scopes.at(-1)!;\n\t\treturn creator(scope, scope.getNextKey());\n\t}\n\tsignal<T>(initValue?: T) {\n\t\tthis.assertValidContext();\n\t\tconst scope = this.scopes.at(-1)!;\n\t\treturn this.scopes.at(-1)!.createSignal(initValue);\n\t}\n\tcomputed<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createComputed(computation);\n\t}\n\tlazy<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createLazy(computation);\n\t}\n\teffect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\t\tthis.assertValidContext();\n\t\tconst scope = this.scopes.at(-1)!;\n\t\treturn scope.createEffect(this.wrapEffect(scope, effectFn));\n\t}\n\tuntracked<T>(reactiveNode: ReactiveNode<T>): T;\n\tuntracked<T>(nonReactiveReadsFn: () => T): T;\n\tuntracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\t\tconst scope = this.effectState.at(-1);\n\t\tscope?.untrack();\n\t\tconst value = nonReactiveReads instanceof ReactiveNode\n\t\t\t? nonReactiveReads.get()\n\t\t\t: nonReactiveReads();\n\t\tscope?.track();\n\t\treturn value;\n\t}\n\tprivate assertValidContext(): void {\n\t\tif (this.scopes.length <= 0) {\n\t\t\tthrow new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');\n\t\t}\n\t}\n\tprivate wrapEffect<T>(scope: SignalScope, effectFn: EffectFn): EffectFn {\n\t\treturn (onCleanup) => {\n\t\t\tthis.effectState.push(scope);\n\t\t\teffectFn(onCleanup);\n\t\t\tthis.effectState.pop();\n\t\t};\n\t}\n}\n\nexport const signalScopeFactory = new SignalScopeFactory();\n"]}
@@ -1,5 +1,5 @@
1
1
  import { CallExpression, ExpressionNode, MemberExpression, VisitorCallback } from '@ibyar/expressions';
2
- type Key = 'input' | 'output' | 'model' | 'formValue' | 'view' | 'viewChild' | 'viewChildren' | 'signal' | 'computed' | 'lazy' | 'signalNode' | 'computedNode' | 'lazyNode';
2
+ type Key = 'input' | 'output' | 'formValue' | 'view' | 'viewChild' | 'viewChildren' | 'signal' | 'computed' | 'lazy' | 'signalNode' | 'computedNode' | 'lazyNode';
3
3
  type RuntimeOption = {
4
4
  name: Key;
5
5
  alias: string;
@@ -14,16 +14,16 @@ export type SignalRuntimeMetadata = {
14
14
  */
15
15
  export declare class RuntimeClassMetadata {
16
16
  static INSTANCE: RuntimeClassMetadata;
17
- static scanMetadata(modelClass: Function): SignalRuntimeMetadata[];
18
- static scanClass(modelClass: Function, visitorCallback: VisitorCallback): void;
19
- scan(modelClass: Function): SignalRuntimeMetadata[];
17
+ static scanMetadata(modelClass: Function, scanParent?: boolean): SignalRuntimeMetadata[];
18
+ static scanClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent?: boolean): void;
19
+ scan(modelClass: Function, scanParent: boolean): SignalRuntimeMetadata[];
20
20
  /**
21
21
  * scan class `Function` for properties and methods definitions.
22
22
  * @param modelClass
23
23
  * @param visitorCallback
24
24
  */
25
- scanModelClass(modelClass: Function, visitorCallback: VisitorCallback): void;
26
- getClassScript(modelClass: Function): string;
25
+ scanModelClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent: boolean): void;
26
+ getClassScript(modelClass: Function, scanParent: boolean): string;
27
27
  getClassList(modelClass: Function): Function[];
28
28
  newModelInitializers(): SignalRuntimeMetadata[];
29
29
  createVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,cAAc,EAAE,cAAc,EAG9B,gBAAgB,EAEA,eAAe,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,GAAG,GACL,OAAO,GACP,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,MAAM,GACN,YAAY,GACZ,cAAc,GACd,UAAU,CAAC;AAEd,KAAK,aAAa,GAAG;IACpB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,qBAAa,oBAAoB;IAEhC,MAAM,CAAC,QAAQ,uBAA8B;IAE7C,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ;IAIxC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe;IAIvE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,qBAAqB,EAAE;IAOnD;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe;IAMrE,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM;IAI5C,YAAY,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAS9C,oBAAoB,IAAI,qBAAqB,EAAE;IAqB/C,aAAa,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,eAAe;IA4CnE,8BAA8B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAgBxE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK3D,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO;IAUlF,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAcvF,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,GAAG,KAAK;CAgBpD"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,cAAc,EAAE,cAAc,EAG9B,gBAAgB,EAGhB,eAAe,EACf,MAAM,oBAAoB,CAAC;AAE5B,KAAK,GAAG,GACL,OAAO,GACP,QAAQ,GACR,WAAW,GACX,MAAM,GACN,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,MAAM,GACN,YAAY,GACZ,cAAc,GACd,UAAU,CAAC;AAEd,KAAK,aAAa,GAAG;IACpB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,qBAAa,oBAAoB;IAEhC,MAAM,CAAC,QAAQ,uBAA8B;IAE7C,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,UAAO;IAI3D,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,UAAO;IAI1F,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAG,qBAAqB,EAAE;IAOxE;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO;IAM1F,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IAKjE,YAAY,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAS9C,oBAAoB,IAAI,qBAAqB,EAAE;IAoB/C,aAAa,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,eAAe;IAsDnE,8BAA8B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAgBxE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK3D,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO;IAUlF,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAcvF,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,GAAG,KAAK;CAgBpD"}
@@ -1,19 +1,19 @@
1
- import { CallExpression, expressionVisitor, Identifier, JavaScriptParser, Literal, MemberExpression, Property, ThisExpression } from '@ibyar/expressions';
1
+ import { CallExpression, expressionVisitor, Identifier, JavaScriptParser, Literal, MemberExpression, Property, SequenceExpression, ThisExpression } from '@ibyar/expressions';
2
2
  /**
3
3
  * scan model class for (inputs and output) property definitions with value by function call.
4
4
  */
5
5
  export class RuntimeClassMetadata {
6
6
  static INSTANCE = new RuntimeClassMetadata();
7
- static scanMetadata(modelClass) {
8
- return RuntimeClassMetadata.INSTANCE.scan(modelClass);
7
+ static scanMetadata(modelClass, scanParent = true) {
8
+ return RuntimeClassMetadata.INSTANCE.scan(modelClass, scanParent);
9
9
  }
10
- static scanClass(modelClass, visitorCallback) {
11
- return RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback);
10
+ static scanClass(modelClass, visitorCallback, scanParent = true) {
11
+ return RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback, scanParent);
12
12
  }
13
- scan(modelClass) {
13
+ scan(modelClass, scanParent) {
14
14
  const metadata = this.newModelInitializers();
15
15
  const visitor = this.createVisitor(metadata);
16
- this.scanModelClass(modelClass, visitor);
16
+ this.scanModelClass(modelClass, visitor, scanParent);
17
17
  return metadata;
18
18
  }
19
19
  /**
@@ -21,13 +21,14 @@ export class RuntimeClassMetadata {
21
21
  * @param modelClass
22
22
  * @param visitorCallback
23
23
  */
24
- scanModelClass(modelClass, visitorCallback) {
25
- const script = this.getClassScript(modelClass);
24
+ scanModelClass(modelClass, visitorCallback, scanParent) {
25
+ const script = this.getClassScript(modelClass, scanParent);
26
26
  const expr = JavaScriptParser.parse(script);
27
27
  expressionVisitor.visit(expr, visitorCallback);
28
28
  }
29
- getClassScript(modelClass) {
30
- return this.getClassList(modelClass).map((ref, index) => `const Class${index} = ${ref};`).join('\n');
29
+ getClassScript(modelClass, scanParent) {
30
+ const modelList = scanParent ? this.getClassList(modelClass) : [modelClass];
31
+ return modelList.map((ref, index) => `const Class${index} = ${ref};`).join('\n');
31
32
  ;
32
33
  }
33
34
  getClassList(modelClass) {
@@ -43,12 +44,11 @@ export class RuntimeClassMetadata {
43
44
  { signal: 'input', options: [] },
44
45
  { signal: 'input', necessity: 'required', options: [] },
45
46
  { signal: 'output', options: [] },
46
- { signal: 'model', options: [] },
47
- { signal: 'model', necessity: 'required', options: [] },
48
47
  { signal: 'signal', options: [] },
49
48
  { signal: 'computed', options: [] },
50
49
  { signal: 'lazy', options: [] },
51
50
  { signal: 'formValue', options: [] },
51
+ { signal: 'formValue', necessity: 'required', options: [] },
52
52
  { signal: 'view', options: [] },
53
53
  { signal: 'viewChild', options: [] },
54
54
  { signal: 'viewChild', necessity: 'required', options: [] },
@@ -63,17 +63,28 @@ export class RuntimeClassMetadata {
63
63
  if (type === 'PropertyDefinition') {
64
64
  const definition = expression;
65
65
  const key = definition.getKey();
66
- const value = definition.getValue();
66
+ let value = definition.getValue();
67
67
  if (definition.isPrivate()
68
68
  || definition.isStatic()
69
- || !(key instanceof Identifier || key instanceof Literal)
70
- || !(value instanceof CallExpression)) {
69
+ || !(key instanceof Identifier || key instanceof Literal)) {
71
70
  return;
72
71
  }
73
- const property = properties.find(property => this.isCallOf(value, property.signal, property.necessity));
72
+ if (!(value instanceof CallExpression)) {
73
+ if (value instanceof SequenceExpression) {
74
+ value = value.getExpressions().find(node => node instanceof CallExpression && properties.find(property => this.isCallOf(node, property.signal, property.necessity)));
75
+ if (!value) {
76
+ return;
77
+ }
78
+ }
79
+ else {
80
+ return;
81
+ }
82
+ }
83
+ const call = value;
84
+ const property = properties.find(property => this.isCallOf(call, property.signal, property.necessity));
74
85
  if (property) {
75
86
  const name = key instanceof Identifier ? key.getName() : key.getValue();
76
- const alias = this.getAliasNameFromOptionArgument(value);
87
+ const alias = this.getAliasNameFromOptionArgument(call);
77
88
  property.options.push({ name, alias: alias ?? name });
78
89
  }
79
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,cAAc,EACd,iBAAiB,EAAE,UAAU,EAC7B,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,MAAM,oBAAoB,CAAC;AA4B5B;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAEhC,MAAM,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,CAAC,YAAY,CAAC,UAAoB;QACvC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,UAAoB,EAAE,eAAgC;QACtE,OAAO,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,UAAoB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,UAAoB,EAAE,eAAgC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,UAAoB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAA,CAAC;IACvG,CAAC;IAED,YAAY,CAAC,UAAoB;QAChC,MAAM,IAAI,GAAe,EAAE,CAAC;QAC5B,OAAO,UAAU,YAAY,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,oBAAoB;QACnB,OAAO;YACN,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;YACvD,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;YACvD,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3D,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE;YACvC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE;YACvC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;SACnC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,UAAmC;QAChD,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YAC3B,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,UAAgC,CAAC;gBACpD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,UAAU,CAAC,SAAS,EAAE;uBACtB,UAAU,CAAC,QAAQ,EAAE;uBACrB,CAAC,CAAC,GAAG,YAAY,UAAU,IAAI,GAAG,YAAY,OAAO,CAAC;uBACtD,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,EAAE,CAAC;oBACxC,OAAO;gBACR,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxG,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACxE,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;oBACzD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACF,CAAC;iBAAM,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,UAA8B,CAAC;gBAClD,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,aAAa,EAAE,CAAC;oBAC5C,OAAO;gBACR,CAAC;gBACD,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;oBAC/D,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;wBACxC,MAAM,UAAU,GAAG,GAA2B,CAAC;wBAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACpC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;4BACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;4BACxG,IAAI,CAAC,QAAQ,EAAE,CAAC;gCACf,OAAO;4BACR,CAAC;4BACD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;4BACxD,IAAI,IAAI,EAAE,CAAC;gCACV,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;gCACzD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;4BACvD,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;IACH,CAAC;IAED,8BAA8B,CAAC,IAAoB;QAClD,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACjG,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC7B,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;wBAC9B,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACzB,OAAO,CAAC,KAAK,EAAE,CAAC;oBACjB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,KAAK,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAoB,EAAE,QAAgB;QAChD,OAAO,CAAC,IAAI,YAAY,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;eAC9D,CAAC,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,QAAQ,CAAC,IAAoB,EAAE,UAAkB,EAAE,YAAqB;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,YAAY,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,CAAC,YAAY,IAAI,MAAM,YAAY,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7F,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,UAAU,CAAC,MAAwB,EAAE,UAAkB,EAAE,YAAoB;QAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,MAAM,YAAY,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YACrE,IAAI,QAAQ,YAAY,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACb,CAAC;iBAAM,IAAI,QAAQ,YAAY,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,YAAY,EAAE,CAAC;gBAChF,OAAO,IAAI,CAAC;YACb,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,eAAe,CAAC,MAAsB;QACrC,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,MAAM,YAAY,cAAc,EAAE,CAAC;YACtC,IAAI,QAAQ,YAAY,UAAU,EAAE,CAAC;gBACpC,OAAO,QAAQ,CAAC,OAAO,EAAS,CAAC;YAClC,CAAC;iBAAM,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC,QAAQ,EAAS,CAAC;YACnC,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC","sourcesContent":["import {\n\tAssignmentExpression,\n\tCallExpression, ExpressionNode,\n\texpressionVisitor, Identifier,\n\tJavaScriptParser, Literal,\n\tMemberExpression, MethodDefinition,\n\tProperty, PropertyDefinition,\n\tThisExpression, VisitorCallback\n} from '@ibyar/expressions';\n\ntype Key =\n\t| 'input'\n\t| 'output'\n\t| 'model'\n\t| 'formValue'\n\t| 'view'\n\t| 'viewChild'\n\t| 'viewChildren'\n\t| 'signal'\n\t| 'computed'\n\t| 'lazy'\n\t| 'signalNode'\n\t| 'computedNode'\n\t| 'lazyNode';\n\ntype RuntimeOption = {\n\tname: Key,\n\talias: string,\n};\n\nexport type SignalRuntimeMetadata = {\n\tsignal: Key;\n\tnecessity?: 'required';\n\toptions: Array<RuntimeOption>;\n};\n\n/**\n * scan model class for (inputs and output) property definitions with value by function call.\n */\nexport class RuntimeClassMetadata {\n\n\tstatic INSTANCE = new RuntimeClassMetadata();\n\n\tstatic scanMetadata(modelClass: Function) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scan(modelClass);\n\t}\n\n\tstatic scanClass(modelClass: Function, visitorCallback: VisitorCallback) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback);\n\t}\n\n\tscan(modelClass: Function): SignalRuntimeMetadata[] {\n\t\tconst metadata = this.newModelInitializers();\n\t\tconst visitor = this.createVisitor(metadata);\n\t\tthis.scanModelClass(modelClass, visitor);\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * scan class `Function` for properties and methods definitions.\n\t * @param modelClass \n\t * @param visitorCallback \n\t */\n\tscanModelClass(modelClass: Function, visitorCallback: VisitorCallback) {\n\t\tconst script = this.getClassScript(modelClass);\n\t\tconst expr = JavaScriptParser.parse(script);\n\t\texpressionVisitor.visit(expr, visitorCallback);\n\t}\n\n\tgetClassScript(modelClass: Function): string {\n\t\treturn this.getClassList(modelClass).map((ref, index) => `const Class${index} = ${ref};`).join('\\n');;\n\t}\n\n\tgetClassList(modelClass: Function): Function[] {\n\t\tconst list: Function[] = [];\n\t\twhile (modelClass instanceof Function) {\n\t\t\tlist.push(modelClass);\n\t\t\tmodelClass = Object.getPrototypeOf(modelClass);\n\t\t}\n\t\treturn list.reverse();\n\t}\n\n\tnewModelInitializers(): SignalRuntimeMetadata[] {\n\t\treturn [\n\t\t\t{ signal: 'input', options: [] },\n\t\t\t{ signal: 'input', necessity: 'required', options: [] },\n\t\t\t{ signal: 'output', options: [] },\n\t\t\t{ signal: 'model', options: [] },\n\t\t\t{ signal: 'model', necessity: 'required', options: [] },\n\t\t\t{ signal: 'signal', options: [] },\n\t\t\t{ signal: 'computed', options: [] },\n\t\t\t{ signal: 'lazy', options: [] },\n\t\t\t{ signal: 'formValue', options: [] },\n\t\t\t{ signal: 'view', options: [] },\n\t\t\t{ signal: 'viewChild', options: [] },\n\t\t\t{ signal: 'viewChild', necessity: 'required', options: [] },\n\t\t\t{ signal: 'viewChildren', options: [] },\n\t\t\t{ signal: 'signalNode', options: [] },\n\t\t\t{ signal: 'computedNode', options: [] },\n\t\t\t{ signal: 'lazyNode', options: [] },\n\t\t];\n\t}\n\n\tcreateVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback {\n\t\treturn (expression, type) => {\n\t\t\tif (type === 'PropertyDefinition') {\n\t\t\t\tconst definition = expression as PropertyDefinition;\n\t\t\t\tconst key = definition.getKey();\n\t\t\t\tconst value = definition.getValue();\n\t\t\t\tif (definition.isPrivate()\n\t\t\t\t\t|| definition.isStatic()\n\t\t\t\t\t|| !(key instanceof Identifier || key instanceof Literal)\n\t\t\t\t\t|| !(value instanceof CallExpression)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst property = properties.find(property => this.isCallOf(value, property.signal, property.necessity));\n\t\t\t\tif (property) {\n\t\t\t\t\tconst name = key instanceof Identifier ? key.getName() : key.getValue();\n\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(value);\n\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t}\n\t\t\t} else if (type === 'MethodDefinition') {\n\t\t\t\tconst definition = expression as MethodDefinition;\n\t\t\t\tif (definition.getKind() !== 'constructor') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texpressionVisitor.visit(definition.getValue(), (exp, expType) => {\n\t\t\t\t\tif (expType === 'AssignmentExpression') {\n\t\t\t\t\t\tconst assignment = exp as AssignmentExpression;\n\t\t\t\t\t\tconst right = assignment.getRight();\n\t\t\t\t\t\tif (right instanceof CallExpression) {\n\t\t\t\t\t\t\tconst property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));\n\t\t\t\t\t\t\tif (!property) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst name = this.hasMemberOfThis(assignment.getLeft());\n\t\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(right);\n\t\t\t\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\tgetAliasNameFromOptionArgument(call: CallExpression): string | undefined {\n\t\tlet alias: string | undefined;\n\t\tcall.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {\n\t\t\tif (exp instanceof Property) {\n\t\t\t\tif (this.isProperty(exp.getKey(), 'alias')) {\n\t\t\t\t\tconst value = exp.getValue();\n\t\t\t\t\tif (value instanceof Literal) {\n\t\t\t\t\t\talias = value.getValue();\n\t\t\t\t\t\tcontrol.abort();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn alias;\n\t}\n\n\tisProperty(node: ExpressionNode, property: string): boolean {\n\t\treturn (node instanceof Identifier && node.getName() === property)\n\t\t\t|| (node instanceof Literal && node.getValue() === property);\n\t}\n\n\tisCallOf(call: CallExpression, objectName: string, propertyName?: string): boolean {\n\t\tconst callee = call.getCallee();\n\t\tif (propertyName && callee instanceof MemberExpression) {\n\t\t\treturn this.isMemberOf(callee, objectName, propertyName);\n\t\t} else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tisMemberOf(member: MemberExpression, objectName: string, propertyName: string): boolean {\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof Identifier && object.getName() === objectName) {\n\t\t\tif (property instanceof Identifier && property.getName() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t} else if (property instanceof Literal && property.getValue() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thasMemberOfThis(member: ExpressionNode): Key | false {\n\t\tif (!(member instanceof MemberExpression)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof ThisExpression) {\n\t\t\tif (property instanceof Identifier) {\n\t\t\t\treturn property.getName() as Key;\n\t\t\t} else if (property instanceof Literal) {\n\t\t\t\treturn property.getValue() as Key;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAssignmentExpression,\n\tCallExpression, ExpressionNode,\n\texpressionVisitor, Identifier,\n\tJavaScriptParser, Literal,\n\tMemberExpression, MethodDefinition,\n\tProperty, PropertyDefinition,\n\tSequenceExpression, ThisExpression,\n\tVisitorCallback\n} from '@ibyar/expressions';\n\ntype Key =\n\t| 'input'\n\t| 'output'\n\t| 'formValue'\n\t| 'view'\n\t| 'viewChild'\n\t| 'viewChildren'\n\t| 'signal'\n\t| 'computed'\n\t| 'lazy'\n\t| 'signalNode'\n\t| 'computedNode'\n\t| 'lazyNode';\n\ntype RuntimeOption = {\n\tname: Key,\n\talias: string,\n};\n\nexport type SignalRuntimeMetadata = {\n\tsignal: Key;\n\tnecessity?: 'required';\n\toptions: Array<RuntimeOption>;\n};\n\n/**\n * scan model class for (inputs and output) property definitions with value by function call.\n */\nexport class RuntimeClassMetadata {\n\n\tstatic INSTANCE = new RuntimeClassMetadata();\n\n\tstatic scanMetadata(modelClass: Function, scanParent = true) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scan(modelClass, scanParent);\n\t}\n\n\tstatic scanClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent = true) {\n\t\treturn RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback, scanParent);\n\t}\n\n\tscan(modelClass: Function, scanParent: boolean): SignalRuntimeMetadata[] {\n\t\tconst metadata = this.newModelInitializers();\n\t\tconst visitor = this.createVisitor(metadata);\n\t\tthis.scanModelClass(modelClass, visitor, scanParent);\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * scan class `Function` for properties and methods definitions.\n\t * @param modelClass \n\t * @param visitorCallback \n\t */\n\tscanModelClass(modelClass: Function, visitorCallback: VisitorCallback, scanParent: boolean) {\n\t\tconst script = this.getClassScript(modelClass, scanParent);\n\t\tconst expr = JavaScriptParser.parse(script);\n\t\texpressionVisitor.visit(expr, visitorCallback);\n\t}\n\n\tgetClassScript(modelClass: Function, scanParent: boolean): string {\n\t\tconst modelList = scanParent ? this.getClassList(modelClass) : [modelClass];\n\t\treturn modelList.map((ref, index) => `const Class${index} = ${ref};`).join('\\n');;\n\t}\n\n\tgetClassList(modelClass: Function): Function[] {\n\t\tconst list: Function[] = [];\n\t\twhile (modelClass instanceof Function) {\n\t\t\tlist.push(modelClass);\n\t\t\tmodelClass = Object.getPrototypeOf(modelClass);\n\t\t}\n\t\treturn list.reverse();\n\t}\n\n\tnewModelInitializers(): SignalRuntimeMetadata[] {\n\t\treturn [\n\t\t\t{ signal: 'input', options: [] },\n\t\t\t{ signal: 'input', necessity: 'required', options: [] },\n\t\t\t{ signal: 'output', options: [] },\n\t\t\t{ signal: 'signal', options: [] },\n\t\t\t{ signal: 'computed', options: [] },\n\t\t\t{ signal: 'lazy', options: [] },\n\t\t\t{ signal: 'formValue', options: [] },\n\t\t\t{ signal: 'formValue', necessity: 'required', options: [] },\n\t\t\t{ signal: 'view', options: [] },\n\t\t\t{ signal: 'viewChild', options: [] },\n\t\t\t{ signal: 'viewChild', necessity: 'required', options: [] },\n\t\t\t{ signal: 'viewChildren', options: [] },\n\t\t\t{ signal: 'signalNode', options: [] },\n\t\t\t{ signal: 'computedNode', options: [] },\n\t\t\t{ signal: 'lazyNode', options: [] },\n\t\t];\n\t}\n\n\tcreateVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback {\n\t\treturn (expression, type) => {\n\t\t\tif (type === 'PropertyDefinition') {\n\t\t\t\tconst definition = expression as PropertyDefinition;\n\t\t\t\tconst key = definition.getKey();\n\t\t\t\tlet value = definition.getValue();\n\t\t\t\tif (definition.isPrivate()\n\t\t\t\t\t|| definition.isStatic()\n\t\t\t\t\t|| !(key instanceof Identifier || key instanceof Literal)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!(value instanceof CallExpression)) {\n\t\t\t\t\tif (value instanceof SequenceExpression) {\n\t\t\t\t\t\tvalue = value.getExpressions().find(node => node instanceof CallExpression && properties.find(property => this.isCallOf(node, property.signal, property.necessity)));\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst call = value as CallExpression;\n\t\t\t\tconst property = properties.find(property => this.isCallOf(call, property.signal, property.necessity));\n\t\t\t\tif (property) {\n\t\t\t\t\tconst name = key instanceof Identifier ? key.getName() : key.getValue();\n\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(call);\n\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t}\n\t\t\t} else if (type === 'MethodDefinition') {\n\t\t\t\tconst definition = expression as MethodDefinition;\n\t\t\t\tif (definition.getKind() !== 'constructor') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texpressionVisitor.visit(definition.getValue(), (exp, expType) => {\n\t\t\t\t\tif (expType === 'AssignmentExpression') {\n\t\t\t\t\t\tconst assignment = exp as AssignmentExpression;\n\t\t\t\t\t\tconst right = assignment.getRight();\n\t\t\t\t\t\tif (right instanceof CallExpression) {\n\t\t\t\t\t\t\tconst property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));\n\t\t\t\t\t\t\tif (!property) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst name = this.hasMemberOfThis(assignment.getLeft());\n\t\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\t\tconst alias = this.getAliasNameFromOptionArgument(right);\n\t\t\t\t\t\t\t\tproperty.options.push({ name, alias: alias ?? name });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\tgetAliasNameFromOptionArgument(call: CallExpression): string | undefined {\n\t\tlet alias: string | undefined;\n\t\tcall.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {\n\t\t\tif (exp instanceof Property) {\n\t\t\t\tif (this.isProperty(exp.getKey(), 'alias')) {\n\t\t\t\t\tconst value = exp.getValue();\n\t\t\t\t\tif (value instanceof Literal) {\n\t\t\t\t\t\talias = value.getValue();\n\t\t\t\t\t\tcontrol.abort();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn alias;\n\t}\n\n\tisProperty(node: ExpressionNode, property: string): boolean {\n\t\treturn (node instanceof Identifier && node.getName() === property)\n\t\t\t|| (node instanceof Literal && node.getValue() === property);\n\t}\n\n\tisCallOf(call: CallExpression, objectName: string, propertyName?: string): boolean {\n\t\tconst callee = call.getCallee();\n\t\tif (propertyName && callee instanceof MemberExpression) {\n\t\t\treturn this.isMemberOf(callee, objectName, propertyName);\n\t\t} else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tisMemberOf(member: MemberExpression, objectName: string, propertyName: string): boolean {\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof Identifier && object.getName() === objectName) {\n\t\t\tif (property instanceof Identifier && property.getName() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t} else if (property instanceof Literal && property.getValue() === propertyName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thasMemberOfThis(member: ExpressionNode): Key | false {\n\t\tif (!(member instanceof MemberExpression)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst object = member.getObject();\n\t\tconst property = member.getProperty();\n\t\tif (object instanceof ThisExpression) {\n\t\t\tif (property instanceof Identifier) {\n\t\t\t\treturn property.getName() as Key;\n\t\t\t} else if (property instanceof Literal) {\n\t\t\t\treturn property.getValue() as Key;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n"]}
@@ -0,0 +1,4 @@
1
+ import { Context, ReactiveScopeControl } from '@ibyar/expressions';
2
+ export declare class ReactiveSignalScopeControl<T extends Context> extends ReactiveScopeControl<T> {
3
+ }
4
+ //# sourceMappingURL=scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/core/signals/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,qBAAa,0BAA0B,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;CAEzF"}
@@ -0,0 +1,4 @@
1
+ import { ReactiveScopeControl } from '@ibyar/expressions';
2
+ export class ReactiveSignalScopeControl extends ReactiveScopeControl {
3
+ }
4
+ //# sourceMappingURL=scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../../src/core/signals/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,OAAO,0BAA8C,SAAQ,oBAAuB;CAEzF","sourcesContent":["import { Context, ReactiveScopeControl } from '@ibyar/expressions';\n\n\nexport class ReactiveSignalScopeControl<T extends Context> extends ReactiveScopeControl<T> {\n\n}\n\n"]}
@@ -2,15 +2,10 @@ import { ReactiveNode, SignalScope } from '@ibyar/expressions';
2
2
  export declare function pushNewSignalScope(): SignalScope;
3
3
  export declare function pushSignalScope(scope: SignalScope): void;
4
4
  export declare function clearSignalScope(scope: SignalScope): void;
5
- export declare function signal<T>(initialValue: T): import("@ibyar/expressions").Signal<T>;
6
- export declare function signalFn<T>(initialValue: T): import("@ibyar/expressions").WritableSignal<T>;
5
+ export declare function signal<T>(initialValue?: T): import("@ibyar/expressions").Signal<T>;
7
6
  export declare function computed<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
8
- export declare function computedFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
9
7
  export declare function lazy<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
10
- export declare function lazyFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
11
- export declare function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): {
12
- destroy(): void;
13
- };
8
+ export declare function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): import("@ibyar/expressions").SignalDestroyRef;
14
9
  export declare function untracked<T>(reactiveNode: ReactiveNode<T>): T;
15
10
  export declare function untracked<T>(nonReactiveReadsFn: () => T): T;
16
11
  //# sourceMappingURL=signals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG/D,wBAAgB,kBAAkB,gBAIjC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,QAEjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,QAElD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,0CAExC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,kDAE1C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,4CAE/C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAEjD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,wCAE3C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAE7C;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI;;EAEjF;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG/D,wBAAgB,kBAAkB,gBAIjC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,QAEjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,QAElD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,0CAEzC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,4CAE/C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,wCAE3C;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,iDAEjF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC"}
@@ -14,21 +14,12 @@ export function clearSignalScope(scope) {
14
14
  export function signal(initialValue) {
15
15
  return signalScopeFactory.signal(initialValue);
16
16
  }
17
- export function signalFn(initialValue) {
18
- return signalScopeFactory.signalFn(initialValue);
19
- }
20
17
  export function computed(computation) {
21
18
  return signalScopeFactory.computed(computation);
22
19
  }
23
- export function computedFn(computation) {
24
- return signalScopeFactory.computedFn(computation);
25
- }
26
20
  export function lazy(computation) {
27
21
  return signalScopeFactory.lazy(computation);
28
22
  }
29
- export function lazyFn(computation) {
30
- return signalScopeFactory.lazyFn(computation);
31
- }
32
23
  export function effect(effectFn) {
33
24
  return signalScopeFactory.effect(effectFn);
34
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,kBAAkB;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IACjD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IAClD,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,YAAe;IACxC,OAAO,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,YAAe;IAC1C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAoB;IAC/C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,WAAoB;IACjD,OAAO,kBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,IAAI,CAAI,WAAoB;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,WAAoB;IAC7C,OAAO,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,QAA2D;IACjF,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAGD,MAAM,UAAU,SAAS,CAAI,gBAA6C;IACzE,OAAO,kBAAkB,CAAC,SAAS,CAAC,gBAAmC,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import { ReactiveNode, SignalScope } from '@ibyar/expressions';\nimport { signalScopeFactory } from './factory.js';\n\nexport function pushNewSignalScope() {\n\tconst scope = SignalScope.create();\n\tsignalScopeFactory.push(scope);\n\treturn scope;\n}\n\nexport function pushSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.push(scope);\n}\n\nexport function clearSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.pop(scope);\n}\n\nexport function signal<T>(initialValue: T) {\n\treturn signalScopeFactory.signal(initialValue);\n}\n\nexport function signalFn<T>(initialValue: T) {\n\treturn signalScopeFactory.signalFn(initialValue);\n}\n\nexport function computed<T>(computation: () => T) {\n\treturn signalScopeFactory.computed(computation);\n}\n\nexport function computedFn<T>(computation: () => T) {\n\treturn signalScopeFactory!.computedFn(computation);\n}\n\nexport function lazy<T>(computation: () => T) {\n\treturn signalScopeFactory.lazy(computation);\n}\n\nexport function lazyFn<T>(computation: () => T) {\n\treturn signalScopeFactory.lazyFn(computation);\n}\n\nexport function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\treturn signalScopeFactory.effect(effectFn);\n}\nexport function untracked<T>(reactiveNode: ReactiveNode<T>): T;\nexport function untracked<T>(nonReactiveReadsFn: () => T): T;\nexport function untracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\treturn signalScopeFactory.untracked(nonReactiveReads as ReactiveNode<T>);\n}\n"]}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/core/signals/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,kBAAkB;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IACjD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IAClD,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,YAAgB;IACzC,OAAO,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAoB;IAC/C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,IAAI,CAAI,WAAoB;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,QAA2D;IACjF,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAID,MAAM,UAAU,SAAS,CAAI,gBAA6C;IACzE,OAAO,kBAAkB,CAAC,SAAS,CAAC,gBAAmC,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import { ReactiveNode, SignalScope } from '@ibyar/expressions';\nimport { signalScopeFactory } from './factory.js';\n\nexport function pushNewSignalScope() {\n\tconst scope = SignalScope.create();\n\tsignalScopeFactory.push(scope);\n\treturn scope;\n}\n\nexport function pushSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.push(scope);\n}\n\nexport function clearSignalScope(scope: SignalScope) {\n\tsignalScopeFactory.pop(scope);\n}\n\nexport function signal<T>(initialValue?: T) {\n\treturn signalScopeFactory.signal(initialValue);\n}\n\nexport function computed<T>(computation: () => T) {\n\treturn signalScopeFactory.computed(computation);\n}\n\nexport function lazy<T>(computation: () => T) {\n\treturn signalScopeFactory.lazy(computation);\n}\n\nexport function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\treturn signalScopeFactory.effect(effectFn);\n}\n\nexport function untracked<T>(reactiveNode: ReactiveNode<T>): T;\nexport function untracked<T>(nonReactiveReadsFn: () => T): T;\nexport function untracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\treturn signalScopeFactory.untracked(nonReactiveReads as ReactiveNode<T>);\n}\n"]}
@@ -1,4 +1,3 @@
1
- export declare function hasComponentAttr(element: HTMLElement, attr: string): boolean;
2
1
  export declare function hasAttrCustomElement(element: HTMLElement, attr: string): boolean;
3
2
  export declare function isDataAttributes(attr: string): boolean;
4
3
  export declare function hasAttr(element: HTMLElement, attr: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"elements-util.d.ts","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM5E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAE5C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnE"}
1
+ {"version":3,"file":"elements-util.d.ts","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAE5C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAInE"}
@@ -1,12 +1,4 @@
1
1
  import { hasNativeAttr } from '@ibyar/elements';
2
- import { isHTMLComponent } from '../component/custom-element.js';
3
- export function hasComponentAttr(element, attr) {
4
- if (isHTMLComponent(element)) {
5
- var componentRef = element.getComponentRef();
6
- return componentRef.inputs.some(input => input.viewAttribute === attr);
7
- }
8
- return false;
9
- }
10
2
  export function hasAttrCustomElement(element, attr) {
11
3
  if (Reflect.has(element.constructor, 'allAttributes')) {
12
4
  return Reflect.get(element.constructor, 'allAttributes').some((prop) => prop === attr);
@@ -22,7 +14,6 @@ export function isDataAttributes(attr) {
22
14
  export function hasAttr(element, attr) {
23
15
  return hasNativeAttr(element, attr)
24
16
  || hasAttrCustomElement(element, attr)
25
- || hasComponentAttr(element, attr)
26
17
  || isDataAttributes(attr);
27
18
  }
28
19
  //# sourceMappingURL=elements-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"elements-util.js","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,gBAAgB,CAAC,OAAoB,EAAE,IAAY;IAClE,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAsB,OAAO,CAAC,eAAe,EAAE,CAAC;QAChE,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,IAAY;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChG,CAAC;SACI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAoB,EAAE,IAAY;IACzD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;WACnC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { hasNativeAttr } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { isHTMLComponent } from '../component/custom-element.js';\n\nexport function hasComponentAttr(element: HTMLElement, attr: string): boolean {\n\tif (isHTMLComponent(element)) {\n\t\tvar componentRef: ComponentRef<any> = element.getComponentRef();\n\t\treturn componentRef.inputs.some(input => input.viewAttribute === attr);\n\t}\n\treturn false;\n}\n\nexport function hasAttrCustomElement(element: HTMLElement, attr: string): boolean {\n\tif (Reflect.has(element.constructor, 'allAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'allAttributes').some((prop: string) => prop === attr);\n\t}\n\telse if (Reflect.has(element.constructor, 'observedAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'observedAttributes').some((prop: string) => prop === attr);\n\t}\n\treturn false;\n}\n\nexport function isDataAttributes(attr: string) {\n\treturn attr.startsWith('data-');\n}\n\nexport function hasAttr(element: HTMLElement, attr: string): boolean {\n\treturn hasNativeAttr(element, attr)\n\t\t|| hasAttrCustomElement(element, attr)\n\t\t|| hasComponentAttr(element, attr)\n\t\t|| isDataAttributes(attr);\n}\n"]}
1
+ {"version":3,"file":"elements-util.js","sourceRoot":"","sources":["../../../src/core/utils/elements-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,IAAY;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChG,CAAC;SACI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAoB,EAAE,IAAY;IACzD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;WAC/B,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;WACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { hasNativeAttr } from '@ibyar/elements';\n\n\nexport function hasAttrCustomElement(element: HTMLElement, attr: string): boolean {\n\tif (Reflect.has(element.constructor, 'allAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'allAttributes').some((prop: string) => prop === attr);\n\t}\n\telse if (Reflect.has(element.constructor, 'observedAttributes')) {\n\t\treturn Reflect.get(element.constructor, 'observedAttributes').some((prop: string) => prop === attr);\n\t}\n\treturn false;\n}\n\nexport function isDataAttributes(attr: string) {\n\treturn attr.startsWith('data-');\n}\n\nexport function hasAttr(element: HTMLElement, attr: string): boolean {\n\treturn hasNativeAttr(element, attr)\n\t\t|| hasAttrCustomElement(element, attr)\n\t\t|| isDataAttributes(attr);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"base-view.d.ts","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAW/C,OAAO,EAAgC,aAAa,EAAa,MAAM,gCAAgC,CAAC;AAaxG,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA0W5G"}
1
+ {"version":3,"file":"base-view.d.ts","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAgC,aAAa,EAAa,MAAM,gCAAgC,CAAC;AAaxG,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAwT5G"}
package/view/base-view.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ReactiveScope, ReactiveScopeControl, getReactiveNode, isReactive } from '@ibyar/expressions';
1
+ import { ReactiveScope, ReactiveControlScope, isReactive } from '@ibyar/expressions';
2
2
  import { isAfterContentChecked, isAfterContentInit, isAfterViewChecked, isAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit } from '../component/lifecycle.js';
3
3
  import { EventEmitter } from '../component/events.js';
4
4
  import { ComponentRender } from './render.js';
@@ -43,19 +43,17 @@ export function baseFactoryView(htmlElementType) {
43
43
  removeProvider(this._provider);
44
44
  this._model = model;
45
45
  clearSignalScope(this._signalScope);
46
- const modelScope = ReactiveScopeControl.for(model);
46
+ const modelScope = ReactiveControlScope.for(model);
47
47
  const modelProxyRef = this._zone instanceof ProxyAuroraZone
48
48
  ? createProxyZone(model, this._zone)
49
49
  : model;
50
50
  modelScope.getContextProxy = () => modelProxyRef;
51
51
  this._modelScope = modelScope;
52
52
  Object.keys(this._model).forEach(key => {
53
- const value = this._model[key];
54
- const node = getReactiveNode(value);
55
- if (!node) {
56
- return;
53
+ const node = this._model[key];
54
+ if (isReactive(node)) {
55
+ node.subscribe((value, old) => this._modelScope.emit(key, value, old));
57
56
  }
58
- node.subscribe((value, old) => this._modelScope.emit(key, value, old));
59
57
  });
60
58
  this._viewScope = ReactiveScope.for({ 'this': this });
61
59
  const elementScope = this._viewScope.getInnerScope('this');
@@ -64,12 +62,7 @@ export function baseFactoryView(htmlElementType) {
64
62
  if (newValue === oldValue) {
65
63
  return;
66
64
  }
67
- if (isReactive(this._model[input.modelProperty])) {
68
- this._model[input.modelProperty].set(newValue);
69
- }
70
- else {
71
- this._modelScope.set(input.modelProperty, newValue);
72
- }
65
+ this._render.modelStack.set(input.modelProperty, newValue);
73
66
  });
74
67
  this._modelScope.subscribe(input.modelProperty, (newValue, oldValue) => {
75
68
  if (newValue === oldValue) {
@@ -107,9 +100,6 @@ export function baseFactoryView(htmlElementType) {
107
100
  this.initView();
108
101
  }
109
102
  }
110
- detectChanges() {
111
- this._modelScope.detectChanges();
112
- }
113
103
  doBlockCallback = () => {
114
104
  if (isDoCheck(this._model)) {
115
105
  this._zone.run(this._model.doCheck, this._modelScope.getContextProxy());
@@ -118,58 +108,21 @@ export function baseFactoryView(htmlElementType) {
118
108
  getComponentRef() {
119
109
  return this._componentRef;
120
110
  }
121
- hasInputStartWith(viewProp) {
122
- let dotIndex = viewProp.indexOf('.');
123
- if (dotIndex > 0) {
124
- viewProp = viewProp.substring(0, dotIndex);
125
- }
126
- return this.hasInput(viewProp);
127
- }
128
- getInputStartWith(viewProp) {
129
- let index = viewProp.indexOf('.');
130
- if (index > 0) {
131
- viewProp = viewProp.substring(0, index);
132
- }
133
- index = viewProp.indexOf('[');
134
- if (index > 0) {
135
- viewProp = viewProp.substring(0, index);
136
- }
137
- return this.getInput(viewProp);
138
- }
139
- hasInput(viewProp) {
140
- return this._componentRef.inputs.some(input => input.viewAttribute === viewProp);
141
- }
142
111
  getInput(viewProp) {
143
112
  return this._componentRef.inputs.find(input => input.viewAttribute === viewProp);
144
113
  }
145
114
  getInputValue(viewProp) {
146
115
  const inputRef = this.getInput(viewProp);
147
116
  if (inputRef) {
148
- return this._model[inputRef.modelProperty];
117
+ return this._render.modelStack.get(inputRef.modelProperty);
149
118
  }
150
119
  }
151
120
  setInputValue(viewProp, value) {
152
121
  const inputRef = this.getInput(viewProp);
153
122
  if (inputRef) {
154
- this._modelScope.set(inputRef.modelProperty, value);
123
+ this._render.modelStack.set(inputRef.modelProperty, value);
155
124
  }
156
125
  }
157
- hasOutput(viewProp) {
158
- return this._componentRef.outputs.some(output => output.viewAttribute === viewProp);
159
- }
160
- getOutput(viewProp) {
161
- return this._componentRef.outputs.find(output => output.viewAttribute === viewProp);
162
- }
163
- getEventEmitter(viewProp) {
164
- const outputRef = this.getOutput(viewProp);
165
- if (outputRef) {
166
- return this._model[outputRef.modelProperty];
167
- }
168
- return;
169
- }
170
- hasProp(propName) {
171
- return Reflect.has(this._model, propName);
172
- }
173
126
  setAttributeHelper(attrViewName, value) {
174
127
  if (value === null || value === undefined) {
175
128
  this.removeAttribute(attrViewName);
@@ -262,7 +215,7 @@ export function baseFactoryView(htmlElementType) {
262
215
  this.dispatchEvent(event);
263
216
  }
264
217
  initOuterAttribute(attr) {
265
- // [window, this] scop
218
+ // [window, this] scope
266
219
  let elementAttr = attr.name;
267
220
  let modelProperty = attr.value;
268
221
  if (elementAttr.startsWith('[')) {
@@ -271,31 +224,39 @@ export function baseFactoryView(htmlElementType) {
271
224
  this.setInputValue(elementAttr, Reflect.get(window, modelProperty));
272
225
  }
273
226
  }
274
- else if (elementAttr.startsWith('(')) {
227
+ else if ((elementAttr.startsWith('(') && elementAttr.endsWith(')')) || elementAttr.startsWith('@') || elementAttr.startsWith('on')) {
275
228
  // (elementAttr)="modelProperty()"
276
- elementAttr = elementAttr.substring(1, elementAttr.length - 1);
277
- // this.handleEvent(element, elementAttr, viewProperty);
278
- modelProperty = modelProperty.endsWith('()') ?
279
- modelProperty.substring(0, modelProperty.length - 2) : modelProperty;
280
- let callback = Reflect.get(window, modelProperty);
281
- this.addEventListener(elementAttr, event => {
282
- callback(event);
283
- });
284
- }
285
- else if (elementAttr.startsWith('on')) {
286
- const modelEvent = this.getEventEmitter(elementAttr.substring(2));
287
- if (modelEvent) {
288
- // modelEvent.subscribe(listener);
289
- modelProperty = modelProperty.endsWith('()') ?
290
- modelProperty.substring(0, modelProperty.length - 2) : modelProperty;
291
- let listener = Reflect.get(window, modelProperty);
292
- modelEvent.subscribe((data) => {
293
- listener(data);
294
- });
229
+ // @elementAttr="modelProperty()"
230
+ // onElementAttr="modelProperty()"
231
+ // lower-case-event-name = "modelProperty()"
232
+ let start = 0, end = undefined;
233
+ if (elementAttr.startsWith('(') || elementAttr.startsWith('@')) {
234
+ start = 1;
235
+ }
236
+ else if (elementAttr.startsWith('on')) {
237
+ start = 2;
238
+ }
239
+ if (elementAttr.endsWith(')')) {
240
+ end = elementAttr.length - 1;
241
+ }
242
+ const eventName = elementAttr.substring(start, end)?.replaceAll('-', '').toLowerCase();
243
+ if (modelProperty.endsWith('()')) {
244
+ modelProperty = modelProperty.substring(0, modelProperty.length - 2);
245
+ }
246
+ const callback = Reflect.get(window, modelProperty);
247
+ const customEvent = this._componentRef.outputs.find(output => output.viewAttribute.toLowerCase() === eventName);
248
+ if (customEvent) {
249
+ this._modelScope.subscribe(customEvent.modelProperty, (data) => callback?.(data));
250
+ }
251
+ else {
252
+ this.addEventListener(elementAttr, event => callback?.(event));
295
253
  }
296
254
  }
297
255
  else {
298
- this.setInputValue(attr.name, attr.value);
256
+ const inputRef = this.getInput(attr.name);
257
+ if (inputRef) {
258
+ this._render.modelStack.set(inputRef.modelProperty, attr.value);
259
+ }
299
260
  }
300
261
  }
301
262
  onDestroy(callback) {
@@ -325,13 +286,6 @@ export function baseFactoryView(htmlElementType) {
325
286
  const event = new CustomEvent('disconnected', { cancelable: true, bubbles: false, composed: false });
326
287
  this.dispatchEvent(event);
327
288
  }
328
- triggerOutput(eventName, value) {
329
- const modelEvent = this.getEventEmitter(eventName);
330
- if (modelEvent) {
331
- modelEvent.emit(value);
332
- return;
333
- }
334
- }
335
289
  };
336
290
  }
337
291
  //# sourceMappingURL=base-view.js.map