@ibyar/expressions 0.5.4 → 0.6.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 (137) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -0
  3. package/api/abstract.d.ts +3 -3
  4. package/api/abstract.js +7 -2
  5. package/api/abstract.js.map +1 -1
  6. package/api/class/class.d.ts +45 -24
  7. package/api/class/class.js +158 -112
  8. package/api/class/class.js.map +1 -1
  9. package/api/computing/debugger.d.ts +15 -0
  10. package/api/computing/debugger.js +35 -0
  11. package/api/computing/debugger.js.map +1 -0
  12. package/api/computing/rest.d.ts +4 -4
  13. package/api/computing/rest.js.map +1 -1
  14. package/api/computing/return.d.ts +4 -0
  15. package/api/computing/return.js +5 -0
  16. package/api/computing/return.js.map +1 -1
  17. package/api/computing/throw.d.ts +4 -0
  18. package/api/computing/throw.js +4 -0
  19. package/api/computing/throw.js.map +1 -1
  20. package/api/definition/array.d.ts +7 -6
  21. package/api/definition/array.js +20 -14
  22. package/api/definition/array.js.map +1 -1
  23. package/api/definition/bind.d.ts +6 -0
  24. package/api/definition/bind.js +6 -0
  25. package/api/definition/bind.js.map +1 -1
  26. package/api/definition/function.d.ts +35 -46
  27. package/api/definition/function.js +282 -299
  28. package/api/definition/function.js.map +1 -1
  29. package/api/definition/member.js.map +1 -1
  30. package/api/definition/object.d.ts +9 -6
  31. package/api/definition/object.js +35 -5
  32. package/api/definition/object.js.map +1 -1
  33. package/api/definition/statement.js +5 -1
  34. package/api/definition/statement.js.map +1 -1
  35. package/api/definition/values.d.ts +43 -50
  36. package/api/definition/values.js +84 -149
  37. package/api/definition/values.js.map +1 -1
  38. package/api/deserialize/deserialize.d.ts +7 -1
  39. package/api/deserialize/deserialize.js +9 -1
  40. package/api/deserialize/deserialize.js.map +1 -1
  41. package/api/deserialize/type-store.d.ts +2 -2
  42. package/api/deserialize/type-store.js.map +1 -1
  43. package/api/expression.d.ts +156 -12
  44. package/api/expression.js.map +1 -1
  45. package/api/index.d.ts +2 -0
  46. package/api/index.js +2 -0
  47. package/api/index.js.map +1 -1
  48. package/api/module/common.d.ts +29 -0
  49. package/api/module/common.js +71 -0
  50. package/api/module/common.js.map +1 -0
  51. package/api/module/export.d.ts +78 -9
  52. package/api/module/export.js +120 -15
  53. package/api/module/export.js.map +1 -1
  54. package/api/module/import.d.ts +56 -8
  55. package/api/module/import.js +62 -19
  56. package/api/module/import.js.map +1 -1
  57. package/api/operators/grouping.d.ts +7 -0
  58. package/api/operators/grouping.js +7 -0
  59. package/api/operators/grouping.js.map +1 -1
  60. package/api/operators/pipeline.d.ts +12 -0
  61. package/api/operators/pipeline.js +12 -0
  62. package/api/operators/pipeline.js.map +1 -1
  63. package/api/operators/unary.js +3 -0
  64. package/api/operators/unary.js.map +1 -1
  65. package/api/{module/app/program.d.ts → program.d.ts} +5 -5
  66. package/api/{module/app/program.js → program.js} +3 -3
  67. package/api/program.js.map +1 -0
  68. package/api/statement/control/block.d.ts +5 -2
  69. package/api/statement/control/block.js +24 -21
  70. package/api/statement/control/block.js.map +1 -1
  71. package/api/statement/control/empty.d.ts +7 -0
  72. package/api/statement/control/empty.js +7 -0
  73. package/api/statement/control/empty.js.map +1 -1
  74. package/api/statement/control/if.d.ts +5 -0
  75. package/api/statement/control/if.js +5 -0
  76. package/api/statement/control/if.js.map +1 -1
  77. package/api/statement/control/switch.d.ts +6 -0
  78. package/api/statement/control/switch.js +17 -3
  79. package/api/statement/control/switch.js.map +1 -1
  80. package/api/statement/control/terminate.d.ts +44 -11
  81. package/api/statement/control/terminate.js +87 -18
  82. package/api/statement/control/terminate.js.map +1 -1
  83. package/api/statement/declarations/declares.d.ts +7 -7
  84. package/api/statement/declarations/declares.js +1 -1
  85. package/api/statement/declarations/declares.js.map +1 -1
  86. package/api/statement/iterations/for.d.ts +5 -0
  87. package/api/statement/iterations/for.js +35 -16
  88. package/api/statement/iterations/for.js.map +1 -1
  89. package/api/statement/iterations/while.d.ts +6 -0
  90. package/api/statement/iterations/while.js +25 -11
  91. package/api/statement/iterations/while.js.map +1 -1
  92. package/api/utils.d.ts +2 -0
  93. package/api/utils.js +3 -1
  94. package/api/utils.js.map +1 -1
  95. package/package.json +7 -5
  96. package/scope/event.d.ts +3 -3
  97. package/scope/event.js +2 -2
  98. package/scope/event.js.map +1 -1
  99. package/scope/pool.d.ts +7 -0
  100. package/scope/pool.js +29 -0
  101. package/scope/pool.js.map +1 -0
  102. package/scope/proxy.d.ts +6 -11
  103. package/scope/proxy.js +23 -52
  104. package/scope/proxy.js.map +1 -1
  105. package/scope/scope.d.ts +161 -38
  106. package/scope/scope.js +260 -106
  107. package/scope/scope.js.map +1 -1
  108. package/scope/stack.d.ts +97 -21
  109. package/scope/stack.js +13 -0
  110. package/scope/stack.js.map +1 -1
  111. package/v8/enums.d.ts +204 -0
  112. package/v8/enums.js +406 -0
  113. package/v8/enums.js.map +1 -0
  114. package/v8/index.d.ts +2 -1
  115. package/v8/index.js +2 -1
  116. package/v8/index.js.map +1 -1
  117. package/v8/inline.d.ts +213 -0
  118. package/v8/inline.js +2375 -0
  119. package/v8/inline.js.map +1 -0
  120. package/v8/nodes.d.ts +8 -7
  121. package/v8/nodes.js +39 -64
  122. package/v8/nodes.js.map +1 -1
  123. package/v8/parser.d.ts +49 -151
  124. package/v8/parser.js +839 -1608
  125. package/v8/parser.js.map +1 -1
  126. package/v8/stream.d.ts +39 -3
  127. package/v8/stream.js +685 -171
  128. package/v8/stream.js.map +1 -1
  129. package/v8/token.d.ts +244 -9
  130. package/v8/token.js +315 -47
  131. package/v8/token.js.map +1 -1
  132. package/visit/visitor.d.ts +3 -0
  133. package/visit/visitor.js.map +1 -1
  134. package/api/module/app/program.js.map +0 -1
  135. package/v8/app.d.ts +0 -0
  136. package/v8/app.js +0 -2
  137. package/v8/app.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\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';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update)\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t\tthis.test?.shareVariables(scopeList);\n\t\tthis.update?.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\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(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\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\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\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\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\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 { TerminateReturnType } from '../control/terminate.js';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update)\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t\tthis.test?.shareVariables(scopeList);\n\t\tthis.update?.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\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 (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\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 (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\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 (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
@@ -2,6 +2,12 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
2
2
  import type { Scope } from '../../../scope/scope.js';
3
3
  import type { Stack } from '../../../scope/stack.js';
4
4
  import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
5
+ /**
6
+ * The while statement creates a loop that executes a specified
7
+ * statement as long as the test condition evaluates to true.
8
+ * The condition is evaluated before executing the statement.
9
+ *
10
+ */
5
11
  export declare class WhileNode extends AbstractExpressionNode {
6
12
  private test;
7
13
  private body;
@@ -2,7 +2,13 @@ var WhileNode_1, DoWhileNode_1;
2
2
  import { __decorate, __metadata } from "tslib";
3
3
  import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
4
4
  import { Deserializer } from '../../deserialize/deserialize.js';
5
- import { BreakStatement, ContinueStatement } from '../control/terminate.js';
5
+ import { TerminateReturnType } from '../control/terminate.js';
6
+ /**
7
+ * The while statement creates a loop that executes a specified
8
+ * statement as long as the test condition evaluates to true.
9
+ * The condition is evaluated before executing the statement.
10
+ *
11
+ */
6
12
  let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
7
13
  constructor(test, body) {
8
14
  super();
@@ -34,11 +40,15 @@ let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
34
40
  const whileBlock = stack.pushBlockScope();
35
41
  while (condition) {
36
42
  const result = this.body.get(stack);
37
- if (ContinueStatement.ContinueSymbol === result) {
38
- continue;
39
- }
40
- if (BreakStatement.BreakSymbol === result) {
41
- break;
43
+ // useless case, as it at the end of for statement
44
+ // an array/block statement, should return last signal
45
+ if (result instanceof TerminateReturnType) {
46
+ if (result.type === 'continue') {
47
+ continue;
48
+ }
49
+ else {
50
+ break;
51
+ }
42
52
  }
43
53
  if (result instanceof ReturnValue) {
44
54
  stack.clearTo(whileBlock);
@@ -99,11 +109,15 @@ let DoWhileNode = DoWhileNode_1 = class DoWhileNode extends AbstractExpressionNo
99
109
  const whileBlock = stack.pushBlockScope();
100
110
  do {
101
111
  const result = this.body.get(stack);
102
- if (ContinueStatement.ContinueSymbol === result) {
103
- continue;
104
- }
105
- if (BreakStatement.BreakSymbol === result) {
106
- break;
112
+ // useless case, as it at the end of for statement
113
+ // an array/block statement, should return last signal
114
+ if (result instanceof TerminateReturnType) {
115
+ if (result.type === 'continue') {
116
+ continue;
117
+ }
118
+ else {
119
+ break;
120
+ }
107
121
  }
108
122
  if (result instanceof ReturnValue) {
109
123
  stack.clearTo(whileBlock);
@@ -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 {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\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): 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): 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"]}
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,\n\tExpressionEventPath, VisitNodeType\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 { TerminateReturnType } 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): 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 (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\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): 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 (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\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/api/utils.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { DeclarationExpression, ExpressionNode } from './expression.js';
1
2
  export interface TypeOf<T> {
2
3
  new (...params: any[]): T;
3
4
  }
5
+ export declare function isDeclarationExpression(node: ExpressionNode): node is DeclarationExpression;
package/api/utils.js CHANGED
@@ -1,2 +1,4 @@
1
- export {};
1
+ export function isDeclarationExpression(node) {
2
+ return typeof node.declareVariable === 'function';
3
+ }
2
4
  //# sourceMappingURL=utils.js.map
package/api/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/expressions/api/utils.ts"],"names":[],"mappings":"","sourcesContent":["export interface TypeOf<T> {\n\tnew(...params: any[]): T;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/expressions/api/utils.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC3D,OAAO,OAAQ,IAAY,CAAC,eAAe,KAAK,UAAU,CAAC;AAC5D,CAAC","sourcesContent":["import { DeclarationExpression, ExpressionNode } from './expression.js';\n\nexport interface TypeOf<T> {\n\tnew(...params: any[]): T;\n}\n\n\nexport function isDeclarationExpression(node: ExpressionNode): node is DeclarationExpression {\n\treturn typeof (node as any).declareVariable === 'function';\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ibyar/expressions",
3
- "version": "0.5.4",
4
- "description": "Aurora expression, an template expression evaluation",
3
+ "version": "0.6.0",
4
+ "description": "Aurora expression, an template expression and evaluation, An 100% spec compliant ES2022 JavaScript toolchain,",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ibyar/aurora/tree/dev/packages/expressions",
7
7
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "tslib": "^2.4.0"
28
28
  },
29
29
  "devDependencies": {
30
- "typescript": "^4.6.4"
30
+ "typescript": "^4.7.4"
31
31
  },
32
32
  "scripts": {
33
33
  "build": "tsc --build --verbose"
@@ -47,7 +47,9 @@
47
47
  "expression",
48
48
  "js",
49
49
  "eval",
50
- "evaluation"
50
+ "evaluation",
51
+ "backend",
52
+ "front-end"
51
53
  ],
52
- "gitHead": "0e62f914850836abc384d26c9f94a7b8389a2c0d"
54
+ "gitHead": "543b42bc87e268480e497c5e25c0215641d2c252"
53
55
  }
package/scope/event.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ExpressionEventMap } from '../api/expression.js';
2
- import { ReactiveScope, Scope, ScopeContext } from './scope.js';
2
+ import { ReactiveScope, Scope, Context } from './scope.js';
3
3
  import { Stack } from './stack.js';
4
- export declare function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<ScopeContext>][];
5
- export declare function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<ScopeContext>][];
4
+ export declare function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<Context>][];
5
+ export declare function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<Context>][];
package/scope/event.js CHANGED
@@ -9,7 +9,7 @@ function visitInnerScope(eventNames, events, scope, scopeTuples) {
9
9
  if (!nextEvents.length) {
10
10
  return;
11
11
  }
12
- const innerScope = scope.getScopeOrCreat(eventName);
12
+ const innerScope = scope.getInnerScope(eventName) ?? scope.setInnerScope(eventName);
13
13
  visitInnerScope(nextEvents, events[eventName], innerScope, scopeTuples);
14
14
  });
15
15
  }
@@ -23,7 +23,7 @@ export function findScopeByEventMap(events, stack) {
23
23
  if (!nextEvents.length) {
24
24
  return;
25
25
  }
26
- const eventScope = scope.getScopeOrCreat(eventName);
26
+ const eventScope = scope.getInnerScope(eventName) ?? scope.setInnerScope(eventName);
27
27
  visitInnerScope(nextEvents, events[eventName], eventScope, scopeTuples);
28
28
  });
29
29
  return scopeTuples;
@@ -1 +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,WAA4C;IAClJ,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC9B,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO;SACP;QACD,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,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,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,KAAY;IAC3E,MAAM,WAAW,GAAoC,EAAE,CAAC;IACxD,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,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,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,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA0B,EAAE,KAAY;IACnF,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,aAAa,CAA4C,CAAC;AAChH,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>, scopeTuples: [string, Scope<ScopeContext>][]) {\n\teventNames.forEach(eventName => {\n\t\tif (eventName.startsWith(':')) {\n\t\t\treturn;\n\t\t}\n\t\tscopeTuples.push([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, scopeTuples);\n\t});\n}\n\nexport function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<ScopeContext>][] {\n\tconst scopeTuples: [string, Scope<ScopeContext>][] = [];\n\tconst rootEventNames = Object.keys(events);\n\trootEventNames.forEach(eventName => {\n\t\tconst scope = stack.findScope<ScopeContext>(eventName);\n\t\tscopeTuples.push([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, scopeTuples);\n\t});\n\treturn scopeTuples;\n}\n\nexport function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<ScopeContext>][] {\n\tconst allScopes = findScopeByEventMap(events, stack);\n\treturn allScopes.filter(tuple => tuple[1] instanceof ReactiveScope) as [string, ReactiveScope<ScopeContext>][];\n}\n"]}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/expressions/scope/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAC;AAG3D,SAAS,eAAe,CAAC,UAAoB,EAAE,MAA0B,EAAE,KAAqB,EAAE,WAAuC;IACxI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC9B,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO;SACP;QACD,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,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,aAAa,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpF,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,KAAY;IAC3E,MAAM,WAAW,GAA+B,EAAE,CAAC;IACnD,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,CAAU,SAAS,CAAC,CAAC;QAClD,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,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,aAAa,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpF,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA0B,EAAE,KAAY;IACnF,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,aAAa,CAAuC,CAAC;AAC3G,CAAC","sourcesContent":["import { ExpressionEventMap } from '../api/expression.js';\nimport { ReactiveScope, Scope, Context } from './scope.js';\nimport { Stack } from './stack.js';\n\nfunction visitInnerScope(eventNames: string[], events: ExpressionEventMap, scope: Scope<Context>, scopeTuples: [string, Scope<Context>][]) {\n\teventNames.forEach(eventName => {\n\t\tif (eventName.startsWith(':')) {\n\t\t\treturn;\n\t\t}\n\t\tscopeTuples.push([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.getInnerScope(eventName) ?? scope.setInnerScope(eventName);\n\t\tvisitInnerScope(nextEvents, events[eventName], innerScope, scopeTuples);\n\t});\n}\n\nexport function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<Context>][] {\n\tconst scopeTuples: [string, Scope<Context>][] = [];\n\tconst rootEventNames = Object.keys(events);\n\trootEventNames.forEach(eventName => {\n\t\tconst scope = stack.findScope<Context>(eventName);\n\t\tscopeTuples.push([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.getInnerScope(eventName) ?? scope.setInnerScope(eventName);\n\t\tvisitInnerScope(nextEvents, events[eventName], eventScope, scopeTuples);\n\t});\n\treturn scopeTuples;\n}\n\nexport function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<Context>][] {\n\tconst allScopes = findScopeByEventMap(events, stack);\n\treturn allScopes.filter(tuple => tuple[1] instanceof ReactiveScope) as [string, ReactiveScope<Context>][];\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ReactiveScope, ReactiveScopeControl, ReadOnlyScope, Scope } from './scope.js';
2
+ export declare type ScopeType = 'scope' | 'read-only' | 'reactive' | 'reactive-control';
3
+ export declare function getScopeFor<S extends Scope<T>, T extends object>(ctx: T): S | undefined;
4
+ export declare function getScopeFor<T extends object>(ctx: T, type: 'scope', propertyKeys?: (keyof T)[]): Scope<T>;
5
+ export declare function getScopeFor<T extends object>(ctx: T, type: 'read-only', propertyKeys?: (keyof T)[]): ReadOnlyScope<T>;
6
+ export declare function getScopeFor<T extends object>(ctx: T, type: 'reactive', propertyKeys?: (keyof T)[]): ReactiveScope<T>;
7
+ export declare function getScopeFor<T extends object>(ctx: T, type: 'reactive-control', propertyKeys?: (keyof T)[]): ReactiveScopeControl<T>;
package/scope/pool.js ADDED
@@ -0,0 +1,29 @@
1
+ import { ReactiveScope, ReactiveScopeControl, ReadOnlyScope, Scope } from './scope.js';
2
+ const pool = new WeakMap();
3
+ export function getScopeFor(ctx, type, propertyKeys) {
4
+ if (pool.has(ctx)) {
5
+ return pool.get(ctx);
6
+ }
7
+ if (!type) {
8
+ return;
9
+ }
10
+ let scope;
11
+ switch (type) {
12
+ case 'read-only':
13
+ scope = ReadOnlyScope.for(ctx, propertyKeys);
14
+ break;
15
+ case 'reactive':
16
+ scope = ReactiveScope.for(ctx, propertyKeys);
17
+ break;
18
+ case 'reactive-control':
19
+ scope = ReactiveScopeControl.for(ctx, propertyKeys);
20
+ break;
21
+ default:
22
+ case 'scope':
23
+ scope = Scope.for(ctx, propertyKeys);
24
+ break;
25
+ }
26
+ pool.set(ctx, scope);
27
+ return scope;
28
+ }
29
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +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"]}
package/scope/proxy.d.ts CHANGED
@@ -1,15 +1,10 @@
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, targetThisArg: any, argArray: any[]): any;
6
- private computeThisArg;
7
- }
8
- export declare class ScopeProxyHandler<T extends ScopeContext> implements ProxyHandler<ScopeContext> {
1
+ import type { Scope, Context } from './scope.js';
2
+ export declare function hasBindingHook<T>(ctx: T): boolean;
3
+ /**
4
+ * crete new proxy handler object as scoped context
5
+ */
6
+ export declare class ScopeProxyHandler<T extends Context> implements ProxyHandler<Context> {
9
7
  private scope;
10
- private proxyMap;
11
- private proxyValueMap;
12
- private functionHandler;
13
8
  constructor(scope: Scope<T>);
14
9
  has(model: T, propertyKey: PropertyKey): boolean;
15
10
  get(model: T, propertyKey: PropertyKey, receiver: any): any;
package/scope/proxy.js CHANGED
@@ -1,74 +1,45 @@
1
- export class FunctionProxyHandler {
2
- constructor(thisContext) {
3
- this.thisContext = thisContext;
4
- }
5
- apply(targetFunc, targetThisArg, argArray) {
6
- return targetFunc.apply(this.computeThisArg(targetThisArg), argArray);
7
- }
8
- computeThisArg(targetThisArg) {
9
- switch (true) {
10
- case this.thisContext instanceof Map:
11
- case this.thisContext instanceof Set:
12
- case this.thisContext instanceof Date:
13
- case this.thisContext instanceof WeakMap:
14
- case this.thisContext instanceof WeakSet:
15
- case this.thisContext instanceof Promise:
16
- return this.thisContext;
17
- default:
18
- return targetThisArg;
19
- }
1
+ export function hasBindingHook(ctx) {
2
+ switch (true) {
3
+ // exclude classes that have binding hook
4
+ case ctx instanceof Map:
5
+ case ctx instanceof Set:
6
+ case ctx instanceof Date:
7
+ case ctx instanceof WeakMap:
8
+ case ctx instanceof WeakSet:
9
+ case ctx instanceof Promise:
10
+ case HTMLElement && ctx instanceof HTMLElement:
11
+ return true;
12
+ default:
13
+ return false;
20
14
  }
21
15
  }
16
+ /**
17
+ * crete new proxy handler object as scoped context
18
+ */
22
19
  export class ScopeProxyHandler {
20
+ // private functionHandler: FunctionProxyHandler<Function>;
23
21
  constructor(scope) {
24
22
  this.scope = scope;
25
- this.proxyMap = new Map();
26
- this.proxyValueMap = new WeakMap();
27
23
  }
28
24
  has(model, propertyKey) {
29
25
  return this.scope.has(propertyKey);
30
26
  }
31
27
  get(model, propertyKey, receiver) {
32
- if (this.proxyMap.has(propertyKey)) {
33
- return this.proxyMap.get(propertyKey);
34
- }
35
28
  const value = this.scope.get(propertyKey);
36
- if (value == null) {
29
+ if (!(value && typeof value === 'object')) {
37
30
  return value;
38
31
  }
39
- if (typeof value === 'object') {
40
- const scope = this.scope.getScope(propertyKey);
41
- if (scope) {
42
- const proxy = new Proxy(value, new ScopeProxyHandler(scope));
43
- this.proxyMap.set(propertyKey, proxy);
44
- this.proxyValueMap.set(proxy, value);
45
- return proxy;
46
- }
47
- }
48
- else if (typeof value === 'function') {
49
- const proxy = new Proxy(value, this.functionHandler
50
- ?? (this.functionHandler = new FunctionProxyHandler(this.scope.getContext())));
51
- this.proxyMap.set(propertyKey, proxy);
52
- this.proxyValueMap.set(proxy, value);
53
- return proxy;
32
+ const scope = this.scope.getInnerScope(propertyKey);
33
+ if (!scope) {
34
+ return value;
54
35
  }
55
- return value;
36
+ return createProxyForContext(scope);
56
37
  }
57
38
  set(model, propertyKey, value, receiver) {
58
- if ((typeof value === 'object' || typeof value === 'function') && this.proxyValueMap.has(value)) {
59
- value = this.proxyValueMap.get(value);
60
- }
61
39
  return this.scope.set(propertyKey, value);
62
40
  }
63
41
  deleteProperty(model, propertyKey) {
64
- const isDelete = Reflect.deleteProperty(model, propertyKey);
65
- if (isDelete) {
66
- this.scope.set(propertyKey, undefined);
67
- if (this.proxyMap.has(propertyKey)) {
68
- this.proxyMap.delete(propertyKey);
69
- }
70
- }
71
- return isDelete;
42
+ return this.scope.delete(propertyKey);
72
43
  }
73
44
  }
74
45
  export function createRevocableProxyForContext(context, scope) {
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/expressions/scope/proxy.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IAChC,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAI,CAAC;IAC5C,KAAK,CAAC,UAAa,EAAE,aAAkB,EAAE,QAAe;QACvD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAEO,cAAc,CAAC,aAAkB;QACxC,QAAQ,IAAI,EAAE;YACb,KAAK,IAAI,CAAC,WAAW,YAAY,GAAG,CAAC;YACrC,KAAK,IAAI,CAAC,WAAW,YAAY,GAAG,CAAC;YACrC,KAAK,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC;YACtC,KAAK,IAAI,CAAC,WAAW,YAAY,OAAO,CAAC;YACzC,KAAK,IAAI,CAAC,WAAW,YAAY,OAAO,CAAC;YACzC,KAAK,IAAI,CAAC,WAAW,YAAY,OAAO;gBACvC,OAAO,IAAI,CAAC,WAAW,CAAC;YACzB;gBACC,OAAO,aAAa,CAAC;SACtB;IACF,CAAC;CACD;AAKD,MAAM,OAAO,iBAAiB;IAI7B,YAAoB,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;QAH3B,aAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrC,kBAAa,GAAG,IAAI,OAAO,EAAkB,CAAC;IAEf,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,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,IAAI,EAAE;YAClB,OAAO,KAAK,CAAC;SACb;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,KAAK,EAAE;gBACV,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACrC,OAAO,KAAK,CAAC;aACb;SACD;aAAM,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe;mBAC/C,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAC7E,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,GAAG,CAAC,KAAQ,EAAE,WAAwB,EAAE,KAAU,EAAE,QAAa;QAChE,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACtC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,cAAc,CAAC,KAAQ,EAAE,WAA4B;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;aAClC;SACD;QACD,OAAO,QAAQ,CAAC;IACjB,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, ScopeContext } from './scope.js';\n\nexport class FunctionProxyHandler<T extends Function> implements ProxyHandler<T> {\n\tconstructor(private thisContext: object) { }\n\tapply(targetFunc: T, targetThisArg: any, argArray: any[]): any {\n\t\treturn targetFunc.apply(this.computeThisArg(targetThisArg), argArray);\n\t}\n\n\tprivate computeThisArg(targetThisArg: any): any {\n\t\tswitch (true) {\n\t\t\tcase this.thisContext instanceof Map:\n\t\t\tcase this.thisContext instanceof Set:\n\t\t\tcase this.thisContext instanceof Date:\n\t\t\tcase this.thisContext instanceof WeakMap:\n\t\t\tcase this.thisContext instanceof WeakSet:\n\t\t\tcase this.thisContext instanceof Promise:\n\t\t\t\treturn this.thisContext;\n\t\t\tdefault:\n\t\t\t\treturn targetThisArg;\n\t\t}\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 (value == null) {\n\t\t\treturn value;\n\t\t}\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"]}
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,KAAK,WAAW,IAAI,GAAG,YAAY,WAAW;YAC7C,OAAO,IAAI,CAAC;QACb;YACC,OAAO,KAAK,CAAC;KACd;AACF,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC7B,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\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"]}