@ibyar/expressions 0.5.2 → 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 (147) hide show
  1. package/README.md +3 -3
  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 +12 -11
  112. package/api/statement/declarations/declares.js +23 -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/finalizer.d.ts +4 -0
  125. package/scope/finalizer.js +11 -0
  126. package/scope/finalizer.js.map +1 -0
  127. package/scope/proxy.d.ts +2 -1
  128. package/scope/proxy.js +18 -2
  129. package/scope/proxy.js.map +1 -1
  130. package/scope/scope.d.ts +40 -51
  131. package/scope/scope.js +67 -134
  132. package/scope/scope.js.map +1 -1
  133. package/scope/stack.d.ts +41 -24
  134. package/scope/stack.js +148 -102
  135. package/scope/stack.js.map +1 -1
  136. package/v8/parser.js +3 -2
  137. package/v8/parser.js.map +1 -1
  138. package/visit/visitor.js +4 -7
  139. package/visit/visitor.js.map +1 -1
  140. package/api/app/class.d.ts +0 -117
  141. package/api/app/class.js +0 -292
  142. package/api/app/class.js.map +0 -1
  143. package/api/app/program.js +0 -39
  144. package/api/app/program.js.map +0 -1
  145. package/api/module/module.d.ts +0 -26
  146. package/api/module/module.js +0 -63
  147. package/api/module/module.js.map +0 -1
package/README.md CHANGED
@@ -192,8 +192,8 @@ const stack1 = new Stack();
192
192
 
193
193
  // OR
194
194
 
195
- const scope1 = new Scope<{x: number, y: number}>( {x: 8, y: 6}, 'block');
196
- const scope2 = Scope.blockScopeFor({z: 9});
195
+ const scope1 = new Scope<{x: number, y: number}>( {x: 8, y: 6});
196
+ const scope2 = Scope.for({z: 9});
197
197
 
198
198
  const stack2 = new Stack([scope1, scope2]);
199
199
 
@@ -205,7 +205,7 @@ const stack2 = new Stack([scope1, scope2]);
205
205
  ```ts
206
206
  import { ReadOnlyScope } from '@ibyar/expressions';
207
207
 
208
- stack1.pushScope(ReadOnlyScope.blockScopeFor({
208
+ stack1.pushScope(ReadOnlyScope.for({
209
209
  Math: {
210
210
  E: Math.E,
211
211
  LN10: Math.LN10,
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":"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","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 {};