@ibyar/expressions 0.3.8 → 0.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 (164) hide show
  1. package/README.md +22 -12
  2. package/api/abstract.d.ts +20 -4
  3. package/api/abstract.js +54 -3
  4. package/api/abstract.js.map +1 -1
  5. package/api/app/class.d.ts +21 -11
  6. package/api/app/class.js +28 -10
  7. package/api/app/class.js.map +1 -1
  8. package/api/app/program.d.ts +6 -3
  9. package/api/app/program.js +7 -3
  10. package/api/app/program.js.map +1 -1
  11. package/api/computing/call.d.ts +5 -2
  12. package/api/computing/call.js +8 -2
  13. package/api/computing/call.js.map +1 -1
  14. package/api/computing/new.d.ts +5 -2
  15. package/api/computing/new.js +10 -2
  16. package/api/computing/new.js.map +1 -1
  17. package/api/computing/rest.d.ts +5 -2
  18. package/api/computing/rest.js +8 -2
  19. package/api/computing/rest.js.map +1 -1
  20. package/api/computing/return.d.ts +5 -2
  21. package/api/computing/return.js +8 -2
  22. package/api/computing/return.js.map +1 -1
  23. package/api/computing/spread.d.ts +5 -2
  24. package/api/computing/spread.js +8 -2
  25. package/api/computing/spread.js.map +1 -1
  26. package/api/computing/throw.d.ts +11 -4
  27. package/api/computing/throw.js +23 -6
  28. package/api/computing/throw.js.map +1 -1
  29. package/api/computing/yield.d.ts +18 -0
  30. package/api/computing/yield.js +51 -0
  31. package/api/computing/yield.js.map +1 -0
  32. package/api/definition/array.d.ts +10 -3
  33. package/api/definition/array.js +20 -4
  34. package/api/definition/array.js.map +1 -1
  35. package/api/definition/bind.d.ts +5 -2
  36. package/api/definition/bind.js +10 -9
  37. package/api/definition/bind.js.map +1 -1
  38. package/api/definition/comment.d.ts +5 -1
  39. package/api/definition/comment.js +6 -4
  40. package/api/definition/comment.js.map +1 -1
  41. package/api/definition/function.d.ts +26 -10
  42. package/api/definition/function.js +123 -54
  43. package/api/definition/function.js.map +1 -1
  44. package/api/definition/member.d.ts +5 -2
  45. package/api/definition/member.js +19 -7
  46. package/api/definition/member.js.map +1 -1
  47. package/api/definition/object.d.ts +14 -5
  48. package/api/definition/object.js +32 -6
  49. package/api/definition/object.js.map +1 -1
  50. package/api/definition/statement.d.ts +6 -2
  51. package/api/definition/statement.js +11 -2
  52. package/api/definition/statement.js.map +1 -1
  53. package/api/definition/values.d.ts +20 -7
  54. package/api/definition/values.js +37 -9
  55. package/api/definition/values.js.map +1 -1
  56. package/api/deserialize/deserialize.js +3 -3
  57. package/api/deserialize/deserialize.js.map +1 -1
  58. package/api/deserialize/type-store.d.ts +2 -0
  59. package/api/deserialize/type-store.js +2 -0
  60. package/api/deserialize/type-store.js.map +1 -0
  61. package/api/expression.d.ts +27 -5
  62. package/api/expression.js.map +1 -1
  63. package/api/index.d.ts +1 -0
  64. package/api/index.js +1 -0
  65. package/api/index.js.map +1 -1
  66. package/api/module/export.d.ts +7 -2
  67. package/api/module/export.js +15 -1
  68. package/api/module/export.js.map +1 -1
  69. package/api/module/import.d.ts +7 -2
  70. package/api/module/import.js +15 -1
  71. package/api/module/import.js.map +1 -1
  72. package/api/module/module.d.ts +6 -2
  73. package/api/module/module.js +11 -2
  74. package/api/module/module.js.map +1 -1
  75. package/api/operators/assignment.d.ts +2 -1
  76. package/api/operators/assignment.js +4 -0
  77. package/api/operators/assignment.js.map +1 -1
  78. package/api/operators/await.d.ts +6 -2
  79. package/api/operators/await.js +12 -3
  80. package/api/operators/await.js.map +1 -1
  81. package/api/operators/binary.d.ts +2 -1
  82. package/api/operators/binary.js +4 -0
  83. package/api/operators/binary.js.map +1 -1
  84. package/api/operators/chaining.d.ts +5 -2
  85. package/api/operators/chaining.js +9 -2
  86. package/api/operators/chaining.js.map +1 -1
  87. package/api/operators/comma.d.ts +6 -2
  88. package/api/operators/comma.js +11 -2
  89. package/api/operators/comma.js.map +1 -1
  90. package/api/operators/grouping.d.ts +6 -2
  91. package/api/operators/grouping.js +11 -2
  92. package/api/operators/grouping.js.map +1 -1
  93. package/api/operators/logical.d.ts +2 -1
  94. package/api/operators/logical.js +4 -0
  95. package/api/operators/logical.js.map +1 -1
  96. package/api/operators/pipeline.d.ts +6 -2
  97. package/api/operators/pipeline.js +21 -6
  98. package/api/operators/pipeline.js.map +1 -1
  99. package/api/operators/ternary.d.ts +6 -2
  100. package/api/operators/ternary.js +17 -2
  101. package/api/operators/ternary.js.map +1 -1
  102. package/api/operators/unary.d.ts +6 -2
  103. package/api/operators/unary.js +20 -5
  104. package/api/operators/unary.js.map +1 -1
  105. package/api/operators/update.d.ts +6 -2
  106. package/api/operators/update.js +11 -2
  107. package/api/operators/update.js.map +1 -1
  108. package/api/statement/control/block.d.ts +6 -2
  109. package/api/statement/control/block.js +11 -2
  110. package/api/statement/control/block.js.map +1 -1
  111. package/api/statement/control/empty.d.ts +5 -1
  112. package/api/statement/control/empty.js +5 -1
  113. package/api/statement/control/empty.js.map +1 -1
  114. package/api/statement/control/if.d.ts +6 -2
  115. package/api/statement/control/if.js +16 -2
  116. package/api/statement/control/if.js.map +1 -1
  117. package/api/statement/control/switch.d.ts +13 -3
  118. package/api/statement/control/switch.js +35 -9
  119. package/api/statement/control/switch.js.map +1 -1
  120. package/api/statement/control/terminate.d.ts +9 -4
  121. package/api/statement/control/terminate.js +11 -1
  122. package/api/statement/control/terminate.js.map +1 -1
  123. package/api/statement/declarations/declares.d.ts +10 -3
  124. package/api/statement/declarations/declares.js +25 -6
  125. package/api/statement/declarations/declares.js.map +1 -1
  126. package/api/statement/iterations/for.d.ts +18 -5
  127. package/api/statement/iterations/for.js +67 -8
  128. package/api/statement/iterations/for.js.map +1 -1
  129. package/api/statement/iterations/while.d.ts +10 -3
  130. package/api/statement/iterations/while.js +26 -4
  131. package/api/statement/iterations/while.js.map +1 -1
  132. package/index.d.ts +1 -0
  133. package/index.js +1 -0
  134. package/index.js.map +1 -1
  135. package/package.json +12 -4
  136. package/scope/event.d.ts +5 -0
  137. package/scope/event.js +41 -0
  138. package/scope/event.js.map +1 -0
  139. package/scope/index.d.ts +1 -0
  140. package/scope/index.js +1 -0
  141. package/scope/index.js.map +1 -1
  142. package/scope/proxy.d.ts +18 -6
  143. package/scope/proxy.js +57 -9
  144. package/scope/proxy.js.map +1 -1
  145. package/scope/scope.d.ts +71 -61
  146. package/scope/scope.js +104 -52
  147. package/scope/scope.js.map +1 -1
  148. package/scope/stack.d.ts +28 -28
  149. package/scope/stack.js.map +1 -1
  150. package/v8/nodes.d.ts +1 -1
  151. package/v8/parser.d.ts +2 -1
  152. package/v8/parser.js +16 -10
  153. package/v8/parser.js.map +1 -1
  154. package/v8/stream.d.ts +4 -2
  155. package/v8/stream.js +39 -17
  156. package/v8/stream.js.map +1 -1
  157. package/v8/token.d.ts +1 -1
  158. package/v8/token.js.map +1 -1
  159. package/visit/index.d.ts +1 -0
  160. package/visit/index.js +2 -0
  161. package/visit/index.js.map +1 -0
  162. package/visit/visitor.d.ts +11 -0
  163. package/visit/visitor.js +42 -0
  164. package/visit/visitor.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"while.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/while.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode } from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { BreakStatement, ContinueStatement } from '../control/terminate.js';\n\n/**\n * The while statement creates a loop that executes a specified\n * statement as long as the test condition evaluates to true.\n * The condition is evaluated before executing the statement.\n * \n */\n@Deserializer('WhileStatement')\nexport class WhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: WhileNode, deserializer: NodeDeserializer): WhileNode {\n\t\treturn new WhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\twhile (condition) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.test.events();\n\t}\n\ttoString(): string {\n\t\treturn `while (${this.test.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('DoWhileStatement')\nexport class DoWhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: DoWhileNode, deserializer: NodeDeserializer): DoWhileNode {\n\t\treturn new DoWhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\tdo {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} while (this.test.get(stack));\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn `do {${this.body.toString()}} while (${this.test.toString()})`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"while.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/while.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, VisitNodeListType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { BreakStatement, ContinueStatement } from '../control/terminate.js';\n\n/**\n * The while statement creates a loop that executes a specified\n * statement as long as the test condition evaluates to true.\n * The condition is evaluated before executing the statement.\n * \n */\n@Deserializer('WhileStatement')\nexport class WhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: WhileNode, deserializer: NodeDeserializer): WhileNode {\n\t\treturn new WhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: WhileNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.body);\n\t\tvisitNode(node.test);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\twhile (condition) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.body.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.body.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `while (${this.test.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('DoWhileStatement')\nexport class DoWhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: DoWhileNode, deserializer: NodeDeserializer): DoWhileNode {\n\t\treturn new DoWhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: DoWhileNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\tdo {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} while (this.test.get(stack));\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.dependency(computed).concat(this.test.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.dependencyPath(computed).concat(this.test.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `do {${this.body.toString()}} while (${this.test.toString()})`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n"]}
package/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './scope/index.js';
2
2
  export * from './api/index.js';
3
3
  export * from './v8/index.js';
4
+ export * from './visit/index.js';
package/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './scope/index.js';
2
2
  export * from './api/index.js';
3
3
  export * from './v8/index.js';
4
+ export * from './visit/index.js';
4
5
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expressions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC","sourcesContent":["export * from './scope/index.js';\nexport * from './api/index.js';\nexport * from './v8/index.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expressions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './scope/index.js';\nexport * from './api/index.js';\nexport * from './v8/index.js';\nexport * from './visit/index.js';"]}
package/package.json CHANGED
@@ -1,13 +1,21 @@
1
1
  {
2
2
  "name": "@ibyar/expressions",
3
- "version": "0.3.8",
3
+ "version": "0.5.0",
4
4
  "description": "Aurora expression, an template expression evaluation",
5
5
  "license": "MIT",
6
- "homepage": "https://github.com/ibyar/aurora",
6
+ "homepage": "https://github.com/ibyar/aurora/tree/dev/packages/expressions",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/ibyar/aurora.git",
10
+ "directory": "packages/expressions"
11
+ },
7
12
  "main": "./index.js",
8
13
  "module": "./index.js",
9
14
  "types": "./index.d.ts",
10
15
  "type": "module",
16
+ "exports": {
17
+ ".": "./index.js"
18
+ },
11
19
  "files": [
12
20
  "*"
13
21
  ],
@@ -19,7 +27,7 @@
19
27
  "tslib": "^2.3.1"
20
28
  },
21
29
  "devDependencies": {
22
- "typescript": "^4.4.3"
30
+ "typescript": "^4.5.2"
23
31
  },
24
32
  "scripts": {
25
33
  "build": "tsc --build --verbose"
@@ -41,5 +49,5 @@
41
49
  "eval",
42
50
  "evaluation"
43
51
  ],
44
- "gitHead": "6e8f85ae5e22ace13e9846f3960577fea9836190"
52
+ "gitHead": "2b67ab6bafaaf8bf796c2a5de13d745034381dfb"
45
53
  }
@@ -0,0 +1,5 @@
1
+ import { ExpressionEventMap } from '../api/expression.js';
2
+ import { ReactiveScope, Scope, ScopeContext } from './scope.js';
3
+ import { Stack } from './stack.js';
4
+ export declare function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): Map<string, Scope<ScopeContext>>;
5
+ export declare function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): Map<string, ReactiveScope<ScopeContext>>;
package/scope/event.js ADDED
@@ -0,0 +1,41 @@
1
+ import { ReactiveScope } from './scope.js';
2
+ function visitInnerScope(eventNames, events, scope, scopeMap) {
3
+ eventNames.forEach(eventName => {
4
+ if (eventName.startsWith(':')) {
5
+ return;
6
+ }
7
+ scopeMap.set(eventName, scope);
8
+ const nextEvents = Object.keys(events[eventName]);
9
+ if (!nextEvents.length) {
10
+ return;
11
+ }
12
+ const innerScope = scope.getScopeOrCreat(eventName);
13
+ visitInnerScope(nextEvents, events[eventName], innerScope, scopeMap);
14
+ });
15
+ }
16
+ export function findScopeByEventMap(events, stack) {
17
+ const scopeMap = new Map();
18
+ const rootEventNames = Object.keys(events);
19
+ rootEventNames.forEach(eventName => {
20
+ const scope = stack.findScope(eventName);
21
+ scopeMap.set(eventName, scope);
22
+ const nextEvents = Object.keys(events[eventName]);
23
+ if (!nextEvents.length) {
24
+ return;
25
+ }
26
+ const eventScope = scope.getScopeOrCreat(eventName);
27
+ visitInnerScope(nextEvents, events[eventName], eventScope, scopeMap);
28
+ });
29
+ return scopeMap;
30
+ }
31
+ export function findReactiveScopeByEventMap(events, stack) {
32
+ const allScopes = findScopeByEventMap(events, stack);
33
+ const scopeMap = new Map();
34
+ allScopes.forEach((scope, eventName) => {
35
+ if (scope instanceof ReactiveScope) {
36
+ scopeMap.set(eventName, scope);
37
+ }
38
+ });
39
+ return scopeMap;
40
+ }
41
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/expressions/scope/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AAGhE,SAAS,eAAe,CAAC,UAAoB,EAAE,MAA0B,EAAE,KAA0B,EAAE,QAAoC;IAC1I,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC9B,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO;SACP;QACD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACvB,OAAO;SACP;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACpD,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,KAAY;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAe,SAAS,CAAC,CAAC;QACvD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACvB,OAAO;SACP;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAe,SAAS,CAAC,CAAC;QAClE,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA0B,EAAE,KAAY;IACnF,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuC,CAAC;IAChE,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QACtC,IAAI,KAAK,YAAY,aAAa,EAAE;YACnC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC/B;IACF,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AACjB,CAAC","sourcesContent":["import { ExpressionEventMap } from '../api/expression.js';\nimport { ReactiveScope, Scope, ScopeContext } from './scope.js';\nimport { Stack } from './stack.js';\n\nfunction visitInnerScope(eventNames: string[], events: ExpressionEventMap, scope: Scope<ScopeContext>, scopeMap: Map<string, Scope<object>>) {\n\teventNames.forEach(eventName => {\n\t\tif (eventName.startsWith(':')) {\n\t\t\treturn;\n\t\t}\n\t\tscopeMap.set(eventName, scope);\n\t\tconst nextEvents = Object.keys(events[eventName]);\n\t\tif (!nextEvents.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst innerScope = scope.getScopeOrCreat(eventName);\n\t\tvisitInnerScope(nextEvents, events[eventName], innerScope, scopeMap);\n\t});\n}\n\nexport function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): Map<string, Scope<ScopeContext>> {\n\tconst scopeMap = new Map<string, Scope<object>>();\n\tconst rootEventNames = Object.keys(events);\n\trootEventNames.forEach(eventName => {\n\t\tconst scope = stack.findScope<ScopeContext>(eventName);\n\t\tscopeMap.set(eventName, scope);\n\t\tconst nextEvents = Object.keys(events[eventName]);\n\t\tif (!nextEvents.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst eventScope = scope.getScopeOrCreat<ScopeContext>(eventName);\n\t\tvisitInnerScope(nextEvents, events[eventName], eventScope, scopeMap);\n\t});\n\treturn scopeMap;\n}\n\nexport function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): Map<string, ReactiveScope<ScopeContext>> {\n\tconst allScopes = findScopeByEventMap(events, stack);\n\n\tconst scopeMap = new Map<string, ReactiveScope<ScopeContext>>();\n\tallScopes.forEach((scope, eventName) => {\n\t\tif (scope instanceof ReactiveScope) {\n\t\t\tscopeMap.set(eventName, scope);\n\t\t}\n\t});\n\treturn scopeMap;\n}\n"]}
package/scope/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './scope.js';
2
2
  export * from './stack.js';
3
3
  export * from './proxy.js';
4
+ export * from './event.js';
package/scope/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './scope.js';
2
2
  export * from './stack.js';
3
3
  export * from './proxy.js';
4
+ export * from './event.js';
4
5
  //# 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","sourcesContent":["export * from './scope.js';\nexport * from './stack.js';\nexport * from './proxy.js';\n"]}
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';"]}
package/scope/proxy.d.ts CHANGED
@@ -1,11 +1,23 @@
1
- import type { Scope } from './scope.js';
2
- export declare class ScopeProxyHandler implements ProxyHandler<Scope<any>> {
3
- has(target: Scope<any>, propertyKey: PropertyKey): boolean;
4
- get(target: Scope<any>, propertyKey: PropertyKey, receiver: any): any;
5
- set(target: Scope<any>, propertyKey: PropertyKey, value: any, receiver: any): boolean;
1
+ import type { Scope, ScopeContext } from './scope.js';
2
+ export declare class FunctionProxyHandler<T extends Function> implements ProxyHandler<T> {
3
+ private thisContext;
4
+ constructor(thisContext: object);
5
+ apply(targetFunc: T, ignoreThisArg: any, argArray: any[]): any;
6
+ }
7
+ export declare class ScopeProxyHandler<T extends ScopeContext> implements ProxyHandler<ScopeContext> {
8
+ private scope;
9
+ private proxyMap;
10
+ private proxyValueMap;
11
+ private functionHandler;
12
+ constructor(scope: Scope<T>);
13
+ has(model: T, propertyKey: PropertyKey): boolean;
14
+ get(model: T, propertyKey: PropertyKey, receiver: any): any;
15
+ set(model: T, propertyKey: PropertyKey, value: any, receiver: any): boolean;
16
+ deleteProperty(model: T, propertyKey: string | symbol): boolean;
6
17
  }
7
18
  export declare type RevocableProxy<T> = {
8
19
  proxy: T;
9
20
  revoke: () => void;
10
21
  };
11
- export declare function revocableProxyOfScopedContext<T extends Scope<any>>(context: T): RevocableProxy<T>;
22
+ export declare function createRevocableProxyForContext<T extends object>(context: T, scope: Scope<T>): RevocableProxy<T>;
23
+ export declare function createProxyForContext<T extends object>(scope: Scope<T>): T;
package/scope/proxy.js CHANGED
@@ -1,16 +1,64 @@
1
+ export class FunctionProxyHandler {
2
+ constructor(thisContext) {
3
+ this.thisContext = thisContext;
4
+ }
5
+ apply(targetFunc, ignoreThisArg, argArray) {
6
+ return targetFunc.apply(this.thisContext, argArray);
7
+ }
8
+ }
1
9
  export class ScopeProxyHandler {
2
- has(target, propertyKey) {
3
- return target.has(propertyKey);
10
+ constructor(scope) {
11
+ this.scope = scope;
12
+ this.proxyMap = new Map();
13
+ this.proxyValueMap = new WeakMap();
4
14
  }
5
- get(target, propertyKey, receiver) {
6
- return target.get(propertyKey);
15
+ has(model, propertyKey) {
16
+ return this.scope.has(propertyKey);
7
17
  }
8
- set(target, propertyKey, value, receiver) {
9
- return target.set(propertyKey, value);
18
+ get(model, propertyKey, receiver) {
19
+ if (this.proxyMap.has(propertyKey)) {
20
+ return this.proxyMap.get(propertyKey);
21
+ }
22
+ const value = this.scope.get(propertyKey);
23
+ if (typeof value === 'object') {
24
+ const scope = this.scope.getScope(propertyKey);
25
+ if (scope) {
26
+ const proxy = new Proxy(value, new ScopeProxyHandler(scope));
27
+ this.proxyMap.set(propertyKey, proxy);
28
+ this.proxyValueMap.set(proxy, value);
29
+ return proxy;
30
+ }
31
+ }
32
+ else if (typeof value === 'function') {
33
+ const proxy = new Proxy(value, this.functionHandler
34
+ ?? (this.functionHandler = new FunctionProxyHandler(this.scope.getContext())));
35
+ this.proxyMap.set(propertyKey, proxy);
36
+ this.proxyValueMap.set(proxy, value);
37
+ return proxy;
38
+ }
39
+ return value;
10
40
  }
41
+ set(model, propertyKey, value, receiver) {
42
+ if ((typeof value === 'object' || typeof value === 'function') && this.proxyValueMap.has(value)) {
43
+ value = this.proxyValueMap.get(value);
44
+ }
45
+ return this.scope.set(propertyKey, value);
46
+ }
47
+ deleteProperty(model, propertyKey) {
48
+ const isDelete = Reflect.deleteProperty(model, propertyKey);
49
+ if (isDelete) {
50
+ this.scope.set(propertyKey, undefined);
51
+ if (this.proxyMap.has(propertyKey)) {
52
+ this.proxyMap.delete(propertyKey);
53
+ }
54
+ }
55
+ return isDelete;
56
+ }
57
+ }
58
+ export function createRevocableProxyForContext(context, scope) {
59
+ return Proxy.revocable(context, new ScopeProxyHandler(scope));
11
60
  }
12
- const DefaultScopeProxyHandler = new ScopeProxyHandler();
13
- export function revocableProxyOfScopedContext(context) {
14
- return Proxy.revocable(context, DefaultScopeProxyHandler);
61
+ export function createProxyForContext(scope) {
62
+ return new Proxy(scope.getContext(), new ScopeProxyHandler(scope));
15
63
  }
16
64
  //# sourceMappingURL=proxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/expressions/scope/proxy.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,iBAAiB;IAC7B,GAAG,CAAC,MAAkB,EAAE,WAAwB;QAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IACD,GAAG,CAAC,MAAkB,EAAE,WAAwB,EAAE,QAAa;QAC9D,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IACD,GAAG,CAAC,MAAkB,EAAE,WAAwB,EAAE,KAAU,EAAE,QAAa;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;CACD;AAKD,MAAM,wBAAwB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAOzD,MAAM,UAAU,6BAA6B,CAAuB,OAAU;IAC7E,OAAO,KAAK,CAAC,SAAS,CAAI,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import type { Scope } from './scope.js';\n\n/**\n * crete new proxy handler object as scoped context\n */\nexport class ScopeProxyHandler implements ProxyHandler<Scope<any>> {\n\thas(target: Scope<any>, propertyKey: PropertyKey): boolean {\n\t\treturn target.has(propertyKey);\n\t}\n\tget(target: Scope<any>, propertyKey: PropertyKey, receiver: any): any {\n\t\treturn target.get(propertyKey);\n\t}\n\tset(target: Scope<any>, propertyKey: PropertyKey, value: any, receiver: any): boolean {\n\t\treturn target.set(propertyKey, value);\n\t}\n}\n\n/**\n * a default scoped proxy handler is enough\n */\nconst DefaultScopeProxyHandler = new ScopeProxyHandler();\n\nexport type RevocableProxy<T> = {\n\tproxy: T;\n\trevoke: () => void;\n};\n\nexport function revocableProxyOfScopedContext<T extends Scope<any>>(context: T): RevocableProxy<T> {\n\treturn Proxy.revocable<T>(context, DefaultScopeProxyHandler);\n}\n"]}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/expressions/scope/proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope, ScopeContext } from './scope.js';\n\nexport class FunctionProxyHandler<T extends Function> implements ProxyHandler<T> {\n\tconstructor(private thisContext: object) { }\n\tapply(targetFunc: T, ignoreThisArg: any, argArray: any[]): any {\n\t\treturn targetFunc.apply(this.thisContext, argArray);\n\t}\n}\n\n/**\n * crete new proxy handler object as scoped context\n */\nexport class ScopeProxyHandler<T extends ScopeContext> implements ProxyHandler<ScopeContext> {\n\tprivate proxyMap = new Map<PropertyKey, T>();\n\tprivate proxyValueMap = new WeakMap<object, object>();\n\tprivate 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\tif (this.proxyMap.has(propertyKey)) {\n\t\t\treturn this.proxyMap.get(propertyKey);\n\t\t}\n\t\tconst value = this.scope.get(propertyKey);\n\t\tif (typeof value === 'object') {\n\t\t\tconst scope = this.scope.getScope(propertyKey);\n\t\t\tif (scope) {\n\t\t\t\tconst proxy = new Proxy(value, new ScopeProxyHandler(scope));\n\t\t\t\tthis.proxyMap.set(propertyKey, proxy);\n\t\t\t\tthis.proxyValueMap.set(proxy, value);\n\t\t\t\treturn proxy;\n\t\t\t}\n\t\t} else if (typeof value === 'function') {\n\t\t\tconst proxy = new Proxy(value, this.functionHandler\n\t\t\t\t?? (this.functionHandler = new FunctionProxyHandler(this.scope.getContext()))\n\t\t\t);\n\t\t\tthis.proxyMap.set(propertyKey, proxy);\n\t\t\tthis.proxyValueMap.set(proxy, value);\n\t\t\treturn proxy;\n\t\t}\n\t\treturn value;\n\t}\n\tset(model: T, propertyKey: PropertyKey, value: any, receiver: any): boolean {\n\t\tif ((typeof value === 'object' || typeof value === 'function') && this.proxyValueMap.has(value)) {\n\t\t\tvalue = this.proxyValueMap.get(value);\n\t\t}\n\t\treturn this.scope.set(propertyKey, value);\n\t}\n\tdeleteProperty(model: T, propertyKey: string | symbol): boolean {\n\t\tconst isDelete = Reflect.deleteProperty(model, propertyKey);\n\t\tif (isDelete) {\n\t\t\tthis.scope.set(propertyKey, undefined);\n\t\t\tif (this.proxyMap.has(propertyKey)) {\n\t\t\t\tthis.proxyMap.delete(propertyKey);\n\t\t\t}\n\t\t}\n\t\treturn isDelete;\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"]}
package/scope/scope.d.ts CHANGED
@@ -1,76 +1,86 @@
1
1
  export declare type ScopeType = 'block' | 'function' | 'class' | 'module' | 'global';
2
- export interface Scope<T> {
2
+ export declare type ScopeContext = {
3
+ [key: PropertyKey]: ScopeContext | any;
4
+ };
5
+ export interface Scope<T = ScopeContext> {
3
6
  type: ScopeType;
4
- get(propertyKey: PropertyKey): any;
5
- set(propertyKey: PropertyKey, value?: any, receiver?: any): boolean;
6
- has(propertyKey: PropertyKey): boolean;
7
- getContext(): T | undefined;
8
- getScope<V extends object>(propertyKey: PropertyKey): Scope<V> | undefined;
7
+ get(propertyKey: keyof T): any;
8
+ set(propertyKey: keyof T, value?: any, receiver?: any): boolean;
9
+ has(propertyKey: keyof T): boolean;
10
+ delete(propertyKey: keyof T): boolean;
11
+ getContext(): T;
12
+ getScope<V extends ScopeContext>(propertyKey: keyof T): Scope<V> | undefined;
13
+ getScopeOrCreat<V extends ScopeContext>(propertyKey: keyof T): Scope<V>;
9
14
  }
10
- export declare class Scope<T extends object> implements Scope<T> {
15
+ export declare class Scope<T extends ScopeContext> implements Scope<T> {
11
16
  protected context: T;
12
17
  type: ScopeType;
13
- static for<T extends object>(context: T, type: ScopeType): Scope<T>;
14
- static blockScopeFor<T extends object>(context: T): Scope<T>;
15
- static functionScopeFor<T extends object>(context: T): Scope<T>;
16
- static classScopeFor<T extends object>(context: T): Scope<T>;
17
- static moduleScopeFor<T extends object>(context: T): Scope<T>;
18
- static globalScopeFor<T extends object>(context: T): Scope<T>;
19
- static blockScope<T extends object>(): Scope<T>;
20
- static functionScope<T extends object>(): Scope<T>;
21
- static classScope<T extends object>(): Scope<T>;
22
- static moduleScope<T extends object>(): Scope<T>;
23
- static globalScope<T extends object>(): Scope<T>;
24
- protected scopeMap: Map<PropertyKey, Scope<any>>;
18
+ static for<T extends ScopeContext>(context: T, type: ScopeType): Scope<T>;
19
+ static blockScopeFor<T extends ScopeContext>(context: T): Scope<T>;
20
+ static functionScopeFor<T extends ScopeContext>(context: T): Scope<T>;
21
+ static classScopeFor<T extends ScopeContext>(context: T): Scope<T>;
22
+ static moduleScopeFor<T extends ScopeContext>(context: T): Scope<T>;
23
+ static globalScopeFor<T extends ScopeContext>(context: T): Scope<T>;
24
+ static blockScope<T extends ScopeContext>(): Scope<T>;
25
+ static functionScope<T extends ScopeContext>(): Scope<T>;
26
+ static classScope<T extends ScopeContext>(): Scope<T>;
27
+ static moduleScope<T extends ScopeContext>(): Scope<T>;
28
+ static globalScope<T extends ScopeContext>(): Scope<T>;
29
+ protected scopeMap: Map<keyof T, Scope<any>>;
25
30
  constructor(context: T, type: ScopeType);
26
31
  }
27
- export declare class ReadOnlyScope<T extends object> extends Scope<T> {
28
- static for<T extends object>(context: T, type: ScopeType): ReadOnlyScope<T>;
29
- static blockScopeFor<T extends object>(context: T): ReadOnlyScope<T>;
30
- static functionScopeFor<T extends object>(context: T): ReadOnlyScope<T>;
31
- static classScopeFor<T extends object>(context: T): ReadOnlyScope<T>;
32
- static moduleScopeFor<T extends object>(context: T): ReadOnlyScope<T>;
33
- static globalScopeFor<T extends object>(context: T): ReadOnlyScope<T>;
34
- static blockScope<T extends object>(): ReadOnlyScope<T>;
35
- static functionScope<T extends object>(): ReadOnlyScope<T>;
36
- static classScope<T extends object>(): ReadOnlyScope<T>;
37
- static moduleScope<T extends object>(): ReadOnlyScope<T>;
38
- static globalScope<T extends object>(): ReadOnlyScope<T>;
39
- set(propertyKey: PropertyKey, value: any, receiver?: any): boolean;
32
+ export declare class ReadOnlyScope<T extends ScopeContext> extends Scope<T> {
33
+ static for<T extends ScopeContext>(context: T, type: ScopeType): ReadOnlyScope<T>;
34
+ static blockScopeFor<T extends ScopeContext>(context: T): ReadOnlyScope<T>;
35
+ static functionScopeFor<T extends ScopeContext>(context: T): ReadOnlyScope<T>;
36
+ static classScopeFor<T extends ScopeContext>(context: T): ReadOnlyScope<T>;
37
+ static moduleScopeFor<T extends ScopeContext>(context: T): ReadOnlyScope<T>;
38
+ static globalScopeFor<T extends ScopeContext>(context: T): ReadOnlyScope<T>;
39
+ static blockScope<T extends ScopeContext>(): ReadOnlyScope<T>;
40
+ static functionScope<T extends ScopeContext>(): ReadOnlyScope<T>;
41
+ static classScope<T extends ScopeContext>(): ReadOnlyScope<T>;
42
+ static moduleScope<T extends ScopeContext>(): ReadOnlyScope<T>;
43
+ static globalScope<T extends ScopeContext>(): ReadOnlyScope<T>;
44
+ set(propertyKey: keyof T, value: any, receiver?: any): boolean;
45
+ delete(propertyKey: keyof T): boolean;
40
46
  }
41
- declare class Subscription<T> {
47
+ export declare class ScopeSubscription<T> {
48
+ private propertyKey;
42
49
  private observer;
43
- private othersSubscription;
44
- constructor(observer: ValueChangeObserver<T>);
45
- add(subscription: Subscription<any>): void;
50
+ constructor(propertyKey: keyof T, observer: ValueChangeObserver<T>);
46
51
  unsubscribe(): void;
47
52
  }
53
+ export declare type ValueChangedCallback = (newValue: any, oldValue?: any) => void;
48
54
  export declare class ValueChangeObserver<T> {
49
55
  private subscribers;
50
- constructor(name?: string);
51
- emit(propertyKey: PropertyKey, oldValue: any, newValue: any): void;
52
- subscribe(callback: (propertyKey: PropertyKey, oldValue: any, newValue: any) => void): Subscription<T>;
53
- remove(subscription: Subscription<T>): void;
56
+ private propertiesLock;
57
+ emit(propertyKey: keyof T, newValue: any, oldValue?: any): void;
58
+ subscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T>;
59
+ unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>): void;
60
+ destroy(): void;
54
61
  }
55
- export declare class ReactiveScope<T extends object> extends Scope<T> {
56
- protected name?: PropertyKey | undefined;
57
- static for<T extends object>(context: T, type: ScopeType): ReactiveScope<T>;
58
- static blockScopeFor<T extends object>(context: T): ReactiveScope<T>;
59
- static functionScopeFor<T extends object>(context: T): ReactiveScope<T>;
60
- static classScopeFor<T extends object>(context: T): ReactiveScope<T>;
61
- static moduleScopeFor<T extends object>(context: T): ReactiveScope<T>;
62
- static globalScopeFor<T extends object>(context: T): ReactiveScope<T>;
63
- static blockScope<T extends object>(): ReactiveScope<T>;
64
- static functionScope<T extends object>(): ReactiveScope<T>;
65
- static classScope<T extends object>(): ReactiveScope<T>;
66
- static moduleScope<T extends object>(): ReactiveScope<T>;
67
- static globalScope<T extends object>(): ReactiveScope<T>;
68
- private observer;
69
- constructor(context: T, type: ScopeType, name?: PropertyKey | undefined, observer?: ValueChangeObserver<T>);
70
- set(propertyKey: PropertyKey, newValue: any, receiver?: any): boolean;
71
- getScope<V extends object>(propertyKey: PropertyKey): ReactiveScope<V> | undefined;
72
- private getEventName;
73
- subscribe(callback: (propertyKey: PropertyKey, oldValue: any, newValue: any) => void): Subscription<T>;
74
- remove(subscription: Subscription<T>): void;
62
+ export declare class ReactiveScope<T extends ScopeContext> extends Scope<T> {
63
+ protected name?: string | undefined;
64
+ protected parent?: ReactiveScope<any> | undefined;
65
+ static for<T extends ScopeContext>(context: T, type: ScopeType): ReactiveScope<T>;
66
+ static blockScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
67
+ static functionScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
68
+ static classScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
69
+ static moduleScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
70
+ static globalScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
71
+ static blockScope<T extends ScopeContext>(): ReactiveScope<T>;
72
+ static functionScope<T extends ScopeContext>(): ReactiveScope<T>;
73
+ static classScope<T extends ScopeContext>(): ReactiveScope<T>;
74
+ static moduleScope<T extends ScopeContext>(): ReactiveScope<T>;
75
+ static globalScope<T extends ScopeContext>(): ReactiveScope<T>;
76
+ protected observer: ValueChangeObserver<T>;
77
+ constructor(context: T, type: ScopeType);
78
+ constructor(context: T, type: ScopeType, name: string, parent: ReactiveScope<any>);
79
+ set(propertyKey: keyof T, newValue: any, receiver?: any): boolean;
80
+ delete(propertyKey: keyof T): boolean;
81
+ getScope<V extends ScopeContext>(propertyKey: keyof T): ReactiveScope<V> | undefined;
82
+ getScopeOrCreat<V extends ScopeContext>(propertyKey: keyof T): ReactiveScope<V>;
83
+ emit(propertyKey: keyof T, newValue: any, oldValue?: any): void;
84
+ subscribe(propertyKey: keyof T, callback: ValueChangedCallback): ScopeSubscription<T>;
85
+ unsubscribe(propertyKey?: keyof T, subscription?: ScopeSubscription<T>): void;
75
86
  }
76
- export {};