@ibyar/expressions 0.8.3 → 0.8.5

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 (171) hide show
  1. package/README.md +0 -3
  2. package/api/abstract.d.ts +6 -2
  3. package/api/abstract.js +15 -8
  4. package/api/abstract.js.map +1 -1
  5. package/api/class/class.d.ts +15 -18
  6. package/api/class/class.js +49 -61
  7. package/api/class/class.js.map +1 -1
  8. package/api/class/decorator.d.ts +2 -2
  9. package/api/class/decorator.js +6 -6
  10. package/api/class/decorator.js.map +1 -1
  11. package/api/computing/call.d.ts +2 -2
  12. package/api/computing/call.js +8 -8
  13. package/api/computing/call.js.map +1 -1
  14. package/api/computing/debugger.d.ts +1 -2
  15. package/api/computing/debugger.js +2 -3
  16. package/api/computing/debugger.js.map +1 -1
  17. package/api/computing/new.d.ts +2 -2
  18. package/api/computing/new.js +7 -7
  19. package/api/computing/new.js.map +1 -1
  20. package/api/computing/rest.d.ts +2 -2
  21. package/api/computing/rest.js +6 -6
  22. package/api/computing/rest.js.map +1 -1
  23. package/api/computing/return.d.ts +2 -2
  24. package/api/computing/return.js +6 -6
  25. package/api/computing/return.js.map +1 -1
  26. package/api/computing/spread.d.ts +2 -2
  27. package/api/computing/spread.js +6 -6
  28. package/api/computing/spread.js.map +1 -1
  29. package/api/computing/throw.d.ts +4 -4
  30. package/api/computing/throw.js +18 -18
  31. package/api/computing/throw.js.map +1 -1
  32. package/api/computing/yield.d.ts +2 -2
  33. package/api/computing/yield.js +7 -7
  34. package/api/computing/yield.js.map +1 -1
  35. package/api/definition/array.d.ts +3 -3
  36. package/api/definition/array.js +14 -14
  37. package/api/definition/array.js.map +1 -1
  38. package/api/definition/bind.d.ts +2 -2
  39. package/api/definition/bind.js +9 -9
  40. package/api/definition/bind.js.map +1 -1
  41. package/api/definition/comment.d.ts +3 -3
  42. package/api/definition/comment.js +6 -6
  43. package/api/definition/comment.js.map +1 -1
  44. package/api/definition/function.d.ts +17 -16
  45. package/api/definition/function.js +60 -55
  46. package/api/definition/function.js.map +1 -1
  47. package/api/definition/member.d.ts +2 -2
  48. package/api/definition/member.js +13 -9
  49. package/api/definition/member.js.map +1 -1
  50. package/api/definition/object.d.ts +4 -4
  51. package/api/definition/object.js +22 -22
  52. package/api/definition/object.js.map +1 -1
  53. package/api/definition/statement.d.ts +2 -2
  54. package/api/definition/statement.js +6 -6
  55. package/api/definition/statement.js.map +1 -1
  56. package/api/definition/values.d.ts +15 -37
  57. package/api/definition/values.js +49 -74
  58. package/api/definition/values.js.map +1 -1
  59. package/api/expression.d.ts +42 -8
  60. package/api/expression.js.map +1 -1
  61. package/api/index.d.ts +1 -0
  62. package/api/index.js +1 -0
  63. package/api/index.js.map +1 -1
  64. package/api/module/common.d.ts +3 -3
  65. package/api/module/common.js +9 -9
  66. package/api/module/common.js.map +1 -1
  67. package/api/module/export.d.ts +5 -5
  68. package/api/module/export.js +30 -29
  69. package/api/module/export.js.map +1 -1
  70. package/api/module/import.d.ts +4 -4
  71. package/api/module/import.js +24 -23
  72. package/api/module/import.js.map +1 -1
  73. package/api/operators/assignment.d.ts +3 -3
  74. package/api/operators/assignment.js +5 -5
  75. package/api/operators/assignment.js.map +1 -1
  76. package/api/operators/await.d.ts +3 -3
  77. package/api/operators/await.js +7 -7
  78. package/api/operators/await.js.map +1 -1
  79. package/api/operators/binary.d.ts +1 -1
  80. package/api/operators/binary.js +1 -1
  81. package/api/operators/binary.js.map +1 -1
  82. package/api/operators/chaining.d.ts +2 -2
  83. package/api/operators/chaining.js +6 -6
  84. package/api/operators/chaining.js.map +1 -1
  85. package/api/operators/comma.d.ts +2 -2
  86. package/api/operators/comma.js +6 -6
  87. package/api/operators/comma.js.map +1 -1
  88. package/api/operators/grouping.d.ts +2 -2
  89. package/api/operators/grouping.js +6 -6
  90. package/api/operators/grouping.js.map +1 -1
  91. package/api/operators/logical.d.ts +1 -1
  92. package/api/operators/logical.js +1 -1
  93. package/api/operators/logical.js.map +1 -1
  94. package/api/operators/pipeline.d.ts +3 -3
  95. package/api/operators/pipeline.js +8 -8
  96. package/api/operators/pipeline.js.map +1 -1
  97. package/api/operators/ternary.d.ts +2 -2
  98. package/api/operators/ternary.js +8 -8
  99. package/api/operators/ternary.js.map +1 -1
  100. package/api/operators/types.d.ts +1 -1
  101. package/api/operators/unary.d.ts +3 -3
  102. package/api/operators/unary.js +7 -7
  103. package/api/operators/unary.js.map +1 -1
  104. package/api/operators/update.d.ts +3 -3
  105. package/api/operators/update.js +8 -8
  106. package/api/operators/update.js.map +1 -1
  107. package/api/program.d.ts +3 -3
  108. package/api/program.js +7 -7
  109. package/api/program.js.map +1 -1
  110. package/api/statement/control/block.d.ts +2 -2
  111. package/api/statement/control/block.js +6 -6
  112. package/api/statement/control/block.js.map +1 -1
  113. package/api/statement/control/empty.d.ts +2 -3
  114. package/api/statement/control/empty.js +6 -7
  115. package/api/statement/control/empty.js.map +1 -1
  116. package/api/statement/control/if.d.ts +2 -2
  117. package/api/statement/control/if.js +8 -8
  118. package/api/statement/control/if.js.map +1 -1
  119. package/api/statement/control/switch.d.ts +4 -6
  120. package/api/statement/control/switch.js +19 -20
  121. package/api/statement/control/switch.js.map +1 -1
  122. package/api/statement/control/terminate.d.ts +4 -4
  123. package/api/statement/control/terminate.js +11 -15
  124. package/api/statement/control/terminate.js.map +1 -1
  125. package/api/statement/control/with.d.ts +21 -0
  126. package/api/statement/control/with.js +67 -0
  127. package/api/statement/control/with.js.map +1 -0
  128. package/api/statement/declarations/declares.d.ts +4 -4
  129. package/api/statement/declarations/declares.js +14 -14
  130. package/api/statement/declarations/declares.js.map +1 -1
  131. package/api/statement/iterations/for.d.ts +7 -7
  132. package/api/statement/iterations/for.js +35 -35
  133. package/api/statement/iterations/for.js.map +1 -1
  134. package/api/statement/iterations/while.d.ts +3 -3
  135. package/api/statement/iterations/while.js +14 -14
  136. package/api/statement/iterations/while.js.map +1 -1
  137. package/package.json +14 -4
  138. package/scope/finalizer.d.ts +1 -1
  139. package/scope/pool.d.ts +1 -1
  140. package/scope/proxy.d.ts +1 -1
  141. package/scope/proxy.js +1 -0
  142. package/scope/proxy.js.map +1 -1
  143. package/scope/scope.d.ts +2 -2
  144. package/scope/scope.js +13 -16
  145. package/scope/scope.js.map +1 -1
  146. package/scope/stack.js +23 -23
  147. package/scope/stack.js.map +1 -1
  148. package/v8/enums.d.ts +4 -2
  149. package/v8/enums.js.map +1 -1
  150. package/v8/factory.d.ts +148 -0
  151. package/v8/factory.js +499 -0
  152. package/v8/factory.js.map +1 -0
  153. package/v8/inline.d.ts +49 -49
  154. package/v8/inline.js +317 -307
  155. package/v8/inline.js.map +1 -1
  156. package/v8/node.d.ts +141 -0
  157. package/v8/node.js +2 -0
  158. package/v8/node.js.map +1 -0
  159. package/v8/nodes.d.ts +0 -14
  160. package/v8/nodes.js +1 -152
  161. package/v8/nodes.js.map +1 -1
  162. package/v8/parser.d.ts +21 -18
  163. package/v8/parser.js +97 -84
  164. package/v8/parser.js.map +1 -1
  165. package/v8/stream.d.ts +2 -1
  166. package/v8/stream.js +221 -311
  167. package/v8/stream.js.map +1 -1
  168. package/v8/token.d.ts +3 -1
  169. package/v8/token.js +7 -5
  170. package/v8/token.js.map +1 -1
  171. package/visit/visitor.d.ts +1 -1
package/v8/node.d.ts ADDED
@@ -0,0 +1,141 @@
1
+ import { AccessorProperty, ClassBody, ClassDeclaration, ClassExpression, MetaProperty, MethodDefinition, MethodDefinitionKind, PrivateIdentifier, PropertyDefinition, StaticBlock, Super } from '../api/class/class.js';
2
+ import { Decorator } from '../api/class/decorator.js';
3
+ import { CallExpression } from '../api/computing/call.js';
4
+ import { DebuggerStatement } from '../api/computing/debugger.js';
5
+ import { NewExpression } from '../api/computing/new.js';
6
+ import { RestElement } from '../api/computing/rest.js';
7
+ import { ReturnStatement } from '../api/computing/return.js';
8
+ import { SpreadElement } from '../api/computing/spread.js';
9
+ import { CatchClauseNode, ThrowStatement, TryCatchNode } from '../api/computing/throw.js';
10
+ import { YieldExpression } from '../api/computing/yield.js';
11
+ import { ArrayExpression, ArrayPattern } from '../api/definition/array.js';
12
+ import { BindExpression } from '../api/definition/bind.js';
13
+ import { ArrowFunctionExpression, AssignmentPattern, FunctionDeclaration, FunctionExpression } from '../api/definition/function.js';
14
+ import { MemberExpression } from '../api/definition/member.js';
15
+ import { ObjectExpression, ObjectPattern, Property } from '../api/definition/object.js';
16
+ import { Identifier, Literal, TaggedTemplateExpression, TemplateLiteral, ThisExpression } from '../api/definition/values.js';
17
+ import type { ExpressionNode, SourceLocation } from '../api/expression.js';
18
+ import { DeclarationExpression } from '../api/expression.js';
19
+ import { ImportAttribute } from '../api/module/common.js';
20
+ import { ExportAllDeclaration, ExportDefaultDeclaration, ExportNamedDeclaration, ExportSpecifier } from '../api/module/export.js';
21
+ import { ImportDeclaration, ImportDefaultSpecifier, ImportExpression, ImportNamespaceSpecifier, ImportSpecifier } from '../api/module/import.js';
22
+ import { AssignmentExpression, AssignmentOperator } from '../api/operators/assignment.js';
23
+ import { AwaitExpression } from '../api/operators/await.js';
24
+ import { BinaryExpression, BinaryOperator } from '../api/operators/binary.js';
25
+ import { ChainExpression } from '../api/operators/chaining.js';
26
+ import { SequenceExpression } from '../api/operators/comma.js';
27
+ import { GroupingExpression } from '../api/operators/grouping.js';
28
+ import { LogicalExpression, LogicalOperator } from '../api/operators/logical.js';
29
+ import { PipelineExpression } from '../api/operators/pipeline.js';
30
+ import { ConditionalExpression } from '../api/operators/ternary.js';
31
+ import { UnaryExpression, UnaryOperator } from '../api/operators/unary.js';
32
+ import { UpdateExpression, UpdateOperator } from '../api/operators/update.js';
33
+ import { Program, ProgramSourceType } from '../api/program.js';
34
+ import { BlockStatement } from '../api/statement/control/block.js';
35
+ import { EmptyStatement } from '../api/statement/control/empty.js';
36
+ import { IfStatement } from '../api/statement/control/if.js';
37
+ import { DefaultExpression, SwitchCase, SwitchStatement } from '../api/statement/control/switch.js';
38
+ import { BreakStatement, ContinueStatement, LabeledStatement } from '../api/statement/control/terminate.js';
39
+ import { WithStatement } from '../api/statement/control/with.js';
40
+ import { VariableDeclarationNode, VariableDeclarator } from '../api/statement/declarations/declares.js';
41
+ import { ForAwaitOfNode, ForDeclaration, ForInNode, ForNode, ForOfNode } from '../api/statement/iterations/for.js';
42
+ import { DoWhileNode, WhileNode } from '../api/statement/iterations/while.js';
43
+ export interface SourcePositionFactory {
44
+ createSourcePosition(range?: [number, number]): SourceLocation | undefined;
45
+ }
46
+ export interface NodeFactory {
47
+ createDebuggerStatement(range?: [number, number]): DebuggerStatement;
48
+ createSuper(range?: [number, number]): Super;
49
+ createThis(range?: [number, number]): ThisExpression;
50
+ createNull(range?: [number, number]): Literal<null>;
51
+ createTrue(range?: [number, number]): Literal<true>;
52
+ createFalse(range?: [number, number]): Literal<false>;
53
+ createVoidZero(argument: ExpressionNode, range?: [number, number]): UnaryExpression;
54
+ createEmptyStatement(range?: [number, number]): EmptyStatement;
55
+ createExpressionStatement(list: ExpressionNode[], range?: [number, number]): ExpressionNode;
56
+ createCatchClause(block: BlockStatement, identifier?: ExpressionNode, range?: [number, number]): CatchClauseNode;
57
+ createTryStatement(tryBlock: BlockStatement, catchBlock?: ExpressionNode, finallyBlock?: ExpressionNode, range?: [number, number]): TryCatchNode;
58
+ createThrowStatement(exception: ExpressionNode, range?: [number, number]): ThrowStatement;
59
+ createBlock(statements: ExpressionNode[], range?: [number, number]): BlockStatement;
60
+ createIfStatement(condition: ExpressionNode, thenStatement: ExpressionNode, elseStatement?: ExpressionNode, range?: [number, number]): IfStatement;
61
+ createDoStatement(condition: ExpressionNode, body: ExpressionNode, range?: [number, number]): DoWhileNode;
62
+ createClassDeclaration(body: ClassBody, decorators: Decorator[], id: Identifier, superClass?: ExpressionNode, range?: [number, number]): ClassDeclaration;
63
+ createFunctionDeclaration(formals: DeclarationExpression[], bodyBlock: BlockStatement, isAsync: boolean, isGenerator: boolean, name: Identifier, range?: [number, number]): FunctionDeclaration;
64
+ createFunctionExpression(formals: DeclarationExpression[], bodyBlock: BlockStatement, isAsync: boolean, isGenerator: boolean, range?: [number, number]): FunctionExpression;
65
+ createWhileStatement(condition: ExpressionNode, body: ExpressionNode, range?: [number, number]): WhileNode;
66
+ createSwitchStatement(tag: ExpressionNode, cases: SwitchCase[], range?: [number, number]): SwitchStatement;
67
+ createCaseBlock(test: ExpressionNode, block: BlockStatement, range?: [number, number]): SwitchCase;
68
+ createDefaultClause(block: BlockStatement, range?: [number, number]): DefaultExpression;
69
+ createWithStatement(object: ExpressionNode, body: ExpressionNode, range?: [number, number]): WithStatement;
70
+ createForStatement(body: ExpressionNode, initializer: ExpressionNode, cond: ExpressionNode, next: ExpressionNode, range?: [number, number]): ForNode;
71
+ createForOfStatement(initializer: ForDeclaration, enumerable: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForOfNode;
72
+ createForAwaitOfStatement(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForAwaitOfNode;
73
+ createForInStatement(initializer: ForDeclaration, enumerable: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForInNode;
74
+ createVariableDeclaration(id: DeclarationExpression, init?: ExpressionNode, range?: [number, number]): VariableDeclarator;
75
+ createVariableStatement(variables: VariableDeclarator[], kind: 'let' | 'var' | 'const', range?: [number, number]): VariableDeclarationNode;
76
+ createContinueStatement(label?: Identifier, range?: [number, number]): ContinueStatement;
77
+ createBreakStatement(label?: Identifier, range?: [number, number]): BreakStatement;
78
+ createReturnStatement(argument?: ExpressionNode, range?: [number, number]): ReturnStatement;
79
+ createLabeledStatement(expression: Identifier, result: ExpressionNode, range?: [number, number]): LabeledStatement;
80
+ createAssignmentPattern(left: DeclarationExpression, right: ExpressionNode, range?: [number, number]): AssignmentPattern;
81
+ createSpreadElement(argument: ExpressionNode, range?: [number, number]): SpreadElement;
82
+ createCommaListExpression(expressions: ExpressionNode[], range?: [number, number]): SequenceExpression;
83
+ createTemplateExpression(quasis: string[], expressions: ExpressionNode[], range?: [number, number]): TemplateLiteral;
84
+ createTaggedTemplateExpression(tag: ExpressionNode, quasis: string[], expressions: ExpressionNode[], range?: [number, number]): TaggedTemplateExpression;
85
+ createNewExpression(className: ExpressionNode, parameters?: ExpressionNode[], range?: [number, number]): NewExpression;
86
+ createObjectBindingPattern(properties: (Property | RestElement)[], range?: [number, number]): ObjectPattern;
87
+ createObjectLiteralExpression(properties: Property[], range?: [number, number]): ObjectExpression;
88
+ createArrayBindingPattern(elements: (DeclarationExpression | null)[], range?: [number, number]): ArrayPattern;
89
+ createArrayLiteralExpression(elements: (ExpressionNode | SpreadElement | null)[], range?: [number, number]): ArrayExpression;
90
+ createAssignment(operator: AssignmentOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number]): AssignmentExpression;
91
+ createRestElement(argument: DeclarationExpression, range?: [number, number]): RestElement;
92
+ createArrowFunction(params: DeclarationExpression[], body: ExpressionNode | ExpressionNode[], expression: boolean, async: boolean, range?: [number, number]): ArrowFunctionExpression;
93
+ createPropertyDeclaration(key: ExpressionNode, value: DeclarationExpression | ExpressionNode, kind: 'init' | 'get' | 'set', method: boolean, shorthand: boolean, computed: boolean, range?: [number, number]): Property;
94
+ createIdentifier(name: string, range?: [number, number]): Identifier;
95
+ createPropertyAssignment(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean, range?: [number, number]): MemberExpression;
96
+ createPipelineExpression(left: ExpressionNode, right: ExpressionNode, params?: (ExpressionNode | '?' | '...?')[], range?: [number, number]): PipelineExpression;
97
+ createCallExpression(callee: ExpressionNode, params: ExpressionNode[], optional?: boolean, range?: [number, number]): CallExpression;
98
+ createBindExpression(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean, range?: [number, number]): BindExpression;
99
+ createChainExpression(expression: ExpressionNode, range?: [number, number]): ChainExpression;
100
+ createLogicalExpression(operator: LogicalOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number]): LogicalExpression;
101
+ createConditionalExpression(test: ExpressionNode, alternate: ExpressionNode, consequent: ExpressionNode, range?: [number, number]): ConditionalExpression;
102
+ createYieldExpression(delegate: boolean, argument?: ExpressionNode, range?: [number, number]): YieldExpression;
103
+ createMetaProperty(meta: Identifier, property: Identifier, range?: [number, number]): MetaProperty;
104
+ createProgram(sourceType: ProgramSourceType, body: ExpressionNode[], range?: [number, number]): Program;
105
+ createClassExpression(body: ClassBody, decorators: Decorator[], id?: Identifier, superClass?: ExpressionNode, range?: [number, number]): ClassExpression;
106
+ createClassStaticBlockDeclaration(body: ExpressionNode[], range?: [number, number]): StaticBlock;
107
+ createMethodSignature(kind: MethodDefinitionKind, key: ExpressionNode | PrivateIdentifier, value: FunctionExpression, decorators: Decorator[], computed: boolean, isStatic: boolean, range?: [number, number]): MethodDefinition;
108
+ createPropertySignature(key: ExpressionNode | PrivateIdentifier, decorators: Decorator[], computed: boolean, isStatic: boolean, value?: ExpressionNode, range?: [number, number]): PropertyDefinition;
109
+ createClassBody(body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[], range?: [number, number]): ClassBody;
110
+ createNamespaceExportDeclaration(specifiers: ExportSpecifier[], declaration?: DeclarationExpression, source?: Literal<string>, assertions?: ImportAttribute[], range?: [number, number]): ExportNamedDeclaration;
111
+ createExportSpecifier(local: Identifier, exported: Identifier, range?: [number, number]): ExportSpecifier;
112
+ createImportSpecifier(local: Identifier, imported: Identifier, range?: [number, number]): ImportSpecifier;
113
+ createImportDeclaration(source: Literal<string>, specifiers?: (ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier)[], assertions?: ImportAttribute[], range?: [number, number]): ImportDeclaration;
114
+ createImportNamespaceSpecifier(local: Identifier, range?: [number, number]): ImportNamespaceSpecifier;
115
+ createImportDefaultSpecifier(local: Identifier, range?: [number, number]): ImportDefaultSpecifier;
116
+ createImportExpression(source: Literal<string>, attributes?: ExpressionNode, range?: [number, number]): ImportExpression;
117
+ createAssertEntry(key: Identifier | Literal<string>, value: Literal<string>, range?: [number, number]): ImportAttribute;
118
+ createExportDefault(declaration: FunctionDeclaration | ClassDeclaration | ExpressionNode, range?: [number, number]): ExportDefaultDeclaration;
119
+ createExportAllDeclaration(source: Literal<string>, exported?: Identifier, assertions?: ImportAttribute[], range?: [number, number]): ExportAllDeclaration;
120
+ createInfixExpression(operator: AssignmentOperator | LogicalOperator | BinaryOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number]): AssignmentExpression | LogicalExpression | BinaryExpression;
121
+ createUnaryExpression(operator: UpdateOperator | UnaryOperator | 'await', expression: ExpressionNode, range?: [number, number]): UpdateExpression | UnaryExpression | AwaitExpression;
122
+ createUpdateExpression(operator: UpdateOperator, argument: ExpressionNode, prefix: boolean, range?: [number, number]): UpdateExpression;
123
+ createAwaitExpression(argument: ExpressionNode, range?: [number, number]): AwaitExpression;
124
+ isIdentifier(node?: ExpressionNode): node is Identifier;
125
+ isObjectExpression(node?: ExpressionNode): node is ObjectExpression;
126
+ isArrayExpression(node?: ExpressionNode): node is ArrayExpression;
127
+ isObjectPattern(node?: ExpressionNode): node is ObjectPattern;
128
+ isArrayPattern(node?: ExpressionNode): node is ArrayPattern;
129
+ isAssignmentPattern(node?: ExpressionNode): node is AssignmentPattern;
130
+ isPattern(node?: ExpressionNode): boolean;
131
+ canBePattern(node?: ExpressionNode): node is (ObjectExpression | ArrayExpression);
132
+ isProperty(node?: ExpressionNode): node is Property;
133
+ isMemberExpression(node?: ExpressionNode): node is MemberExpression;
134
+ isPropertyOrMemberExpression(node?: ExpressionNode): node is (Property | MemberExpression);
135
+ isEmptyStatement(expression: ExpressionNode): expression is EmptyStatement;
136
+ isSequenceExpression(node: ExpressionNode): node is SequenceExpression;
137
+ isSuper(node: ExpressionNode): node is Super;
138
+ isAssignmentExpression(node: ExpressionNode): node is AssignmentExpression;
139
+ isGroupingExpression(node: ExpressionNode): node is GroupingExpression;
140
+ isSpreadElement(node: ExpressionNode): node is SpreadElement;
141
+ }
package/v8/node.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.js.map
package/v8/node.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/expressions/v8/node.ts"],"names":[],"mappings":"","sourcesContent":["import {\n\tAccessorProperty, ClassBody, ClassDeclaration, ClassExpression,\n\tMetaProperty, MethodDefinition, MethodDefinitionKind, PrivateIdentifier,\n\tPropertyDefinition, StaticBlock, Super\n} from '../api/class/class.js';\nimport { Decorator } from '../api/class/decorator.js';\nimport { CallExpression } from '../api/computing/call.js';\nimport { DebuggerStatement } from '../api/computing/debugger.js';\nimport { NewExpression } from '../api/computing/new.js';\nimport { RestElement } from '../api/computing/rest.js';\nimport { ReturnStatement } from '../api/computing/return.js';\nimport { SpreadElement } from '../api/computing/spread.js';\nimport {\n\tCatchClauseNode, ThrowStatement, TryCatchNode\n} from '../api/computing/throw.js';\nimport { YieldExpression } from '../api/computing/yield.js';\nimport { ArrayExpression, ArrayPattern } from '../api/definition/array.js';\nimport { BindExpression } from '../api/definition/bind.js';\nimport {\n\tArrowFunctionExpression, AssignmentPattern, FunctionDeclaration, FunctionExpression\n} from '../api/definition/function.js';\nimport { MemberExpression } from '../api/definition/member.js';\nimport {\n\tObjectExpression, ObjectPattern, Property\n} from '../api/definition/object.js';\nimport {\n\tIdentifier, Literal, TaggedTemplateExpression, TemplateLiteral, ThisExpression\n} from '../api/definition/values.js';\nimport type { ExpressionNode, SourceLocation } from '../api/expression.js';\nimport { DeclarationExpression } from '../api/expression.js';\nimport { ImportAttribute } from '../api/module/common.js';\nimport {\n\tExportAllDeclaration, ExportDefaultDeclaration,\n\tExportNamedDeclaration, ExportSpecifier\n} from '../api/module/export.js';\nimport {\n\tImportDeclaration, ImportDefaultSpecifier, ImportExpression,\n\tImportNamespaceSpecifier, ImportSpecifier\n} from '../api/module/import.js';\nimport {\n\tAssignmentExpression, AssignmentOperator\n} from '../api/operators/assignment.js';\nimport { AwaitExpression } from '../api/operators/await.js';\nimport { BinaryExpression, BinaryOperator } from '../api/operators/binary.js';\nimport { ChainExpression } from '../api/operators/chaining.js';\nimport { SequenceExpression } from '../api/operators/comma.js';\nimport { GroupingExpression } from '../api/operators/grouping.js';\nimport { LogicalExpression, LogicalOperator } from '../api/operators/logical.js';\nimport { PipelineExpression } from '../api/operators/pipeline.js';\nimport { ConditionalExpression } from '../api/operators/ternary.js';\nimport { UnaryExpression, UnaryOperator } from '../api/operators/unary.js';\nimport { UpdateExpression, UpdateOperator } from '../api/operators/update.js';\nimport { Program, ProgramSourceType } from '../api/program.js';\nimport { BlockStatement } from '../api/statement/control/block.js';\nimport { EmptyStatement } from '../api/statement/control/empty.js';\nimport { IfStatement } from '../api/statement/control/if.js';\nimport {\n\tDefaultExpression, SwitchCase, SwitchStatement\n} from '../api/statement/control/switch.js';\nimport {\n\tBreakStatement, ContinueStatement, LabeledStatement\n} from '../api/statement/control/terminate.js';\nimport { WithStatement } from '../api/statement/control/with.js';\nimport {\n\tVariableDeclarationNode, VariableDeclarator\n} from '../api/statement/declarations/declares.js';\nimport {\n\tForAwaitOfNode, ForDeclaration, ForInNode, ForNode, ForOfNode\n} from '../api/statement/iterations/for.js';\nimport { DoWhileNode, WhileNode } from '../api/statement/iterations/while.js';\n\n\nexport interface SourcePositionFactory {\n\tcreateSourcePosition(range?: [number, number]): SourceLocation | undefined;\n}\n\nexport interface NodeFactory {\n\tcreateDebuggerStatement(range?: [number, number]): DebuggerStatement;\n\tcreateSuper(range?: [number, number]): Super;\n\tcreateThis(range?: [number, number]): ThisExpression;\n\tcreateNull(range?: [number, number]): Literal<null>;\n\tcreateTrue(range?: [number, number]): Literal<true>;\n\tcreateFalse(range?: [number, number]): Literal<false>;\n\tcreateVoidZero(argument: ExpressionNode, range?: [number, number]): UnaryExpression;\n\tcreateEmptyStatement(range?: [number, number]): EmptyStatement;\n\tcreateExpressionStatement(list: ExpressionNode[], range?: [number, number]): ExpressionNode;\n\tcreateCatchClause(block: BlockStatement, identifier?: ExpressionNode, range?: [number, number]): CatchClauseNode;\n\tcreateTryStatement(tryBlock: BlockStatement, catchBlock?: ExpressionNode, finallyBlock?: ExpressionNode, range?: [number, number]): TryCatchNode;\n\tcreateThrowStatement(exception: ExpressionNode, range?: [number, number]): ThrowStatement;\n\tcreateBlock(statements: ExpressionNode[], range?: [number, number]): BlockStatement;\n\tcreateIfStatement(condition: ExpressionNode, thenStatement: ExpressionNode, elseStatement?: ExpressionNode, range?: [number, number]): IfStatement;\n\tcreateDoStatement(condition: ExpressionNode, body: ExpressionNode, range?: [number, number]): DoWhileNode;\n\tcreateClassDeclaration(body: ClassBody, decorators: Decorator[], id: Identifier, superClass?: ExpressionNode, range?: [number, number]): ClassDeclaration;\n\tcreateFunctionDeclaration(formals: DeclarationExpression[], bodyBlock: BlockStatement, isAsync: boolean, isGenerator: boolean, name: Identifier, range?: [number, number]): FunctionDeclaration;\n\tcreateFunctionExpression(formals: DeclarationExpression[], bodyBlock: BlockStatement, isAsync: boolean, isGenerator: boolean, range?: [number, number]): FunctionExpression;\n\tcreateWhileStatement(condition: ExpressionNode, body: ExpressionNode, range?: [number, number]): WhileNode;\n\tcreateSwitchStatement(tag: ExpressionNode, cases: SwitchCase[], range?: [number, number]): SwitchStatement;\n\tcreateCaseBlock(test: ExpressionNode, block: BlockStatement, range?: [number, number]): SwitchCase;\n\tcreateDefaultClause(block: BlockStatement, range?: [number, number]): DefaultExpression;\n\tcreateWithStatement(object: ExpressionNode, body: ExpressionNode, range?: [number, number]): WithStatement;\n\tcreateForStatement(body: ExpressionNode, initializer: ExpressionNode, cond: ExpressionNode, next: ExpressionNode, range?: [number, number]): ForNode;\n\tcreateForOfStatement(initializer: ForDeclaration, enumerable: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForOfNode;\n\tcreateForAwaitOfStatement(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForAwaitOfNode;\n\tcreateForInStatement(initializer: ForDeclaration, enumerable: ExpressionNode, body: ExpressionNode, range?: [number, number]): ForInNode;\n\tcreateVariableDeclaration(id: DeclarationExpression, init?: ExpressionNode, range?: [number, number]): VariableDeclarator;\n\tcreateVariableStatement(variables: VariableDeclarator[], kind: 'let' | 'var' | 'const', range?: [number, number]): VariableDeclarationNode;\n\tcreateContinueStatement(label?: Identifier, range?: [number, number]): ContinueStatement;\n\tcreateBreakStatement(label?: Identifier, range?: [number, number]): BreakStatement;\n\tcreateReturnStatement(argument?: ExpressionNode, range?: [number, number]): ReturnStatement;\n\tcreateLabeledStatement(expression: Identifier, result: ExpressionNode, range?: [number, number]): LabeledStatement;\n\tcreateAssignmentPattern(left: DeclarationExpression, right: ExpressionNode, range?: [number, number]): AssignmentPattern;\n\tcreateSpreadElement(argument: ExpressionNode, range?: [number, number]): SpreadElement;\n\tcreateCommaListExpression(expressions: ExpressionNode[], range?: [number, number]): SequenceExpression;\n\tcreateTemplateExpression(quasis: string[], expressions: ExpressionNode[], range?: [number, number]): TemplateLiteral;\n\tcreateTaggedTemplateExpression(tag: ExpressionNode, quasis: string[], expressions: ExpressionNode[], range?: [number, number]): TaggedTemplateExpression;\n\tcreateNewExpression(className: ExpressionNode, parameters?: ExpressionNode[], range?: [number, number]): NewExpression;\n\tcreateObjectBindingPattern(properties: (Property | RestElement)[], range?: [number, number]): ObjectPattern;\n\tcreateObjectLiteralExpression(properties: Property[], range?: [number, number]): ObjectExpression;\n\tcreateArrayBindingPattern(elements: (DeclarationExpression | null)[], range?: [number, number]): ArrayPattern;\n\tcreateArrayLiteralExpression(elements: (ExpressionNode | SpreadElement | null)[], range?: [number, number]): ArrayExpression;\n\tcreateAssignment(operator: AssignmentOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number]): AssignmentExpression;\n\tcreateRestElement(argument: DeclarationExpression, range?: [number, number]): RestElement;\n\tcreateArrowFunction(params: DeclarationExpression[], body: ExpressionNode | ExpressionNode[], expression: boolean, async: boolean, range?: [number, number]): ArrowFunctionExpression;\n\tcreatePropertyDeclaration(key: ExpressionNode, value: DeclarationExpression | ExpressionNode, kind: 'init' | 'get' | 'set', method: boolean, shorthand: boolean, computed: boolean, range?: [number, number]): Property;\n\tcreateIdentifier(name: string, range?: [number, number]): Identifier;\n\tcreatePropertyAssignment(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean, range?: [number, number]): MemberExpression;\n\tcreatePipelineExpression(left: ExpressionNode, right: ExpressionNode, params?: (ExpressionNode | '?' | '...?')[], range?: [number, number]): PipelineExpression;\n\tcreateCallExpression(callee: ExpressionNode, params: ExpressionNode[], optional?: boolean, range?: [number, number]): CallExpression;\n\tcreateBindExpression(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean, range?: [number, number]): BindExpression;\n\tcreateChainExpression(expression: ExpressionNode, range?: [number, number]): ChainExpression;\n\tcreateLogicalExpression(operator: LogicalOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number],): LogicalExpression;\n\tcreateConditionalExpression(test: ExpressionNode, alternate: ExpressionNode, consequent: ExpressionNode, range?: [number, number]): ConditionalExpression;\n\tcreateYieldExpression(delegate: boolean, argument?: ExpressionNode, range?: [number, number]): YieldExpression;\n\tcreateMetaProperty(meta: Identifier, property: Identifier, range?: [number, number]): MetaProperty;\n\tcreateProgram(sourceType: ProgramSourceType, body: ExpressionNode[], range?: [number, number]): Program;\n\tcreateClassExpression(body: ClassBody, decorators: Decorator[], id?: Identifier, superClass?: ExpressionNode, range?: [number, number]): ClassExpression;\n\tcreateClassStaticBlockDeclaration(body: ExpressionNode[], range?: [number, number]): StaticBlock;\n\tcreateMethodSignature(kind: MethodDefinitionKind, key: ExpressionNode | PrivateIdentifier, value: FunctionExpression, decorators: Decorator[], computed: boolean, isStatic: boolean, range?: [number, number]): MethodDefinition;\n\tcreatePropertySignature(key: ExpressionNode | PrivateIdentifier, decorators: Decorator[], computed: boolean, isStatic: boolean, value?: ExpressionNode, range?: [number, number]): PropertyDefinition;\n\tcreateClassBody(body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[], range?: [number, number]): ClassBody;\n\tcreateNamespaceExportDeclaration(specifiers: ExportSpecifier[], declaration?: DeclarationExpression, source?: Literal<string>, assertions?: ImportAttribute[], range?: [number, number]): ExportNamedDeclaration;\n\tcreateExportSpecifier(local: Identifier, exported: Identifier, range?: [number, number]): ExportSpecifier;\n\tcreateImportSpecifier(local: Identifier, imported: Identifier, range?: [number, number]): ImportSpecifier;\n\tcreateImportDeclaration(source: Literal<string>, specifiers?: (ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier)[], assertions?: ImportAttribute[], range?: [number, number]): ImportDeclaration;\n\tcreateImportNamespaceSpecifier(local: Identifier, range?: [number, number]): ImportNamespaceSpecifier;\n\tcreateImportDefaultSpecifier(local: Identifier, range?: [number, number]): ImportDefaultSpecifier;\n\tcreateImportExpression(source: Literal<string>, attributes?: ExpressionNode, range?: [number, number]): ImportExpression;\n\tcreateAssertEntry(key: Identifier | Literal<string>, value: Literal<string>, range?: [number, number]): ImportAttribute;\n\tcreateExportDefault(declaration: FunctionDeclaration | ClassDeclaration | ExpressionNode, range?: [number, number],): ExportDefaultDeclaration;\n\tcreateExportAllDeclaration(source: Literal<string>, exported?: Identifier, assertions?: ImportAttribute[], range?: [number, number]): ExportAllDeclaration;\n\tcreateInfixExpression(operator: AssignmentOperator | LogicalOperator | BinaryOperator, left: ExpressionNode, right: ExpressionNode, range?: [number, number]): AssignmentExpression | LogicalExpression | BinaryExpression;\n\tcreateUnaryExpression(operator: UpdateOperator | UnaryOperator | 'await', expression: ExpressionNode, range?: [number, number]): UpdateExpression | UnaryExpression | AwaitExpression;\n\tcreateUpdateExpression(operator: UpdateOperator, argument: ExpressionNode, prefix: boolean, range?: [number, number]): UpdateExpression;\n\tcreateAwaitExpression(argument: ExpressionNode, range?: [number, number]): AwaitExpression;\n\tisIdentifier(node?: ExpressionNode): node is Identifier;\n\tisObjectExpression(node?: ExpressionNode): node is ObjectExpression;\n\tisArrayExpression(node?: ExpressionNode): node is ArrayExpression;\n\tisObjectPattern(node?: ExpressionNode): node is ObjectPattern;\n\tisArrayPattern(node?: ExpressionNode): node is ArrayPattern;\n\tisAssignmentPattern(node?: ExpressionNode): node is AssignmentPattern;\n\tisPattern(node?: ExpressionNode): boolean;\n\tcanBePattern(node?: ExpressionNode): node is (ObjectExpression | ArrayExpression);\n\tisProperty(node?: ExpressionNode): node is Property;\n\tisMemberExpression(node?: ExpressionNode): node is MemberExpression;\n\tisPropertyOrMemberExpression(node?: ExpressionNode): node is (Property | MemberExpression);\n\tisEmptyStatement(expression: ExpressionNode): expression is EmptyStatement;\n\tisSequenceExpression(node: ExpressionNode): node is SequenceExpression;\n\tisSuper(node: ExpressionNode): node is Super;\n\tisAssignmentExpression(node: ExpressionNode): node is AssignmentExpression;\n\tisGroupingExpression(node: ExpressionNode): node is GroupingExpression;\n\tisSpreadElement(node: ExpressionNode): node is SpreadElement;\n}\n"]}
package/v8/nodes.d.ts CHANGED
@@ -1,14 +0,0 @@
1
- import type { ExpressionNode } from '../api/expression.js';
2
- import { Token, TokenExpression } from './token.js';
3
- import { UnaryExpression } from '../api/operators/unary.js';
4
- import { Literal } from '../api/definition/values.js';
5
- import { AwaitExpression } from '../api/operators/await.js';
6
- import { UpdateExpression } from '../api/operators/update.js';
7
- export declare function creteInfixExpression(op: string, left: ExpressionNode, right: ExpressionNode): ExpressionNode;
8
- export declare function createTernaryExpression(op: string, logical: ExpressionNode, ifTrue: ExpressionNode, ifFalse: ExpressionNode): ExpressionNode;
9
- export declare function creteCommaExpression(nodes: ExpressionNode[]): ExpressionNode;
10
- export declare function shortcutNumericLiteralBinaryExpression(x: ExpressionNode, y: ExpressionNode, op: Token): ExpressionNode;
11
- export declare function coverValue(value: any): false | Literal<boolean> | Literal<null> | Literal<undefined> | Literal<string | number | bigint>;
12
- export declare function buildUnaryExpression(expression: ExpressionNode, op: Token): UnaryExpression | AwaitExpression | UpdateExpression;
13
- export declare function buildPostfixExpression(expression: ExpressionNode, op: Token): UpdateExpression;
14
- export declare function expressionFromLiteral(te: TokenExpression): ExpressionNode | Literal<boolean> | Literal<null> | Literal<undefined>;
package/v8/nodes.js CHANGED
@@ -1,153 +1,2 @@
1
- import { Token } from './token.js';
2
- import { AssignmentExpression } from '../api/operators/assignment.js';
3
- import { LogicalExpression } from '../api/operators/logical.js';
4
- import { UnaryExpression } from '../api/operators/unary.js';
5
- import { ConditionalExpression } from '../api/operators/ternary.js';
6
- import { SequenceExpression } from '../api/operators/comma.js';
7
- import { Literal, TrueNode, FalseNode, NullNode, UndefinedNode } from '../api/definition/values.js';
8
- import { AwaitExpression } from '../api/operators/await.js';
9
- import { UpdateExpression } from '../api/operators/update.js';
10
- import { BinaryExpression } from '../api/operators/binary.js';
11
- export function creteInfixExpression(op, left, right) {
12
- switch (op) {
13
- case '=':
14
- case '+=':
15
- case '-=':
16
- case '**=':
17
- case '/=':
18
- case '%=':
19
- case '<<=':
20
- case '>>=':
21
- case '>>>=':
22
- case '&=':
23
- case '^=':
24
- case '|=':
25
- case '&&=':
26
- case '||=':
27
- case '??=':
28
- return new AssignmentExpression(op, left, right);
29
- case '&&':
30
- case '||':
31
- case '??':
32
- return new LogicalExpression(op, left, right);
33
- case '**':
34
- case '*':
35
- case '/':
36
- case '%':
37
- case '+':
38
- case '-':
39
- case '<':
40
- case '<=':
41
- case '>':
42
- case '>=':
43
- case 'in':
44
- case 'instanceof':
45
- case '==':
46
- case '!=':
47
- case '===':
48
- case '!==':
49
- case '<<':
50
- case '>>':
51
- case '>>>':
52
- case '&':
53
- case '^':
54
- case '|':
55
- case '>?':
56
- case '<?':
57
- case '<=>':
58
- return new BinaryExpression(op, left, right);
59
- default:
60
- throw new Error(`Not Supported Operator: ${op}`);
61
- }
62
- }
63
- export function createTernaryExpression(op, logical, ifTrue, ifFalse) {
64
- switch (op) {
65
- case '?':
66
- return new ConditionalExpression(logical, ifTrue, ifFalse);
67
- default:
68
- throw new Error(`${op} is not ternary operator`);
69
- }
70
- }
71
- export function creteCommaExpression(nodes) {
72
- return new SequenceExpression(nodes);
73
- }
74
- const USELESS_STACK = null; //Object.create(null);
75
- const ALLOWED_TYPES = ['string', 'number', 'bigint', 'boolean'];
76
- export function shortcutNumericLiteralBinaryExpression(x, y, op) {
77
- const expression = creteInfixExpression(op.getName(), x, y);
78
- if (x instanceof Literal && y instanceof Literal) {
79
- const typeX = typeof x.getValue();
80
- const typeY = typeof y.getValue();
81
- if (x === y && ALLOWED_TYPES.indexOf(typeX) > -1) {
82
- const result = expression.get(USELESS_STACK);
83
- const rawString = `${x.toString()} ${op.getName()} ${x.toString()}`;
84
- return new Literal(result, rawString);
85
- }
86
- }
87
- return expression;
88
- }
89
- export function coverValue(value) {
90
- switch (typeof value) {
91
- case 'undefined': return UndefinedNode;
92
- case 'boolean': return value ? TrueNode : FalseNode;
93
- case 'number':
94
- case 'bigint':
95
- case 'string':
96
- return new Literal(value);
97
- case 'object':
98
- if (value === null) {
99
- return NullNode;
100
- }
101
- // never reach
102
- case 'function':
103
- case 'symbol':
104
- default:
105
- return false;
106
- }
107
- }
108
- export function buildUnaryExpression(expression, op) {
109
- const name = op.getName();
110
- switch (name) {
111
- case '++':
112
- case '--':
113
- return new UpdateExpression(name, expression, true);
114
- case '+':
115
- case '-':
116
- case '!':
117
- case '~':
118
- case 'typeof':
119
- case 'void':
120
- case 'delete':
121
- return new UnaryExpression(name, expression);
122
- case 'await':
123
- return new AwaitExpression(expression);
124
- default:
125
- throw new Error(`${op} is not prefix operator`);
126
- }
127
- }
128
- export function buildPostfixExpression(expression, op) {
129
- const name = op.getName();
130
- switch (name) {
131
- case '++':
132
- case '--':
133
- return new UpdateExpression(name, expression, false);
134
- default:
135
- throw new Error(`${op} is not postfix operator`);
136
- }
137
- }
138
- export function expressionFromLiteral(te) {
139
- switch (te.token) {
140
- case Token.NUMBER:
141
- case Token.BIGINT:
142
- case Token.STRING:
143
- case Token.REGEXP_LITERAL:
144
- case Token.IDENTIFIER:
145
- return te.getValue();
146
- case Token.NULL_LITERAL: return NullNode;
147
- case Token.TRUE_LITERAL: return TrueNode;
148
- case Token.FALSE_LITERAL: return FalseNode;
149
- default:
150
- case Token.UNDEFINED_LITERAL: return UndefinedNode;
151
- }
152
- }
1
+ "use strict";
153
2
  //# sourceMappingURL=nodes.js.map
package/v8/nodes.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/expressions/v8/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport type { Stack } from '../scope/stack.js';\nimport { Token, TokenExpression } from './token.js';\nimport { AssignmentExpression } from '../api/operators/assignment.js';\nimport { LogicalExpression } from '../api/operators/logical.js';\nimport { UnaryExpression } from '../api/operators/unary.js';\nimport { ConditionalExpression } from '../api/operators/ternary.js';\nimport { SequenceExpression } from '../api/operators/comma.js';\nimport { Literal, TrueNode, FalseNode, NullNode, UndefinedNode } from '../api/definition/values.js';\nimport { AwaitExpression } from '../api/operators/await.js';\nimport { UpdateExpression } from '../api/operators/update.js';\nimport { BinaryExpression } from '../api/operators/binary.js';\n\nexport function creteInfixExpression(op: string, left: ExpressionNode, right: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '=':\n\t\tcase '+=':\n\t\tcase '-=':\n\t\tcase '**=':\n\t\tcase '/=':\n\t\tcase '%=':\n\t\tcase '<<=':\n\t\tcase '>>=':\n\t\tcase '>>>=':\n\t\tcase '&=':\n\t\tcase '^=':\n\t\tcase '|=':\n\t\tcase '&&=':\n\t\tcase '||=':\n\t\tcase '??=':\n\t\t\treturn new AssignmentExpression(op, left, right);\n\t\tcase '&&':\n\t\tcase '||':\n\t\tcase '??':\n\t\t\treturn new LogicalExpression(op, left, right);\n\t\tcase '**':\n\t\tcase '*':\n\t\tcase '/':\n\t\tcase '%':\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '<':\n\t\tcase '<=':\n\t\tcase '>':\n\t\tcase '>=':\n\t\tcase 'in':\n\t\tcase 'instanceof':\n\t\tcase '==':\n\t\tcase '!=':\n\t\tcase '===':\n\t\tcase '!==':\n\t\tcase '<<':\n\t\tcase '>>':\n\t\tcase '>>>':\n\t\tcase '&':\n\t\tcase '^':\n\t\tcase '|':\n\t\tcase '>?':\n\t\tcase '<?':\n\t\tcase '<=>':\n\t\t\treturn new BinaryExpression(op, left, right);\n\t\tdefault:\n\t\t\tthrow new Error(`Not Supported Operator: ${op}`);\n\t}\n}\n\nexport function createTernaryExpression(op: string, logical: ExpressionNode, ifTrue: ExpressionNode, ifFalse: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '?':\n\t\t\treturn new ConditionalExpression(logical, ifTrue, ifFalse);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not ternary operator`);\n\n\t}\n}\n\nexport function creteCommaExpression(nodes: ExpressionNode[]): ExpressionNode {\n\treturn new SequenceExpression(nodes);\n}\n\nconst USELESS_STACK: Stack = null as unknown as Stack;//Object.create(null);\nconst ALLOWED_TYPES = ['string', 'number', 'bigint', 'boolean'];\n\nexport function shortcutNumericLiteralBinaryExpression(x: ExpressionNode, y: ExpressionNode, op: Token): ExpressionNode {\n\tconst expression = creteInfixExpression(op.getName(), x, y);\n\n\tif (x instanceof Literal && y instanceof Literal) {\n\t\tconst typeX = typeof x.getValue();\n\t\tconst typeY = typeof y.getValue();\n\t\tif (x === y && ALLOWED_TYPES.indexOf(typeX) > -1) {\n\t\t\tconst result = expression.get(USELESS_STACK);\n\t\t\tconst rawString = `${x.toString()} ${op.getName()} ${x.toString()}`;\n\t\t\treturn new Literal<any>(result, rawString);\n\t\t}\n\t}\n\treturn expression!;\n}\nexport function coverValue(value: any) {\n\tswitch (typeof value) {\n\t\tcase 'undefined': return UndefinedNode;\n\t\tcase 'boolean': return value ? TrueNode : FalseNode;\n\t\tcase 'number':\n\t\tcase 'bigint':\n\t\tcase 'string':\n\t\t\treturn new Literal<number | string | bigint>(value);\n\t\tcase 'object':\n\t\t\tif (value === null) {\n\t\t\t\treturn NullNode;\n\t\t\t}\n\t\t// never reach\n\t\tcase 'function':\n\t\tcase 'symbol':\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function buildUnaryExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, true);\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '!':\n\t\tcase '~':\n\t\tcase 'typeof':\n\t\tcase 'void':\n\t\tcase 'delete':\n\t\t\treturn new UnaryExpression(name, expression);\n\t\tcase 'await':\n\t\t\treturn new AwaitExpression(expression);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not prefix operator`);\n\t}\n}\n\nexport function buildPostfixExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, false);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not postfix operator`);\n\t}\n}\n\nexport function expressionFromLiteral(te: TokenExpression) {\n\tswitch (te.token) {\n\t\tcase Token.NUMBER:\n\t\tcase Token.BIGINT:\n\t\tcase Token.STRING:\n\t\tcase Token.REGEXP_LITERAL:\n\t\tcase Token.IDENTIFIER:\n\t\t\treturn te.getValue();\n\n\t\tcase Token.NULL_LITERAL: return NullNode;\n\t\tcase Token.TRUE_LITERAL: return TrueNode;\n\t\tcase Token.FALSE_LITERAL: return FalseNode;\n\t\tdefault:\n\t\tcase Token.UNDEFINED_LITERAL: return UndefinedNode;\n\t}\n}\n"]}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/expressions/v8/nodes.ts"],"names":[],"mappings":"","sourcesContent":["\n"]}
package/v8/parser.d.ts CHANGED
@@ -1,17 +1,21 @@
1
1
  import type { ExpressionNode } from '../api/expression.js';
2
- import { InlineParserOptions, JavaScriptInlineParser } from './inline.js';
3
- import { TokenExpression } from './token.js';
2
+ import type { NodeFactory } from './node.js';
4
3
  import { Class, ClassBody, ClassDeclaration, ClassExpression, MethodDefinition, PropertyDefinition, StaticBlock } from '../api/class/class.js';
5
4
  import { Identifier, Literal } from '../api/definition/values.js';
6
- import { VariableDeclarationNode } from '../api/statement/declarations/declares.js';
7
- import { TokenStream } from './stream.js';
5
+ import { ImportAttribute } from '../api/module/common.js';
8
6
  import { ExportDefaultDeclaration, ExportSpecifier } from '../api/module/export.js';
9
7
  import { ImportSpecifier } from '../api/module/import.js';
10
- import { ImportAttribute } from '../api/module/common.js';
8
+ import { Program } from '../api/program.js';
11
9
  import { ClassInfo, ClassLiteralPropertyKind, PropertyKindInfo, VariableDeclarationContext } from './enums.js';
10
+ import { InlineParserOptions, JavaScriptInlineParser, PositionMark } from './inline.js';
11
+ import { TokenStream } from './stream.js';
12
+ import { TokenExpression } from './token.js';
13
+ import { WithStatement } from '../api/statement/control/with.js';
12
14
  import { LanguageMode } from './language.js';
13
- export declare type ParserOptions = {
15
+ export type ParserOptions = {
14
16
  mode?: LanguageMode;
17
+ factory?: NodeFactory;
18
+ addLocation?: boolean;
15
19
  };
16
20
  export declare class JavaScriptParser extends JavaScriptInlineParser {
17
21
  /**
@@ -19,15 +23,15 @@ export declare class JavaScriptParser extends JavaScriptInlineParser {
19
23
  * @param source
20
24
  * @returns
21
25
  */
22
- static parse(source: string | TokenExpression[] | TokenStream, { mode }?: ParserOptions): ExpressionNode;
26
+ static parse(source: string | TokenExpression[] | TokenStream, { mode, factory, addLocation }?: ParserOptions): Program;
23
27
  /**
24
28
  * parse inline code like that used in html 2 or 1 way binding
25
29
  */
26
- static parseScript(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions): ExpressionNode;
27
- scan(): ExpressionNode;
28
- protected parseNewTargetExpression(): ExpressionNode;
30
+ static parseScript<T extends ExpressionNode>(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions): T;
31
+ scan(): Program;
32
+ protected parseNewTargetExpression(start?: PositionMark): ExpressionNode;
29
33
  protected parseClassExpression(): ClassExpression;
30
- protected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean): ClassDeclaration;
34
+ protected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): ClassDeclaration;
31
35
  protected parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): Class;
32
36
  protected declarePublicClassMethod(name: ExpressionNode | undefined, property: MethodDefinition, isConstructor: boolean, classInfo: ClassInfo): void;
33
37
  protected declarePublicClassField(property: PropertyDefinition, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo): void;
@@ -35,24 +39,23 @@ export declare class JavaScriptParser extends JavaScriptInlineParser {
35
39
  protected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: PropertyKindInfo, hasExtends: boolean): ExpressionNode | Literal<null> | MethodDefinition | PropertyDefinition;
36
40
  protected checkClassMethodName(propInfo: PropertyKindInfo, classInfo: ClassInfo): void;
37
41
  protected parseClassStaticBlock(classInfo: ClassInfo): StaticBlock;
38
- protected declareClass(variableName: string, value: ExpressionNode, names: string[] | undefined): ExpressionNode;
39
- protected declareVariable(name: string, mode: 'let' | 'const' | 'var'): VariableDeclarationNode;
40
- protected newClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode | undefined, kind: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean): MethodDefinition | PropertyDefinition;
42
+ protected newClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode | undefined, kind: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean, start: PositionMark): MethodDefinition | PropertyDefinition;
41
43
  protected parseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode | undefined;
42
44
  protected setFunctionNameFromPropertyName(property: ExpressionNode, name: string, prefix?: string): void;
43
45
  protected parseSuperExpression(): ExpressionNode;
44
- protected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode): ClassBody;
46
+ protected rewriteClassLiteral(classInfo: ClassInfo, name?: ExpressionNode, range?: [number, number]): ClassBody;
45
47
  protected parseModuleItemList(): ExpressionNode[];
46
48
  protected parseModuleItem(): ExpressionNode | undefined;
47
49
  protected parseExportDeclaration(): ExpressionNode | undefined;
48
50
  protected parseImportDeclaration(): ExpressionNode | undefined;
49
51
  protected parseImportExpressions(): ExpressionNode;
50
- protected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]): VariableDeclarationNode;
52
+ protected parseVariableStatement(varContext: VariableDeclarationContext, names: string[]): import("../index.js").VariableDeclarationNode;
51
53
  protected parseImportAssertClause(): ImportAttribute[] | undefined;
52
54
  protected parseModuleSpecifier(): Literal<string>;
53
55
  protected parseExportClause(): ExportSpecifier[];
54
56
  protected parseExportSpecifierName(): Identifier | Literal<string>;
55
57
  protected parseNamedImports(): ImportSpecifier[];
56
- protected parseExportDefault(): ExportDefaultDeclaration;
57
- protected parseExportStar(): ExpressionNode | undefined;
58
+ protected parseExportDefault(start: PositionMark): ExportDefaultDeclaration;
59
+ protected parseExportStar(start: PositionMark): ExpressionNode | undefined;
60
+ protected parseWithStatement(): WithStatement;
58
61
  }