@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
@@ -11,17 +11,26 @@ let ArrayExpression = ArrayExpression_1 = class ArrayExpression extends Abstract
11
11
  static fromJSON(node, deserializer) {
12
12
  return new ArrayExpression_1(node.elements.map(expression => deserializer(expression)));
13
13
  }
14
+ static visit(node, visitNode, visitNodeList) {
15
+ visitNodeList(node.elements);
16
+ }
14
17
  getElements() {
15
18
  return this.elements;
16
19
  }
20
+ shareVariables(scopeList) {
21
+ this.elements.forEach(item => item.shareVariables(scopeList));
22
+ }
17
23
  set(stack) {
18
24
  throw new Error("ArrayExpression#set() has no implementation.");
19
25
  }
20
26
  get(stack) {
21
27
  return this.elements.map(item => item.get(stack));
22
28
  }
23
- events(parent) {
24
- return this.elements.flatMap(item => item.events());
29
+ dependency(computed) {
30
+ return this.elements.flatMap(item => item.dependency(computed));
31
+ }
32
+ dependencyPath(computed) {
33
+ return this.elements.flatMap(item => item.dependencyPath(computed));
25
34
  }
26
35
  toString() {
27
36
  return this.elements.map(item => item.toString()).toString();
@@ -45,9 +54,13 @@ let ArrayPattern = ArrayPattern_1 = class ArrayPattern extends AbstractExpressio
45
54
  static fromJSON(node, deserializer) {
46
55
  return new ArrayPattern_1(node.elements.map(expression => deserializer(expression)));
47
56
  }
57
+ static visit(node, visitNode, visitNodeList) {
58
+ visitNodeList(node.elements);
59
+ }
48
60
  getElements() {
49
61
  return this.elements;
50
62
  }
63
+ shareVariables(scopeList) { }
51
64
  set(stack, values) {
52
65
  throw new Error('ArrayPattern#set() has no implementation.');
53
66
  }
@@ -96,8 +109,11 @@ let ArrayPattern = ArrayPattern_1 = class ArrayPattern extends AbstractExpressio
96
109
  }
97
110
  }
98
111
  }
99
- events(parent) {
100
- return this.elements.flatMap(item => item.events());
112
+ dependency(computed) {
113
+ return this.elements.flatMap(item => item.dependency(computed));
114
+ }
115
+ dependencyPath(computed) {
116
+ return this.elements.flatMap(item => item.dependencyPath(computed));
101
117
  }
102
118
  toString() {
103
119
  return this.elements.map(item => item.toString()).toString();
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/array.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanDeclareExpression } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { RestElement } from '../computing/rest.js';\nimport { ScopeType } from '../../scope/scope.js';\n\n@Deserializer('ArrayExpression')\nexport class ArrayExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ArrayExpression, deserializer: NodeDeserializer): ArrayExpression {\n\t\treturn new ArrayExpression(node.elements.map(expression => deserializer(expression)));\n\t}\n\tconstructor(private elements: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(\"ArrayExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack) {\n\t\treturn this.elements.map(item => item.get(stack));\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.elements.flatMap(item => item.events());\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n\n@Deserializer('ArrayPattern')\nexport class ArrayPattern extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: ArrayPattern, deserializer: NodeDeserializer): ArrayPattern {\n\t\treturn new ArrayPattern(node.elements.map(expression => deserializer(expression)) as CanDeclareExpression[]);\n\t}\n\tconstructor(private elements: CanDeclareExpression[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tset(stack: Stack, values: any) {\n\t\tthrow new Error('ArrayPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack) {\n\t\tthrow new Error('ArrayPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, values: any) {\n\t\tif (Array.isArray(values)) {\n\t\t\tthis.declareVariableFromArray(stack, scopeType, values);\n\t\t} else if (Reflect.has(values, Symbol.iterator)) {\n\t\t\tthis.declareVariableFromIterator(stack, scopeType, values);\n\t\t}\n\t}\n\tdeclareVariableFromArray(stack: Stack, scopeType: ScopeType, values: any[]) {\n\t\tfor (let index = 0; index < this.elements.length; index++) {\n\t\t\tconst elem = this.elements[index];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = values.slice(index);\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', values[index]);\n\t\t}\n\t}\n\tdeclareVariableFromIterator(stack: Stack, scopeType: ScopeType, iterator: Iterator<any>) {\n\t\tlet index = 0;\n\t\twhile (true) {\n\t\t\tlet iteratorResult = iterator.next();\n\t\t\tif (iteratorResult.done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst elem = this.elements[index++];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = [iteratorResult.value];\n\t\t\t\twhile (!iteratorResult.done) {\n\t\t\t\t\titeratorResult = iterator.next();\n\t\t\t\t\trest.push(iteratorResult.value);\n\t\t\t\t}\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', iteratorResult.value);\n\t\t\tif (index >= this.elements.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.elements.flatMap(item => item.events());\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/array.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, CanDeclareExpression,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { RestElement } from '../computing/rest.js';\nimport { ScopeType } from '../../scope/scope.js';\n\n@Deserializer('ArrayExpression')\nexport class ArrayExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ArrayExpression, deserializer: NodeDeserializer): ArrayExpression {\n\t\treturn new ArrayExpression(node.elements.map(expression => deserializer(expression)));\n\t}\n\tstatic visit(node: ArrayExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.elements);\n\t}\n\tconstructor(private elements: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.elements.forEach(item => item.shareVariables(scopeList));\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(\"ArrayExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack) {\n\t\treturn this.elements.map(item => item.get(stack));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n\n@Deserializer('ArrayPattern')\nexport class ArrayPattern extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: ArrayPattern, deserializer: NodeDeserializer): ArrayPattern {\n\t\treturn new ArrayPattern(node.elements.map(expression => deserializer(expression)) as CanDeclareExpression[]);\n\t}\n\tstatic visit(node: ArrayPattern, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.elements);\n\t}\n\tconstructor(private elements: CanDeclareExpression[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, values: any) {\n\t\tthrow new Error('ArrayPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack) {\n\t\tthrow new Error('ArrayPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, values: any) {\n\t\tif (Array.isArray(values)) {\n\t\t\tthis.declareVariableFromArray(stack, scopeType, values);\n\t\t} else if (Reflect.has(values, Symbol.iterator)) {\n\t\t\tthis.declareVariableFromIterator(stack, scopeType, values);\n\t\t}\n\t}\n\tdeclareVariableFromArray(stack: Stack, scopeType: ScopeType, values: any[]) {\n\t\tfor (let index = 0; index < this.elements.length; index++) {\n\t\t\tconst elem = this.elements[index];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = values.slice(index);\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', values[index]);\n\t\t}\n\t}\n\tdeclareVariableFromIterator(stack: Stack, scopeType: ScopeType, iterator: Iterator<any>) {\n\t\tlet index = 0;\n\t\twhile (true) {\n\t\t\tlet iteratorResult = iterator.next();\n\t\t\tif (iteratorResult.done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst elem = this.elements[index++];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = [iteratorResult.value];\n\t\t\t\twhile (!iteratorResult.done) {\n\t\t\t\t\titeratorResult = iterator.next();\n\t\t\t\t\trest.push(iteratorResult.value);\n\t\t\t\t}\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', iteratorResult.value);\n\t\t\tif (index >= this.elements.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanFindScope } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../expression.js';
2
2
  import type { Scope } from '../../scope/scope.js';
3
3
  import type { Stack } from '../../scope/stack.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
@@ -8,14 +8,17 @@ export declare class BindExpression extends AbstractExpressionNode implements Ca
8
8
  private computed;
9
9
  private optional;
10
10
  static fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression;
11
+ static visit(node: BindExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
12
  constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean);
12
13
  getObject(): ExpressionNode;
13
14
  getProperty(): ExpressionNode;
15
+ shareVariables(scopeList: Scope<any>[]): void;
14
16
  set(stack: Stack): void;
15
17
  get(stack: Stack, thisContext?: any): any;
16
18
  findScope<T extends object>(stack: Stack): Scope<T>;
17
19
  findScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;
18
- events(parent?: string): string[];
20
+ dependency(computed?: true): ExpressionNode[];
21
+ dependencyPath(computed?: true): ExpressionEventPath[];
19
22
  toString(): string;
20
23
  toJson(): object;
21
24
  }
@@ -13,12 +13,17 @@ let BindExpression = BindExpression_1 = class BindExpression extends AbstractExp
13
13
  static fromJSON(node, deserializer) {
14
14
  return new BindExpression_1(deserializer(node.object), deserializer(node.property), node.computed, node.optional);
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.object);
18
+ visitNode(node.property);
19
+ }
16
20
  getObject() {
17
21
  return this.object;
18
22
  }
19
23
  getProperty() {
20
24
  return this.property;
21
25
  }
26
+ shareVariables(scopeList) { }
22
27
  set(stack) {
23
28
  throw new Error("BindExpression#set() has no implementation.");
24
29
  }
@@ -48,15 +53,11 @@ let BindExpression = BindExpression_1 = class BindExpression extends AbstractExp
48
53
  }
49
54
  return this.property.findScope(stack, objectScope);
50
55
  }
51
- events(parent) {
52
- if (this.computed) {
53
- parent ??= '';
54
- parent = `${parent}${this.object.events(parent)}`;
55
- return [parent, `${parent}[${this.property.toString()}]`];
56
- }
57
- parent ||= '';
58
- parent += this.object.toString() + '.';
59
- return [...this.object.events(), ...this.property.events(parent)];
56
+ dependency(computed) {
57
+ return this.object.dependency(computed).concat(this.property.dependency(computed));
58
+ }
59
+ dependencyPath(computed) {
60
+ return this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));
60
61
  }
61
62
  toString() {
62
63
  if (this.computed) {
@@ -1 +1 @@
1
- {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanFindScope } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n@Deserializer('BindExpression')\nexport class BindExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression {\n\t\treturn new BindExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(\"BindExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (typeof objectRef === 'undefined') {\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of undefined`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\tif (this.optional && (value === undefined || value === null)) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof value !== 'function') {\n\t\t\tthrow new Error(`can't bind to non-function type ${value}`);\n\t\t}\n\t\treturn (<Function>value).bind(objectRef);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tevents(parent?: string): string[] {\n\t\tif (this.computed) {\n\t\t\tparent ??= '';\n\t\t\tparent = `${parent}${this.object.events(parent)}`;\n\t\t\treturn [parent, `${parent}[${this.property.toString()}]`];\n\t\t}\n\t\tparent ||= '';\n\t\tparent += this.object.toString() + '.';\n\t\treturn [...this.object.events(), ...this.property.events(parent)];\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * ```js\n * const x = {method: function(){...}};\n * const z = x::method;\n * ```\n */\n@Deserializer('BindExpression')\nexport class BindExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression {\n\t\treturn new BindExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tstatic visit(node: BindExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.object);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack) {\n\t\tthrow new Error(\"BindExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (typeof objectRef === 'undefined') {\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of undefined`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\tif (this.optional && (value === undefined || value === null)) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof value !== 'function') {\n\t\t\tthrow new Error(`can't bind to non-function type ${value}`);\n\t\t}\n\t\treturn (<Function>value).bind(objectRef);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.object.dependency(computed).concat(this.property.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
@@ -1,3 +1,5 @@
1
+ import type { ExpressionEventPath, ExpressionNode } from '../expression.js';
2
+ import type { Scope } from '../../scope/scope.js';
1
3
  import type { Stack } from '../../scope/stack.js';
2
4
  import { AbstractExpressionNode } from '../abstract.js';
3
5
  export declare class CommentExpression extends AbstractExpressionNode {
@@ -5,9 +7,11 @@ export declare class CommentExpression extends AbstractExpressionNode {
5
7
  static fromJSON(nodeExp: CommentExpression): CommentExpression;
6
8
  constructor(comment: string);
7
9
  getComment(): string;
10
+ shareVariables(scopeList: Scope<any>[]): void;
8
11
  set(stack: Stack, ...values: any[]): void;
9
12
  get(stack: Stack): void;
10
- events(parent?: string): string[];
13
+ dependency(computed?: true): ExpressionNode[];
14
+ dependencyPath(computed?: true): ExpressionEventPath[];
11
15
  toString(): string;
12
16
  toJson(): object;
13
17
  }
@@ -13,11 +13,13 @@ let CommentExpression = CommentExpression_1 = class CommentExpression extends Ab
13
13
  getComment() {
14
14
  return this.comment;
15
15
  }
16
- set(stack, ...values) {
17
- }
18
- get(stack) {
16
+ shareVariables(scopeList) { }
17
+ set(stack, ...values) { }
18
+ get(stack) { }
19
+ dependency(computed) {
20
+ return [];
19
21
  }
20
- events(parent) {
22
+ dependencyPath(computed) {
21
23
  return [];
22
24
  }
23
25
  toString() {
@@ -1 +1 @@
1
- {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/comment.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,IAAa,iBAAiB,yBAA9B,MAAa,iBAAkB,SAAQ,sBAAsB;IAI5D,YAAoB,OAAe;QAClC,KAAK,EAAE,CAAC;QADW,YAAO,GAAP,OAAO,CAAQ;IAEnC,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,OAA0B;QACzC,OAAO,IAAI,mBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAID,UAAU;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAOD,GAAG,CAAC,KAAY,EAAE,GAAG,MAAa;IAElC,CAAC;IAMD,GAAG,CAAC,KAAY;IAEhB,CAAC;IACD,MAAM,CAAC,MAAe;QACrB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,MAAM;QACL,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACD,CAAA;AApCY,iBAAiB;IAD7B,YAAY,CAAC,mBAAmB,CAAC;;GACrB,iBAAiB,CAoC7B;SApCY,iBAAiB","sourcesContent":["\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\n@Deserializer('CommentExpression')\nexport class CommentExpression extends AbstractExpressionNode {\n\tstatic fromJSON(nodeExp: CommentExpression): CommentExpression {\n\t\treturn new CommentExpression(nodeExp.comment);\n\t}\n\tconstructor(private comment: string) {\n\t\tsuper();\n\t}\n\tgetComment() {\n\t\treturn this.comment;\n\t}\n\n\t/**\n\t * \n\t * @param context execution stack/scope context\n\t * @param value any paramter\n\t */\n\tset(stack: Stack, ...values: any[]) {\n\n\t}\n\n\t/**\n\t * used when define a function\n\t * @param context execution stack/scope context\n\t */\n\tget(stack: Stack) {\n\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn this.comment;\n\t}\n\ttoJson(): object {\n\t\treturn { comment: this.comment };\n\t}\n}\n"]}
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/comment.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,IAAa,iBAAiB,yBAA9B,MAAa,iBAAkB,SAAQ,sBAAsB;IAI5D,YAAoB,OAAe;QAClC,KAAK,EAAE,CAAC;QADW,YAAO,GAAP,OAAO,CAAQ;IAEnC,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,OAA0B;QACzC,OAAO,IAAI,mBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAID,UAAU;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG,CAAC,KAAY,EAAE,GAAG,MAAa,IAAI,CAAC;IACvC,GAAG,CAAC,KAAY,IAAI,CAAC;IACrB,UAAU,CAAC,QAAe;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,MAAM;QACL,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACD,CAAA;AAzBY,iBAAiB;IAD7B,YAAY,CAAC,mBAAmB,CAAC;;GACrB,iBAAiB,CAyB7B;SAzBY,iBAAiB","sourcesContent":["import type { ExpressionEventPath, ExpressionNode } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\n@Deserializer('CommentExpression')\nexport class CommentExpression extends AbstractExpressionNode {\n\tstatic fromJSON(nodeExp: CommentExpression): CommentExpression {\n\t\treturn new CommentExpression(nodeExp.comment);\n\t}\n\tconstructor(private comment: string) {\n\t\tsuper();\n\t}\n\tgetComment() {\n\t\treturn this.comment;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, ...values: any[]) { }\n\tget(stack: Stack) { }\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn this.comment;\n\t}\n\ttoJson(): object {\n\t\treturn { comment: this.comment };\n\t}\n}\n"]}
@@ -1,5 +1,6 @@
1
- import type { CanDeclareExpression, ExpressionNode, NodeDeserializer } from '../expression.js';
1
+ import type { CanDeclareExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeListType, VisitNodeType } from '../expression.js';
2
2
  import type { Stack } from '../../scope/stack.js';
3
+ import { Scope } from '../../scope/scope.js';
3
4
  import { AbstractExpressionNode } from '../abstract.js';
4
5
  export declare enum FunctionKind {
5
6
  NORMAL = "NORMAL",
@@ -25,16 +26,25 @@ export declare class Param extends AbstractExpressionNode {
25
26
  private identifier;
26
27
  private defaultValue?;
27
28
  static fromJSON(node: Param, deserializer: NodeDeserializer): Param;
28
- constructor(identifier: ExpressionNode, defaultValue?: ExpressionNode | undefined);
29
- getIdentifier(): ExpressionNode;
29
+ static visit(node: Param, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
30
+ constructor(identifier: CanDeclareExpression, defaultValue?: ExpressionNode | undefined);
31
+ getIdentifier(): CanDeclareExpression;
30
32
  getDefaultValue(): ExpressionNode | undefined;
33
+ shareVariables(scopeList: Scope<any>[]): void;
31
34
  set(stack: Stack, value: Function): void;
32
35
  get(stack: Stack): void;
33
- events(): string[];
36
+ dependency(computed?: true): ExpressionNode[];
37
+ dependencyPath(computed?: true): ExpressionEventPath[];
34
38
  toString(): string;
35
39
  toJson(): object;
36
40
  }
37
- export declare class FunctionExpression extends AbstractExpressionNode {
41
+ export declare abstract class FunctionBaseExpression extends AbstractExpressionNode {
42
+ private sharedVariables;
43
+ shareVariables(scopeList: Scope<any>[]): void;
44
+ initFunctionScope(stack: Stack): Scope<any>[];
45
+ clearFunctionScope(stack: Stack, innerScopes: Scope<any>[]): void;
46
+ }
47
+ export declare class FunctionExpression extends FunctionBaseExpression {
38
48
  protected params: ExpressionNode[];
39
49
  protected body: ExpressionNode[];
40
50
  protected kind: FunctionKind;
@@ -42,6 +52,7 @@ export declare class FunctionExpression extends AbstractExpressionNode {
42
52
  protected rest?: boolean | undefined;
43
53
  protected generator?: boolean | undefined;
44
54
  static fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression;
55
+ static visit(node: FunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
45
56
  constructor(params: ExpressionNode[], body: ExpressionNode[], kind: FunctionKind, id?: CanDeclareExpression | undefined, rest?: boolean | undefined, generator?: boolean | undefined);
46
57
  getParams(): ExpressionNode[];
47
58
  getBody(): ExpressionNode[];
@@ -51,29 +62,34 @@ export declare class FunctionExpression extends AbstractExpressionNode {
51
62
  set(stack: Stack, value: Function): void;
52
63
  private setParameter;
53
64
  get(stack: Stack): Function;
54
- events(): string[];
65
+ dependency(computed?: true): ExpressionNode[];
66
+ dependencyPath(computed?: true): ExpressionEventPath[];
55
67
  toString(): string;
56
68
  toJson(): object;
57
69
  }
58
70
  export declare class FunctionDeclaration extends FunctionExpression {
59
71
  static fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration;
72
+ static visit(node: FunctionDeclaration, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
73
+ protected id: CanDeclareExpression;
60
74
  constructor(params: ExpressionNode[], body: ExpressionNode[], kind: FunctionKind, id: CanDeclareExpression, rest?: boolean, generator?: boolean);
61
75
  }
62
- export declare class ArrowFunctionExpression extends AbstractExpressionNode {
76
+ export declare class ArrowFunctionExpression extends FunctionBaseExpression {
63
77
  private params;
64
78
  private body;
65
79
  private kind;
66
80
  private rest?;
67
81
  private generator?;
68
82
  static fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression;
69
- constructor(params: ExpressionNode[], body: ExpressionNode[], kind: ArrowFunctionType, rest?: boolean | undefined, generator?: boolean | undefined);
83
+ static visit(node: ArrowFunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
84
+ constructor(params: ExpressionNode[], body: ExpressionNode | ExpressionNode[], kind: ArrowFunctionType, rest?: boolean | undefined, generator?: boolean | undefined);
70
85
  getParams(): ExpressionNode[];
71
- getBody(): ExpressionNode[];
86
+ getBody(): ExpressionNode | ExpressionNode[];
72
87
  getRest(): boolean | undefined;
73
88
  set(stack: Stack, value: Function): void;
74
89
  private setParameter;
75
90
  get(stack: Stack): Function;
76
- events(): string[];
91
+ dependency(computed?: true): ExpressionNode[];
92
+ dependencyPath(computed?: true): ExpressionEventPath[];
77
93
  toString(): string;
78
94
  toJson(): object;
79
95
  }