@ibyar/expressions 0.5.1 → 0.5.6

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 (187) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -4
  3. package/api/abstract.d.ts +5 -6
  4. package/api/abstract.js +3 -3
  5. package/api/abstract.js.map +1 -1
  6. package/api/class/class.d.ts +202 -0
  7. package/api/class/class.js +635 -0
  8. package/api/class/class.js.map +1 -0
  9. package/api/class/decorator.d.ts +20 -0
  10. package/api/class/decorator.js +48 -0
  11. package/api/class/decorator.js.map +1 -0
  12. package/api/computing/call.d.ts +3 -1
  13. package/api/computing/call.js +16 -4
  14. package/api/computing/call.js.map +1 -1
  15. package/api/computing/debugger.d.ts +15 -0
  16. package/api/computing/debugger.js +35 -0
  17. package/api/computing/debugger.js.map +1 -0
  18. package/api/computing/new.d.ts +2 -1
  19. package/api/computing/new.js +4 -0
  20. package/api/computing/new.js.map +1 -1
  21. package/api/computing/rest.d.ts +6 -6
  22. package/api/computing/rest.js +5 -2
  23. package/api/computing/rest.js.map +1 -1
  24. package/api/computing/return.d.ts +2 -1
  25. package/api/computing/return.js +3 -0
  26. package/api/computing/return.js.map +1 -1
  27. package/api/computing/spread.d.ts +2 -1
  28. package/api/computing/spread.js +5 -2
  29. package/api/computing/spread.js.map +1 -1
  30. package/api/computing/throw.d.ts +2 -1
  31. package/api/computing/throw.js +3 -0
  32. package/api/computing/throw.js.map +1 -1
  33. package/api/computing/yield.d.ts +2 -1
  34. package/api/computing/yield.js +3 -0
  35. package/api/computing/yield.js.map +1 -1
  36. package/api/definition/array.d.ts +12 -12
  37. package/api/definition/array.js +31 -25
  38. package/api/definition/array.js.map +1 -1
  39. package/api/definition/bind.d.ts +2 -2
  40. package/api/definition/bind.js +1 -1
  41. package/api/definition/bind.js.map +1 -1
  42. package/api/definition/function.d.ts +40 -51
  43. package/api/definition/function.js +291 -309
  44. package/api/definition/function.js.map +1 -1
  45. package/api/definition/member.d.ts +2 -2
  46. package/api/definition/member.js +1 -1
  47. package/api/definition/member.js.map +1 -1
  48. package/api/definition/object.d.ts +15 -12
  49. package/api/definition/object.js +43 -13
  50. package/api/definition/object.js.map +1 -1
  51. package/api/definition/statement.d.ts +2 -2
  52. package/api/definition/statement.js +7 -3
  53. package/api/definition/statement.js.map +1 -1
  54. package/api/definition/values.d.ts +35 -50
  55. package/api/definition/values.js +66 -149
  56. package/api/definition/values.js.map +1 -1
  57. package/api/deserialize/deserialize.d.ts +2 -1
  58. package/api/deserialize/deserialize.js +4 -1
  59. package/api/deserialize/deserialize.js.map +1 -1
  60. package/api/deserialize/type-store.d.ts +2 -2
  61. package/api/deserialize/type-store.js.map +1 -1
  62. package/api/expression.d.ts +13 -18
  63. package/api/expression.js.map +1 -1
  64. package/api/index.d.ts +2 -0
  65. package/api/index.js +2 -0
  66. package/api/index.js.map +1 -1
  67. package/api/module/common.d.ts +29 -0
  68. package/api/module/common.js +71 -0
  69. package/api/module/common.js.map +1 -0
  70. package/api/module/export.d.ts +66 -25
  71. package/api/module/export.js +270 -58
  72. package/api/module/export.js.map +1 -1
  73. package/api/module/import.d.ts +61 -25
  74. package/api/module/import.js +226 -68
  75. package/api/module/import.js.map +1 -1
  76. package/api/operators/assignment.d.ts +2 -2
  77. package/api/operators/assignment.js +1 -1
  78. package/api/operators/assignment.js.map +1 -1
  79. package/api/operators/await.d.ts +2 -2
  80. package/api/operators/await.js +1 -1
  81. package/api/operators/await.js.map +1 -1
  82. package/api/operators/binary.d.ts +2 -2
  83. package/api/operators/binary.js +1 -1
  84. package/api/operators/binary.js.map +1 -1
  85. package/api/operators/chaining.d.ts +2 -2
  86. package/api/operators/chaining.js +1 -1
  87. package/api/operators/chaining.js.map +1 -1
  88. package/api/operators/comma.d.ts +2 -2
  89. package/api/operators/comma.js +2 -2
  90. package/api/operators/comma.js.map +1 -1
  91. package/api/operators/grouping.d.ts +2 -2
  92. package/api/operators/grouping.js +1 -1
  93. package/api/operators/grouping.js.map +1 -1
  94. package/api/operators/logical.d.ts +2 -2
  95. package/api/operators/logical.js +1 -1
  96. package/api/operators/logical.js.map +1 -1
  97. package/api/operators/pipeline.d.ts +2 -2
  98. package/api/operators/pipeline.js +1 -1
  99. package/api/operators/pipeline.js.map +1 -1
  100. package/api/operators/ternary.d.ts +2 -2
  101. package/api/operators/ternary.js +1 -1
  102. package/api/operators/ternary.js.map +1 -1
  103. package/api/operators/unary.d.ts +3 -3
  104. package/api/operators/unary.js +4 -3
  105. package/api/operators/unary.js.map +1 -1
  106. package/api/operators/update.d.ts +2 -2
  107. package/api/operators/update.js +1 -1
  108. package/api/operators/update.js.map +1 -1
  109. package/api/{app/program.d.ts → program.d.ts} +8 -9
  110. package/api/program.js +45 -0
  111. package/api/program.js.map +1 -0
  112. package/api/statement/control/block.d.ts +4 -5
  113. package/api/statement/control/block.js +22 -23
  114. package/api/statement/control/block.js.map +1 -1
  115. package/api/statement/control/empty.d.ts +1 -1
  116. package/api/statement/control/empty.js.map +1 -1
  117. package/api/statement/control/if.d.ts +2 -2
  118. package/api/statement/control/if.js +1 -1
  119. package/api/statement/control/if.js.map +1 -1
  120. package/api/statement/control/switch.d.ts +4 -5
  121. package/api/statement/control/switch.js +13 -9
  122. package/api/statement/control/switch.js.map +1 -1
  123. package/api/statement/control/terminate.d.ts +38 -13
  124. package/api/statement/control/terminate.js +81 -20
  125. package/api/statement/control/terminate.js.map +1 -1
  126. package/api/statement/declarations/declares.d.ts +17 -16
  127. package/api/statement/declarations/declares.js +24 -19
  128. package/api/statement/declarations/declares.js.map +1 -1
  129. package/api/statement/iterations/for.d.ts +5 -5
  130. package/api/statement/iterations/for.js +29 -23
  131. package/api/statement/iterations/for.js.map +1 -1
  132. package/api/statement/iterations/while.d.ts +3 -3
  133. package/api/statement/iterations/while.js +17 -13
  134. package/api/statement/iterations/while.js.map +1 -1
  135. package/api/utils.d.ts +5 -0
  136. package/api/utils.js +4 -0
  137. package/api/utils.js.map +1 -0
  138. package/package.json +5 -5
  139. package/scope/event.d.ts +2 -2
  140. package/scope/event.js +8 -14
  141. package/scope/event.js.map +1 -1
  142. package/scope/finalizer.d.ts +4 -0
  143. package/scope/finalizer.js +11 -0
  144. package/scope/finalizer.js.map +1 -0
  145. package/scope/proxy.d.ts +2 -3
  146. package/scope/proxy.js +22 -26
  147. package/scope/proxy.js.map +1 -1
  148. package/scope/scope.d.ts +42 -53
  149. package/scope/scope.js +73 -143
  150. package/scope/scope.js.map +1 -1
  151. package/scope/stack.d.ts +43 -26
  152. package/scope/stack.js +148 -102
  153. package/scope/stack.js.map +1 -1
  154. package/v8/enums.d.ts +204 -0
  155. package/v8/enums.js +375 -0
  156. package/v8/enums.js.map +1 -0
  157. package/v8/index.d.ts +2 -1
  158. package/v8/index.js +2 -1
  159. package/v8/index.js.map +1 -1
  160. package/v8/inline.d.ts +177 -0
  161. package/v8/inline.js +1973 -0
  162. package/v8/inline.js.map +1 -0
  163. package/v8/nodes.d.ts +8 -7
  164. package/v8/nodes.js +37 -63
  165. package/v8/nodes.js.map +1 -1
  166. package/v8/parser.d.ts +41 -151
  167. package/v8/parser.js +507 -1578
  168. package/v8/parser.js.map +1 -1
  169. package/v8/stream.d.ts +35 -3
  170. package/v8/stream.js +616 -164
  171. package/v8/stream.js.map +1 -1
  172. package/v8/token.d.ts +15 -9
  173. package/v8/token.js +79 -46
  174. package/v8/token.js.map +1 -1
  175. package/visit/visitor.js +4 -7
  176. package/visit/visitor.js.map +1 -1
  177. package/api/app/class.d.ts +0 -117
  178. package/api/app/class.js +0 -292
  179. package/api/app/class.js.map +0 -1
  180. package/api/app/program.js +0 -39
  181. package/api/app/program.js.map +0 -1
  182. package/api/module/module.d.ts +0 -26
  183. package/api/module/module.js +0 -63
  184. package/api/module/module.js.map +0 -1
  185. package/v8/app.d.ts +0 -0
  186. package/v8/app.js +0 -2
  187. package/v8/app.js.map +0 -1
@@ -0,0 +1,635 @@
1
+ var Super_1, MetaProperty_1, PrivateIdentifier_1, StaticBlock_1, MethodDefinition_1, PropertyDefinition_1, AccessorProperty_1, ClassBody_1, ClassDeclaration_1, ClassExpression_1;
2
+ import { __decorate as __decorate_1, __metadata } from "tslib";
3
+ import { __decorate } from 'tslib';
4
+ import { AbstractExpressionNode } from '../abstract.js';
5
+ import { Deserializer } from '../deserialize/deserialize.js';
6
+ import { Identifier } from '../definition/values.js';
7
+ import { MemberExpression } from '../definition/member.js';
8
+ import { FunctionExpression } from '../definition/function.js';
9
+ import { BlockStatement } from '../statement/control/block.js';
10
+ import { CallExpression } from '../computing/call.js';
11
+ const TEMP_CLASS_NAME = Symbol('TempClassName');
12
+ const SUPER = Symbol('Super');
13
+ const NEW_TARGET = Symbol('NewTarget');
14
+ const IMPORT_META = Symbol('ImportMeta');
15
+ const STACK = Symbol('Stack');
16
+ const GET_PARAMETERS = Symbol('GetParameters');
17
+ const GET_SUPER_PROPERTY = Symbol('GetSuperProperty');
18
+ const CALL_SUPER_Method = Symbol('CallSuperMethod');
19
+ const CONSTRUCTOR = Symbol('Constructor');
20
+ const PRIVATE_SYMBOL = Symbol('Private');
21
+ const INSTANCE_PRIVATE_SYMBOL = Symbol('InstancePrivate');
22
+ const STATIC_INITIALIZATION_BLOCK = Symbol('StaticBlock');
23
+ let Super = Super_1 = class Super extends AbstractExpressionNode {
24
+ constructor() {
25
+ super();
26
+ }
27
+ static fromJSON(node) {
28
+ return Super_1.INSTANCE;
29
+ }
30
+ shareVariables(scopeList) { }
31
+ set(stack, value) {
32
+ throw new Error('Super.#set() Method not implemented.');
33
+ }
34
+ get(stack, thisContext) {
35
+ throw new Error('Super.#get() Method not implemented.');
36
+ }
37
+ dependency(computed) {
38
+ throw new Error('Super.#dependency() Method not implemented.');
39
+ }
40
+ dependencyPath(computed) {
41
+ throw new Error('Super.#dependencyPath() Method not implemented.');
42
+ }
43
+ toString() {
44
+ return `super`;
45
+ }
46
+ toJson() {
47
+ return {};
48
+ }
49
+ };
50
+ Super.INSTANCE = new Super_1();
51
+ Super = Super_1 = __decorate_1([
52
+ Deserializer('Super'),
53
+ __metadata("design:paramtypes", [])
54
+ ], Super);
55
+ export { Super };
56
+ let MetaProperty = MetaProperty_1 = class MetaProperty extends MemberExpression {
57
+ constructor(meta, property) {
58
+ super(meta, property, false);
59
+ this.meta = meta;
60
+ }
61
+ static getJsonName(identifier) {
62
+ return Reflect.get(identifier, 'name');
63
+ }
64
+ static fromJSON(node, deserializer) {
65
+ if (MetaProperty_1.getJsonName(node.meta) === 'new' && MetaProperty_1.getJsonName(node.property) === 'target') {
66
+ return MetaProperty_1.NewTarget;
67
+ }
68
+ else if (MetaProperty_1.getJsonName(node.meta) === 'import' && MetaProperty_1.getJsonName(node.property) === 'meta') {
69
+ return MetaProperty_1.ImportMeta;
70
+ }
71
+ return new MetaProperty_1(deserializer(node.meta), deserializer(node.property));
72
+ }
73
+ static visit(node, visitNode) {
74
+ visitNode(node.meta);
75
+ visitNode(node.property);
76
+ }
77
+ getMeta() {
78
+ return this.meta;
79
+ }
80
+ shareVariables(scopeList) { }
81
+ get(stack, thisContext) {
82
+ if (MetaProperty_1.getJsonName(this.meta) === 'new' && MetaProperty_1.getJsonName(this.property) === 'target') {
83
+ return stack.get(NEW_TARGET);
84
+ }
85
+ else if (MetaProperty_1.getJsonName(this.meta) === 'import' && MetaProperty_1.getJsonName(this.property) === 'meta') {
86
+ const importObject = stack.getModule()?.get('import');
87
+ return importObject['meta'];
88
+ }
89
+ return super.get(stack, thisContext);
90
+ }
91
+ toString() {
92
+ return `${this.meta.toString()}.${this.property.toString()}`;
93
+ }
94
+ toJson() {
95
+ return {
96
+ meta: this.meta.toJSON(),
97
+ property: this.property.toJSON(),
98
+ };
99
+ }
100
+ };
101
+ MetaProperty.NewTarget = new MetaProperty_1(new Identifier('new'), new Identifier('target'));
102
+ MetaProperty.ImportMeta = new MetaProperty_1(new Identifier('import'), new Identifier('meta'));
103
+ MetaProperty = MetaProperty_1 = __decorate_1([
104
+ Deserializer('MetaProperty'),
105
+ __metadata("design:paramtypes", [Identifier, Identifier])
106
+ ], MetaProperty);
107
+ export { MetaProperty };
108
+ let PrivateIdentifier = PrivateIdentifier_1 = class PrivateIdentifier extends AbstractExpressionNode {
109
+ constructor(name) {
110
+ super();
111
+ this.name = name;
112
+ }
113
+ static fromJSON(node) {
114
+ return new PrivateIdentifier_1(node.name);
115
+ }
116
+ getName() {
117
+ return this.name;
118
+ }
119
+ set(stack, value) {
120
+ const privateScope = stack.findScope(PRIVATE_SYMBOL);
121
+ privateScope.getScope(PRIVATE_SYMBOL)?.set(this.name, value);
122
+ }
123
+ get(stack, thisContext) {
124
+ if (thisContext) {
125
+ return thisContext[PRIVATE_SYMBOL][this.name];
126
+ }
127
+ let privateObj = stack.get('this');
128
+ if (privateObj) {
129
+ return privateObj[PRIVATE_SYMBOL][this.name];
130
+ }
131
+ privateObj = stack.get(PRIVATE_SYMBOL);
132
+ return privateObj[this.name];
133
+ }
134
+ dependency(computed) {
135
+ return [];
136
+ }
137
+ dependencyPath(computed) {
138
+ return [];
139
+ }
140
+ shareVariables(scopeList) { }
141
+ toString() {
142
+ return `#${this.name}`;
143
+ }
144
+ toJson() {
145
+ return {
146
+ name: this.name
147
+ };
148
+ }
149
+ };
150
+ PrivateIdentifier = PrivateIdentifier_1 = __decorate_1([
151
+ Deserializer('PrivateIdentifier'),
152
+ __metadata("design:paramtypes", [String])
153
+ ], PrivateIdentifier);
154
+ export { PrivateIdentifier };
155
+ let StaticBlock = StaticBlock_1 = class StaticBlock extends BlockStatement {
156
+ static fromJSON(node, deserializer) {
157
+ return new StaticBlock_1(deserializer(node.body));
158
+ }
159
+ constructor(body) {
160
+ super(body);
161
+ }
162
+ get(stack, classConstructor) {
163
+ const constructor = classConstructor;
164
+ constructor[STATIC_INITIALIZATION_BLOCK].push(() => super.get(stack));
165
+ }
166
+ toString() {
167
+ return `static ${super.toString()}`;
168
+ }
169
+ toJson() {
170
+ return {
171
+ body: this.body.map(node => node.toJSON())
172
+ };
173
+ }
174
+ };
175
+ StaticBlock = StaticBlock_1 = __decorate_1([
176
+ Deserializer('StaticBlock'),
177
+ __metadata("design:paramtypes", [Array])
178
+ ], StaticBlock);
179
+ export { StaticBlock };
180
+ export class AbstractDefinition extends AbstractExpressionNode {
181
+ constructor(key, decorators, computed, isStatic, value) {
182
+ super();
183
+ this.key = key;
184
+ this.decorators = decorators;
185
+ this.computed = computed;
186
+ this.value = value;
187
+ this.static = isStatic;
188
+ }
189
+ getKey() {
190
+ return this.key;
191
+ }
192
+ getValue() {
193
+ return this.value;
194
+ }
195
+ isComputed() {
196
+ return this.computed;
197
+ }
198
+ isStatic() {
199
+ return this.static;
200
+ }
201
+ getDecorators() {
202
+ return this.decorators;
203
+ }
204
+ shareVariables(scopeList) { }
205
+ set(stack, value) {
206
+ throw new Error('AbstractDefinition.#set() Method not implemented.');
207
+ }
208
+ dependency(computed) {
209
+ return [];
210
+ }
211
+ dependencyPath(computed) {
212
+ return [];
213
+ }
214
+ getTarget(classConstructor) {
215
+ return this.static
216
+ ? (this.key instanceof PrivateIdentifier ? classConstructor[PRIVATE_SYMBOL] : classConstructor)
217
+ : (this.key instanceof PrivateIdentifier ? classConstructor[INSTANCE_PRIVATE_SYMBOL] : classConstructor.prototype);
218
+ }
219
+ getKeyName(stack) {
220
+ switch (true) {
221
+ case this.computed: return this.key.get(stack);
222
+ case this.key instanceof Identifier:
223
+ case this.key instanceof PrivateIdentifier: return this.key.getName();
224
+ default: return this.key.toString();
225
+ }
226
+ }
227
+ }
228
+ let MethodDefinition = MethodDefinition_1 = class MethodDefinition extends AbstractDefinition {
229
+ constructor(kind, key, value, decorators, computed, isStatic) {
230
+ super(key, decorators, computed, isStatic, value);
231
+ this.kind = kind;
232
+ }
233
+ static fromJSON(node, deserializer) {
234
+ return new MethodDefinition_1(node.kind, deserializer(node.key), deserializer(node.value), node.decorators.map(deserializer), node.computed, node.static);
235
+ }
236
+ static visit(node, visitNode) {
237
+ visitNode(node.key);
238
+ visitNode(node.value);
239
+ node.decorators.forEach(visitNode);
240
+ }
241
+ getKind() {
242
+ return this.kind;
243
+ }
244
+ getValue() {
245
+ return this.value;
246
+ }
247
+ get(stack, classConstructor) {
248
+ if (this.kind === 'constructor') {
249
+ this.initConstructor(stack, classConstructor);
250
+ return;
251
+ }
252
+ const target = this.getTarget(classConstructor);
253
+ const name = this.getKeyName(stack);
254
+ const value = this.value?.get(stack);
255
+ switch (this.kind) {
256
+ case 'method':
257
+ target[name] = value;
258
+ break;
259
+ case 'set':
260
+ Object.defineProperty(target, name, {
261
+ configurable: true,
262
+ enumerable: false,
263
+ set: value,
264
+ });
265
+ break;
266
+ case 'get':
267
+ Object.defineProperty(target, name, {
268
+ configurable: true,
269
+ enumerable: false,
270
+ get: value,
271
+ });
272
+ break;
273
+ default:
274
+ break;
275
+ }
276
+ const decorators = this.decorators.map(decorator => decorator.get(stack));
277
+ decorators.length && __decorate(decorators, target, name, null);
278
+ }
279
+ initConstructor(stack, classConstructor) {
280
+ const body = this.value.getBody().getBody();
281
+ let superIndex = body
282
+ .findIndex(call => call instanceof CallExpression && Super.INSTANCE === call.getCallee());
283
+ if (superIndex === -1) {
284
+ superIndex = body.length;
285
+ }
286
+ const superCall = body[superIndex];
287
+ const blockBeforeSuper = new BlockStatement(body.slice(0, superIndex));
288
+ const blockAfterSuper = new BlockStatement(body.slice(superIndex + 1));
289
+ if (superCall) {
290
+ classConstructor[GET_PARAMETERS] = function (params) {
291
+ const scope = stack.pushBlockScope();
292
+ this.value.setParameter(stack, params);
293
+ blockBeforeSuper.get(stack);
294
+ const parameters = superCall.getCallParameters(stack);
295
+ stack.clearTo(scope);
296
+ return parameters;
297
+ };
298
+ }
299
+ classConstructor[CONSTRUCTOR] = function (params) {
300
+ const scope = this[STACK].pushBlockScope();
301
+ blockAfterSuper.get(this[STACK]);
302
+ stack.clearTo(scope);
303
+ };
304
+ }
305
+ toString() {
306
+ let str = this.decorators.map(decorator => decorator.toString()).join(' ');
307
+ if (str.length) {
308
+ str += ' ';
309
+ }
310
+ if (this.static) {
311
+ str += 'static ';
312
+ }
313
+ const methodName = this.key.toString();
314
+ switch (this.kind) {
315
+ case 'get':
316
+ str += 'get ' + methodName;
317
+ break;
318
+ case 'set':
319
+ str += 'set ' + methodName;
320
+ break;
321
+ case 'method':
322
+ if (this.value.getAsync() && this.value.getGenerator()) {
323
+ str += 'async *';
324
+ }
325
+ else if (this.value.getAsync()) {
326
+ str += 'async ';
327
+ }
328
+ else if (this.value.getGenerator()) {
329
+ str += '*';
330
+ }
331
+ str += methodName;
332
+ break;
333
+ case 'constructor':
334
+ str += 'constructor';
335
+ break;
336
+ default:
337
+ break;
338
+ }
339
+ str += this.value.paramsAndBodyToString();
340
+ return str;
341
+ }
342
+ toJson() {
343
+ return {
344
+ kind: this.kind,
345
+ key: this.key.toJSON(),
346
+ value: this.value.toJSON(),
347
+ decorators: this.decorators.map(decorator => decorator.toJSON()),
348
+ computed: this.computed,
349
+ static: this.static,
350
+ };
351
+ }
352
+ };
353
+ MethodDefinition = MethodDefinition_1 = __decorate_1([
354
+ Deserializer('MethodDefinition'),
355
+ __metadata("design:paramtypes", [String, Object, FunctionExpression, Array, Boolean, Boolean])
356
+ ], MethodDefinition);
357
+ export { MethodDefinition };
358
+ let PropertyDefinition = PropertyDefinition_1 = class PropertyDefinition extends AbstractDefinition {
359
+ static fromJSON(node, deserializer) {
360
+ return new PropertyDefinition_1(deserializer(node.key), node.decorators.map(deserializer), node.computed, node.static, node.value && deserializer(node.value));
361
+ }
362
+ static visit(node, visitNode) {
363
+ visitNode(node.key);
364
+ node.value && visitNode(node.value);
365
+ }
366
+ constructor(key, decorators, computed, isStatic, value) {
367
+ super(key, decorators, computed, isStatic, value);
368
+ }
369
+ get(stack, classConstructor) {
370
+ const target = this.getTarget(classConstructor);
371
+ const name = this.getKeyName(stack);
372
+ const value = this.value?.get(stack);
373
+ target[name] = value;
374
+ const decorators = this.decorators.map(decorator => decorator.get(stack));
375
+ decorators.length && __decorate(decorators, target, name, null);
376
+ }
377
+ toString() {
378
+ const decorators = this.decorators.map(decorator => decorator.toString()).join('\n');
379
+ const name = this.computed ? `[${this.key.toString()}]` : this.key.toString();
380
+ return `${decorators.length ? decorators + ' ' : ''}${this.static ? 'static ' : ''}${name}${this.value ? ` = ${this.value.toString()}` : ''};`;
381
+ }
382
+ toJson() {
383
+ return {
384
+ key: this.key.toJSON(),
385
+ value: this.value?.toJSON(),
386
+ decorators: this.decorators.map(decorator => decorator.toJSON()),
387
+ computed: this.computed,
388
+ static: this.static,
389
+ };
390
+ }
391
+ };
392
+ PropertyDefinition = PropertyDefinition_1 = __decorate_1([
393
+ Deserializer('PropertyDefinition'),
394
+ __metadata("design:paramtypes", [Object, Array, Boolean, Boolean, Object])
395
+ ], PropertyDefinition);
396
+ export { PropertyDefinition };
397
+ let AccessorProperty = AccessorProperty_1 = class AccessorProperty extends AbstractDefinition {
398
+ static fromJSON(node, deserializer) {
399
+ return new AccessorProperty_1(deserializer(node.key), node.decorators.map(deserializer), node.computed, node.static, node.value ? deserializer(node.value) : void 0);
400
+ }
401
+ static visit(node, visitNode) {
402
+ visitNode(node.key);
403
+ node.value && visitNode(node.value);
404
+ node.decorators.forEach(visitNode);
405
+ }
406
+ constructor(key, decorators, computed, isStatic, value) {
407
+ super(key, decorators, computed, isStatic, value);
408
+ }
409
+ get(stack, classConstructor) {
410
+ const target = this.getTarget(classConstructor);
411
+ const name = this.getKeyName(stack);
412
+ const value = this.value?.get(stack);
413
+ target[name] = value;
414
+ const ref = this.static ? classConstructor : classConstructor.prototype;
415
+ Object.defineProperty(ref, name, {
416
+ configurable: true,
417
+ enumerable: false,
418
+ set: function (setValue) {
419
+ this[PRIVATE_SYMBOL][name] = setValue;
420
+ },
421
+ });
422
+ Object.defineProperty(ref, name, {
423
+ configurable: true,
424
+ enumerable: false,
425
+ get: function () {
426
+ return this[PRIVATE_SYMBOL][name];
427
+ },
428
+ });
429
+ const decorators = this.decorators.map(decorator => decorator.get(stack));
430
+ decorators.length && __decorate(decorators, ref, name, null);
431
+ }
432
+ toString() {
433
+ const decorators = this.decorators.map(decorator => decorator.toString()).join('\n');
434
+ const name = this.computed ? `[${this.key.toString()}]` : this.key.toString();
435
+ return `${decorators.length ? decorators.concat(' ') : ''}${this.static ? 'static ' : ''}accessor ${name}${this.value ? ` = ${this.value.toString()}` : ''};`;
436
+ }
437
+ toJson() {
438
+ return {
439
+ key: this.key.toJSON(),
440
+ decorators: this.decorators.map(decorator => decorator.toJSON()),
441
+ computed: this.computed,
442
+ static: this.static,
443
+ value: this.value?.toJSON(),
444
+ };
445
+ }
446
+ };
447
+ AccessorProperty = AccessorProperty_1 = __decorate_1([
448
+ Deserializer('AccessorProperty'),
449
+ __metadata("design:paramtypes", [Object, Array, Boolean, Boolean, Object])
450
+ ], AccessorProperty);
451
+ export { AccessorProperty };
452
+ let ClassBody = ClassBody_1 = class ClassBody extends AbstractExpressionNode {
453
+ constructor(body) {
454
+ super();
455
+ this.body = body;
456
+ }
457
+ static fromJSON(node, deserializer) {
458
+ return new ClassBody_1(node.body.map(deserializer));
459
+ }
460
+ static visit(node, visitNode) {
461
+ node.body.forEach(visitNode);
462
+ }
463
+ getBody() {
464
+ return this.body;
465
+ }
466
+ shareVariables(scopeList) { }
467
+ set(stack, value) {
468
+ throw new Error('Method not implemented.');
469
+ }
470
+ get(stack, classConstructor) {
471
+ this.body.forEach(definition => definition.get(stack, classConstructor));
472
+ }
473
+ dependency(computed) {
474
+ throw new Error('Method not implemented.');
475
+ }
476
+ dependencyPath(computed) {
477
+ throw new Error('Method not implemented.');
478
+ }
479
+ toString() {
480
+ return this.body.map(definition => `\t${definition.toString()}`).join('\n');
481
+ }
482
+ toJson() {
483
+ return {
484
+ body: this.body.map(method => method.toJSON())
485
+ };
486
+ }
487
+ };
488
+ ClassBody = ClassBody_1 = __decorate_1([
489
+ Deserializer('ClassBody'),
490
+ __metadata("design:paramtypes", [Array])
491
+ ], ClassBody);
492
+ export { ClassBody };
493
+ export class Class extends AbstractExpressionNode {
494
+ constructor(body, decorators, id, superClass) {
495
+ super();
496
+ this.body = body;
497
+ this.decorators = decorators;
498
+ this.id = id;
499
+ this.superClass = superClass;
500
+ }
501
+ getBody() {
502
+ return this.body;
503
+ }
504
+ getDecorators() {
505
+ return this.decorators;
506
+ }
507
+ getId() {
508
+ return this.id;
509
+ }
510
+ getSuperClass() {
511
+ return this.superClass;
512
+ }
513
+ shareVariables(scopeList) {
514
+ this.sharedVariables = scopeList;
515
+ }
516
+ set(stack) {
517
+ throw new Error(`Class.#set() has no implementation.`);
518
+ }
519
+ get(stack) {
520
+ const className = this.id?.get(stack);
521
+ const parentClass = this.superClass?.get(stack) ?? class {
522
+ };
523
+ let classConstructor = this.createClass(stack, parentClass, className);
524
+ this.body.get(stack, classConstructor);
525
+ const decorators = this.decorators.map(decorator => decorator.get(stack));
526
+ classConstructor = __decorate(decorators, classConstructor);
527
+ classConstructor[STATIC_INITIALIZATION_BLOCK].forEach(block => block());
528
+ Reflect.deleteProperty(classConstructor, STATIC_INITIALIZATION_BLOCK);
529
+ return classConstructor;
530
+ }
531
+ createClass(stack, parentClass, className = TEMP_CLASS_NAME) {
532
+ var _a, _b, _c, _d, _e;
533
+ const TEMP = {
534
+ [className]: (_e = class extends parentClass {
535
+ constructor(...params) {
536
+ const parameters = TEMP[className][GET_PARAMETERS](params);
537
+ super(...parameters);
538
+ this[_d] = {};
539
+ this[PRIVATE_SYMBOL] = Object.assign(this[PRIVATE_SYMBOL], TEMP[className][INSTANCE_PRIVATE_SYMBOL]);
540
+ this[STACK] = stack.copyStack();
541
+ const instanceStack = this[STACK];
542
+ instanceStack.pushBlockScope();
543
+ instanceStack.declareVariable('this', this);
544
+ instanceStack.declareVariable(NEW_TARGET, new.target);
545
+ instanceStack.declareVariable(PRIVATE_SYMBOL, this[PRIVATE_SYMBOL]);
546
+ instanceStack.declareVariable(CALL_SUPER_Method, (name) => super[name]());
547
+ instanceStack.declareVariable(GET_SUPER_PROPERTY, (name) => super[name]);
548
+ instanceStack.pushReactiveScope();
549
+ TEMP[className][CONSTRUCTOR]();
550
+ }
551
+ static [GET_PARAMETERS](args) {
552
+ return args;
553
+ }
554
+ static [(_a = STATIC_INITIALIZATION_BLOCK, _b = PRIVATE_SYMBOL, _c = INSTANCE_PRIVATE_SYMBOL, CONSTRUCTOR)]() { }
555
+ },
556
+ _d = PRIVATE_SYMBOL,
557
+ _e[_a] = [],
558
+ _e[_b] = {},
559
+ _e[_c] = {},
560
+ _e)
561
+ };
562
+ return TEMP[className];
563
+ }
564
+ dependency(computed) {
565
+ throw new Error('Method not implemented.');
566
+ }
567
+ dependencyPath(computed) {
568
+ throw new Error('Method not implemented.');
569
+ }
570
+ toString() {
571
+ const decorators = this.decorators.map(decorator => decorator.toString()).join('\n');
572
+ let classDeclaration = 'class ';
573
+ if (this.id) {
574
+ classDeclaration += this.id.toString();
575
+ }
576
+ if (this.superClass) {
577
+ classDeclaration += ' extends ' + this.superClass.toString();
578
+ }
579
+ return `${decorators}${classDeclaration} {\n${this.body.toString()}\n}`;
580
+ }
581
+ toJson() {
582
+ return {
583
+ body: this.body.toJSON(),
584
+ decorators: this.decorators.map(decorator => decorator.toJSON()),
585
+ id: this.id?.toJSON(),
586
+ superClass: this.superClass?.toJSON(),
587
+ };
588
+ }
589
+ }
590
+ let ClassDeclaration = ClassDeclaration_1 = class ClassDeclaration extends Class {
591
+ static fromJSON(node, deserializer) {
592
+ return new ClassDeclaration_1(deserializer(node.body), deserializer(node.id), node.superClass && deserializer(node.superClass));
593
+ }
594
+ static visit(node, visitNode) {
595
+ visitNode(node.body);
596
+ node.decorators.forEach(visitNode);
597
+ visitNode(node.id);
598
+ node.superClass && visitNode(node.superClass);
599
+ }
600
+ constructor(body, decorators, id, superClass) {
601
+ super(body, decorators, id, superClass);
602
+ }
603
+ declareVariable(stack, propertyValue) {
604
+ stack.declareVariable(this.id.getName(), propertyValue);
605
+ }
606
+ getDeclarationName() {
607
+ return this.id.getDeclarationName();
608
+ }
609
+ get(stack) {
610
+ const classConstructor = super.get(stack);
611
+ this.id.declareVariable(stack, classConstructor);
612
+ return classConstructor;
613
+ }
614
+ };
615
+ ClassDeclaration = ClassDeclaration_1 = __decorate_1([
616
+ Deserializer('ClassDeclaration'),
617
+ __metadata("design:paramtypes", [ClassBody, Array, Identifier, Object])
618
+ ], ClassDeclaration);
619
+ export { ClassDeclaration };
620
+ let ClassExpression = ClassExpression_1 = class ClassExpression extends Class {
621
+ static fromJSON(node, deserializer) {
622
+ return new ClassExpression_1(deserializer(node.body), node.superClass && deserializer(node.superClass));
623
+ }
624
+ static visit(node, visitNode) {
625
+ visitNode(node.body);
626
+ node.decorators.forEach(visitNode);
627
+ node.id && visitNode(node.id);
628
+ node.superClass && visitNode(node.superClass);
629
+ }
630
+ };
631
+ ClassExpression = ClassExpression_1 = __decorate_1([
632
+ Deserializer('ClassExpression')
633
+ ], ClassExpression);
634
+ export { ClassExpression };
635
+ //# sourceMappingURL=class.js.map