@ibyar/expressions 1.0.0 → 1.2.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 (141) hide show
  1. package/README.md +48 -1
  2. package/api/abstract.js.map +1 -1
  3. package/api/class/class.js +143 -93
  4. package/api/class/class.js.map +1 -1
  5. package/api/class/decorator.js +8 -3
  6. package/api/class/decorator.js.map +1 -1
  7. package/api/computing/call.js +8 -3
  8. package/api/computing/call.js.map +1 -1
  9. package/api/computing/debugger.js +8 -3
  10. package/api/computing/debugger.js.map +1 -1
  11. package/api/computing/new.js +8 -3
  12. package/api/computing/new.js.map +1 -1
  13. package/api/computing/rest.js +8 -3
  14. package/api/computing/rest.js.map +1 -1
  15. package/api/computing/return.js +8 -3
  16. package/api/computing/return.js.map +1 -1
  17. package/api/computing/spread.js +8 -3
  18. package/api/computing/spread.js.map +1 -1
  19. package/api/computing/throw.js +38 -23
  20. package/api/computing/throw.js.map +1 -1
  21. package/api/computing/yield.js +8 -3
  22. package/api/computing/yield.js.map +1 -1
  23. package/api/definition/array.js +23 -13
  24. package/api/definition/array.js.map +1 -1
  25. package/api/definition/bind.js +8 -3
  26. package/api/definition/bind.js.map +1 -1
  27. package/api/definition/comment.js +8 -3
  28. package/api/definition/comment.js.map +1 -1
  29. package/api/definition/function.js +53 -33
  30. package/api/definition/function.js.map +1 -1
  31. package/api/definition/member.js +8 -3
  32. package/api/definition/member.js.map +1 -1
  33. package/api/definition/object.js +38 -23
  34. package/api/definition/object.js.map +1 -1
  35. package/api/definition/statement.js +8 -3
  36. package/api/definition/statement.js.map +1 -1
  37. package/api/definition/values.js +68 -43
  38. package/api/definition/values.js.map +1 -1
  39. package/api/deserialize/deserialize.js.map +1 -1
  40. package/api/expression.d.ts +3 -0
  41. package/api/expression.d.ts.map +1 -1
  42. package/api/expression.js.map +1 -1
  43. package/api/module/common.js +8 -3
  44. package/api/module/common.js.map +1 -1
  45. package/api/module/export.js +53 -33
  46. package/api/module/export.js.map +1 -1
  47. package/api/module/import.js +68 -43
  48. package/api/module/import.js.map +1 -1
  49. package/api/operators/assignment.js +6 -2
  50. package/api/operators/assignment.js.map +1 -1
  51. package/api/operators/await.js +8 -3
  52. package/api/operators/await.js.map +1 -1
  53. package/api/operators/binary.js +6 -2
  54. package/api/operators/binary.js.map +1 -1
  55. package/api/operators/chaining.js +8 -3
  56. package/api/operators/chaining.js.map +1 -1
  57. package/api/operators/comma.js +8 -3
  58. package/api/operators/comma.js.map +1 -1
  59. package/api/operators/grouping.js +8 -3
  60. package/api/operators/grouping.js.map +1 -1
  61. package/api/operators/logical.js +6 -2
  62. package/api/operators/logical.js.map +1 -1
  63. package/api/operators/pipeline.js +8 -3
  64. package/api/operators/pipeline.js.map +1 -1
  65. package/api/operators/ternary.js +8 -3
  66. package/api/operators/ternary.js.map +1 -1
  67. package/api/operators/unary.js +6 -2
  68. package/api/operators/unary.js.map +1 -1
  69. package/api/operators/update.js +6 -2
  70. package/api/operators/update.js.map +1 -1
  71. package/api/program.js +8 -3
  72. package/api/program.js.map +1 -1
  73. package/api/statement/control/block.js +8 -3
  74. package/api/statement/control/block.js.map +1 -1
  75. package/api/statement/control/empty.js +8 -3
  76. package/api/statement/control/empty.js.map +1 -1
  77. package/api/statement/control/if.js +8 -3
  78. package/api/statement/control/if.js.map +1 -1
  79. package/api/statement/control/switch.js +38 -23
  80. package/api/statement/control/switch.js.map +1 -1
  81. package/api/statement/control/terminate.js +38 -23
  82. package/api/statement/control/terminate.js.map +1 -1
  83. package/api/statement/control/with.js +8 -3
  84. package/api/statement/control/with.js.map +1 -1
  85. package/api/statement/declarations/declares.js +23 -13
  86. package/api/statement/declarations/declares.js.map +1 -1
  87. package/api/statement/iterations/for.js +53 -33
  88. package/api/statement/iterations/for.js.map +1 -1
  89. package/api/statement/iterations/while.js +23 -13
  90. package/api/statement/iterations/while.js.map +1 -1
  91. package/bin/cli.d.ts +3 -0
  92. package/bin/cli.d.ts.map +1 -0
  93. package/bin/cli.js +73 -0
  94. package/bin/cli.js.map +1 -0
  95. package/package.json +8 -5
  96. package/scope/builder.d.ts +27 -0
  97. package/scope/builder.d.ts.map +1 -0
  98. package/scope/builder.js +73 -0
  99. package/scope/builder.js.map +1 -0
  100. package/scope/event.js.map +1 -1
  101. package/scope/finalizer.js.map +1 -1
  102. package/scope/index.d.ts +1 -0
  103. package/scope/index.d.ts.map +1 -1
  104. package/scope/index.js +1 -0
  105. package/scope/index.js.map +1 -1
  106. package/scope/pool.js.map +1 -1
  107. package/scope/proxy.js.map +1 -1
  108. package/scope/scope.d.ts.map +1 -1
  109. package/scope/scope.js +4 -3
  110. package/scope/scope.js.map +1 -1
  111. package/scope/signal.d.ts +75 -0
  112. package/scope/signal.d.ts.map +1 -0
  113. package/scope/signal.js +226 -0
  114. package/scope/signal.js.map +1 -0
  115. package/scope/stack.d.ts +1 -1
  116. package/scope/stack.d.ts.map +1 -1
  117. package/scope/stack.js +1 -1
  118. package/scope/stack.js.map +1 -1
  119. package/scope/variable.d.ts +1 -0
  120. package/scope/variable.d.ts.map +1 -0
  121. package/scope/variable.js +2 -0
  122. package/scope/variable.js.map +1 -0
  123. package/scope/variables.d.ts +66 -0
  124. package/scope/variables.d.ts.map +1 -0
  125. package/scope/variables.js +214 -0
  126. package/scope/variables.js.map +1 -0
  127. package/v8/enums.d.ts +5 -5
  128. package/v8/enums.d.ts.map +1 -1
  129. package/v8/enums.js +2 -4
  130. package/v8/enums.js.map +1 -1
  131. package/v8/factory.js.map +1 -1
  132. package/v8/inline.js.map +1 -1
  133. package/v8/parser.js.map +1 -1
  134. package/v8/stream.js +1 -2
  135. package/v8/stream.js.map +1 -1
  136. package/v8/token.js +1 -2
  137. package/v8/token.js.map +1 -1
  138. package/visit/visitor.js.map +1 -1
  139. package/v8/nodes.d.ts +0 -0
  140. package/v8/nodes.js +0 -2
  141. package/v8/nodes.js.map +0 -1
package/scope/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from './scope.js';
2
2
  export * from './stack.js';
3
3
  export * from './proxy.js';
4
4
  export * from './event.js';
5
+ export * from './signal.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/expressions/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/expressions/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
package/scope/index.js CHANGED
@@ -2,4 +2,5 @@ export * from './scope.js';
2
2
  export * from './stack.js';
3
3
  export * from './proxy.js';
4
4
  export * from './event.js';
5
+ export * from './signal.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/expressions/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC","sourcesContent":["export * from './scope.js';\nexport * from './stack.js';\nexport * from './proxy.js';\nexport * from './event.js';"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/expressions/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC","sourcesContent":["export * from './scope.js';\nexport * from './stack.js';\nexport * from './proxy.js';\nexport * from './event.js';\nexport * from './signal.js';"]}
package/scope/pool.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/expressions/scope/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEvF,MAAM,IAAI,GAAG,IAAI,OAAO,EAAsB,CAAC;AAS/C,MAAM,UAAU,WAAW,CAAuC,GAAM,EAAE,IAAgB,EAAE,YAA0B;IACrH,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAQ,CAAC;KAC5B;IACD,IAAI,CAAC,IAAI,EAAE;QACV,OAAO;KACP;IACD,IAAI,KAAe,CAAC;IACpB,QAAQ,IAAI,EAAE;QACb,KAAK,WAAW;YACf,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM;QACP,KAAK,UAAU;YACd,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM;QACP,KAAK,kBAAkB;YACtB,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACpD,MAAM;QACP,QAAQ;QACR,KAAK,OAAO;YACX,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACrC,MAAM;KACP;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrB,OAAO,KAAiB,CAAC;AAC1B,CAAC","sourcesContent":["import { ReactiveScope, ReactiveScopeControl, ReadOnlyScope, Scope } from './scope.js';\n\nconst pool = new WeakMap<object, Scope<any>>();\n\nexport type ScopeType = 'scope' | 'read-only' | 'reactive' | 'reactive-control';\n\nexport function getScopeFor<S extends Scope<T>, T extends object>(ctx: T): S | undefined;\nexport function getScopeFor<T extends object>(ctx: T, type: 'scope', propertyKeys?: (keyof T)[]): Scope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'read-only', propertyKeys?: (keyof T)[]): ReadOnlyScope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'reactive', propertyKeys?: (keyof T)[]): ReactiveScope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'reactive-control', propertyKeys?: (keyof T)[]): ReactiveScopeControl<T>;\nexport function getScopeFor<S extends Scope<T>, T extends object>(ctx: T, type?: ScopeType, propertyKeys?: (keyof T)[]): S | undefined {\n\tif (pool.has(ctx)) {\n\t\treturn pool.get(ctx) as any;\n\t}\n\tif (!type) {\n\t\treturn;\n\t}\n\tlet scope: Scope<T>;\n\tswitch (type) {\n\t\tcase 'read-only':\n\t\t\tscope = ReadOnlyScope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tcase 'reactive':\n\t\t\tscope = ReactiveScope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tcase 'reactive-control':\n\t\t\tscope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tdefault:\n\t\tcase 'scope':\n\t\t\tscope = Scope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t}\n\tpool.set(ctx, scope);\n\treturn scope as any as S;\n}\n"]}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/expressions/scope/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEvF,MAAM,IAAI,GAAG,IAAI,OAAO,EAAsB,CAAC;AAS/C,MAAM,UAAU,WAAW,CAAuC,GAAM,EAAE,IAAgB,EAAE,YAA0B;IACrH,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAQ,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO;IACR,CAAC;IACD,IAAI,KAAe,CAAC;IACpB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,WAAW;YACf,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM;QACP,KAAK,UAAU;YACd,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM;QACP,KAAK,kBAAkB;YACtB,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACpD,MAAM;QACP,QAAQ;QACR,KAAK,OAAO;YACX,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACrC,MAAM;IACR,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrB,OAAO,KAAiB,CAAC;AAC1B,CAAC","sourcesContent":["import { ReactiveScope, ReactiveScopeControl, ReadOnlyScope, Scope } from './scope.js';\n\nconst pool = new WeakMap<object, Scope<any>>();\n\nexport type ScopeType = 'scope' | 'read-only' | 'reactive' | 'reactive-control';\n\nexport function getScopeFor<S extends Scope<T>, T extends object>(ctx: T): S | undefined;\nexport function getScopeFor<T extends object>(ctx: T, type: 'scope', propertyKeys?: (keyof T)[]): Scope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'read-only', propertyKeys?: (keyof T)[]): ReadOnlyScope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'reactive', propertyKeys?: (keyof T)[]): ReactiveScope<T>;\nexport function getScopeFor<T extends object>(ctx: T, type: 'reactive-control', propertyKeys?: (keyof T)[]): ReactiveScopeControl<T>;\nexport function getScopeFor<S extends Scope<T>, T extends object>(ctx: T, type?: ScopeType, propertyKeys?: (keyof T)[]): S | undefined {\n\tif (pool.has(ctx)) {\n\t\treturn pool.get(ctx) as any;\n\t}\n\tif (!type) {\n\t\treturn;\n\t}\n\tlet scope: Scope<T>;\n\tswitch (type) {\n\t\tcase 'read-only':\n\t\t\tscope = ReadOnlyScope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tcase 'reactive':\n\t\t\tscope = ReactiveScope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tcase 'reactive-control':\n\t\t\tscope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t\tdefault:\n\t\tcase 'scope':\n\t\t\tscope = Scope.for(ctx, propertyKeys);\n\t\t\tbreak;\n\t}\n\tpool.set(ctx, scope);\n\treturn scope as any as S;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/expressions/scope/proxy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAI,GAAM;IACvC,QAAQ,IAAI,EAAE;QACb,yCAAyC;QACzC,KAAK,GAAG,YAAY,GAAG,CAAC;QACxB,KAAK,GAAG,YAAY,GAAG,CAAC;QACxB,KAAK,GAAG,YAAY,IAAI,CAAC;QACzB,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,oCAAoC;QACpC,KAAK,WAAW,IAAI,GAAG,YAAY,WAAW;YAC7C,OAAO,IAAI,CAAC;QACb;YACC,OAAO,KAAK,CAAC;KACd;AACF,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAET;IADpB,2DAA2D;IAC3D,YAAoB,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;IAAI,CAAC;IACxC,GAAG,CAAC,KAAQ,EAAE,WAAwB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IACD,GAAG,CAAC,KAAQ,EAAE,WAAwB,EAAE,QAAa;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;YAC1C,OAAO,KAAK,CAAC;SACb;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE;YACX,OAAO,KAAK,CAAC;SACb;QACD,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAQ,EAAE,WAAwB,EAAE,KAAU,EAAE,QAAa;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,cAAc,CAAC,KAAQ,EAAE,WAA4B;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;CACD;AAOD,MAAM,UAAU,8BAA8B,CAAmB,OAAU,EAAE,KAAe;IAC3F,OAAO,KAAK,CAAC,SAAS,CAAI,OAAO,EAAE,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAmB,KAAe;IACtE,OAAO,IAAI,KAAK,CAAI,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import type { Scope, Context } from './scope.js';\n\nexport function hasBindingHook<T>(ctx: T) {\n\tswitch (true) {\n\t\t// exclude classes that have binding hook\n\t\tcase ctx instanceof Map:\n\t\tcase ctx instanceof Set:\n\t\tcase ctx instanceof Date:\n\t\tcase ctx instanceof WeakMap:\n\t\tcase ctx instanceof WeakSet:\n\t\tcase ctx instanceof Promise:\n\t\t// check first if running in browser\n\t\tcase HTMLElement && ctx instanceof HTMLElement:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\n * crete new proxy handler object as scoped context\n */\nexport class ScopeProxyHandler<T extends Context> implements ProxyHandler<Context> {\n\t// private functionHandler: FunctionProxyHandler<Function>;\n\tconstructor(private scope: Scope<T>) { }\n\thas(model: T, propertyKey: PropertyKey): boolean {\n\t\treturn this.scope.has(propertyKey);\n\t}\n\tget(model: T, propertyKey: PropertyKey, receiver: any): any {\n\t\tconst value = this.scope.get(propertyKey);\n\t\tif (!(value && typeof value === 'object')) {\n\t\t\treturn value;\n\t\t}\n\t\tconst scope = this.scope.getInnerScope(propertyKey);\n\t\tif (!scope) {\n\t\t\treturn value;\n\t\t}\n\t\treturn createProxyForContext(scope);\n\t}\n\tset(model: T, propertyKey: PropertyKey, value: any, receiver: any): boolean {\n\t\treturn this.scope.set(propertyKey, value);\n\t}\n\tdeleteProperty(model: T, propertyKey: string | symbol): boolean {\n\t\treturn this.scope.delete(propertyKey);\n\t}\n}\n\nexport type RevocableProxy<T> = {\n\tproxy: T;\n\trevoke: () => void;\n};\n\nexport function createRevocableProxyForContext<T extends object>(context: T, scope: Scope<T>): RevocableProxy<T> {\n\treturn Proxy.revocable<T>(context, new ScopeProxyHandler(scope));\n}\n\nexport function createProxyForContext<T extends object>(scope: Scope<T>): T {\n\treturn new Proxy<T>(scope.getContext(), new ScopeProxyHandler(scope));\n}\n"]}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/expressions/scope/proxy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAI,GAAM;IACvC,QAAQ,IAAI,EAAE,CAAC;QACd,yCAAyC;QACzC,KAAK,GAAG,YAAY,GAAG,CAAC;QACxB,KAAK,GAAG,YAAY,GAAG,CAAC;QACxB,KAAK,GAAG,YAAY,IAAI,CAAC;QACzB,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,KAAK,GAAG,YAAY,OAAO,CAAC;QAC5B,oCAAoC;QACpC,KAAK,WAAW,IAAI,GAAG,YAAY,WAAW;YAC7C,OAAO,IAAI,CAAC;QACb;YACC,OAAO,KAAK,CAAC;IACf,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAET;IADpB,2DAA2D;IAC3D,YAAoB,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;IAAI,CAAC;IACxC,GAAG,CAAC,KAAQ,EAAE,WAAwB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IACD,GAAG,CAAC,KAAQ,EAAE,WAAwB,EAAE,QAAa;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAQ,EAAE,WAAwB,EAAE,KAAU,EAAE,QAAa;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,cAAc,CAAC,KAAQ,EAAE,WAA4B;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;CACD;AAOD,MAAM,UAAU,8BAA8B,CAAmB,OAAU,EAAE,KAAe;IAC3F,OAAO,KAAK,CAAC,SAAS,CAAI,OAAO,EAAE,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAmB,KAAe;IACtE,OAAO,IAAI,KAAK,CAAI,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import type { Scope, Context } from './scope.js';\n\nexport function hasBindingHook<T>(ctx: T) {\n\tswitch (true) {\n\t\t// exclude classes that have binding hook\n\t\tcase ctx instanceof Map:\n\t\tcase ctx instanceof Set:\n\t\tcase ctx instanceof Date:\n\t\tcase ctx instanceof WeakMap:\n\t\tcase ctx instanceof WeakSet:\n\t\tcase ctx instanceof Promise:\n\t\t// check first if running in browser\n\t\tcase HTMLElement && ctx instanceof HTMLElement:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\n * crete new proxy handler object as scoped context\n */\nexport class ScopeProxyHandler<T extends Context> implements ProxyHandler<Context> {\n\t// private functionHandler: FunctionProxyHandler<Function>;\n\tconstructor(private scope: Scope<T>) { }\n\thas(model: T, propertyKey: PropertyKey): boolean {\n\t\treturn this.scope.has(propertyKey);\n\t}\n\tget(model: T, propertyKey: PropertyKey, receiver: any): any {\n\t\tconst value = this.scope.get(propertyKey);\n\t\tif (!(value && typeof value === 'object')) {\n\t\t\treturn value;\n\t\t}\n\t\tconst scope = this.scope.getInnerScope(propertyKey);\n\t\tif (!scope) {\n\t\t\treturn value;\n\t\t}\n\t\treturn createProxyForContext(scope);\n\t}\n\tset(model: T, propertyKey: PropertyKey, value: any, receiver: any): boolean {\n\t\treturn this.scope.set(propertyKey, value);\n\t}\n\tdeleteProperty(model: T, propertyKey: string | symbol): boolean {\n\t\treturn this.scope.delete(propertyKey);\n\t}\n}\n\nexport type RevocableProxy<T> = {\n\tproxy: T;\n\trevoke: () => void;\n};\n\nexport function createRevocableProxyForContext<T extends object>(context: T, scope: Scope<T>): RevocableProxy<T> {\n\treturn Proxy.revocable<T>(context, new ScopeProxyHandler(scope));\n}\n\nexport function createProxyForContext<T extends object>(scope: Scope<T>): T {\n\treturn new Proxy<T>(scope.getContext(), new ScopeProxyHandler(scope));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/expressions/scope/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/expressions/scope/scope.ts"],"names":[],"mappings":"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"}
package/scope/scope.js CHANGED
@@ -103,7 +103,8 @@ export class ValueChangeObserver {
103
103
  return;
104
104
  }
105
105
  this._lock.push(propertyKey);
106
- subscribers?.forEach(subscriptionInfo => {
106
+ const currentSubscription = Array.from(subscribers.values());
107
+ currentSubscription.forEach(subscriptionInfo => {
107
108
  if (!subscriptionInfo.enable) {
108
109
  return;
109
110
  }
@@ -217,10 +218,10 @@ export class ReactiveScope extends Scope {
217
218
  return this._observer.subscribe(propertyKey, callback);
218
219
  }
219
220
  unsubscribe(propertyKey, subscription) {
220
- if (propertyKey && subscription) {
221
+ if (subscription && propertyKey !== null && propertyKey !== undefined) {
221
222
  this._observer.unsubscribe(propertyKey, subscription);
222
223
  }
223
- else if (propertyKey) {
224
+ else if (propertyKey !== null && propertyKey !== undefined) {
224
225
  this._observer.unsubscribe(propertyKey);
225
226
  }
226
227
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/expressions/scope/scope.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypeOf } from '../api/utils.js';\n\nexport type Context = Record<PropertyKey, any>;\nexport interface Scope<T = Context> {\n\n\t/**\n\t * get value of `propertyKey` in current context\n\t * @param propertyKey \n\t */\n\tget(propertyKey: keyof T): any;\n\n\t/**\n\t * set the value of `propertyKey` in current context, could be instilled with `value`.\n\t * @param propertyKey \n\t * @param value \n\t * @param receiver \n\t */\n\tset(propertyKey: keyof T, value?: any, receiver?: any): boolean;\n\n\t/**\n\t * is current context has `propertyKey` in hash map keys\n\t * @param propertyKey \n\t */\n\thas(propertyKey: keyof T): boolean;\n\n\t/**\n\t * delete property from context\n\t * @param propertyKey \n\t */\n\tdelete(propertyKey: keyof T): boolean;\n\n\t/**\n\t * get current context object of this scope\n\t */\n\tgetContext(): T;\n\n\t/**\n\t * get a proxy of the current context object if exists. \n\t */\n\tgetContextProxy?(): T;\n\n\t/**\n\t * get a scope for an object named as `propertyKey` from cache map,\n\t * \n\t * if the current value is not type od `object`, will return `undefined`.\n\t * @param propertyKey the name of the property\n\t */\n\tgetInnerScope<S extends Scope<Context>>(propertyKey: keyof T): S | undefined;\n\n\t/**\n\t * create a scope with the same type of this scope\n\t */\n\tsetInnerScope<S extends Scope<Context>>(propertyKey: keyof T): S;\n\n\t/**\n\t * sc\n\t * @param propertyKey \n\t * @param scope \n\t */\n\tsetInnerScope<S extends Scope<Context>>(propertyKey: keyof T, scope?: S): S;\n\n\tgetClass(): TypeOf<Scope<Context>>;\n}\n\nexport class Scope<T extends Context> implements Scope<T> {\n\tstatic for<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new Scope(ctx, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new Scope({} as T, propertyKeys);\n\t}\n\n\tprotected _inners = new Map<keyof T, Scope<any>>();\n\n\tconstructor(context: T, propertyKeys?: (keyof T)[]);\n\tconstructor(protected _ctx: T, protected _keys?: (keyof T)[]) { }\n\tget(key: keyof T): any {\n\t\treturn Reflect.get(this._ctx, key);\n\t}\n\tset(key: keyof T, value: any, receiver?: any): boolean {\n\t\treturn Reflect.set(this._ctx, key, value);\n\t}\n\thas(key: keyof T): boolean {\n\t\treturn this._keys?.includes(key) ?? key in this._ctx;\n\t}\n\tdelete(key: keyof T): boolean {\n\t\treturn Reflect.deleteProperty(this._ctx, key);\n\t}\n\tgetContext(): T {\n\t\treturn this._ctx;\n\t}\n\tgetInnerScope<S extends Scope<Context>>(key: keyof T): S | undefined {\n\t\tconst ctx = this.get(key);\n\t\tlet scope = this._inners.get(key);\n\t\tif (scope) {\n\t\t\tscope._ctx = ctx;\n\t\t\treturn scope as S;\n\t\t}\n\t\tif (!(ctx && typeof ctx === 'object')) {\n\t\t\treturn;\n\t\t}\n\t\tscope = new (this.getClass())(ctx, undefined, key, this);\n\t\tthis._inners.set(key, scope);\n\t\treturn scope as S;\n\t}\n\tsetInnerScope<S extends Scope<Context>>(key: keyof T, scope?: S): S {\n\t\tif (scope) {\n\t\t\tthis._inners.set(key, scope);\n\t\t\treturn scope;\n\t\t}\n\t\tconst ctx = this.get(key);\n\t\tscope = new (this.getClass())(ctx, undefined, key, this) as S;\n\t\tthis._inners.set(key, scope);\n\t\treturn scope;\n\t}\n\tgetClass(): TypeOf<Scope<Context>> {\n\t\treturn Scope;\n\t}\n}\n\nexport class ReadOnlyScope<T extends Context> extends Scope<T> {\n\tstatic for<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReadOnlyScope(ctx, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReadOnlyScope({} as T, propertyKeys);\n\t}\n\tset(propertyKey: keyof T, value: any, receiver?: any): boolean {\n\t\t// do nothing\n\t\treturn false;\n\t}\n\tdelete(propertyKey: keyof T): boolean {\n\t\t// do nothing\n\t\treturn false;\n\t}\n\tgetClass(): TypeOf<ReadOnlyScope<Context>> {\n\t\treturn ReadOnlyScope;\n\t}\n}\n\nexport class ScopeSubscription<T> {\n\tconstructor(private propertyKey: keyof T, private observer: ValueChangeObserver<T>) { }\n\tpause() {\n\t\tthis.observer.pause(this.propertyKey, this);\n\t}\n\tresume() {\n\t\tthis.observer.resume(this.propertyKey, this);\n\t}\n\tunsubscribe(): void {\n\t\tthis.observer.unsubscribe(this.propertyKey, this);\n\t}\n}\n\nexport type ValueChangedCallback = (newValue: any, oldValue?: any) => void;\n\ntype SubscriptionInfo = { callback: ValueChangedCallback, enable: boolean };\n\nexport class ValueChangeObserver<T> {\n\tprivate _subscribers: Map<keyof T, Map<ScopeSubscription<T>, SubscriptionInfo>> = new Map();\n\tprivate _lock: (keyof T)[] = [];\n\temit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tif (this._lock.includes(propertyKey)) {\n\t\t\treturn;\n\t\t}\n\t\tconst subscribers = this._subscribers.get(propertyKey);\n\t\tif (!subscribers || subscribers.size == 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lock.push(propertyKey);\n\t\tsubscribers?.forEach(subscriptionInfo => {\n\t\t\tif (!subscriptionInfo.enable) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tsubscriptionInfo.callback(newValue, oldValue);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t});\n\t\tif (this._lock.pop() !== propertyKey) {\n\t\t\tconsole.error('lock error');\n\t\t};\n\t}\n\tsubscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T> {\n\t\tconst subscription: ScopeSubscription<T> = new ScopeSubscription(propertyKey, this);\n\t\tlet propertySubscribers = this._subscribers.get(propertyKey);\n\t\tif (!propertySubscribers) {\n\t\t\tpropertySubscribers = new Map();\n\t\t\tthis._subscribers.set(propertyKey, propertySubscribers);\n\t\t}\n\t\tpropertySubscribers.set(subscription, { callback, enable: true });\n\t\treturn subscription;\n\t}\n\n\tunsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tif (subscription) {\n\t\t\tthis._subscribers.get(propertyKey)?.delete(subscription);\n\t\t} else {\n\t\t\tthis._subscribers.delete(propertyKey);\n\t\t}\n\t}\n\n\tpause(propertyKey: keyof T, subscription: ScopeSubscription<T>) {\n\t\tconst subscriptionInfo = this._subscribers.get(propertyKey)?.get(subscription);\n\t\tsubscriptionInfo && (subscriptionInfo.enable = false);\n\t}\n\n\tresume(propertyKey: keyof T, subscription: ScopeSubscription<T>) {\n\t\tconst subscriptionInfo = this._subscribers.get(propertyKey)?.get(subscription);\n\t\tsubscriptionInfo && (subscriptionInfo.enable = true);\n\t}\n\n\t/**\n\t * check if this Observer has any subscribers\n\t */\n\thasSubscribers(): boolean;\n\n\t/**\n\t * check if there is any subscribers registered by the propertyKey.\n\t * \n\t * @param propertyKey\n\t */\n\thasSubscribers(propertyKey: keyof T): boolean;\n\thasSubscribers(propertyKey?: keyof T): boolean {\n\t\tif (propertyKey) {\n\t\t\treturn (this._subscribers.get(propertyKey)?.size ?? 0) > 0;\n\t\t}\n\t\treturn this._subscribers.size > 0;\n\t}\n\n\t/**\n\t * clear subscription maps\n\t */\n\tdestroy() {\n\t\tthis._subscribers.clear();\n\t}\n}\n\nexport class ReactiveScope<T extends Context> extends Scope<T> {\n\tstatic for<T extends Context>(context: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScope(context, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScope({} as T, propertyKeys);\n\t}\n\tstatic scopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic readOnlyScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = ReadOnlyScope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tprotected _clone: T;\n\tdeclare protected _inners: Map<keyof T, ReactiveScope<any>>;\n\tprotected _observer: ValueChangeObserver<T> = new ValueChangeObserver<T>();\n\n\n\tconstructor(context: T, propertyKeys?: (keyof T)[], protected _name?: keyof T, protected _parent?: ReactiveScope<any>) {\n\t\tsuper(context, propertyKeys);\n\t\tthis._clone = Object.assign({}, context);\n\t}\n\n\tset(propertyKey: keyof T, newValue: any, receiver?: any): boolean {\n\t\tconst oldValue = Reflect.get(this._ctx, propertyKey);\n\t\tconst result = Reflect.set(this._ctx, propertyKey, newValue);\n\t\tif (result) {\n\t\t\tthis.emit(propertyKey, newValue, oldValue);\n\t\t}\n\t\treturn result;\n\t}\n\tdelete(propertyKey: keyof T): boolean {\n\t\tconst oldValue = Reflect.get(this._ctx, propertyKey);\n\t\tconst isDelete = Reflect.deleteProperty(this._ctx, propertyKey);\n\t\tif (isDelete && oldValue !== undefined) {\n\t\t\tthis.emit(propertyKey, undefined, oldValue);\n\t\t}\n\t\treturn isDelete;\n\t}\n\temit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tthis._observer.emit(propertyKey, newValue, oldValue);\n\t\tthis._parent?.emit(this._name!, this._ctx);\n\t}\n\tsubscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T> {\n\t\treturn this._observer.subscribe(propertyKey, callback);\n\t}\n\tunsubscribe(propertyKey?: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tif (propertyKey && subscription) {\n\t\t\tthis._observer.unsubscribe(propertyKey, subscription);\n\t\t} else if (propertyKey) {\n\t\t\tthis._observer.unsubscribe(propertyKey);\n\t\t} else {\n\t\t\tthis._observer.destroy();\n\t\t}\n\t}\n\tdetectChanges() {\n\t\tconst previous = this._clone;\n\t\tconst current = this._ctx;\n\t\tif ((!!!previous && !!current) || (!!previous && !!!current)) {\n\t\t\tthis._parent?.emit(this._name!, current);\n\t\t\treturn;\n\t\t}\n\t\tconst keys = this._keys ?? this.getPropertyKeys(previous, current);\n\t\tkeys.forEach(key => {\n\t\t\tconst pv = previous[key];\n\t\t\tconst cv = current[key];\n\t\t\tconst pt = typeof pv;\n\t\t\tconst ct = typeof cv;\n\t\t\tif (pt === 'object') {\n\t\t\t\tif (ct === 'object' && pv == cv) {\n\t\t\t\t\tthis.getInnerScope<ReactiveScope<Context>>(key)?.detectChanges();\n\t\t\t\t} else if (cv != pv) {\n\t\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t\t}\n\t\t\t} else if (ct === 'object') {\n\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t} else if (pv != cv) {\n\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t}\n\t\t});\n\t\tthis._clone = Object.assign({}, this._ctx);\n\t}\n\tprotected getPropertyKeys<V extends Record<PropertyKey, any>>(...objs: V[]) {\n\t\tlet keys: (keyof V)[] = [];\n\t\tobjs.forEach(obj => {\n\t\t\tkeys.push(...Object.keys(obj));\n\t\t\tkeys.push(...Object.getOwnPropertySymbols(obj));\n\t\t});\n\t\tkeys = Array.from(new Set(keys));\n\t\tkeys = keys.filter(key => {\n\t\t\tswitch (typeof key) {\n\t\t\t\tcase 'string':\n\t\t\t\t\treturn !key.startsWith('_');\n\t\t\t\tcase 'symbol':\n\t\t\t\t\treturn !key.toString().startsWith('Symbol(_');\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn keys;\n\t}\n\tgetClass(): TypeOf<ReactiveScope<Context>> {\n\t\treturn ReactiveScope;\n\t}\n}\n\n/**\n * used control/notify/pause scope about changes in current context\n */\nexport interface ScopeControl<T extends Context> {\n\n\t/**\n\t * get current stacte of applying change detection.\n\t */\n\tisAttached(): boolean;\n\n\t/**\n\t * used when want to update ui-view like, you want to replace an array with another \n\t * without reflect changes on view until reattached again.\n\t */\n\tdetach(): void;\n\n\t/**\n\t * apply all the not emitted changes, and continue emit in time.\n\t */\n\treattach(): void;\n\n\t/**\n\t * apply changes now,\n\t * will not effect the state of the detector wither if attached ot not.\n\t * \n\t * if a propertyKey is provided, will emit this property only \n\t * @param propertyKey \n\t */\n\temitChanges(propertyKey?: keyof T, propertyValue?: any): void;\n\n\t/**\n\t * throw error if any changes has been made\n\t */\n\tcheckNoChanges(): void;\n}\n\nexport class ReactiveScopeControl<T extends Context> extends ReactiveScope<T> implements ScopeControl<T> {\n\tstatic for<T extends Context>(context: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScopeControl(context, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScopeControl({} as T, propertyKeys);\n\t}\n\tstatic scopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic readOnlyScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = ReadOnlyScope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic reactiveScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\n\tprotected _attached: boolean = true;\n\tprotected _marked: { [key: keyof Context]: [any, any] } = {};\n\n\toverride emit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tif (this._attached) {\n\t\t\tsuper.emit(propertyKey, newValue, oldValue);\n\t\t} else if (this._marked[propertyKey as string]) {\n\t\t\tif (newValue == this._marked[propertyKey as string][1]) {\n\t\t\t\tdelete this._marked[propertyKey as string];\n\t\t\t} else {\n\t\t\t\tthis._marked[propertyKey as string][0] = newValue;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._marked[propertyKey as string] = [newValue, oldValue];\n\t\t}\n\t}\n\tisAttached(): boolean {\n\t\treturn this._attached;\n\t}\n\tdetach(): void {\n\t\tthis._attached = false;\n\t}\n\treattach(): void {\n\t\tthis._attached = true;\n\t\tthis.emitChanges();\n\t}\n\temitChanges(propertyKey?: keyof T, propertyValue?: any): void {\n\t\tif (propertyKey) {\n\t\t\tsuper.emit(propertyKey, propertyValue);\n\t\t\tReflect.deleteProperty(this._marked, propertyKey);\n\t\t\treturn;\n\t\t}\n\t\tconst latestChanges = this._marked;\n\t\tthis._marked = {};\n\t\tconst keys = this._keys ?? this.getPropertyKeys(latestChanges);\n\t\tkeys.forEach(propertyKey => {\n\t\t\tthis._observer.emit(propertyKey, latestChanges[propertyKey][0], latestChanges[propertyKey][1]);\n\t\t});\n\t\tkeys.length && this._parent?.emit(this._name!, this._ctx);\n\t}\n\tdetectChanges() {\n\t\tthis.detach();\n\t\tsuper.detectChanges();\n\t\tthis.reattach();\n\t}\n\tcheckNoChanges() {\n\t\tthis.detach();\n\t\tsuper.detectChanges();\n\t\tconst keys = Object.keys(this._marked);\n\t\tif (keys.length > 0) {\n\t\t\tthrow new Error(`Some Changes had been detected`);\n\t\t}\n\t}\n\tgetClass(): TypeOf<ReactiveScopeControl<Context>> {\n\t\treturn ReactiveScopeControl;\n\t}\n}\n\n\ninterface ImportMeta {\n\turl: URL;\n\t/**\n\t *\n\t * Provides a module-relative resolution function scoped to each module, returning\n\t * the URL string.\n\t *\n\t * @param specified The module specifier to resolve relative to `parent`.\n\t * @param parent The absolute parent module URL to resolve from. If none\n\t * is specified, the value of `import.meta.url` is used as the default.\n\t */\n\tresolve?(specified: string, parent?: string | URL): Promise<string>;\n}\n\nexport interface ModuleImport {\n\tmeta: ImportMeta\n}\n\nexport interface ModuleContext extends Context {\n\timport: ModuleImport & ((path: string) => Promise<any>);\n}\n\nexport class ModuleScope extends ReactiveScope<ModuleContext> {\n\tconstructor(context: ModuleContext, propertyKeys?: (keyof ModuleContext)[]) {\n\t\tsuper(context, propertyKeys);\n\t}\n\timportModule(propertyKey: keyof ModuleContext, scope: ModuleScope): void {\n\t\tthis._ctx[propertyKey] = scope._ctx;\n\t\tthis._inners.set(propertyKey, scope);\n\t\tthis.detectChanges();\n\t}\n}\nexport class WebModuleScope extends ModuleScope {\n\n\t// private loaded = false;\n\tprivate import: Promise<any>;\n\tconstructor(private source: string, private importCallOptions?: ImportCallOptions) {\n\t\tsuper({} as ModuleContext);\n\t\tthis.import = import(\n\t\t\tsource\n\t\t\t/*, { assert: importCallOptions?.assert } */ // TODO: update in future, node16, ESNEXT,ES2022, ES2023, ES2024\n\t\t).then(module => (this.updateContext(module))).then(() => this._ctx, () => this._ctx);\n\t}\n\tprivate updateContext(context: any) {\n\t\tthis._ctx = context;\n\t\tthis.detectChanges();\n\t}\n\n\tresolveImport() {\n\t\treturn this.import;\n\t}\n}\n"]}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/expressions/scope/scope.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypeOf } from '../api/utils.js';\n\nexport type Context = Record<PropertyKey, any>;\nexport interface Scope<T = Context> {\n\n\t/**\n\t * get value of `propertyKey` in current context\n\t * @param propertyKey \n\t */\n\tget(propertyKey: keyof T): any;\n\n\t/**\n\t * set the value of `propertyKey` in current context, could be instilled with `value`.\n\t * @param propertyKey \n\t * @param value \n\t * @param receiver \n\t */\n\tset(propertyKey: keyof T, value?: any, receiver?: any): boolean;\n\n\t/**\n\t * is current context has `propertyKey` in hash map keys\n\t * @param propertyKey \n\t */\n\thas(propertyKey: keyof T): boolean;\n\n\t/**\n\t * delete property from context\n\t * @param propertyKey \n\t */\n\tdelete(propertyKey: keyof T): boolean;\n\n\t/**\n\t * get current context object of this scope\n\t */\n\tgetContext(): T;\n\n\t/**\n\t * get a proxy of the current context object if exists. \n\t */\n\tgetContextProxy?(): T;\n\n\t/**\n\t * get a scope for an object named as `propertyKey` from cache map,\n\t * \n\t * if the current value is not type od `object`, will return `undefined`.\n\t * @param propertyKey the name of the property\n\t */\n\tgetInnerScope<S extends Scope<Context>>(propertyKey: keyof T): S | undefined;\n\n\t/**\n\t * create a scope with the same type of this scope\n\t */\n\tsetInnerScope<S extends Scope<Context>>(propertyKey: keyof T): S;\n\n\t/**\n\t * sc\n\t * @param propertyKey \n\t * @param scope \n\t */\n\tsetInnerScope<S extends Scope<Context>>(propertyKey: keyof T, scope?: S): S;\n\n\tgetClass(): TypeOf<Scope<Context>>;\n}\n\nexport class Scope<T extends Context> implements Scope<T> {\n\tstatic for<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new Scope(ctx, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new Scope({} as T, propertyKeys);\n\t}\n\n\tprotected _inners = new Map<keyof T, Scope<any>>();\n\n\tconstructor(context: T, propertyKeys?: (keyof T)[]);\n\tconstructor(protected _ctx: T, protected _keys?: (keyof T)[]) { }\n\tget(key: keyof T): any {\n\t\treturn Reflect.get(this._ctx, key);\n\t}\n\tset(key: keyof T, value: any, receiver?: any): boolean {\n\t\treturn Reflect.set(this._ctx, key, value);\n\t}\n\thas(key: keyof T): boolean {\n\t\treturn this._keys?.includes(key) ?? key in this._ctx;\n\t}\n\tdelete(key: keyof T): boolean {\n\t\treturn Reflect.deleteProperty(this._ctx, key);\n\t}\n\tgetContext(): T {\n\t\treturn this._ctx;\n\t}\n\tgetInnerScope<S extends Scope<Context>>(key: keyof T): S | undefined {\n\t\tconst ctx = this.get(key);\n\t\tlet scope = this._inners.get(key);\n\t\tif (scope) {\n\t\t\tscope._ctx = ctx;\n\t\t\treturn scope as S;\n\t\t}\n\t\tif (!(ctx && typeof ctx === 'object')) {\n\t\t\treturn;\n\t\t}\n\t\tscope = new (this.getClass())(ctx, undefined, key, this);\n\t\tthis._inners.set(key, scope);\n\t\treturn scope as S;\n\t}\n\tsetInnerScope<S extends Scope<Context>>(key: keyof T, scope?: S): S {\n\t\tif (scope) {\n\t\t\tthis._inners.set(key, scope);\n\t\t\treturn scope;\n\t\t}\n\t\tconst ctx = this.get(key);\n\t\tscope = new (this.getClass())(ctx, undefined, key, this) as S;\n\t\tthis._inners.set(key, scope);\n\t\treturn scope;\n\t}\n\tgetClass(): TypeOf<Scope<Context>> {\n\t\treturn Scope;\n\t}\n}\n\nexport class ReadOnlyScope<T extends Context> extends Scope<T> {\n\tstatic for<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReadOnlyScope(ctx, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReadOnlyScope({} as T, propertyKeys);\n\t}\n\tset(propertyKey: keyof T, value: any, receiver?: any): boolean {\n\t\t// do nothing\n\t\treturn false;\n\t}\n\tdelete(propertyKey: keyof T): boolean {\n\t\t// do nothing\n\t\treturn false;\n\t}\n\tgetClass(): TypeOf<ReadOnlyScope<Context>> {\n\t\treturn ReadOnlyScope;\n\t}\n}\n\nexport class ScopeSubscription<T> {\n\tconstructor(private propertyKey: keyof T, private observer: ValueChangeObserver<T>) { }\n\tpause() {\n\t\tthis.observer.pause(this.propertyKey, this);\n\t}\n\tresume() {\n\t\tthis.observer.resume(this.propertyKey, this);\n\t}\n\tunsubscribe(): void {\n\t\tthis.observer.unsubscribe(this.propertyKey, this);\n\t}\n}\n\nexport type ValueChangedCallback = (newValue: any, oldValue?: any) => void;\n\ntype SubscriptionInfo = { callback: ValueChangedCallback, enable: boolean };\n\nexport class ValueChangeObserver<T> {\n\tprivate _subscribers: Map<keyof T, Map<ScopeSubscription<T>, SubscriptionInfo>> = new Map();\n\tprivate _lock: (keyof T)[] = [];\n\temit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tif (this._lock.includes(propertyKey)) {\n\t\t\treturn;\n\t\t}\n\t\tconst subscribers = this._subscribers.get(propertyKey);\n\t\tif (!subscribers || subscribers.size == 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lock.push(propertyKey);\n\n\t\tconst currentSubscription = Array.from(subscribers.values());\n\t\tcurrentSubscription.forEach(subscriptionInfo => {\n\t\t\tif (!subscriptionInfo.enable) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tsubscriptionInfo.callback(newValue, oldValue);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t});\n\t\tif (this._lock.pop() !== propertyKey) {\n\t\t\tconsole.error('lock error');\n\t\t};\n\t}\n\tsubscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T> {\n\t\tconst subscription: ScopeSubscription<T> = new ScopeSubscription(propertyKey, this);\n\t\tlet propertySubscribers = this._subscribers.get(propertyKey);\n\t\tif (!propertySubscribers) {\n\t\t\tpropertySubscribers = new Map();\n\t\t\tthis._subscribers.set(propertyKey, propertySubscribers);\n\t\t}\n\t\tpropertySubscribers.set(subscription, { callback, enable: true });\n\t\treturn subscription;\n\t}\n\n\tunsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tif (subscription) {\n\t\t\tthis._subscribers.get(propertyKey)?.delete(subscription);\n\t\t} else {\n\t\t\tthis._subscribers.delete(propertyKey);\n\t\t}\n\t}\n\n\tpause(propertyKey: keyof T, subscription: ScopeSubscription<T>) {\n\t\tconst subscriptionInfo = this._subscribers.get(propertyKey)?.get(subscription);\n\t\tsubscriptionInfo && (subscriptionInfo.enable = false);\n\t}\n\n\tresume(propertyKey: keyof T, subscription: ScopeSubscription<T>) {\n\t\tconst subscriptionInfo = this._subscribers.get(propertyKey)?.get(subscription);\n\t\tsubscriptionInfo && (subscriptionInfo.enable = true);\n\t}\n\n\t/**\n\t * check if this Observer has any subscribers\n\t */\n\thasSubscribers(): boolean;\n\n\t/**\n\t * check if there is any subscribers registered by the propertyKey.\n\t * \n\t * @param propertyKey\n\t */\n\thasSubscribers(propertyKey: keyof T): boolean;\n\thasSubscribers(propertyKey?: keyof T): boolean {\n\t\tif (propertyKey) {\n\t\t\treturn (this._subscribers.get(propertyKey)?.size ?? 0) > 0;\n\t\t}\n\t\treturn this._subscribers.size > 0;\n\t}\n\n\t/**\n\t * clear subscription maps\n\t */\n\tdestroy() {\n\t\tthis._subscribers.clear();\n\t}\n}\n\nexport class ReactiveScope<T extends Context> extends Scope<T> {\n\tstatic for<T extends Context>(context: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScope(context, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScope({} as T, propertyKeys);\n\t}\n\tstatic scopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic readOnlyScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = ReadOnlyScope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tprotected _clone: T;\n\tdeclare protected _inners: Map<keyof T, ReactiveScope<any>>;\n\tprotected _observer: ValueChangeObserver<T> = new ValueChangeObserver<T>();\n\n\n\tconstructor(context: T, propertyKeys?: (keyof T)[], protected _name?: keyof T, protected _parent?: ReactiveScope<any>) {\n\t\tsuper(context, propertyKeys);\n\t\tthis._clone = Object.assign({}, context);\n\t}\n\n\tset(propertyKey: keyof T, newValue: any, receiver?: any): boolean {\n\t\tconst oldValue = Reflect.get(this._ctx, propertyKey);\n\t\tconst result = Reflect.set(this._ctx, propertyKey, newValue);\n\t\tif (result) {\n\t\t\tthis.emit(propertyKey, newValue, oldValue);\n\t\t}\n\t\treturn result;\n\t}\n\tdelete(propertyKey: keyof T): boolean {\n\t\tconst oldValue = Reflect.get(this._ctx, propertyKey);\n\t\tconst isDelete = Reflect.deleteProperty(this._ctx, propertyKey);\n\t\tif (isDelete && oldValue !== undefined) {\n\t\t\tthis.emit(propertyKey, undefined, oldValue);\n\t\t}\n\t\treturn isDelete;\n\t}\n\temit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tthis._observer.emit(propertyKey, newValue, oldValue);\n\t\tthis._parent?.emit(this._name!, this._ctx);\n\t}\n\tsubscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T> {\n\t\treturn this._observer.subscribe(propertyKey, callback);\n\t}\n\tunsubscribe(propertyKey?: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tif (subscription && propertyKey !== null && propertyKey !== undefined) {\n\t\t\tthis._observer.unsubscribe(propertyKey, subscription);\n\t\t} else if (propertyKey !== null && propertyKey !== undefined) {\n\t\t\tthis._observer.unsubscribe(propertyKey);\n\t\t} else {\n\t\t\tthis._observer.destroy();\n\t\t}\n\t}\n\tdetectChanges() {\n\t\tconst previous = this._clone;\n\t\tconst current = this._ctx;\n\t\tif ((!!!previous && !!current) || (!!previous && !!!current)) {\n\t\t\tthis._parent?.emit(this._name!, current);\n\t\t\treturn;\n\t\t}\n\t\tconst keys = this._keys ?? this.getPropertyKeys(previous, current);\n\t\tkeys.forEach(key => {\n\t\t\tconst pv = previous[key];\n\t\t\tconst cv = current[key];\n\t\t\tconst pt = typeof pv;\n\t\t\tconst ct = typeof cv;\n\t\t\tif (pt === 'object') {\n\t\t\t\tif (ct === 'object' && pv == cv) {\n\t\t\t\t\tthis.getInnerScope<ReactiveScope<Context>>(key)?.detectChanges();\n\t\t\t\t} else if (cv != pv) {\n\t\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t\t}\n\t\t\t} else if (ct === 'object') {\n\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t} else if (pv != cv) {\n\t\t\t\tthis.emit(key, cv, pv);\n\t\t\t}\n\t\t});\n\t\tthis._clone = Object.assign({}, this._ctx);\n\t}\n\tprotected getPropertyKeys<V extends Record<PropertyKey, any>>(...objs: V[]) {\n\t\tlet keys: (keyof V)[] = [];\n\t\tobjs.forEach(obj => {\n\t\t\tkeys.push(...Object.keys(obj));\n\t\t\tkeys.push(...Object.getOwnPropertySymbols(obj));\n\t\t});\n\t\tkeys = Array.from(new Set(keys));\n\t\tkeys = keys.filter(key => {\n\t\t\tswitch (typeof key) {\n\t\t\t\tcase 'string':\n\t\t\t\t\treturn !key.startsWith('_');\n\t\t\t\tcase 'symbol':\n\t\t\t\t\treturn !key.toString().startsWith('Symbol(_');\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn keys;\n\t}\n\tgetClass(): TypeOf<ReactiveScope<Context>> {\n\t\treturn ReactiveScope;\n\t}\n}\n\n/**\n * used control/notify/pause scope about changes in current context\n */\nexport interface ScopeControl<T extends Context> {\n\n\t/**\n\t * get current stacte of applying change detection.\n\t */\n\tisAttached(): boolean;\n\n\t/**\n\t * used when want to update ui-view like, you want to replace an array with another \n\t * without reflect changes on view until reattached again.\n\t */\n\tdetach(): void;\n\n\t/**\n\t * apply all the not emitted changes, and continue emit in time.\n\t */\n\treattach(): void;\n\n\t/**\n\t * apply changes now,\n\t * will not effect the state of the detector wither if attached ot not.\n\t * \n\t * if a propertyKey is provided, will emit this property only \n\t * @param propertyKey \n\t */\n\temitChanges(propertyKey?: keyof T, propertyValue?: any): void;\n\n\t/**\n\t * throw error if any changes has been made\n\t */\n\tcheckNoChanges(): void;\n}\n\nexport class ReactiveScopeControl<T extends Context> extends ReactiveScope<T> implements ScopeControl<T> {\n\tstatic for<T extends Context>(context: T, propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScopeControl(context, propertyKeys);\n\t}\n\tstatic blockScope<T extends Context>(propertyKeys?: (keyof T)[]) {\n\t\treturn new ReactiveScopeControl({} as T, propertyKeys);\n\t}\n\tstatic scopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic readOnlyScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScopeControl.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = ReadOnlyScope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\tstatic reactiveScopeForThis<T extends Context>(ctx: T, propertyKeys?: (keyof T)[]) {\n\t\tconst thisScope = ReactiveScope.for(ctx, propertyKeys);\n\t\tconst thisCtx = {\n\t\t\t'this': ctx,\n\t\t};\n\t\tconst rootScope = Scope.for(thisCtx, ['this']);\n\t\trootScope.setInnerScope('this', thisScope);\n\t\treturn rootScope;\n\t}\n\n\tprotected _attached: boolean = true;\n\tprotected _marked: { [key: keyof Context]: [any, any] } = {};\n\n\toverride emit(propertyKey: keyof T, newValue: any, oldValue?: any): void {\n\t\tif (this._attached) {\n\t\t\tsuper.emit(propertyKey, newValue, oldValue);\n\t\t} else if (this._marked[propertyKey as string]) {\n\t\t\tif (newValue == this._marked[propertyKey as string][1]) {\n\t\t\t\tdelete this._marked[propertyKey as string];\n\t\t\t} else {\n\t\t\t\tthis._marked[propertyKey as string][0] = newValue;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._marked[propertyKey as string] = [newValue, oldValue];\n\t\t}\n\t}\n\tisAttached(): boolean {\n\t\treturn this._attached;\n\t}\n\tdetach(): void {\n\t\tthis._attached = false;\n\t}\n\treattach(): void {\n\t\tthis._attached = true;\n\t\tthis.emitChanges();\n\t}\n\temitChanges(propertyKey?: keyof T, propertyValue?: any): void {\n\t\tif (propertyKey) {\n\t\t\tsuper.emit(propertyKey, propertyValue);\n\t\t\tReflect.deleteProperty(this._marked, propertyKey);\n\t\t\treturn;\n\t\t}\n\t\tconst latestChanges = this._marked;\n\t\tthis._marked = {};\n\t\tconst keys = this._keys ?? this.getPropertyKeys(latestChanges);\n\t\tkeys.forEach(propertyKey => {\n\t\t\tthis._observer.emit(propertyKey, latestChanges[propertyKey][0], latestChanges[propertyKey][1]);\n\t\t});\n\t\tkeys.length && this._parent?.emit(this._name!, this._ctx);\n\t}\n\tdetectChanges() {\n\t\tthis.detach();\n\t\tsuper.detectChanges();\n\t\tthis.reattach();\n\t}\n\tcheckNoChanges() {\n\t\tthis.detach();\n\t\tsuper.detectChanges();\n\t\tconst keys = Object.keys(this._marked);\n\t\tif (keys.length > 0) {\n\t\t\tthrow new Error(`Some Changes had been detected`);\n\t\t}\n\t}\n\tgetClass(): TypeOf<ReactiveScopeControl<Context>> {\n\t\treturn ReactiveScopeControl;\n\t}\n}\n\n\ninterface ImportMeta {\n\turl: URL;\n\t/**\n\t *\n\t * Provides a module-relative resolution function scoped to each module, returning\n\t * the URL string.\n\t *\n\t * @param specified The module specifier to resolve relative to `parent`.\n\t * @param parent The absolute parent module URL to resolve from. If none\n\t * is specified, the value of `import.meta.url` is used as the default.\n\t */\n\tresolve?(specified: string, parent?: string | URL): Promise<string>;\n}\n\nexport interface ModuleImport {\n\tmeta: ImportMeta\n}\n\nexport interface ModuleContext extends Context {\n\timport: ModuleImport & ((path: string) => Promise<any>);\n}\n\nexport class ModuleScope extends ReactiveScope<ModuleContext> {\n\tconstructor(context: ModuleContext, propertyKeys?: (keyof ModuleContext)[]) {\n\t\tsuper(context, propertyKeys);\n\t}\n\timportModule(propertyKey: keyof ModuleContext, scope: ModuleScope): void {\n\t\tthis._ctx[propertyKey] = scope._ctx;\n\t\tthis._inners.set(propertyKey, scope);\n\t\tthis.detectChanges();\n\t}\n}\nexport class WebModuleScope extends ModuleScope {\n\n\t// private loaded = false;\n\tprivate import: Promise<any>;\n\tconstructor(private source: string, private importCallOptions?: ImportCallOptions) {\n\t\tsuper({} as ModuleContext);\n\t\tthis.import = import(\n\t\t\tsource\n\t\t\t/*, { assert: importCallOptions?.assert } */ // TODO: update in future, node16, ESNEXT,ES2022, ES2023, ES2024\n\t\t).then(module => (this.updateContext(module))).then(() => this._ctx, () => this._ctx);\n\t}\n\tprivate updateContext(context: any) {\n\t\tthis._ctx = context;\n\t\tthis.detectChanges();\n\t}\n\n\tresolveImport() {\n\t\treturn this.import;\n\t}\n}\n"]}
@@ -0,0 +1,75 @@
1
+ import { ReactiveScope, ValueChangedCallback } from './scope.js';
2
+ type CleanupFn = () => void;
3
+ export declare class SignalScope extends ReactiveScope<Array<any>> {
4
+ private state;
5
+ private watch;
6
+ constructor();
7
+ createSignal<T>(initValue: T): Signal<T>;
8
+ createSignalFn<T>(initValue: T): WritableSignal<T>;
9
+ createLazy<T>(updateFn: () => T): Lazy<T>;
10
+ createLazyFn<T>(updateFn: () => T): ReactiveSignal<T>;
11
+ createComputed<T>(updateFn: () => T): Computed<T>;
12
+ createComputedFn<T>(updateFn: () => T): ReactiveSignal<T>;
13
+ createEffect(effectFn: (onCleanup?: CleanupFn) => void): {
14
+ destroy(): void;
15
+ };
16
+ watchState(): void;
17
+ untrack(): void;
18
+ observeIndex(index: number): void;
19
+ track(): void;
20
+ readState(): number[];
21
+ observeState(updateFn: () => void): {
22
+ [k: string]: import("./scope.js").ScopeSubscription<any[]>;
23
+ };
24
+ restoreState(): void;
25
+ }
26
+ export declare abstract class ReactiveNode<T> {
27
+ protected scope: SignalScope;
28
+ protected index: number;
29
+ static bindNode<T>(instance: ReactiveNode<T>): void;
30
+ static toReactiveSignal<T>(instance: ReadOnlySignal<T>): ReactiveSignal<T>;
31
+ constructor(scope: SignalScope, index: number);
32
+ get(): T;
33
+ subscribe(callback: ValueChangedCallback): import("./scope.js").ScopeSubscription<any[]>;
34
+ }
35
+ declare const SIGNAL: unique symbol;
36
+ export interface Reactive<T> {
37
+ [SIGNAL]: ReactiveNode<T>;
38
+ }
39
+ export declare function isReactive<T = any>(value: unknown): value is Reactive<T>;
40
+ export declare function getReactiveNode<T = any>(value: unknown): ReactiveNode<T> | void;
41
+ export type ReactiveSignal<T> = (() => T) & {
42
+ /**
43
+ * original node that can access value from scope
44
+ */
45
+ [SIGNAL]: unknown;
46
+ };
47
+ export declare class Computed<T> extends ReactiveNode<T> {
48
+ constructor(scope: SignalScope, index: number, initValue: T);
49
+ }
50
+ export declare class Lazy<T> extends ReactiveNode<T> {
51
+ private updateFn;
52
+ constructor(scope: SignalScope, index: number, updateFn: () => T);
53
+ get(): T;
54
+ }
55
+ export type WritableSignal<T> = ReactiveSignal<T> & {
56
+ set(value: T): void;
57
+ update(updateFn: (value: T) => T): void;
58
+ };
59
+ export declare class Signal<T> extends ReactiveNode<T> {
60
+ static bindNode<T>(instance: Signal<T>): void;
61
+ static toReactiveSignal<T>(instance: Signal<T>): WritableSignal<T>;
62
+ constructor(scope: SignalScope, index: number, initValue: T);
63
+ set(value: T): void;
64
+ update(updateFn: (value: T) => T): void;
65
+ asReadonly(): ReactiveSignal<unknown>;
66
+ asReadonlyNode(): ReadOnlySignal<unknown>;
67
+ }
68
+ export declare class ReadOnlySignal<T> extends ReactiveNode<T> {
69
+ }
70
+ export declare class SignalValueScope<T> extends ReactiveScope<Record<PropertyKey, any>> {
71
+ constructor();
72
+ watchSignal(propertyKey: keyof T, node: ReactiveNode<any>): import("./scope.js").ScopeSubscription<any[]>;
73
+ }
74
+ export {};
75
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/expressions/scope/signal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { ReactiveScope } from './scope.js';
2
+ function compute(updateFn) {
3
+ try {
4
+ return updateFn();
5
+ }
6
+ catch (error) {
7
+ return error;
8
+ }
9
+ }
10
+ export class SignalScope extends ReactiveScope {
11
+ state = [];
12
+ watch = true;
13
+ constructor() {
14
+ super([]);
15
+ }
16
+ createSignal(initValue) {
17
+ const signal = new Signal(this, this.getContext().length, initValue);
18
+ Signal.bindNode(signal);
19
+ return signal;
20
+ }
21
+ createSignalFn(initValue) {
22
+ const signal = new Signal(this, this.getContext().length, initValue);
23
+ return Signal.toReactiveSignal(signal);
24
+ }
25
+ createLazy(updateFn) {
26
+ const lazy = new Lazy(this, this.getContext().length, updateFn);
27
+ Lazy.bindNode(lazy);
28
+ return lazy;
29
+ }
30
+ createLazyFn(updateFn) {
31
+ const lazy = new Lazy(this, this.getContext().length, updateFn);
32
+ return Lazy.toReactiveSignal(lazy);
33
+ }
34
+ createComputed(updateFn) {
35
+ const index = this.getContext().length;
36
+ this.watchState();
37
+ const value = compute(updateFn);
38
+ const computed = new Computed(this, index, value);
39
+ Computed.bindNode(computed);
40
+ const observeComputed = () => {
41
+ this.watchState();
42
+ const value = compute(updateFn);
43
+ const state = this.readState();
44
+ this.restoreState();
45
+ Object.keys(subscriptions)
46
+ .filter(index => !state.includes(+index))
47
+ .forEach(index => subscriptions[index].pause());
48
+ state.forEach(index => {
49
+ subscriptions[index]?.resume();
50
+ subscriptions[index] ??= this.subscribe(index, observeComputed);
51
+ });
52
+ this.set(index, value);
53
+ };
54
+ const subscriptions = this.observeState(observeComputed);
55
+ this.restoreState();
56
+ return computed;
57
+ }
58
+ createComputedFn(updateFn) {
59
+ const computed = this.createComputed(updateFn);
60
+ return Computed.toReactiveSignal(computed);
61
+ }
62
+ createEffect(effectFn) {
63
+ let cleanupFn;
64
+ let isCleanupRegistered = false;
65
+ const cleanupRegister = onClean => {
66
+ cleanupFn = onClean;
67
+ isCleanupRegistered = true;
68
+ };
69
+ const callback = () => {
70
+ isCleanupRegistered = false;
71
+ const error = compute(() => effectFn(cleanupRegister));
72
+ if (error instanceof Error) {
73
+ console.error(error);
74
+ }
75
+ if (!isCleanupRegistered) {
76
+ cleanupFn = undefined;
77
+ }
78
+ };
79
+ this.watchState();
80
+ callback();
81
+ const observeComputed = () => {
82
+ cleanupFn?.();
83
+ this.watchState();
84
+ callback();
85
+ const state = this.readState();
86
+ this.restoreState();
87
+ Object.keys(subscriptions)
88
+ .filter(index => !state.includes(+index))
89
+ .forEach(index => subscriptions[index].pause());
90
+ state.forEach(index => {
91
+ subscriptions[index]?.resume();
92
+ subscriptions[index] ??= this.subscribe(index, observeComputed);
93
+ });
94
+ };
95
+ const subscriptions = this.observeState(observeComputed);
96
+ this.restoreState();
97
+ return {
98
+ destroy: () => {
99
+ Object.values(subscriptions).forEach(sub => sub.unsubscribe());
100
+ cleanupFn?.();
101
+ },
102
+ };
103
+ }
104
+ watchState() {
105
+ this.state.push([]);
106
+ }
107
+ untrack() {
108
+ this.watch = false;
109
+ }
110
+ observeIndex(index) {
111
+ if (this.watch) {
112
+ this.state.at(-1)?.push(index);
113
+ }
114
+ }
115
+ track() {
116
+ this.watch = true;
117
+ }
118
+ readState() {
119
+ return this.state.at(-1) ?? [];
120
+ }
121
+ observeState(updateFn) {
122
+ return Object.fromEntries(this.readState().map(index => [index, this.subscribe(index, updateFn)]));
123
+ }
124
+ restoreState() {
125
+ this.state.pop();
126
+ }
127
+ }
128
+ export class ReactiveNode {
129
+ scope;
130
+ index;
131
+ static bindNode(instance) {
132
+ instance.get = instance.get.bind(instance);
133
+ }
134
+ static toReactiveSignal(instance) {
135
+ const fn = () => instance.get();
136
+ fn[SIGNAL] = instance;
137
+ return fn;
138
+ }
139
+ constructor(scope, index) {
140
+ this.scope = scope;
141
+ this.index = index;
142
+ }
143
+ get() {
144
+ this.scope.observeIndex(this.index);
145
+ return this.scope.get(this.index);
146
+ }
147
+ subscribe(callback) {
148
+ return this.scope.subscribe(this.index, callback);
149
+ }
150
+ }
151
+ const SIGNAL = Symbol('Signal');
152
+ export function isReactive(value) {
153
+ const node = value?.[SIGNAL];
154
+ return node !== undefined && node instanceof ReactiveNode;
155
+ }
156
+ export function getReactiveNode(value) {
157
+ if (value instanceof ReactiveNode) {
158
+ return value;
159
+ }
160
+ else if (isReactive(value)) {
161
+ return value[SIGNAL];
162
+ }
163
+ }
164
+ export class Computed extends ReactiveNode {
165
+ constructor(scope, index, initValue) {
166
+ super(scope, index);
167
+ scope.set(index, initValue);
168
+ }
169
+ }
170
+ export class Lazy extends ReactiveNode {
171
+ updateFn;
172
+ constructor(scope, index, updateFn) {
173
+ super(scope, index);
174
+ this.updateFn = updateFn;
175
+ scope.set(index, compute(updateFn));
176
+ }
177
+ get() {
178
+ const value = compute(this.updateFn);
179
+ this.scope.set(this.index, value);
180
+ return super.get();
181
+ }
182
+ }
183
+ export class Signal extends ReactiveNode {
184
+ static bindNode(instance) {
185
+ instance.get = instance.get.bind(instance);
186
+ instance.set = instance.set.bind(instance);
187
+ instance.update = instance.update.bind(instance);
188
+ }
189
+ static toReactiveSignal(instance) {
190
+ const fn = () => instance.get();
191
+ fn.set = (value) => instance.set(value);
192
+ fn.update = (updateFn) => instance.update(updateFn);
193
+ fn[SIGNAL] = instance;
194
+ return fn;
195
+ }
196
+ constructor(scope, index, initValue) {
197
+ super(scope, index);
198
+ scope.set(index, initValue);
199
+ }
200
+ set(value) {
201
+ this.scope.set(this.index, value);
202
+ }
203
+ update(updateFn) {
204
+ this.set(updateFn(this.get()));
205
+ }
206
+ asReadonly() {
207
+ return ReadOnlySignal.toReactiveSignal(new ReadOnlySignal(this.scope, this.index));
208
+ }
209
+ asReadonlyNode() {
210
+ const node = new ReadOnlySignal(this.scope, this.index);
211
+ ReadOnlySignal.bindNode(node);
212
+ return node;
213
+ }
214
+ }
215
+ export class ReadOnlySignal extends ReactiveNode {
216
+ }
217
+ export class SignalValueScope extends ReactiveScope {
218
+ constructor() {
219
+ super({});
220
+ }
221
+ watchSignal(propertyKey, node) {
222
+ this.set(propertyKey, node.get());
223
+ return node.subscribe(value => this.set(propertyKey, value));
224
+ }
225
+ }
226
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/expressions/scope/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScope, ValueChangedCallback } from './scope.js';\n\ntype CleanupFn = () => void;\ntype CleanupRegister = (cleanupFn?: CleanupFn) => void;\n\nfunction compute<T>(updateFn: () => T): T | unknown {\n\ttry {\n\t\treturn updateFn();\n\t} catch (error) {\n\t\treturn error;\n\t}\n}\n\nexport class SignalScope extends ReactiveScope<Array<any>> {\n\n\tprivate state: number[][] = [];\n\tprivate watch = true;\n\n\tconstructor() {\n\t\tsuper([]);\n\t}\n\n\tcreateSignal<T>(initValue: T): Signal<T> {\n\t\tconst signal = new Signal<T>(this, this.getContext().length, initValue);\n\t\tSignal.bindNode(signal);\n\t\treturn signal;\n\t}\n\tcreateSignalFn<T>(initValue: T) {\n\t\tconst signal = new Signal<T>(this, this.getContext().length, initValue);\n\t\treturn Signal.toReactiveSignal(signal);\n\t}\n\n\tcreateLazy<T>(updateFn: () => T): Lazy<T> {\n\t\tconst lazy = new Lazy<T>(this, this.getContext().length, updateFn);\n\t\tLazy.bindNode(lazy);\n\t\treturn lazy;\n\t}\n\n\tcreateLazyFn<T>(updateFn: () => T) {\n\t\tconst lazy = new Lazy<T>(this, this.getContext().length, updateFn);\n\t\treturn Lazy.toReactiveSignal(lazy);\n\t}\n\n\tcreateComputed<T>(updateFn: () => T): Computed<T> {\n\t\tconst index = this.getContext().length;\n\t\tthis.watchState();\n\t\tconst value = compute(updateFn);\n\t\tconst computed = new Computed<T>(this, index, value as T);\n\t\tComputed.bindNode(computed);\n\t\tconst observeComputed = () => {\n\t\t\tthis.watchState();\n\t\t\tconst value = compute(updateFn);\n\t\t\tconst state = this.readState();\n\t\t\tthis.restoreState();\n\t\t\tObject.keys(subscriptions)\n\t\t\t\t.filter(index => !state.includes(+index))\n\t\t\t\t.forEach(index => subscriptions[index].pause());\n\t\t\tstate.forEach(index => {\n\t\t\t\tsubscriptions[index]?.resume();\n\t\t\t\tsubscriptions[index] ??= this.subscribe(index, observeComputed);\n\t\t\t});\n\t\t\tthis.set(index, value);\n\t\t};\n\t\tconst subscriptions = this.observeState(observeComputed);\n\t\tthis.restoreState();\n\t\treturn computed;\n\t}\n\n\tcreateComputedFn<T>(updateFn: () => T) {\n\t\tconst computed = this.createComputed(updateFn);\n\t\treturn Computed.toReactiveSignal(computed);\n\t}\n\n\tcreateEffect(effectFn: (onCleanup?: CleanupFn) => void): { destroy(): void } {\n\t\tlet cleanupFn: (() => void) | undefined;\n\t\tlet isCleanupRegistered = false;\n\t\tconst cleanupRegister: CleanupRegister = onClean => {\n\t\t\tcleanupFn = onClean;\n\t\t\tisCleanupRegistered = true;\n\t\t};\n\t\tconst callback = () => {\n\t\t\tisCleanupRegistered = false;\n\t\t\tconst error = compute(() => effectFn(cleanupRegister)) as any;\n\t\t\tif (error instanceof Error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t\tif (!isCleanupRegistered) {\n\t\t\t\tcleanupFn = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.watchState();\n\t\tcallback();\n\t\tconst observeComputed = () => {\n\t\t\tcleanupFn?.();\n\t\t\tthis.watchState();\n\t\t\tcallback();\n\t\t\tconst state = this.readState();\n\t\t\tthis.restoreState();\n\t\t\tObject.keys(subscriptions)\n\t\t\t\t.filter(index => !state.includes(+index))\n\t\t\t\t.forEach(index => subscriptions[index].pause());\n\t\t\tstate.forEach(index => {\n\t\t\t\tsubscriptions[index]?.resume();\n\t\t\t\tsubscriptions[index] ??= this.subscribe(index, observeComputed);\n\t\t\t});\n\t\t};\n\t\tconst subscriptions = this.observeState(observeComputed);\n\t\tthis.restoreState();\n\t\treturn {\n\t\t\tdestroy: () => {\n\t\t\t\tObject.values(subscriptions).forEach(sub => sub.unsubscribe());\n\t\t\t\tcleanupFn?.();\n\t\t\t},\n\t\t};\n\t}\n\n\twatchState() {\n\t\tthis.state.push([]);\n\t}\n\n\tuntrack() {\n\t\tthis.watch = false;\n\t}\n\n\tobserveIndex(index: number) {\n\t\tif (this.watch) {\n\t\t\tthis.state.at(-1)?.push(index);\n\t\t}\n\t}\n\n\ttrack() {\n\t\tthis.watch = true;\n\t}\n\n\treadState() {\n\t\treturn this.state.at(-1) ?? [];\n\t}\n\n\tobserveState(updateFn: () => void) {\n\t\treturn Object.fromEntries(this.readState().map(index => [index, this.subscribe(index, updateFn)]));\n\t}\n\n\trestoreState() {\n\t\tthis.state.pop();\n\t}\n\n}\n\nexport abstract class ReactiveNode<T> {\n\n\tstatic bindNode<T>(instance: ReactiveNode<T>) {\n\t\tinstance.get = instance.get.bind(instance);\n\t}\n\n\tstatic toReactiveSignal<T>(instance: ReadOnlySignal<T>): ReactiveSignal<T> {\n\t\tconst fn = () => instance.get();\n\t\tfn[SIGNAL] = instance;\n\t\treturn fn as ReactiveSignal<T>;\n\t}\n\n\tconstructor(protected scope: SignalScope, protected index: number) { }\n\n\tget(): T {\n\t\tthis.scope.observeIndex(this.index);\n\t\treturn this.scope.get(this.index);\n\t}\n\n\tsubscribe(callback: ValueChangedCallback) {\n\t\treturn this.scope.subscribe(this.index, callback);\n\t}\n\n}\n\nconst SIGNAL = Symbol('Signal');\n\nexport interface Reactive<T> {\n\t[SIGNAL]: ReactiveNode<T>;\n}\n\nexport function isReactive<T = any>(value: unknown): value is Reactive<T> {\n\tconst node = (value as Partial<Reactive<T>>)?.[SIGNAL];\n\treturn node !== undefined && node instanceof ReactiveNode;\n}\n\nexport function getReactiveNode<T = any>(value: unknown): ReactiveNode<T> | void {\n\tif (value instanceof ReactiveNode) {\n\t\treturn value;\n\t}\n\telse if (isReactive(value)) {\n\t\treturn value[SIGNAL];\n\t}\n}\n\nexport type ReactiveSignal<T> = (() => T) & {\n\t/**\n\t * original node that can access value from scope\n\t */\n\t[SIGNAL]: unknown;\n};\n\nexport class Computed<T> extends ReactiveNode<T> {\n\n\tconstructor(scope: SignalScope, index: number, initValue: T) {\n\t\tsuper(scope, index);\n\t\tscope.set(index, initValue);\n\t}\n\n}\n\nexport class Lazy<T> extends ReactiveNode<T> {\n\n\tprivate updateFn: () => T;\n\n\tconstructor(scope: SignalScope, index: number, updateFn: () => T) {\n\t\tsuper(scope, index);\n\t\tthis.updateFn = updateFn;\n\t\tscope.set(index, compute(updateFn) as T);\n\t}\n\n\toverride get(): T {\n\t\tconst value = compute(this.updateFn);\n\t\tthis.scope.set(this.index, value);\n\t\treturn super.get();\n\t}\n\n}\n\nexport type WritableSignal<T> = ReactiveSignal<T> & {\n\tset(value: T): void;\n\tupdate(updateFn: (value: T) => T): void;\n};\n\nexport class Signal<T> extends ReactiveNode<T> {\n\n\tstatic bindNode<T>(instance: Signal<T>) {\n\t\tinstance.get = instance.get.bind(instance);\n\t\tinstance.set = instance.set.bind(instance);\n\t\tinstance.update = instance.update.bind(instance);\n\t}\n\n\tstatic toReactiveSignal<T>(instance: Signal<T>): WritableSignal<T> {\n\t\tconst fn = () => instance.get();\n\t\tfn.set = (value: T) => instance.set(value);\n\t\tfn.update = (updateFn: (value: T) => T) => instance.update(updateFn);\n\t\tfn[SIGNAL] = instance;\n\t\treturn fn as WritableSignal<T>;\n\t}\n\n\tconstructor(scope: SignalScope, index: number, initValue: T) {\n\t\tsuper(scope, index);\n\t\tscope.set(index, initValue);\n\t}\n\n\tset(value: T) {\n\t\tthis.scope.set(this.index, value);\n\t}\n\n\tupdate(updateFn: (value: T) => T): void {\n\t\tthis.set(updateFn(this.get()));\n\t}\n\n\tasReadonly() {\n\t\treturn ReadOnlySignal.toReactiveSignal(new ReadOnlySignal(this.scope, this.index));\n\t}\n\n\tasReadonlyNode() {\n\t\tconst node = new ReadOnlySignal(this.scope, this.index);\n\t\tReadOnlySignal.bindNode(node)\n\t\treturn node;\n\t}\n\n}\n\nexport class ReadOnlySignal<T> extends ReactiveNode<T> {\n\n}\n\nexport class SignalValueScope<T> extends ReactiveScope<Record<PropertyKey, any>> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\n\twatchSignal(propertyKey: keyof T, node: ReactiveNode<any>) {\n\t\tthis.set(propertyKey, node.get());\n\t\treturn node.subscribe(value => this.set(propertyKey, value));\n\t}\n\n}\n"]}
package/scope/stack.d.ts CHANGED
@@ -107,7 +107,7 @@ export interface Stack {
107
107
  onDestroy(action: () => void): void;
108
108
  }
109
109
  export declare class Stack implements Stack {
110
- static for(...contexts: Scope<Context>[]): Stack;
110
+ static for(...contexts: Context[]): Stack;
111
111
  static forScopes(...scopes: Scope<Context>[]): Stack;
112
112
  static moduleScope(resolver: ModuleScopeResolver, moduleSource: string, ...globalScopes: Scope<Context>[]): Stack;
113
113
  awaitPromise: AwaitPromiseInfo[];