@ibyar/core 2.3.0 → 2.5.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 (105) hide show
  1. package/annotation/decorators.d.ts +23 -2
  2. package/annotation/decorators.d.ts.map +1 -1
  3. package/annotation/decorators.js +18 -0
  4. package/annotation/decorators.js.map +1 -1
  5. package/annotation/options.d.ts +11 -7
  6. package/annotation/options.d.ts.map +1 -1
  7. package/annotation/options.js.map +1 -1
  8. package/binding/binding.expressions.d.ts +2 -2
  9. package/binding/binding.expressions.d.ts.map +1 -1
  10. package/binding/binding.expressions.js.map +1 -1
  11. package/component/component.d.ts +15 -10
  12. package/component/component.d.ts.map +1 -1
  13. package/component/component.js +46 -1
  14. package/component/component.js.map +1 -1
  15. package/component/custom-element.d.ts +6 -2
  16. package/component/custom-element.d.ts.map +1 -1
  17. package/component/custom-element.js.map +1 -1
  18. package/component/events.js.map +1 -1
  19. package/component/initializer.d.ts +67 -0
  20. package/component/initializer.d.ts.map +1 -0
  21. package/component/initializer.js +59 -0
  22. package/component/initializer.js.map +1 -0
  23. package/di/inject.d.ts +11 -4
  24. package/di/inject.d.ts.map +1 -1
  25. package/di/inject.js +18 -2
  26. package/di/inject.js.map +1 -1
  27. package/di/provider.d.ts +7 -5
  28. package/di/provider.d.ts.map +1 -1
  29. package/di/provider.js +29 -13
  30. package/di/provider.js.map +1 -1
  31. package/directive/directive.d.ts +3 -2
  32. package/directive/directive.d.ts.map +1 -1
  33. package/directive/directive.js +6 -3
  34. package/directive/directive.js.map +1 -1
  35. package/html/deserialize.d.ts.map +1 -1
  36. package/html/deserialize.js +11 -2
  37. package/html/deserialize.js.map +1 -1
  38. package/html/expression.d.ts.map +1 -1
  39. package/html/expression.js +14 -5
  40. package/html/expression.js.map +1 -1
  41. package/html/types.d.ts +6 -0
  42. package/html/types.d.ts.map +1 -1
  43. package/html/types.js.map +1 -1
  44. package/index.d.ts +1 -0
  45. package/index.d.ts.map +1 -1
  46. package/index.js +1 -0
  47. package/index.js.map +1 -1
  48. package/initializer/input.d.ts +1 -0
  49. package/initializer/input.d.ts.map +1 -0
  50. package/initializer/input.js +2 -0
  51. package/initializer/input.js.map +1 -0
  52. package/linker/change-detector-ref.d.ts.map +1 -1
  53. package/linker/change-detector-ref.js +26 -4
  54. package/linker/change-detector-ref.js.map +1 -1
  55. package/linker/view-container-ref.d.ts +4 -4
  56. package/linker/view-container-ref.d.ts.map +1 -1
  57. package/linker/view-container-ref.js.map +1 -1
  58. package/package.json +8 -8
  59. package/pipe/pipe.d.ts +6 -6
  60. package/pipe/pipe.d.ts.map +1 -1
  61. package/pipe/pipe.js.map +1 -1
  62. package/signals/factory.d.ts +23 -0
  63. package/signals/factory.d.ts.map +1 -0
  64. package/signals/factory.js +65 -0
  65. package/signals/factory.js.map +1 -0
  66. package/signals/initializer.d.ts +26 -0
  67. package/signals/initializer.d.ts.map +1 -0
  68. package/signals/initializer.js +19 -0
  69. package/signals/initializer.js.map +1 -0
  70. package/signals/input.d.ts +1 -0
  71. package/signals/input.d.ts.map +1 -0
  72. package/signals/input.js +2 -0
  73. package/signals/input.js.map +1 -0
  74. package/signals/runtime.d.ts +37 -0
  75. package/signals/runtime.d.ts.map +1 -0
  76. package/signals/runtime.js +165 -0
  77. package/signals/runtime.js.map +1 -0
  78. package/signals/signals.d.ts +11 -9
  79. package/signals/signals.d.ts.map +1 -1
  80. package/signals/signals.js +23 -41
  81. package/signals/signals.js.map +1 -1
  82. package/utils/typeof.d.ts +4 -2
  83. package/utils/typeof.d.ts.map +1 -1
  84. package/utils/typeof.js.map +1 -1
  85. package/view/base-view.d.ts +2 -2
  86. package/view/base-view.d.ts.map +1 -1
  87. package/view/base-view.js +42 -24
  88. package/view/base-view.js.map +1 -1
  89. package/view/form-view.d.ts +2 -2
  90. package/view/form-view.d.ts.map +1 -1
  91. package/view/form-view.js +2 -1
  92. package/view/form-view.js.map +1 -1
  93. package/view/render.d.ts +4 -1
  94. package/view/render.d.ts.map +1 -1
  95. package/view/render.js +32 -6
  96. package/view/render.js.map +1 -1
  97. package/view/utils.d.ts +2 -2
  98. package/view/utils.d.ts.map +1 -1
  99. package/view/utils.js.map +1 -1
  100. package/view/view.d.ts +3 -3
  101. package/view/view.d.ts.map +1 -1
  102. package/view/view.js +27 -7
  103. package/view/view.js.map +1 -1
  104. package/zone/zone.js +1 -1
  105. package/zone/zone.js.map +1 -1
package/pipe/pipe.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ReactiveScopeControl, ReadOnlyScope, ScopeSubscription } from '@ibyar/expressions';
2
2
  import { OnDestroy } from '../component/lifecycle.js';
3
3
  import { ChangeDetectorRef } from '../linker/change-detector-ref.js';
4
- import { TypeOf } from '../utils/typeof.js';
4
+ import { Type } from '../utils/typeof.js';
5
5
  /**
6
6
  * Pipes are used as singleton
7
7
  * it will be created if it needed, had no life cycle
@@ -25,13 +25,13 @@ export declare class PipeProvider extends ReadOnlyScope<{
25
25
  constructor();
26
26
  has(pipeName: string): boolean;
27
27
  get(pipeName: string): any;
28
- getClass(): TypeOf<PipeProvider>;
28
+ getClass(): Type<PipeProvider>;
29
29
  }
30
30
  export declare class AsyncPipeProvider extends ReadOnlyScope<object> {
31
31
  constructor();
32
32
  has(pipeName: string): boolean;
33
- get(pipeName: string): TypeOf<AsyncPipeTransform<any, any>> | undefined;
34
- getClass(): TypeOf<AsyncPipeProvider>;
33
+ get(pipeName: string): Type<AsyncPipeTransform<any, any>> | undefined;
34
+ getClass(): Type<AsyncPipeProvider>;
35
35
  }
36
36
  export declare class AsyncPipeScope<T extends {
37
37
  [key: string]: AsyncPipeTransform<any, any>;
@@ -41,9 +41,9 @@ export declare class AsyncPipeScope<T extends {
41
41
  }>(): AsyncPipeScope<P>;
42
42
  private wrapper;
43
43
  constructor();
44
- set(propertyKey: keyof T, pipeClass: TypeOf<AsyncPipeTransform<any, any>>, receiver?: any): boolean;
44
+ set(propertyKey: keyof T, pipeClass: Type<AsyncPipeTransform<any, any>>, receiver?: any): boolean;
45
45
  get(propertyKey: keyof T): any;
46
46
  unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>): void;
47
- getClass(): TypeOf<AsyncPipeScope<T>>;
47
+ getClass(): Type<AsyncPipeScope<T>>;
48
48
  }
49
49
  //# sourceMappingURL=pipe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kCAAkC,CAAC;AAE9F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACvC;AAED,8BAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;IAC3E,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;gBAApC,iBAAiB,EAAE,iBAAiB;IAC1D,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,QAAQ,CAAC,SAAS,IAAI,IAAI;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAEpG;AAED,qBAAa,YAAa,SAAQ,aAAa,CAAC;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;;IAIhF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAc1B,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC;CAGhC;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,MAAM,CAAC;;IAI3D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;IAOvE,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC;CAGrC;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAAE,KAAK,cAAc,CAAC,CAAC,CAAC;IAGjG,OAAO,CAAC,OAAO,CAAmC;;IAIzC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO;IAWnG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG;IAG9B,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAK9E,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAGrC"}
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kCAAkC,CAAC;AAE9F,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACvC;AAED,8BAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;IAC3E,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;gBAApC,iBAAiB,EAAE,iBAAiB;IAC1D,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,QAAQ,CAAC,SAAS,IAAI,IAAI;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAEpG;AAED,qBAAa,YAAa,SAAQ,aAAa,CAAC;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;;IAIhF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAc1B,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,MAAM,CAAC;;IAI3D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;IAOrE,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC;CAGnC;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAAE,KAAK,cAAc,CAAC,CAAC,CAAC;IAGjG,OAAO,CAAC,OAAO,CAAmC;;IAIzC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO;IAWjG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG;IAG9B,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAK9E,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAGnC"}
package/pipe/pipe.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScopeControl, ReadOnlyScope, ScopeSubscription } from '@ibyar/expressions';\nimport { OnDestroy } from '../component/lifecycle.js';\nimport { ChangeDetectorRef, createChangeDetectorRef } from '../linker/change-detector-ref.js';\nimport { classRegistryProvider } from '../providers/provider.js';\nimport { TypeOf } from '../utils/typeof.js';\n\n/**\n * Pipes are used as singleton\n * it will be created if it needed, had no life cycle\n * \n * * no dependency injection applied on filters for now,\n * TODO: add support of dependency injection\n */\nexport interface PipeTransform<T, U> {\n\ttransform(value: T, ...args: any[]): U;\n}\n\nexport abstract class AsyncPipeTransform<T, U> implements PipeTransform<T, U>, OnDestroy {\n\tconstructor(protected changeDetectorRef: ChangeDetectorRef) { }\n\tabstract transform(value: T, ...args: any[]): U;\n\tabstract onDestroy(): void;\n}\n\nexport function isPipeTransform<T extends any, U extends any>(pipe: any): pipe is PipeTransform<T, U> {\n\treturn Reflect.has(Object.getPrototypeOf(pipe), 'transform');\n}\n\nexport class PipeProvider extends ReadOnlyScope<{ [pipeName: string]: Function }> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tif (pipeName in this._ctx) {\n\t\t\treturn true;\n\t\t}\n\t\tconst pipeRef = classRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef !== undefined && !pipeRef.asynchronous;\n\t}\n\tget(pipeName: string): any {\n\t\tlet transformFunc: Function | undefined;\n\t\tif (transformFunc = this._ctx[pipeName]) {\n\t\t\treturn transformFunc;\n\t\t}\n\t\tconst pipeRef = classRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef !== undefined && !pipeRef.asynchronous) {\n\t\t\tconst pipe = new pipeRef.modelClass();\n\t\t\ttransformFunc = (value: any, ...args: any[]) => pipe.transform(value, ...args);\n\t\t\tthis._ctx[pipeRef.name] = transformFunc;\n\t\t\treturn transformFunc;\n\t\t}\n\t\treturn void 0;\n\t}\n\tgetClass(): TypeOf<PipeProvider> {\n\t\treturn PipeProvider;\n\t}\n}\n\nexport class AsyncPipeProvider extends ReadOnlyScope<object> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tconst pipeRef = classRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef?.asynchronous ? true : false;\n\t}\n\tget(pipeName: string): TypeOf<AsyncPipeTransform<any, any>> | undefined {\n\t\tconst pipeRef = classRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef?.asynchronous) {\n\t\t\treturn pipeRef.modelClass;\n\t\t}\n\t\treturn;\n\t}\n\tgetClass(): TypeOf<AsyncPipeProvider> {\n\t\treturn AsyncPipeProvider;\n\t}\n}\n\nexport class AsyncPipeScope<T extends { [key: string]: AsyncPipeTransform<any, any> }> extends ReactiveScopeControl<T> {\n\tstatic blockScope<P extends { [key: string]: AsyncPipeTransform<any, any> }>(): AsyncPipeScope<P> {\n\t\treturn new AsyncPipeScope();\n\t}\n\tprivate wrapper: { [key: string]: Function } = {};\n\tconstructor() {\n\t\tsuper({} as T);\n\t}\n\toverride set(propertyKey: keyof T, pipeClass: TypeOf<AsyncPipeTransform<any, any>>, receiver?: any): boolean {\n\t\tconst detector = createChangeDetectorRef(this, propertyKey);\n\t\tconst pipe = new pipeClass(detector);\n\t\tconst result = super.set(propertyKey, pipe, receiver);\n\t\tif (result) {\n\t\t\tthis.wrapper[propertyKey as string] = (value: any, ...args: any[]) => {\n\t\t\t\treturn pipe.transform(value, ...args)\n\t\t\t};\n\t\t}\n\t\treturn result;\n\t}\n\toverride get(propertyKey: keyof T): any {\n\t\treturn Reflect.get(this.wrapper, propertyKey);\n\t}\n\toverride unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tsuper.unsubscribe(propertyKey, subscription);\n\t\tconst pipe = this._ctx[propertyKey];\n\t\tpipe.onDestroy();\n\t}\n\tgetClass(): TypeOf<AsyncPipeScope<T>> {\n\t\treturn AsyncPipeScope;\n\t}\n}\n"]}
1
+ {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScopeControl, ReadOnlyScope, ScopeSubscription } from '@ibyar/expressions';\nimport { OnDestroy } from '../component/lifecycle.js';\nimport { ChangeDetectorRef, createChangeDetectorRef } from '../linker/change-detector-ref.js';\nimport { classRegistryProvider } from '../providers/provider.js';\nimport { Type } from '../utils/typeof.js';\n\n/**\n * Pipes are used as singleton\n * it will be created if it needed, had no life cycle\n * \n * * no dependency injection applied on filters for now,\n * TODO: add support of dependency injection\n */\nexport interface PipeTransform<T, U> {\n\ttransform(value: T, ...args: any[]): U;\n}\n\nexport abstract class AsyncPipeTransform<T, U> implements PipeTransform<T, U>, OnDestroy {\n\tconstructor(protected changeDetectorRef: ChangeDetectorRef) { }\n\tabstract transform(value: T, ...args: any[]): U;\n\tabstract onDestroy(): void;\n}\n\nexport function isPipeTransform<T extends any, U extends any>(pipe: any): pipe is PipeTransform<T, U> {\n\treturn Reflect.has(Object.getPrototypeOf(pipe), 'transform');\n}\n\nexport class PipeProvider extends ReadOnlyScope<{ [pipeName: string]: Function }> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tif (pipeName in this._ctx) {\n\t\t\treturn true;\n\t\t}\n\t\tconst pipeRef = classRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef !== undefined && !pipeRef.asynchronous;\n\t}\n\tget(pipeName: string): any {\n\t\tlet transformFunc: Function | undefined;\n\t\tif (transformFunc = this._ctx[pipeName]) {\n\t\t\treturn transformFunc;\n\t\t}\n\t\tconst pipeRef = classRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef !== undefined && !pipeRef.asynchronous) {\n\t\t\tconst pipe = new pipeRef.modelClass();\n\t\t\ttransformFunc = (value: any, ...args: any[]) => pipe.transform(value, ...args);\n\t\t\tthis._ctx[pipeRef.name] = transformFunc;\n\t\t\treturn transformFunc;\n\t\t}\n\t\treturn void 0;\n\t}\n\tgetClass(): Type<PipeProvider> {\n\t\treturn PipeProvider;\n\t}\n}\n\nexport class AsyncPipeProvider extends ReadOnlyScope<object> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tconst pipeRef = classRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef?.asynchronous ? true : false;\n\t}\n\tget(pipeName: string): Type<AsyncPipeTransform<any, any>> | undefined {\n\t\tconst pipeRef = classRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef?.asynchronous) {\n\t\t\treturn pipeRef.modelClass;\n\t\t}\n\t\treturn;\n\t}\n\tgetClass(): Type<AsyncPipeProvider> {\n\t\treturn AsyncPipeProvider;\n\t}\n}\n\nexport class AsyncPipeScope<T extends { [key: string]: AsyncPipeTransform<any, any> }> extends ReactiveScopeControl<T> {\n\tstatic blockScope<P extends { [key: string]: AsyncPipeTransform<any, any> }>(): AsyncPipeScope<P> {\n\t\treturn new AsyncPipeScope();\n\t}\n\tprivate wrapper: { [key: string]: Function } = {};\n\tconstructor() {\n\t\tsuper({} as T);\n\t}\n\toverride set(propertyKey: keyof T, pipeClass: Type<AsyncPipeTransform<any, any>>, receiver?: any): boolean {\n\t\tconst detector = createChangeDetectorRef(this, propertyKey);\n\t\tconst pipe = new pipeClass(detector);\n\t\tconst result = super.set(propertyKey, pipe, receiver);\n\t\tif (result) {\n\t\t\tthis.wrapper[propertyKey as string] = (value: any, ...args: any[]) => {\n\t\t\t\treturn pipe.transform(value, ...args)\n\t\t\t};\n\t\t}\n\t\treturn result;\n\t}\n\toverride get(propertyKey: keyof T): any {\n\t\treturn Reflect.get(this.wrapper, propertyKey);\n\t}\n\toverride unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tsuper.unsubscribe(propertyKey, subscription);\n\t\tconst pipe = this._ctx[propertyKey];\n\t\tpipe.onDestroy();\n\t}\n\tgetClass(): Type<AsyncPipeScope<T>> {\n\t\treturn AsyncPipeScope;\n\t}\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { ReactiveNode, Signal, SignalScope } from '@ibyar/expressions';
2
+ declare class SignalScopeFactory {
3
+ private scopes;
4
+ private effectState;
5
+ push(scope: SignalScope): void;
6
+ pop(scop: SignalScope): void;
7
+ signal<T, S extends typeof Signal<T>>(initValue?: T, signalType?: S): InstanceType<S>;
8
+ signalFn<T, S extends typeof Signal<T>>(initValue: T, signalType?: S): import("@ibyar/expressions").WritableSignal<T>;
9
+ computed<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
10
+ computedFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
11
+ lazy<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
12
+ lazyFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
13
+ effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): {
14
+ destroy(): void;
15
+ };
16
+ untracked<T>(reactiveNode: ReactiveNode<T>): T;
17
+ untracked<T>(nonReactiveReadsFn: () => T): T;
18
+ private assertValidContext;
19
+ private wrapEffect;
20
+ }
21
+ export declare const signalScopeFactory: SignalScopeFactory;
22
+ export {};
23
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/core/signals/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIvE,cAAM,kBAAkB;IAEvB,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,WAAW,CAAqB;IAExC,IAAI,CAAC,KAAK,EAAE,WAAW;IAIvB,GAAG,CAAC,IAAI,EAAE,WAAW;IAMrB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAKrF,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;IAKpE,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAIhC,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAKlC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAI5B,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAI9B,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI;;;IAKlE,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC;IAU5C,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;CAOlB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { ReactiveNode, SignalScope } from '@ibyar/expressions';
2
+ class SignalScopeFactory {
3
+ scopes = [SignalScope.create()];
4
+ effectState = [];
5
+ push(scope) {
6
+ this.scopes.push(scope);
7
+ }
8
+ pop(scop) {
9
+ if (this.scopes.pop() !== scop) {
10
+ throw new Error('expect scope is not matching');
11
+ }
12
+ }
13
+ signal(initValue, signalType) {
14
+ this.assertValidContext();
15
+ return this.scopes.at(-1).createSignal(initValue, signalType);
16
+ }
17
+ signalFn(initValue, signalType) {
18
+ this.assertValidContext();
19
+ return this.scopes.at(-1).createSignalFn(initValue, signalType);
20
+ }
21
+ computed(computation) {
22
+ this.assertValidContext();
23
+ return this.scopes.at(-1).createComputed(computation);
24
+ }
25
+ computedFn(computation) {
26
+ this.assertValidContext();
27
+ return this.scopes.at(-1).createComputedFn(computation);
28
+ }
29
+ lazy(computation) {
30
+ this.assertValidContext();
31
+ return this.scopes.at(-1).createLazy(computation);
32
+ }
33
+ lazyFn(computation) {
34
+ this.assertValidContext();
35
+ return this.scopes.at(-1).createLazyFn(computation);
36
+ }
37
+ effect(effectFn) {
38
+ this.assertValidContext();
39
+ const scope = this.scopes.at(-1);
40
+ return scope.createEffect(this.wrapEffect(scope, effectFn));
41
+ }
42
+ untracked(nonReactiveReads) {
43
+ const scope = this.effectState.at(-1);
44
+ scope?.untrack();
45
+ const value = nonReactiveReads instanceof ReactiveNode
46
+ ? nonReactiveReads.get()
47
+ : nonReactiveReads();
48
+ scope?.track();
49
+ return value;
50
+ }
51
+ assertValidContext() {
52
+ if (this.scopes.length <= 0) {
53
+ throw new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');
54
+ }
55
+ }
56
+ wrapEffect(scope, effectFn) {
57
+ return (onCleanup) => {
58
+ this.effectState.push(scope);
59
+ effectFn(onCleanup);
60
+ this.effectState.pop();
61
+ };
62
+ }
63
+ }
64
+ export const signalScopeFactory = new SignalScopeFactory();
65
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,26 @@
1
+ import { ReactiveSignal } from '@ibyar/expressions';
2
+ import { OutputEventEmitter, OutputEventOptions } from '../component/events.js';
3
+ export interface InputOptions<T, TransformT> {
4
+ alias?: string;
5
+ transform?: (v: TransformT) => T;
6
+ }
7
+ export type InputOptionsWithoutTransform<T> = Omit<InputOptions<T, T>, 'transform'> & {
8
+ transform?: undefined;
9
+ };
10
+ export type InputOptionsWithTransform<T, TransformT> = Required<Pick<InputOptions<T, TransformT>, 'transform'>> & InputOptions<T, TransformT>;
11
+ export interface InputSignalWithTransform<T, TransformT> extends ReactiveSignal<T> {
12
+ }
13
+ export interface InputSignal<T, TransformT = T> extends InputSignalWithTransform<T, TransformT> {
14
+ }
15
+ export declare function input<T>(): InputSignal<T>;
16
+ export declare function input<T>(initialValue: T, opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;
17
+ export declare function input<T, TransformT = T>(initialValue: T, opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;
18
+ export declare namespace input {
19
+ var required: {
20
+ <T>(): InputSignal<T>;
21
+ <T>(opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;
22
+ <T, TransformT = T>(opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;
23
+ };
24
+ }
25
+ export declare function output<T>(opts?: OutputEventOptions): OutputEventEmitter<T>;
26
+ //# sourceMappingURL=initializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../../src/core/signals/initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,UAAU;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,4BAA4B,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,CAAA;AAE/G,MAAM,MAAM,yBAAyB,CAAC,CAAC,EAAE,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAE9I,MAAM,WAAW,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;CAEjF;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAE,SAAQ,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC;CAE9F;AAED,wBAAgB,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,wBAAgB,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAClG,wBAAgB,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;yBAAnI,KAAK;;SAUH,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;SACpB,CAAC,SAAS,4BAA4B,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;SAC1D,CAAC,EAAE,UAAU,YAAY,yBAAyB,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC;;;AAQ7H,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAE1E"}
@@ -0,0 +1,19 @@
1
+ import { signalScopeFactory } from './factory.js';
2
+ import { OutputEventEmitter } from '../component/events.js';
3
+ export function input(initialValue, opts) {
4
+ const signal = signalScopeFactory.signal(initialValue);
5
+ if (opts?.transform) {
6
+ const setOriginal = signal.set;
7
+ signal.set = (value) => setOriginal(opts.transform(value));
8
+ }
9
+ ;
10
+ return signal;
11
+ }
12
+ function required(opts) {
13
+ return input(undefined, opts);
14
+ }
15
+ input.required = required;
16
+ export function output(opts) {
17
+ return new OutputEventEmitter(opts);
18
+ }
19
+ //# sourceMappingURL=initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../../src/core/signals/initializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,wBAAwB,CAAC;AAuBhF,MAAM,UAAU,KAAK,CAAoB,YAAgB,EAAE,IAAkC;IAC5F,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAQ,EAAQ,EAAE,CAAC,WAAW,CAAC,IAAK,CAAC,SAAU,CAAC,KAA0B,CAAC,CAAC,CAAC;IAC5F,CAAC;IAAA,CAAC;IACF,OAAO,MAAoC,CAAC;AAC7C,CAAC;AAKD,SAAS,QAAQ,CAAoB,IAAkC;IACtE,OAAO,KAAK,CAAC,SAAc,EAAE,IAAgD,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAG1B,MAAM,UAAU,MAAM,CAAI,IAAyB;IAClD,OAAO,IAAI,kBAAkB,CAAI,IAAI,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { ReactiveSignal } from '@ibyar/expressions';\nimport { signalScopeFactory } from './factory.js';\nimport { OutputEventEmitter, OutputEventOptions } from '../component/events.js';\n\n\nexport interface InputOptions<T, TransformT> {\n\talias?: string;\n\ttransform?: (v: TransformT) => T;\n}\n\nexport type InputOptionsWithoutTransform<T> = Omit<InputOptions<T, T>, 'transform'> & { transform?: undefined }\n\nexport type InputOptionsWithTransform<T, TransformT> = Required<Pick<InputOptions<T, TransformT>, 'transform'>> & InputOptions<T, TransformT>;\n\nexport interface InputSignalWithTransform<T, TransformT> extends ReactiveSignal<T> {\n\n}\n\nexport interface InputSignal<T, TransformT = T> extends InputSignalWithTransform<T, TransformT> {\n\n}\n\nexport function input<T>(): InputSignal<T>;\nexport function input<T>(initialValue: T, opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;\nexport function input<T, TransformT = T>(initialValue: T, opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;\nexport function input<T, TransformT = T>(initialValue?: T, opts?: InputOptions<T, TransformT>): InputSignal<T, TransformT> {\n\tconst signal = signalScopeFactory.signal(initialValue);\n\tif (opts?.transform) {\n\t\tconst setOriginal = signal.set;\n\t\tsignal.set = (value: T): void => setOriginal(opts!.transform!(value as any as TransformT));\n\t};\n\treturn signal as InputSignal<T, TransformT>;\n}\n\nfunction required<T>(): InputSignal<T>;\nfunction required<T>(opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;\nfunction required<T, TransformT = T>(opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;\nfunction required<T, TransformT = T>(opts?: InputOptions<T, TransformT>): InputSignal<T, TransformT> {\n\treturn input(undefined as T, opts as InputOptionsWithTransform<T, TransformT>);\n}\n\ninput.required = required;\n\n\nexport function output<T>(opts?: OutputEventOptions): OutputEventEmitter<T> {\n\treturn new OutputEventEmitter<T>(opts);\n}\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/core/signals/input.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/core/signals/input.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,37 @@
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';
3
+ type RuntimeOption = {
4
+ name: Key;
5
+ alias: string;
6
+ };
7
+ export type SignalRuntimeMetadata = {
8
+ signal: Key;
9
+ necessity?: 'required';
10
+ options: Array<RuntimeOption>;
11
+ };
12
+ /**
13
+ * scan model class for (inputs and output) property definitions with value by function call.
14
+ */
15
+ export declare class RuntimeClassMetadata {
16
+ static INSTANCE: RuntimeClassMetadata;
17
+ static scanMetadata(modelClass: Function): SignalRuntimeMetadata[];
18
+ static scanClass(modelClass: Function, visitorCallback: VisitorCallback): void;
19
+ scan(modelClass: Function): SignalRuntimeMetadata[];
20
+ /**
21
+ * scan class `Function` for properties and methods definitions.
22
+ * @param modelClass
23
+ * @param visitorCallback
24
+ */
25
+ scanModelClass(modelClass: Function, visitorCallback: VisitorCallback): void;
26
+ getClassScript(modelClass: Function): string;
27
+ getClassList(modelClass: Function): Function[];
28
+ newModelInitializers(): SignalRuntimeMetadata[];
29
+ createVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback;
30
+ getAliasNameFromOptionArgument(call: CallExpression): string | undefined;
31
+ isProperty(node: ExpressionNode, property: string): boolean;
32
+ isCallOf(call: CallExpression, objectName: string, propertyName?: string): boolean;
33
+ isMemberOf(member: MemberExpression, objectName: string, propertyName: string): boolean;
34
+ hasMemberOfThis(member: ExpressionNode): Key | false;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,165 @@
1
+ import { CallExpression, expressionVisitor, Identifier, JavaScriptParser, Literal, MemberExpression, Property, ThisExpression } from '@ibyar/expressions';
2
+ /**
3
+ * scan model class for (inputs and output) property definitions with value by function call.
4
+ */
5
+ export class RuntimeClassMetadata {
6
+ static INSTANCE = new RuntimeClassMetadata();
7
+ static scanMetadata(modelClass) {
8
+ return RuntimeClassMetadata.INSTANCE.scan(modelClass);
9
+ }
10
+ static scanClass(modelClass, visitorCallback) {
11
+ return RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback);
12
+ }
13
+ scan(modelClass) {
14
+ const metadata = this.newModelInitializers();
15
+ const visitor = this.createVisitor(metadata);
16
+ this.scanModelClass(modelClass, visitor);
17
+ return metadata;
18
+ }
19
+ /**
20
+ * scan class `Function` for properties and methods definitions.
21
+ * @param modelClass
22
+ * @param visitorCallback
23
+ */
24
+ scanModelClass(modelClass, visitorCallback) {
25
+ const script = this.getClassScript(modelClass);
26
+ const expr = JavaScriptParser.parse(script);
27
+ expressionVisitor.visit(expr, visitorCallback);
28
+ }
29
+ getClassScript(modelClass) {
30
+ return this.getClassList(modelClass).map((ref, index) => `const Class${index} = ${ref};`).join('\n');
31
+ ;
32
+ }
33
+ getClassList(modelClass) {
34
+ const list = [];
35
+ while (modelClass instanceof Function) {
36
+ list.push(modelClass);
37
+ modelClass = Object.getPrototypeOf(modelClass);
38
+ }
39
+ return list.reverse();
40
+ }
41
+ newModelInitializers() {
42
+ return [
43
+ { signal: 'input', options: [] },
44
+ { signal: 'input', necessity: 'required', options: [] },
45
+ { signal: 'output', options: [] },
46
+ { signal: 'model', options: [] },
47
+ { signal: 'model', necessity: 'required', options: [] },
48
+ { signal: 'signal', options: [] },
49
+ { signal: 'computed', options: [] },
50
+ { signal: 'lazy', options: [] },
51
+ { signal: 'formValue', options: [] },
52
+ { signal: 'view', options: [] },
53
+ { signal: 'viewChild', options: [] },
54
+ { signal: 'viewChild', necessity: 'required', options: [] },
55
+ { signal: 'viewChildren', options: [] },
56
+ { signal: 'signalNode', options: [] },
57
+ { signal: 'computedNode', options: [] },
58
+ { signal: 'lazyNode', options: [] },
59
+ ];
60
+ }
61
+ createVisitor(properties) {
62
+ return (expression, type) => {
63
+ if (type === 'PropertyDefinition') {
64
+ const definition = expression;
65
+ const key = definition.getKey();
66
+ const value = definition.getValue();
67
+ if (definition.isPrivate()
68
+ || definition.isStatic()
69
+ || !(key instanceof Identifier || key instanceof Literal)
70
+ || !(value instanceof CallExpression)) {
71
+ return;
72
+ }
73
+ const property = properties.find(property => this.isCallOf(value, property.signal, property.necessity));
74
+ if (property) {
75
+ const name = key instanceof Identifier ? key.getName() : key.getValue();
76
+ const alias = this.getAliasNameFromOptionArgument(value);
77
+ property.options.push({ name, alias: alias ?? name });
78
+ }
79
+ }
80
+ else if (type === 'MethodDefinition') {
81
+ const definition = expression;
82
+ if (definition.getKind() !== 'constructor') {
83
+ return;
84
+ }
85
+ expressionVisitor.visit(definition.getValue(), (exp, expType) => {
86
+ if (expType === 'AssignmentExpression') {
87
+ const assignment = exp;
88
+ const right = assignment.getRight();
89
+ if (right instanceof CallExpression) {
90
+ const property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));
91
+ if (!property) {
92
+ return;
93
+ }
94
+ const name = this.hasMemberOfThis(assignment.getLeft());
95
+ if (name) {
96
+ const alias = this.getAliasNameFromOptionArgument(right);
97
+ property.options.push({ name, alias: alias ?? name });
98
+ }
99
+ }
100
+ }
101
+ });
102
+ }
103
+ };
104
+ }
105
+ getAliasNameFromOptionArgument(call) {
106
+ let alias;
107
+ call.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {
108
+ if (exp instanceof Property) {
109
+ if (this.isProperty(exp.getKey(), 'alias')) {
110
+ const value = exp.getValue();
111
+ if (value instanceof Literal) {
112
+ alias = value.getValue();
113
+ control.abort();
114
+ }
115
+ }
116
+ }
117
+ }));
118
+ return alias;
119
+ }
120
+ isProperty(node, property) {
121
+ return (node instanceof Identifier && node.getName() === property)
122
+ || (node instanceof Literal && node.getValue() === property);
123
+ }
124
+ isCallOf(call, objectName, propertyName) {
125
+ const callee = call.getCallee();
126
+ if (propertyName && callee instanceof MemberExpression) {
127
+ return this.isMemberOf(callee, objectName, propertyName);
128
+ }
129
+ else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {
130
+ return true;
131
+ }
132
+ return false;
133
+ }
134
+ isMemberOf(member, objectName, propertyName) {
135
+ const object = member.getObject();
136
+ const property = member.getProperty();
137
+ if (object instanceof Identifier && object.getName() === objectName) {
138
+ if (property instanceof Identifier && property.getName() === propertyName) {
139
+ return true;
140
+ }
141
+ else if (property instanceof Literal && property.getValue() === propertyName) {
142
+ return true;
143
+ }
144
+ return true;
145
+ }
146
+ return false;
147
+ }
148
+ hasMemberOfThis(member) {
149
+ if (!(member instanceof MemberExpression)) {
150
+ return false;
151
+ }
152
+ const object = member.getObject();
153
+ const property = member.getProperty();
154
+ if (object instanceof ThisExpression) {
155
+ if (property instanceof Identifier) {
156
+ return property.getName();
157
+ }
158
+ else if (property instanceof Literal) {
159
+ return property.getValue();
160
+ }
161
+ }
162
+ return false;
163
+ }
164
+ }
165
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
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\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,14 +1,16 @@
1
- import { SignalScope } from '@ibyar/expressions';
2
- export declare function setSignalScope(scope: SignalScope): void;
3
- export declare function clearSignalScope(): void;
4
- export declare function signalNode<T>(initialValue: T): import("@ibyar/expressions").Signal<T>;
5
- export declare function signal<T>(initialValue: T): import("@ibyar/expressions").WritableSignal<T>;
6
- export declare function computedNode<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
7
- export declare function computed<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
8
- export declare function lazyNode<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
9
- export declare function lazy<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
1
+ import { ReactiveNode, SignalScope } from '@ibyar/expressions';
2
+ export declare function pushNewSignalScope(): SignalScope;
3
+ export declare function pushSignalScope(scope: SignalScope): void;
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>;
7
+ 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
+ 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>;
10
11
  export declare function effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): {
11
12
  destroy(): void;
12
13
  };
14
+ export declare function untracked<T>(reactiveNode: ReactiveNode<T>): T;
13
15
  export declare function untracked<T>(nonReactiveReadsFn: () => T): T;
14
16
  //# 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,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,QAEhD;AAED,wBAAgB,gBAAgB,SAE/B;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,0CAG5C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,kDAGxC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,4CAGnD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAG/C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,wCAG/C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,kDAG3C;AAaD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI;;EAGjF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAM3D"}
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,56 +1,38 @@
1
- let signalScope;
2
- export function setSignalScope(scope) {
3
- signalScope = scope;
1
+ import { SignalScope } from '@ibyar/expressions';
2
+ import { signalScopeFactory } from './factory.js';
3
+ export function pushNewSignalScope() {
4
+ const scope = SignalScope.create();
5
+ signalScopeFactory.push(scope);
6
+ return scope;
4
7
  }
5
- export function clearSignalScope() {
6
- signalScope = undefined;
8
+ export function pushSignalScope(scope) {
9
+ signalScopeFactory.push(scope);
7
10
  }
8
- function assertValidContext() {
9
- if (!signalScope) {
10
- throw new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');
11
- }
12
- }
13
- export function signalNode(initialValue) {
14
- assertValidContext();
15
- return signalScope.createSignal(initialValue);
11
+ export function clearSignalScope(scope) {
12
+ signalScopeFactory.pop(scope);
16
13
  }
17
14
  export function signal(initialValue) {
18
- assertValidContext();
19
- return signalScope.createSignalFn(initialValue);
15
+ return signalScopeFactory.signal(initialValue);
20
16
  }
21
- export function computedNode(computation) {
22
- assertValidContext();
23
- return signalScope.createComputed(computation);
17
+ export function signalFn(initialValue) {
18
+ return signalScopeFactory.signalFn(initialValue);
24
19
  }
25
20
  export function computed(computation) {
26
- assertValidContext();
27
- return signalScope.createComputedFn(computation);
21
+ return signalScopeFactory.computed(computation);
28
22
  }
29
- export function lazyNode(computation) {
30
- assertValidContext();
31
- return signalScope.createLazy(computation);
23
+ export function computedFn(computation) {
24
+ return signalScopeFactory.computedFn(computation);
32
25
  }
33
26
  export function lazy(computation) {
34
- assertValidContext();
35
- return signalScope.createLazyFn(computation);
27
+ return signalScopeFactory.lazy(computation);
36
28
  }
37
- const effectState = [];
38
- function wrapEffect(scope, effectFn) {
39
- return (onCleanup) => {
40
- effectState.push(scope);
41
- effectFn(onCleanup);
42
- effectState.pop();
43
- };
29
+ export function lazyFn(computation) {
30
+ return signalScopeFactory.lazyFn(computation);
44
31
  }
45
32
  export function effect(effectFn) {
46
- assertValidContext();
47
- return signalScope.createEffect(wrapEffect(signalScope, effectFn));
48
- }
49
- export function untracked(nonReactiveReadsFn) {
50
- const scope = effectState.at(-1);
51
- scope?.untrack();
52
- const value = nonReactiveReadsFn();
53
- scope?.track();
54
- return value;
33
+ return signalScopeFactory.effect(effectFn);
34
+ }
35
+ export function untracked(nonReactiveReads) {
36
+ return signalScopeFactory.untracked(nonReactiveReads);
55
37
  }
56
38
  //# sourceMappingURL=signals.js.map