@ibyar/expressions 0.5.0 → 0.5.4

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 (152) hide show
  1. package/README.md +96 -1
  2. package/api/abstract.d.ts +3 -4
  3. package/api/abstract.js +1 -1
  4. package/api/abstract.js.map +1 -1
  5. package/api/class/class.d.ts +196 -0
  6. package/api/class/class.js +594 -0
  7. package/api/class/class.js.map +1 -0
  8. package/api/class/decorator.d.ts +20 -0
  9. package/api/class/decorator.js +48 -0
  10. package/api/class/decorator.js.map +1 -0
  11. package/api/computing/call.d.ts +3 -1
  12. package/api/computing/call.js +16 -4
  13. package/api/computing/call.js.map +1 -1
  14. package/api/computing/new.d.ts +2 -1
  15. package/api/computing/new.js +4 -0
  16. package/api/computing/new.js.map +1 -1
  17. package/api/computing/rest.d.ts +3 -3
  18. package/api/computing/rest.js +5 -2
  19. package/api/computing/rest.js.map +1 -1
  20. package/api/computing/return.d.ts +2 -1
  21. package/api/computing/return.js +3 -0
  22. package/api/computing/return.js.map +1 -1
  23. package/api/computing/spread.d.ts +2 -1
  24. package/api/computing/spread.js +5 -2
  25. package/api/computing/spread.js.map +1 -1
  26. package/api/computing/throw.d.ts +2 -1
  27. package/api/computing/throw.js +3 -0
  28. package/api/computing/throw.js.map +1 -1
  29. package/api/computing/yield.d.ts +2 -1
  30. package/api/computing/yield.js +3 -0
  31. package/api/computing/yield.js.map +1 -1
  32. package/api/definition/array.d.ts +6 -7
  33. package/api/definition/array.js +13 -13
  34. package/api/definition/array.js.map +1 -1
  35. package/api/definition/bind.d.ts +2 -2
  36. package/api/definition/bind.js +1 -1
  37. package/api/definition/bind.js.map +1 -1
  38. package/api/definition/function.d.ts +8 -8
  39. package/api/definition/function.js +25 -25
  40. package/api/definition/function.js.map +1 -1
  41. package/api/definition/member.d.ts +2 -2
  42. package/api/definition/member.js +1 -1
  43. package/api/definition/member.js.map +1 -1
  44. package/api/definition/object.d.ts +7 -7
  45. package/api/definition/object.js +9 -9
  46. package/api/definition/object.js.map +1 -1
  47. package/api/definition/statement.d.ts +2 -2
  48. package/api/definition/statement.js +2 -2
  49. package/api/definition/statement.js.map +1 -1
  50. package/api/definition/values.d.ts +5 -4
  51. package/api/definition/values.js +7 -4
  52. package/api/definition/values.js.map +1 -1
  53. package/api/expression.d.ts +9 -12
  54. package/api/expression.js.map +1 -1
  55. package/api/{app → module/app}/program.d.ts +8 -9
  56. package/api/module/app/program.js +45 -0
  57. package/api/module/app/program.js.map +1 -0
  58. package/api/module/export.d.ts +60 -25
  59. package/api/module/export.js +230 -60
  60. package/api/module/export.js.map +1 -1
  61. package/api/module/import.d.ts +66 -25
  62. package/api/module/import.js +236 -68
  63. package/api/module/import.js.map +1 -1
  64. package/api/operators/assignment.d.ts +2 -2
  65. package/api/operators/assignment.js +1 -1
  66. package/api/operators/assignment.js.map +1 -1
  67. package/api/operators/await.d.ts +2 -2
  68. package/api/operators/await.js +1 -1
  69. package/api/operators/await.js.map +1 -1
  70. package/api/operators/binary.d.ts +2 -2
  71. package/api/operators/binary.js +1 -1
  72. package/api/operators/binary.js.map +1 -1
  73. package/api/operators/chaining.d.ts +2 -2
  74. package/api/operators/chaining.js +1 -1
  75. package/api/operators/chaining.js.map +1 -1
  76. package/api/operators/comma.d.ts +2 -2
  77. package/api/operators/comma.js +2 -2
  78. package/api/operators/comma.js.map +1 -1
  79. package/api/operators/grouping.d.ts +2 -2
  80. package/api/operators/grouping.js +1 -1
  81. package/api/operators/grouping.js.map +1 -1
  82. package/api/operators/logical.d.ts +2 -2
  83. package/api/operators/logical.js +1 -1
  84. package/api/operators/logical.js.map +1 -1
  85. package/api/operators/pipeline.d.ts +2 -2
  86. package/api/operators/pipeline.js +1 -1
  87. package/api/operators/pipeline.js.map +1 -1
  88. package/api/operators/ternary.d.ts +2 -2
  89. package/api/operators/ternary.js +1 -1
  90. package/api/operators/ternary.js.map +1 -1
  91. package/api/operators/unary.d.ts +3 -3
  92. package/api/operators/unary.js +4 -3
  93. package/api/operators/unary.js.map +1 -1
  94. package/api/operators/update.d.ts +2 -2
  95. package/api/operators/update.js +1 -1
  96. package/api/operators/update.js.map +1 -1
  97. package/api/statement/control/block.d.ts +3 -3
  98. package/api/statement/control/block.js +2 -2
  99. package/api/statement/control/block.js.map +1 -1
  100. package/api/statement/control/empty.d.ts +1 -1
  101. package/api/statement/control/empty.js.map +1 -1
  102. package/api/statement/control/if.d.ts +2 -2
  103. package/api/statement/control/if.js +1 -1
  104. package/api/statement/control/if.js.map +1 -1
  105. package/api/statement/control/switch.d.ts +4 -5
  106. package/api/statement/control/switch.js +5 -6
  107. package/api/statement/control/switch.js.map +1 -1
  108. package/api/statement/control/terminate.d.ts +3 -3
  109. package/api/statement/control/terminate.js +2 -2
  110. package/api/statement/control/terminate.js.map +1 -1
  111. package/api/statement/declarations/declares.d.ts +13 -11
  112. package/api/statement/declarations/declares.js +26 -18
  113. package/api/statement/declarations/declares.js.map +1 -1
  114. package/api/statement/iterations/for.d.ts +5 -5
  115. package/api/statement/iterations/for.js +7 -7
  116. package/api/statement/iterations/for.js.map +1 -1
  117. package/api/statement/iterations/while.d.ts +3 -3
  118. package/api/statement/iterations/while.js +2 -2
  119. package/api/statement/iterations/while.js.map +1 -1
  120. package/api/utils.d.ts +3 -0
  121. package/api/utils.js +2 -0
  122. package/api/utils.js.map +1 -0
  123. package/package.json +4 -4
  124. package/scope/event.d.ts +2 -2
  125. package/scope/event.js +8 -14
  126. package/scope/event.js.map +1 -1
  127. package/scope/finalizer.d.ts +4 -0
  128. package/scope/finalizer.js +11 -0
  129. package/scope/finalizer.js.map +1 -0
  130. package/scope/proxy.d.ts +2 -1
  131. package/scope/proxy.js +18 -2
  132. package/scope/proxy.js.map +1 -1
  133. package/scope/scope.d.ts +57 -40
  134. package/scope/scope.js +123 -106
  135. package/scope/scope.js.map +1 -1
  136. package/scope/stack.d.ts +41 -24
  137. package/scope/stack.js +148 -102
  138. package/scope/stack.js.map +1 -1
  139. package/v8/app.js.map +1 -1
  140. package/v8/parser.d.ts +1 -1
  141. package/v8/parser.js +3 -2
  142. package/v8/parser.js.map +1 -1
  143. package/visit/visitor.js +4 -7
  144. package/visit/visitor.js.map +1 -1
  145. package/api/app/class.d.ts +0 -117
  146. package/api/app/class.js +0 -292
  147. package/api/app/class.js.map +0 -1
  148. package/api/app/program.js +0 -39
  149. package/api/app/program.js.map +0 -1
  150. package/api/module/module.d.ts +0 -26
  151. package/api/module/module.js +0 -63
  152. package/api/module/module.js.map +0 -1
package/README.md CHANGED
@@ -136,7 +136,7 @@ console.log(
136
136
  | logical-and | `&&` |
137
137
  | logical-or | `\|\|` |
138
138
  | conditional | `?:` |
139
- | pipeline | `|>` |
139
+ | pipeline | `\|>` |
140
140
  | assignment | `= += -= *= **= /= %= <<= >>= >>>= &= ^= \|= &&= \|\|= ??= >?= <?= %%=` |
141
141
  | comma | `,` |
142
142
 
@@ -179,3 +179,98 @@ b |> function(x) { console.log(x); return x; }
179
179
  |> add : ? : 77
180
180
  |> map
181
181
  ```
182
+
183
+
184
+ ### How to use stack and scope:
185
+
186
+ 1- create stack:
187
+
188
+ ```ts
189
+ import { Scope, Stack } from '@ibyar/expressions';
190
+
191
+ const stack1 = new Stack();
192
+
193
+ // OR
194
+
195
+ const scope1 = new Scope<{x: number, y: number}>( {x: 8, y: 6});
196
+ const scope2 = Scope.for({z: 9});
197
+
198
+ const stack2 = new Stack([scope1, scope2]);
199
+
200
+ ```
201
+
202
+ 2- any of the previous stacks, does not provide and public api like `Math`, `String`, ....
203
+ you need to provide these values to the stack, the stack work as a sandbox, isolated from the js-VM.
204
+
205
+ ```ts
206
+ import { ReadOnlyScope } from '@ibyar/expressions';
207
+
208
+ stack1.pushScope(ReadOnlyScope.for({
209
+ Math: {
210
+ E: Math.E,
211
+ LN10: Math.LN10,
212
+ LN2: Math.LN2,
213
+ LOG10E: Math.LOG10E,
214
+ LOG2E: Math.LOG2E,
215
+ PI: Math.PI,
216
+ SQRT1_2: Math.SQRT1_2,
217
+ SQRT2: Math.SQRT2,
218
+
219
+ abs: Math.abs,
220
+ acos: Math.acos,
221
+ asin: Math.asin,
222
+ atan: Math.atan,
223
+ atan2: Math.atan2,
224
+ ceil: Math.ceil,
225
+ ....
226
+ },
227
+ // or
228
+ Math,
229
+ // another object
230
+ Array: {
231
+ // in js a statement like `let x = new Array()` will throw exception.
232
+ isArray: Array.isArray,
233
+ },
234
+
235
+ Array, // `let x = new Array()` no Error.
236
+
237
+
238
+ parseFloat,
239
+ parseInt,
240
+ String,
241
+ console,
242
+ }));
243
+ ```
244
+ so now you can write js code the use these as identifier
245
+
246
+
247
+
248
+ 3- the stack is ready to use with expression
249
+ 4- try to parse an expression like `let x = 'data'; console.log(x);`.
250
+
251
+ ```ts
252
+ import { JavaScriptParser } from '@ibyar/expressions';
253
+
254
+ const ast = JavaScriptParser.parse(`let x = 'data'; console.log(x);`);
255
+
256
+ // use get method to execute an expression and return a value if available.
257
+
258
+ ast.get(stack1);
259
+ // it should print 'data' on the console
260
+ ```
261
+
262
+
263
+ 5- you can visit the ast
264
+
265
+ ```ts
266
+ import { expressionVisitor, VariableDeclaration } from '@ibyar/expressions';
267
+
268
+ expressionVisitor.visit(ast, (expression, type, control) => {
269
+ if (type === 'VariableDeclaration') {
270
+ const kind = (expression as VariableDeclaration).getKind();
271
+
272
+ ....
273
+ }
274
+ });
275
+
276
+ ```
package/api/abstract.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { Scope, ScopeType } from '../scope/scope.js';
1
+ import type { Scope } from '../scope/scope.js';
2
2
  import type { AwaitPromiseInfo, Stack } from '../scope/stack.js';
3
- import type { NodeDeserializer, ExpressionNode, NodeExpressionClass, NodeJsonType, CanDeclareExpression, ExpressionEventMap, ExpressionEventPath, VisitNodeType, VisitNodeListType } from './expression.js';
3
+ import type { NodeDeserializer, ExpressionNode, NodeExpressionClass, NodeJsonType, CanDeclareExpression, ExpressionEventMap, ExpressionEventPath, VisitNodeType } from './expression.js';
4
4
  export declare abstract class AbstractExpressionNode implements ExpressionNode {
5
5
  static fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode;
6
6
  getClass(): NodeExpressionClass<ExpressionNode>;
@@ -20,7 +20,7 @@ export declare abstract class InfixExpressionNode<T> extends AbstractExpressionN
20
20
  protected operator: T;
21
21
  protected left: ExpressionNode;
22
22
  protected right: ExpressionNode;
23
- static visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
23
+ static visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType): void;
24
24
  constructor(operator: T, left: ExpressionNode, right: ExpressionNode);
25
25
  getOperator(): T;
26
26
  getLeft(): ExpressionNode;
@@ -52,6 +52,5 @@ export declare class AwaitPromise implements AwaitPromiseInfo {
52
52
  promise: Promise<any>;
53
53
  node: CanDeclareExpression;
54
54
  declareVariable: boolean;
55
- scopeType: ScopeType;
56
55
  constructor(promise: Promise<any>);
57
56
  }
package/api/abstract.js CHANGED
@@ -42,7 +42,7 @@ export class InfixExpressionNode extends AbstractExpressionNode {
42
42
  this.left = left;
43
43
  this.right = right;
44
44
  }
45
- static visit(node, visitNode, visitNodeList) {
45
+ static visit(node, visitNode) {
46
46
  visitNode(node.getLeft());
47
47
  visitNode(node.getRight());
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/expressions/api/abstract.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope, ScopeType } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode, NodeExpressionClass,\n\tNodeJsonType, CanDeclareExpression, ExpressionEventMap,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\n} from './expression.js';\n\nfunction initPathExpressionEventMap(rootEventMap: ExpressionEventMap, path: ExpressionEventPath[]): void {\n\tlet lastMap = rootEventMap;\n\t// let index = 0;\n\tfor (const node of path) {\n\t\tconst scopeName = node.path;\n\t\tlet eventMap = lastMap[scopeName];\n\t\tif (eventMap) {\n\t\t\tlastMap = eventMap;\n\t\t\tcontinue;\n\t\t}\n\t\t// if ((index++) === path.length - 1) {\n\t\t// \tlastMap[scopeName] = undefined;\n\t\t// \tcontinue;\n\t\t// }\n\t\tlastMap = lastMap[scopeName] = {};\n\t\tif (node.computed) {\n\t\t\tnode.computedPath.forEach(path => initPathExpressionEventMap(rootEventMap, path));\n\t\t}\n\t}\n}\nexport abstract class AbstractExpressionNode implements ExpressionNode {\n\tstatic fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode {\n\t\treturn deserializer(node as any);\n\t}\n\tgetClass(): NodeExpressionClass<ExpressionNode> {\n\t\treturn this.constructor as NodeExpressionClass<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst json = this.toJson(key) as NodeJsonType;\n\t\tjson.type = Reflect.get(this.constructor, 'type');\n\t\treturn json;\n\t}\n\tevents(): ExpressionEventMap {\n\t\tconst dependencyNodes = this.dependency();\n\t\tconst eventMap: ExpressionEventMap = {};\n\t\tfor (const node of dependencyNodes) {\n\t\t\tconst dependencyPath = node.dependencyPath();\n\t\t\tinitPathExpressionEventMap(eventMap, dependencyPath);\n\t\t}\n\t\treturn eventMap;\n\t}\n\tabstract shareVariables(scopeList: Scope<any>[]): void;\n\tabstract set(stack: Stack, value: any): any;\n\tabstract get(stack: Stack, thisContext?: any): any;\n\tabstract dependency(computed?: true): ExpressionNode[];\n\tabstract dependencyPath(computed?: true): ExpressionEventPath[];\n\tabstract toString(): string;\n\tabstract toJson(key?: string): { [key: string]: any };\n}\nexport abstract class InfixExpressionNode<T> extends AbstractExpressionNode {\n\tstatic visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.getLeft());\n\t\tvisitNode(node.getRight())\n\t}\n\tconstructor(protected operator: T, protected left: ExpressionNode, protected right: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.left.shareVariables(scopeList);\n\t\tthis.right.shareVariables(scopeList);\n\t}\n\tset(context: object, value: any) {\n\t\tthrow new Error(`${this.constructor.name}#set() of operator: '${this.operator}' has no implementation.`);\n\t}\n\tabstract get(stack: Stack): any;\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.left.dependency(computed).concat(this.right.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.left.dependencyPath(computed).concat(this.right.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n\t}\n\ttoJson(key: string): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON()\n\t\t};\n\t}\n}\n\nexport class ReturnValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldDelegateValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class AwaitPromise implements AwaitPromiseInfo {\n\tnode: CanDeclareExpression;\n\tdeclareVariable: boolean;\n\tscopeType: ScopeType;\n\tconstructor(public promise: Promise<any>) { }\n}\n"]}
1
+ {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/expressions/api/abstract.ts"],"names":[],"mappings":"AAQA,SAAS,0BAA0B,CAAC,YAAgC,EAAE,IAA2B;IAChG,IAAI,OAAO,GAAG,YAAY,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE;YACb,OAAO,GAAG,QAAQ,CAAC;YACnB,SAAS;SACT;QAKD,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;SAClF;KACD;AACF,CAAC;AACD,MAAM,OAAgB,sBAAsB;IAC3C,MAAM,CAAC,QAAQ,CAAC,IAAoB,EAAE,YAA8B;QACnE,OAAO,YAAY,CAAC,IAAW,CAAC,CAAC;IAClC,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,WAAkD,CAAC;IAChE,CAAC;IACD,MAAM,CAAC,GAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAiB,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM;QACL,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE;YACnC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,0BAA0B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;SACrD;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;CAQD;AACD,MAAM,OAAgB,mBAAuB,SAAQ,sBAAsB;IAK1E,YAAsB,QAAW,EAAY,IAAoB,EAAY,KAAqB;QACjG,KAAK,EAAE,CAAC;QADa,aAAQ,GAAR,QAAQ,CAAG;QAAY,SAAI,GAAJ,IAAI,CAAgB;QAAY,UAAK,GAAL,KAAK,CAAgB;IAElG,CAAC;IAND,MAAM,CAAC,KAAK,CAAC,IAA8B,EAAE,SAAwB;QACpE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1B,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3B,CAAC;IAID,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IACD,GAAG,CAAC,OAAe,EAAE,KAAU;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,wBAAwB,IAAI,CAAC,QAAQ,0BAA0B,CAAC,CAAC;IAC1G,CAAC;IAED,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,QAAQ;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,MAAM,CAAC,GAAW;QACjB,OAAO;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;SAC1B,CAAC;IACH,CAAC;CACD;AAED,MAAM,OAAO,WAAW;IACvB,YAAmB,KAAU;QAAV,UAAK,GAAL,KAAK,CAAK;IAAI,CAAC;IAClC,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD;AAED,MAAM,OAAO,UAAU;IACtB,YAAmB,KAAU;QAAV,UAAK,GAAL,KAAK,CAAK;IAAI,CAAC;IAClC,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD;AAED,MAAM,OAAO,kBAAkB;IAC9B,YAAmB,KAAU;QAAV,UAAK,GAAL,KAAK,CAAK;IAAI,CAAC;IAClC,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD;AAED,MAAM,OAAO,YAAY;IAGxB,YAAmB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAI,CAAC;CAC7C","sourcesContent":["import type { Scope } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode, NodeExpressionClass,\n\tNodeJsonType, CanDeclareExpression, ExpressionEventMap,\n\tExpressionEventPath, VisitNodeType\n} from './expression.js';\n\nfunction initPathExpressionEventMap(rootEventMap: ExpressionEventMap, path: ExpressionEventPath[]): void {\n\tlet lastMap = rootEventMap;\n\t// let index = 0;\n\tfor (const node of path) {\n\t\tconst scopeName = node.path;\n\t\tlet eventMap = lastMap[scopeName];\n\t\tif (eventMap) {\n\t\t\tlastMap = eventMap;\n\t\t\tcontinue;\n\t\t}\n\t\t// if ((index++) === path.length - 1) {\n\t\t// \tlastMap[scopeName] = undefined;\n\t\t// \tcontinue;\n\t\t// }\n\t\tlastMap = lastMap[scopeName] = {};\n\t\tif (node.computed) {\n\t\t\tnode.computedPath.forEach(path => initPathExpressionEventMap(rootEventMap, path));\n\t\t}\n\t}\n}\nexport abstract class AbstractExpressionNode implements ExpressionNode {\n\tstatic fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode {\n\t\treturn deserializer(node as any);\n\t}\n\tgetClass(): NodeExpressionClass<ExpressionNode> {\n\t\treturn this.constructor as NodeExpressionClass<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst json = this.toJson(key) as NodeJsonType;\n\t\tjson.type = Reflect.get(this.constructor, 'type');\n\t\treturn json;\n\t}\n\tevents(): ExpressionEventMap {\n\t\tconst dependencyNodes = this.dependency();\n\t\tconst eventMap: ExpressionEventMap = {};\n\t\tfor (const node of dependencyNodes) {\n\t\t\tconst dependencyPath = node.dependencyPath();\n\t\t\tinitPathExpressionEventMap(eventMap, dependencyPath);\n\t\t}\n\t\treturn eventMap;\n\t}\n\tabstract shareVariables(scopeList: Scope<any>[]): void;\n\tabstract set(stack: Stack, value: any): any;\n\tabstract get(stack: Stack, thisContext?: any): any;\n\tabstract dependency(computed?: true): ExpressionNode[];\n\tabstract dependencyPath(computed?: true): ExpressionEventPath[];\n\tabstract toString(): string;\n\tabstract toJson(key?: string): { [key: string]: any };\n}\nexport abstract class InfixExpressionNode<T> extends AbstractExpressionNode {\n\tstatic visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.getLeft());\n\t\tvisitNode(node.getRight())\n\t}\n\tconstructor(protected operator: T, protected left: ExpressionNode, protected right: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.left.shareVariables(scopeList);\n\t\tthis.right.shareVariables(scopeList);\n\t}\n\tset(context: object, value: any) {\n\t\tthrow new Error(`${this.constructor.name}#set() of operator: '${this.operator}' has no implementation.`);\n\t}\n\tabstract get(stack: Stack): any;\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.left.dependency(computed).concat(this.right.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.left.dependencyPath(computed).concat(this.right.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n\t}\n\ttoJson(key: string): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON()\n\t\t};\n\t}\n}\n\nexport class ReturnValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldDelegateValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class AwaitPromise implements AwaitPromiseInfo {\n\tnode: CanDeclareExpression;\n\tdeclareVariable: boolean;\n\tconstructor(public promise: Promise<any>) { }\n}\n"]}
@@ -0,0 +1,196 @@
1
+ import type { CanDeclareExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../expression.js';
2
+ import type { Scope } from '../../scope/scope.js';
3
+ import { Stack } from '../../scope/stack.js';
4
+ import { AbstractExpressionNode } from '../abstract.js';
5
+ import { Identifier } from '../definition/values.js';
6
+ import { MemberExpression } from '../definition/member.js';
7
+ import { FunctionExpression } from '../definition/function.js';
8
+ import { BlockStatement } from '../statement/control/block.js';
9
+ import { Decorator } from './decorator.js';
10
+ declare const STACK: unique symbol;
11
+ declare const GET_PARAMETERS: unique symbol;
12
+ declare const CONSTRUCTOR: unique symbol;
13
+ declare const PRIVATE_SYMBOL: unique symbol;
14
+ declare const INIT_PRIVATE_SYMBOL: unique symbol;
15
+ declare const STATIC_INITIALIZATION_BLOCK: unique symbol;
16
+ interface ClassConstructor {
17
+ readonly prototype: ClassInstance;
18
+ [GET_PARAMETERS](args: any[]): any[];
19
+ [STATIC_INITIALIZATION_BLOCK]: Function[];
20
+ [INIT_PRIVATE_SYMBOL]: {
21
+ [key: PropertyKey]: any;
22
+ };
23
+ [PRIVATE_SYMBOL]: {
24
+ [key: PropertyKey]: any;
25
+ };
26
+ [key: string]: any;
27
+ }
28
+ declare var ClassInstance: ClassConstructor;
29
+ interface ClassInstance {
30
+ [CONSTRUCTOR]: Function;
31
+ [INIT_PRIVATE_SYMBOL]: {
32
+ [key: PropertyKey]: any;
33
+ };
34
+ [PRIVATE_SYMBOL]: {
35
+ [key: PropertyKey]: any;
36
+ };
37
+ [STACK]: Stack;
38
+ [key: string]: any;
39
+ }
40
+ export declare class Super extends AbstractExpressionNode {
41
+ static INSTANCE: Super;
42
+ static fromJSON(node: Super): Super;
43
+ constructor();
44
+ shareVariables(scopeList: Scope<any>[]): void;
45
+ set(stack: Stack, value: any): void;
46
+ get(stack: Stack, thisContext?: any): void;
47
+ dependency(computed?: true): ExpressionNode[];
48
+ dependencyPath(computed?: true): ExpressionEventPath[];
49
+ toString(): string;
50
+ toJson(): {
51
+ [key: string]: any;
52
+ };
53
+ }
54
+ export declare class MetaProperty extends MemberExpression {
55
+ private meta;
56
+ static NewTarget: MetaProperty;
57
+ static ImportMeta: MetaProperty;
58
+ private static getJsonName;
59
+ static fromJSON(node: MetaProperty, deserializer: NodeDeserializer<any>): MetaProperty;
60
+ static visit(node: MetaProperty, visitNode: VisitNodeType): void;
61
+ constructor(meta: Identifier, property: Identifier);
62
+ getMeta(): Identifier;
63
+ shareVariables(scopeList: Scope<any>[]): void;
64
+ get(stack: Stack, thisContext?: any): any;
65
+ toString(): string;
66
+ toJson(): {
67
+ [key: string]: any;
68
+ };
69
+ }
70
+ export declare class PrivateIdentifier extends AbstractExpressionNode {
71
+ private name;
72
+ static fromJSON(node: PrivateIdentifier): PrivateIdentifier;
73
+ constructor(name: string);
74
+ getName(): string;
75
+ set(stack: Stack, value: any): void;
76
+ get(stack: Stack, thisContext?: any): any;
77
+ dependency(computed?: true): ExpressionNode[];
78
+ dependencyPath(computed?: true): ExpressionEventPath[];
79
+ shareVariables(scopeList: Scope<any>[]): void;
80
+ toString(): string;
81
+ toJson(): {
82
+ [key: string]: any;
83
+ };
84
+ }
85
+ export declare class StaticBlock extends BlockStatement {
86
+ static fromJSON(node: StaticBlock, deserializer: NodeDeserializer<any>): StaticBlock;
87
+ constructor(body: ExpressionNode[], isStatement: boolean);
88
+ get(stack: Stack, classConstructor?: ClassConstructor): void;
89
+ toString(): string;
90
+ }
91
+ export declare abstract class AbstractDefinition extends AbstractExpressionNode {
92
+ protected key: ExpressionNode | PrivateIdentifier;
93
+ protected decorators: Decorator[];
94
+ protected computed: boolean;
95
+ protected value?: ExpressionNode | undefined;
96
+ protected 'static': boolean;
97
+ constructor(key: ExpressionNode | PrivateIdentifier, decorators: Decorator[], computed: boolean, isStatic: boolean, value?: ExpressionNode | undefined);
98
+ getKey(): ExpressionNode | PrivateIdentifier;
99
+ getValue(): ExpressionNode | undefined;
100
+ isComputed(): boolean;
101
+ isStatic(): boolean;
102
+ getDecorators(): Decorator[];
103
+ shareVariables(scopeList: Scope<any>[]): void;
104
+ set(stack: Stack, value: any): void;
105
+ dependency(computed?: true): ExpressionNode[];
106
+ dependencyPath(computed?: true): ExpressionEventPath[];
107
+ abstract get(stack: Stack, classConstructor: ClassConstructor): void;
108
+ abstract toString(): string;
109
+ abstract toJson(): {
110
+ [key: string]: any;
111
+ };
112
+ }
113
+ export declare type MethodDefinitionKind = 'constructor' | 'method' | 'set' | 'get';
114
+ export declare class MethodDefinition extends AbstractDefinition {
115
+ private kind;
116
+ static fromJSON(node: MethodDefinition, deserializer: NodeDeserializer<any>): MethodDefinition;
117
+ static visit(node: MethodDefinition, visitNode: VisitNodeType): void;
118
+ protected value: FunctionExpression;
119
+ constructor(kind: MethodDefinitionKind, key: ExpressionNode | PrivateIdentifier, value: FunctionExpression, decorators: Decorator[], computed: boolean, isStatic: boolean);
120
+ getKind(): MethodDefinitionKind;
121
+ getValue(): FunctionExpression;
122
+ get(stack: Stack, classConstructor: ClassConstructor): void;
123
+ private initConstructor;
124
+ toString(): string;
125
+ toJson(): {
126
+ [key: string]: any;
127
+ };
128
+ }
129
+ export declare class PropertyDefinition extends AbstractDefinition {
130
+ static fromJSON(node: PropertyDefinition, deserializer: NodeDeserializer<any>): PropertyDefinition;
131
+ static visit(node: PropertyDefinition, visitNode: VisitNodeType): void;
132
+ constructor(key: ExpressionNode | PrivateIdentifier, decorators: Decorator[], computed: boolean, isStatic: boolean, value?: ExpressionNode);
133
+ get(stack: Stack, classConstructor: ClassConstructor): void;
134
+ toString(): string;
135
+ toJson(): {
136
+ [key: string]: any;
137
+ };
138
+ }
139
+ export declare class AccessorProperty extends AbstractDefinition {
140
+ static fromJSON(node: AccessorProperty, deserializer: NodeDeserializer): AccessorProperty;
141
+ static visit(node: AccessorProperty, visitNode: VisitNodeType): void;
142
+ constructor(key: ExpressionNode, decorators: Decorator[], computed: boolean, isStatic: boolean, value?: ExpressionNode);
143
+ get(stack: Stack, classConstructor: ClassConstructor): void;
144
+ toString(): string;
145
+ toJson(): {
146
+ [key: string]: any;
147
+ };
148
+ }
149
+ export declare class ClassBody extends AbstractExpressionNode {
150
+ private body;
151
+ static fromJSON(node: ClassBody, deserializer: NodeDeserializer<any>): ClassBody;
152
+ static visit(node: ClassBody, visitNode: VisitNodeType): void;
153
+ constructor(body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[]);
154
+ getBody(): (StaticBlock | MethodDefinition | PropertyDefinition | AccessorProperty)[];
155
+ shareVariables(scopeList: Scope<any>[]): void;
156
+ set(stack: Stack, value: any): void;
157
+ get(stack: Stack, classConstructor: ClassConstructor): void;
158
+ dependency(computed?: true): ExpressionNode[];
159
+ dependencyPath(computed?: true): ExpressionEventPath[];
160
+ toString(): string;
161
+ toJson(): {
162
+ [key: string]: any;
163
+ };
164
+ }
165
+ export declare class Class extends AbstractExpressionNode {
166
+ protected body: ClassBody;
167
+ protected decorators: Decorator[];
168
+ protected id?: Identifier | undefined;
169
+ protected superClass?: ExpressionNode | undefined;
170
+ private sharedVariables?;
171
+ constructor(body: ClassBody, decorators: Decorator[], id?: Identifier | undefined, superClass?: ExpressionNode | undefined);
172
+ getBody(): ClassBody;
173
+ getDecorators(): Decorator[];
174
+ getId(): Identifier | undefined;
175
+ getSuperClass(): ExpressionNode | undefined;
176
+ shareVariables(scopeList: Scope<any>[]): void;
177
+ set(stack: Stack): void;
178
+ get(stack: Stack): ClassConstructor;
179
+ private createClass;
180
+ dependency(computed?: true): ExpressionNode[];
181
+ dependencyPath(computed?: true): ExpressionEventPath[];
182
+ toString(): string;
183
+ toJson(): object;
184
+ }
185
+ export declare class ClassDeclaration extends Class implements CanDeclareExpression {
186
+ static fromJSON(node: ClassDeclaration, deserializer: NodeDeserializer<any>): ClassDeclaration;
187
+ static visit(node: ClassDeclaration, visitNode: VisitNodeType): void;
188
+ protected id?: Identifier;
189
+ declareVariable(stack: Stack, propertyValue?: any): void;
190
+ getDeclarationName(): string;
191
+ }
192
+ export declare class ClassExpression extends Class {
193
+ static fromJSON(node: ClassExpression, deserializer: NodeDeserializer<any>): ClassExpression;
194
+ static visit(node: ClassExpression, visitNode: VisitNodeType): void;
195
+ }
196
+ export {};