@tslite/parser 1.10.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +55 -0
  2. package/NOTICE +14 -0
  3. package/dist/_namespaces/ts.d.ts +18 -0
  4. package/dist/_namespaces/ts.js +21 -0
  5. package/dist/_namespaces/ts.performance.d.ts +1 -0
  6. package/dist/_namespaces/ts.performance.js +2 -0
  7. package/dist/core.d.ts +450 -0
  8. package/dist/core.js +1394 -0
  9. package/dist/corePublic.d.ts +62 -0
  10. package/dist/corePublic.js +31 -0
  11. package/dist/debug.d.ts +74 -0
  12. package/dist/debug.js +326 -0
  13. package/dist/diagnosticInformationMap.generated.d.ts +1435 -0
  14. package/dist/diagnosticInformationMap.generated.js +1441 -0
  15. package/dist/factory.d.ts +78 -0
  16. package/dist/factory.js +622 -0
  17. package/dist/factoryPublic.d.ts +314 -0
  18. package/dist/factoryPublic.js +1796 -0
  19. package/dist/index.d.ts +1 -249
  20. package/dist/index.js +4 -6
  21. package/dist/parser.d.ts +59 -0
  22. package/dist/parser.js +5075 -0
  23. package/dist/path.d.ts +312 -0
  24. package/dist/path.js +475 -0
  25. package/dist/perfLogger.d.ts +4 -0
  26. package/dist/perfLogger.js +38 -0
  27. package/dist/performance.d.ts +20 -0
  28. package/dist/performance.js +49 -0
  29. package/dist/performanceTimestamp.d.ts +2 -0
  30. package/dist/performanceTimestamp.js +2 -0
  31. package/dist/scanner.d.ts +80 -0
  32. package/dist/scanner.js +1984 -0
  33. package/dist/shims/mapShim.d.ts +23 -0
  34. package/dist/shims/mapShim.js +156 -0
  35. package/dist/types.d.ts +2626 -0
  36. package/dist/types.js +1074 -0
  37. package/dist/utilities.d.ts +473 -0
  38. package/dist/utilities.js +2632 -0
  39. package/dist/utilitiesPublic.d.ts +274 -0
  40. package/dist/utilitiesPublic.js +1049 -0
  41. package/dist/visitor.d.ts +15 -0
  42. package/dist/visitor.js +64 -0
  43. package/dist/visitorPublic.d.ts +82 -0
  44. package/dist/visitorPublic.js +352 -0
  45. package/package.json +14 -42
  46. package/dist/index.cjs +0 -6
  47. package/dist/index.d.cts +0 -249
@@ -0,0 +1,1796 @@
1
+ // Modificado de microsoft/TypeScript v3.9.10, src/compiler/factoryPublic.ts: o namespace virou módulo ES, com os imports explícitos.
2
+ import { Debug, addRange, append, createNode, createScanner, emptyArray, escapeLeadingUnderscores, getEmitFlags, getParseTreeNode, getSourceFileOfNode, getTextOfIdentifierOrLiteral, idText, isArray, isBinaryExpression, isCommaSequence, isIdentifier, isNodeArray, isNotEmittedStatement, isOptionalChain, isParseTreeNode, isPropertyAccessChain, isString, nodeIsSynthesized, parenthesizeArrayTypeMember, parenthesizeBinaryOperand, parenthesizeConciseBody, parenthesizeConditionalTypeMember, parenthesizeDefaultExpression, parenthesizeElementTypeMember, parenthesizeElementTypeMembers, parenthesizeExpressionForExpressionStatement, parenthesizeExpressionForList, parenthesizeForAccess, parenthesizeForConditionalHead, parenthesizeListElements, parenthesizePostfixOperand, parenthesizePrefixOperand, parenthesizeSubexpressionOfConditionalExpression, parenthesizeTypeParameters, pseudoBigIntToString, sameFlatMap, stringToToken, } from "./_namespaces/ts.js";
3
+ function createSynthesizedNode(kind) {
4
+ const node = createNode(kind, -1, -1);
5
+ node.flags |= 8 /* NodeFlags.Synthesized */;
6
+ return node;
7
+ }
8
+ export function updateNode(updated, original) {
9
+ if (updated !== original) {
10
+ setOriginalNode(updated, original);
11
+ setTextRange(updated, original);
12
+ }
13
+ return updated;
14
+ }
15
+ /**
16
+ * Make `elements` into a `NodeArray<T>`. If `elements` is `undefined`, returns an empty `NodeArray<T>`.
17
+ */
18
+ export function createNodeArray(elements, hasTrailingComma) {
19
+ if (!elements || elements === emptyArray) {
20
+ elements = [];
21
+ }
22
+ else if (isNodeArray(elements)) {
23
+ return elements;
24
+ }
25
+ const array = elements;
26
+ array.pos = -1;
27
+ array.end = -1;
28
+ array.hasTrailingComma = hasTrailingComma;
29
+ return array;
30
+ }
31
+ /**
32
+ * Creates a shallow, memberwise clone of a node with no source map location.
33
+ */
34
+ export function getSynthesizedClone(node) {
35
+ // We don't use "clone" from core.ts here, as we need to preserve the prototype chain of
36
+ // the original node. We also need to exclude specific properties and only include own-
37
+ // properties (to skip members already defined on the shared prototype).
38
+ if (node === undefined) {
39
+ return node;
40
+ }
41
+ const clone = createSynthesizedNode(node.kind);
42
+ clone.flags |= node.flags;
43
+ setOriginalNode(clone, node);
44
+ for (const key in node) {
45
+ if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) {
46
+ continue;
47
+ }
48
+ clone[key] = node[key];
49
+ }
50
+ return clone;
51
+ }
52
+ export function createLiteral(value, isSingleQuote) {
53
+ if (typeof value === "number") {
54
+ return createNumericLiteral(value + "");
55
+ }
56
+ // eslint-disable-next-line no-in-operator
57
+ if (typeof value === "object" && "base10Value" in value) { // PseudoBigInt
58
+ return createBigIntLiteral(pseudoBigIntToString(value) + "n");
59
+ }
60
+ if (typeof value === "boolean") {
61
+ return value ? createTrue() : createFalse();
62
+ }
63
+ if (isString(value)) {
64
+ const res = createStringLiteral(value);
65
+ if (isSingleQuote)
66
+ res.singleQuote = true;
67
+ return res;
68
+ }
69
+ return createLiteralFromNode(value);
70
+ }
71
+ export function createNumericLiteral(value, numericLiteralFlags = 0 /* TokenFlags.None */) {
72
+ const node = createSynthesizedNode(8 /* SyntaxKind.NumericLiteral */);
73
+ node.text = value;
74
+ node.numericLiteralFlags = numericLiteralFlags;
75
+ return node;
76
+ }
77
+ export function createBigIntLiteral(value) {
78
+ const node = createSynthesizedNode(9 /* SyntaxKind.BigIntLiteral */);
79
+ node.text = value;
80
+ return node;
81
+ }
82
+ export function createStringLiteral(text) {
83
+ const node = createSynthesizedNode(10 /* SyntaxKind.StringLiteral */);
84
+ node.text = text;
85
+ return node;
86
+ }
87
+ function createLiteralFromNode(sourceNode) {
88
+ const node = createStringLiteral(getTextOfIdentifierOrLiteral(sourceNode));
89
+ node.textSourceNode = sourceNode;
90
+ return node;
91
+ }
92
+ export function createIdentifier(text, typeArguments) {
93
+ const node = createSynthesizedNode(75 /* SyntaxKind.Identifier */);
94
+ node.escapedText = escapeLeadingUnderscores(text);
95
+ node.originalKeywordKind = text ? stringToToken(text) : 0 /* SyntaxKind.Unknown */;
96
+ node.autoGenerateFlags = 0 /* GeneratedIdentifierFlags.None */;
97
+ node.autoGenerateId = 0;
98
+ if (typeArguments) {
99
+ node.typeArguments = createNodeArray(typeArguments);
100
+ }
101
+ return node;
102
+ }
103
+ export function updateIdentifier(node, typeArguments) {
104
+ return node.typeArguments !== typeArguments
105
+ ? updateNode(createIdentifier(idText(node), typeArguments), node)
106
+ : node;
107
+ }
108
+ let nextAutoGenerateId = 0;
109
+ export function createOptimisticUniqueName(text) {
110
+ const name = createIdentifier(text);
111
+ name.autoGenerateFlags = 3 /* GeneratedIdentifierFlags.Unique */ | 16 /* GeneratedIdentifierFlags.Optimistic */;
112
+ name.autoGenerateId = nextAutoGenerateId;
113
+ nextAutoGenerateId++;
114
+ return name;
115
+ }
116
+ export function getGeneratedNameForNode(node, flags) {
117
+ const name = createIdentifier(node && isIdentifier(node) ? idText(node) : "");
118
+ name.autoGenerateFlags = 4 /* GeneratedIdentifierFlags.Node */ | flags;
119
+ name.autoGenerateId = nextAutoGenerateId;
120
+ name.original = node;
121
+ nextAutoGenerateId++;
122
+ return name;
123
+ }
124
+ // Punctuation
125
+ export function createToken(token) {
126
+ return createSynthesizedNode(token);
127
+ }
128
+ // Reserved words
129
+ export function createTrue() {
130
+ return createSynthesizedNode(106 /* SyntaxKind.TrueKeyword */);
131
+ }
132
+ export function createFalse() {
133
+ return createSynthesizedNode(91 /* SyntaxKind.FalseKeyword */);
134
+ }
135
+ // Modifiers
136
+ export function createModifier(kind) {
137
+ return createToken(kind);
138
+ }
139
+ /** Na tag, também o `default`, o `const` de um enum e os modificadores de classe (CK-02). */
140
+ export function createModifiersFromModifierFlags(flags) {
141
+ const result = [];
142
+ if (flags & 1 /* ModifierFlags.Export */) {
143
+ result.push(createModifier(89 /* SyntaxKind.ExportKeyword */));
144
+ }
145
+ if (flags & 2 /* ModifierFlags.Ambient */) {
146
+ result.push(createModifier(130 /* SyntaxKind.DeclareKeyword */));
147
+ }
148
+ if (flags & 64 /* ModifierFlags.Readonly */) {
149
+ result.push(createModifier(138 /* SyntaxKind.ReadonlyKeyword */));
150
+ }
151
+ if (flags & 256 /* ModifierFlags.Async */) {
152
+ result.push(createModifier(126 /* SyntaxKind.AsyncKeyword */));
153
+ }
154
+ return result;
155
+ }
156
+ // Names
157
+ export function createQualifiedName(left, right) {
158
+ const node = createSynthesizedNode(153 /* SyntaxKind.QualifiedName */);
159
+ node.left = left;
160
+ node.right = asName(right);
161
+ return node;
162
+ }
163
+ export function updateQualifiedName(node, left, right) {
164
+ return node.left !== left
165
+ || node.right !== right
166
+ ? updateNode(createQualifiedName(left, right), node)
167
+ : node;
168
+ }
169
+ function parenthesizeForComputedName(expression) {
170
+ return isCommaSequence(expression)
171
+ ? createParen(expression)
172
+ : expression;
173
+ }
174
+ export function createComputedPropertyName(expression) {
175
+ const node = createSynthesizedNode(154 /* SyntaxKind.ComputedPropertyName */);
176
+ node.expression = parenthesizeForComputedName(expression);
177
+ return node;
178
+ }
179
+ export function updateComputedPropertyName(node, expression) {
180
+ return node.expression !== expression
181
+ ? updateNode(createComputedPropertyName(expression), node)
182
+ : node;
183
+ }
184
+ // Signature elements
185
+ export function createTypeParameterDeclaration(name, constraint, defaultType) {
186
+ const node = createSynthesizedNode(155 /* SyntaxKind.TypeParameter */);
187
+ node.name = asName(name);
188
+ node.constraint = constraint;
189
+ node.default = defaultType;
190
+ return node;
191
+ }
192
+ export function updateTypeParameterDeclaration(node, name, constraint, defaultType) {
193
+ return node.name !== name
194
+ || node.constraint !== constraint
195
+ || node.default !== defaultType
196
+ ? updateNode(createTypeParameterDeclaration(name, constraint, defaultType), node)
197
+ : node;
198
+ }
199
+ export function createParameter(modifiers, dotDotDotToken, name, questionToken, type, initializer) {
200
+ const node = createSynthesizedNode(156 /* SyntaxKind.Parameter */);
201
+ node.modifiers = asNodeArray(modifiers);
202
+ node.dotDotDotToken = dotDotDotToken;
203
+ node.name = asName(name);
204
+ node.questionToken = questionToken;
205
+ node.type = type;
206
+ node.initializer = initializer ? parenthesizeExpressionForList(initializer) : undefined;
207
+ return node;
208
+ }
209
+ export function updateParameter(node, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
210
+ return node.modifiers !== modifiers
211
+ || node.dotDotDotToken !== dotDotDotToken
212
+ || node.name !== name
213
+ || node.questionToken !== questionToken
214
+ || node.type !== type
215
+ || node.initializer !== initializer
216
+ ? updateNode(createParameter(modifiers, dotDotDotToken, name, questionToken, type, initializer), node)
217
+ : node;
218
+ }
219
+ // Type Elements
220
+ export function createPropertySignature(modifiers, name, questionToken, type, initializer) {
221
+ const node = createSynthesizedNode(158 /* SyntaxKind.PropertySignature */);
222
+ node.modifiers = asNodeArray(modifiers);
223
+ node.name = asName(name);
224
+ node.questionToken = questionToken;
225
+ node.type = type;
226
+ node.initializer = initializer;
227
+ return node;
228
+ }
229
+ export function updatePropertySignature(node, modifiers, name, questionToken, type, initializer) {
230
+ return node.modifiers !== modifiers
231
+ || node.name !== name
232
+ || node.questionToken !== questionToken
233
+ || node.type !== type
234
+ || node.initializer !== initializer
235
+ ? updateNode(createPropertySignature(modifiers, name, questionToken, type, initializer), node)
236
+ : node;
237
+ }
238
+ export function createMethodSignature(typeParameters, parameters, type, name, questionToken) {
239
+ const node = createSignatureDeclaration(160 /* SyntaxKind.MethodSignature */, typeParameters, parameters, type);
240
+ node.name = asName(name);
241
+ node.questionToken = questionToken;
242
+ return node;
243
+ }
244
+ export function updateMethodSignature(node, typeParameters, parameters, type, name, questionToken) {
245
+ return node.typeParameters !== typeParameters
246
+ || node.parameters !== parameters
247
+ || node.type !== type
248
+ || node.name !== name
249
+ || node.questionToken !== questionToken
250
+ ? updateNode(createMethodSignature(typeParameters, parameters, type, name, questionToken), node)
251
+ : node;
252
+ }
253
+ export function updateCallSignature(node, typeParameters, parameters, type) {
254
+ return updateSignatureDeclaration(node, typeParameters, parameters, type);
255
+ }
256
+ export function createIndexSignature(modifiers, parameters, type) {
257
+ const node = createSynthesizedNode(167 /* SyntaxKind.IndexSignature */);
258
+ node.modifiers = asNodeArray(modifiers);
259
+ node.parameters = createNodeArray(parameters);
260
+ node.type = type;
261
+ return node;
262
+ }
263
+ export function updateIndexSignature(node, modifiers, parameters, type) {
264
+ return node.parameters !== parameters
265
+ || node.type !== type
266
+ || node.modifiers !== modifiers
267
+ ? updateNode(createIndexSignature(modifiers, parameters, type), node)
268
+ : node;
269
+ }
270
+ export function createSignatureDeclaration(kind, typeParameters, parameters, type, typeArguments) {
271
+ const node = createSynthesizedNode(kind);
272
+ node.typeParameters = asNodeArray(typeParameters);
273
+ node.parameters = asNodeArray(parameters);
274
+ node.type = type;
275
+ node.typeArguments = asNodeArray(typeArguments);
276
+ return node;
277
+ }
278
+ function updateSignatureDeclaration(node, typeParameters, parameters, type) {
279
+ return node.typeParameters !== typeParameters
280
+ || node.parameters !== parameters
281
+ || node.type !== type
282
+ ? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node)
283
+ : node;
284
+ }
285
+ // Types
286
+ export function createKeywordTypeNode(kind) {
287
+ return createSynthesizedNode(kind);
288
+ }
289
+ export function createTypePredicateNodeWithModifier(assertsModifier, parameterName, type) {
290
+ const node = createSynthesizedNode(168 /* SyntaxKind.TypePredicate */);
291
+ node.assertsModifier = assertsModifier;
292
+ node.parameterName = asName(parameterName);
293
+ node.type = type;
294
+ return node;
295
+ }
296
+ export function updateTypePredicateNodeWithModifier(node, assertsModifier, parameterName, type) {
297
+ return node.assertsModifier !== assertsModifier
298
+ || node.parameterName !== parameterName
299
+ || node.type !== type
300
+ ? updateNode(createTypePredicateNodeWithModifier(assertsModifier, parameterName, type), node)
301
+ : node;
302
+ }
303
+ export function createTypeReferenceNode(typeName, typeArguments) {
304
+ const node = createSynthesizedNode(169 /* SyntaxKind.TypeReference */);
305
+ node.typeName = asName(typeName);
306
+ node.typeArguments = typeArguments && parenthesizeTypeParameters(typeArguments);
307
+ return node;
308
+ }
309
+ export function updateTypeReferenceNode(node, typeName, typeArguments) {
310
+ return node.typeName !== typeName
311
+ || node.typeArguments !== typeArguments
312
+ ? updateNode(createTypeReferenceNode(typeName, typeArguments), node)
313
+ : node;
314
+ }
315
+ export function createFunctionTypeNode(typeParameters, parameters, type) {
316
+ return createSignatureDeclaration(170 /* SyntaxKind.FunctionType */, typeParameters, parameters, type);
317
+ }
318
+ export function updateFunctionTypeNode(node, typeParameters, parameters, type) {
319
+ return updateSignatureDeclaration(node, typeParameters, parameters, type);
320
+ }
321
+ export function createTypeQueryNode(exprName) {
322
+ const node = createSynthesizedNode(172 /* SyntaxKind.TypeQuery */);
323
+ node.exprName = exprName;
324
+ return node;
325
+ }
326
+ export function updateTypeQueryNode(node, exprName) {
327
+ return node.exprName !== exprName
328
+ ? updateNode(createTypeQueryNode(exprName), node)
329
+ : node;
330
+ }
331
+ export function createTypeLiteralNode(members) {
332
+ const node = createSynthesizedNode(173 /* SyntaxKind.TypeLiteral */);
333
+ node.members = createNodeArray(members);
334
+ return node;
335
+ }
336
+ export function updateTypeLiteralNode(node, members) {
337
+ return node.members !== members
338
+ ? updateNode(createTypeLiteralNode(members), node)
339
+ : node;
340
+ }
341
+ export function createArrayTypeNode(elementType) {
342
+ const node = createSynthesizedNode(174 /* SyntaxKind.ArrayType */);
343
+ node.elementType = parenthesizeArrayTypeMember(elementType);
344
+ return node;
345
+ }
346
+ export function updateArrayTypeNode(node, elementType) {
347
+ return node.elementType !== elementType
348
+ ? updateNode(createArrayTypeNode(elementType), node)
349
+ : node;
350
+ }
351
+ export function createTupleTypeNode(elementTypes) {
352
+ const node = createSynthesizedNode(175 /* SyntaxKind.TupleType */);
353
+ node.elementTypes = createNodeArray(elementTypes);
354
+ return node;
355
+ }
356
+ export function updateTupleTypeNode(node, elementTypes) {
357
+ return node.elementTypes !== elementTypes
358
+ ? updateNode(createTupleTypeNode(elementTypes), node)
359
+ : node;
360
+ }
361
+ export function createOptionalTypeNode(type) {
362
+ const node = createSynthesizedNode(176 /* SyntaxKind.OptionalType */);
363
+ node.type = parenthesizeArrayTypeMember(type);
364
+ return node;
365
+ }
366
+ export function updateOptionalTypeNode(node, type) {
367
+ return node.type !== type
368
+ ? updateNode(createOptionalTypeNode(type), node)
369
+ : node;
370
+ }
371
+ export function createRestTypeNode(type) {
372
+ const node = createSynthesizedNode(177 /* SyntaxKind.RestType */);
373
+ node.type = type;
374
+ return node;
375
+ }
376
+ export function updateRestTypeNode(node, type) {
377
+ return node.type !== type
378
+ ? updateNode(createRestTypeNode(type), node)
379
+ : node;
380
+ }
381
+ export function createUnionTypeNode(types) {
382
+ return createUnionOrIntersectionTypeNode(178 /* SyntaxKind.UnionType */, types);
383
+ }
384
+ export function updateUnionTypeNode(node, types) {
385
+ return updateUnionOrIntersectionTypeNode(node, types);
386
+ }
387
+ export function createIntersectionTypeNode(types) {
388
+ return createUnionOrIntersectionTypeNode(179 /* SyntaxKind.IntersectionType */, types);
389
+ }
390
+ export function updateIntersectionTypeNode(node, types) {
391
+ return updateUnionOrIntersectionTypeNode(node, types);
392
+ }
393
+ export function createUnionOrIntersectionTypeNode(kind, types) {
394
+ const node = createSynthesizedNode(kind);
395
+ node.types = parenthesizeElementTypeMembers(types);
396
+ return node;
397
+ }
398
+ function updateUnionOrIntersectionTypeNode(node, types) {
399
+ return node.types !== types
400
+ ? updateNode(createUnionOrIntersectionTypeNode(node.kind, types), node)
401
+ : node;
402
+ }
403
+ export function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
404
+ const node = createSynthesizedNode(180 /* SyntaxKind.ConditionalType */);
405
+ node.checkType = parenthesizeConditionalTypeMember(checkType);
406
+ node.extendsType = parenthesizeConditionalTypeMember(extendsType);
407
+ node.trueType = trueType;
408
+ node.falseType = falseType;
409
+ return node;
410
+ }
411
+ export function updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType) {
412
+ return node.checkType !== checkType
413
+ || node.extendsType !== extendsType
414
+ || node.trueType !== trueType
415
+ || node.falseType !== falseType
416
+ ? updateNode(createConditionalTypeNode(checkType, extendsType, trueType, falseType), node)
417
+ : node;
418
+ }
419
+ export function createInferTypeNode(typeParameter) {
420
+ const node = createSynthesizedNode(181 /* SyntaxKind.InferType */);
421
+ node.typeParameter = typeParameter;
422
+ return node;
423
+ }
424
+ export function updateInferTypeNode(node, typeParameter) {
425
+ return node.typeParameter !== typeParameter
426
+ ? updateNode(createInferTypeNode(typeParameter), node)
427
+ : node;
428
+ }
429
+ export function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
430
+ const node = createSynthesizedNode(188 /* SyntaxKind.ImportType */);
431
+ node.argument = argument;
432
+ node.qualifier = qualifier;
433
+ node.typeArguments = parenthesizeTypeParameters(typeArguments);
434
+ node.isTypeOf = isTypeOf;
435
+ return node;
436
+ }
437
+ export function updateImportTypeNode(node, argument, qualifier, typeArguments, isTypeOf) {
438
+ return node.argument !== argument
439
+ || node.qualifier !== qualifier
440
+ || node.typeArguments !== typeArguments
441
+ || node.isTypeOf !== isTypeOf
442
+ ? updateNode(createImportTypeNode(argument, qualifier, typeArguments, isTypeOf), node)
443
+ : node;
444
+ }
445
+ export function createParenthesizedType(type) {
446
+ const node = createSynthesizedNode(182 /* SyntaxKind.ParenthesizedType */);
447
+ node.type = type;
448
+ return node;
449
+ }
450
+ export function updateParenthesizedType(node, type) {
451
+ return node.type !== type
452
+ ? updateNode(createParenthesizedType(type), node)
453
+ : node;
454
+ }
455
+ export function createTypeOperatorNode(operatorOrType, type) {
456
+ const node = createSynthesizedNode(184 /* SyntaxKind.TypeOperator */);
457
+ node.operator = typeof operatorOrType === "number" ? operatorOrType : 134 /* SyntaxKind.KeyOfKeyword */;
458
+ node.type = parenthesizeElementTypeMember(typeof operatorOrType === "number" ? type : operatorOrType);
459
+ return node;
460
+ }
461
+ export function updateTypeOperatorNode(node, type) {
462
+ return node.type !== type ? updateNode(createTypeOperatorNode(node.operator, type), node) : node;
463
+ }
464
+ export function createIndexedAccessTypeNode(objectType, indexType) {
465
+ const node = createSynthesizedNode(185 /* SyntaxKind.IndexedAccessType */);
466
+ node.objectType = parenthesizeElementTypeMember(objectType);
467
+ node.indexType = indexType;
468
+ return node;
469
+ }
470
+ export function updateIndexedAccessTypeNode(node, objectType, indexType) {
471
+ return node.objectType !== objectType
472
+ || node.indexType !== indexType
473
+ ? updateNode(createIndexedAccessTypeNode(objectType, indexType), node)
474
+ : node;
475
+ }
476
+ export function createMappedTypeNode(readonlyToken, typeParameter, questionToken, type) {
477
+ const node = createSynthesizedNode(186 /* SyntaxKind.MappedType */);
478
+ node.readonlyToken = readonlyToken;
479
+ node.typeParameter = typeParameter;
480
+ node.questionToken = questionToken;
481
+ node.type = type;
482
+ return node;
483
+ }
484
+ export function updateMappedTypeNode(node, readonlyToken, typeParameter, questionToken, type) {
485
+ return node.readonlyToken !== readonlyToken
486
+ || node.typeParameter !== typeParameter
487
+ || node.questionToken !== questionToken
488
+ || node.type !== type
489
+ ? updateNode(createMappedTypeNode(readonlyToken, typeParameter, questionToken, type), node)
490
+ : node;
491
+ }
492
+ export function createLiteralTypeNode(literal) {
493
+ const node = createSynthesizedNode(187 /* SyntaxKind.LiteralType */);
494
+ node.literal = literal;
495
+ return node;
496
+ }
497
+ export function updateLiteralTypeNode(node, literal) {
498
+ return node.literal !== literal
499
+ ? updateNode(createLiteralTypeNode(literal), node)
500
+ : node;
501
+ }
502
+ // Binding Patterns
503
+ export function createObjectBindingPattern(elements) {
504
+ const node = createSynthesizedNode(189 /* SyntaxKind.ObjectBindingPattern */);
505
+ node.elements = createNodeArray(elements);
506
+ return node;
507
+ }
508
+ export function updateObjectBindingPattern(node, elements) {
509
+ return node.elements !== elements
510
+ ? updateNode(createObjectBindingPattern(elements), node)
511
+ : node;
512
+ }
513
+ export function createArrayBindingPattern(elements) {
514
+ const node = createSynthesizedNode(190 /* SyntaxKind.ArrayBindingPattern */);
515
+ node.elements = createNodeArray(elements);
516
+ return node;
517
+ }
518
+ export function updateArrayBindingPattern(node, elements) {
519
+ return node.elements !== elements
520
+ ? updateNode(createArrayBindingPattern(elements), node)
521
+ : node;
522
+ }
523
+ export function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
524
+ const node = createSynthesizedNode(191 /* SyntaxKind.BindingElement */);
525
+ node.dotDotDotToken = dotDotDotToken;
526
+ node.propertyName = asName(propertyName);
527
+ node.name = asName(name);
528
+ node.initializer = initializer;
529
+ return node;
530
+ }
531
+ export function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) {
532
+ return node.propertyName !== propertyName
533
+ || node.dotDotDotToken !== dotDotDotToken
534
+ || node.name !== name
535
+ || node.initializer !== initializer
536
+ ? updateNode(createBindingElement(dotDotDotToken, propertyName, name, initializer), node)
537
+ : node;
538
+ }
539
+ // Expression
540
+ export function createArrayLiteral(elements, multiLine) {
541
+ const node = createSynthesizedNode(192 /* SyntaxKind.ArrayLiteralExpression */);
542
+ node.elements = parenthesizeListElements(createNodeArray(elements));
543
+ if (multiLine)
544
+ node.multiLine = true;
545
+ return node;
546
+ }
547
+ export function updateArrayLiteral(node, elements) {
548
+ return node.elements !== elements
549
+ ? updateNode(createArrayLiteral(elements, node.multiLine), node)
550
+ : node;
551
+ }
552
+ export function createObjectLiteral(properties, multiLine) {
553
+ const node = createSynthesizedNode(193 /* SyntaxKind.ObjectLiteralExpression */);
554
+ node.properties = createNodeArray(properties);
555
+ if (multiLine)
556
+ node.multiLine = true;
557
+ return node;
558
+ }
559
+ export function updateObjectLiteral(node, properties) {
560
+ return node.properties !== properties
561
+ ? updateNode(createObjectLiteral(properties, node.multiLine), node)
562
+ : node;
563
+ }
564
+ export function createPropertyAccess(expression, name) {
565
+ const node = createSynthesizedNode(194 /* SyntaxKind.PropertyAccessExpression */);
566
+ node.expression = parenthesizeForAccess(expression);
567
+ node.name = asName(name);
568
+ setEmitFlags(node, 131072 /* EmitFlags.NoIndentation */);
569
+ return node;
570
+ }
571
+ export function updatePropertyAccess(node, expression, name) {
572
+ if (isPropertyAccessChain(node)) {
573
+ return updatePropertyAccessChain(node, expression, node.questionDotToken, name);
574
+ }
575
+ // Because we are updating existed propertyAccess we want to inherit its emitFlags
576
+ // instead of using the default from createPropertyAccess
577
+ return node.expression !== expression
578
+ || node.name !== name
579
+ ? updateNode(setEmitFlags(createPropertyAccess(expression, name), getEmitFlags(node)), node)
580
+ : node;
581
+ }
582
+ export function createPropertyAccessChain(expression, questionDotToken, name) {
583
+ const node = createSynthesizedNode(194 /* SyntaxKind.PropertyAccessExpression */);
584
+ node.flags |= 32 /* NodeFlags.OptionalChain */;
585
+ node.expression = parenthesizeForAccess(expression);
586
+ node.questionDotToken = questionDotToken;
587
+ node.name = asName(name);
588
+ setEmitFlags(node, 131072 /* EmitFlags.NoIndentation */);
589
+ return node;
590
+ }
591
+ export function updatePropertyAccessChain(node, expression, questionDotToken, name) {
592
+ Debug.assert(!!(node.flags & 32 /* NodeFlags.OptionalChain */), "Cannot update a PropertyAccessExpression using updatePropertyAccessChain. Use updatePropertyAccess instead.");
593
+ // Because we are updating an existing PropertyAccessChain we want to inherit its emitFlags
594
+ // instead of using the default from createPropertyAccess
595
+ return node.expression !== expression
596
+ || node.questionDotToken !== questionDotToken
597
+ || node.name !== name
598
+ ? updateNode(setEmitFlags(createPropertyAccessChain(expression, questionDotToken, name), getEmitFlags(node)), node)
599
+ : node;
600
+ }
601
+ export function createElementAccess(expression, index) {
602
+ const node = createSynthesizedNode(195 /* SyntaxKind.ElementAccessExpression */);
603
+ node.expression = parenthesizeForAccess(expression);
604
+ node.argumentExpression = asExpression(index);
605
+ return node;
606
+ }
607
+ export function updateElementAccess(node, expression, argumentExpression) {
608
+ if (isOptionalChain(node)) {
609
+ return updateElementAccessChain(node, expression, node.questionDotToken, argumentExpression);
610
+ }
611
+ return node.expression !== expression
612
+ || node.argumentExpression !== argumentExpression
613
+ ? updateNode(createElementAccess(expression, argumentExpression), node)
614
+ : node;
615
+ }
616
+ export function createElementAccessChain(expression, questionDotToken, index) {
617
+ const node = createSynthesizedNode(195 /* SyntaxKind.ElementAccessExpression */);
618
+ node.flags |= 32 /* NodeFlags.OptionalChain */;
619
+ node.expression = parenthesizeForAccess(expression);
620
+ node.questionDotToken = questionDotToken;
621
+ node.argumentExpression = asExpression(index);
622
+ return node;
623
+ }
624
+ export function updateElementAccessChain(node, expression, questionDotToken, argumentExpression) {
625
+ Debug.assert(!!(node.flags & 32 /* NodeFlags.OptionalChain */), "Cannot update an ElementAccessExpression using updateElementAccessChain. Use updateElementAccess instead.");
626
+ return node.expression !== expression
627
+ || node.questionDotToken !== questionDotToken
628
+ || node.argumentExpression !== argumentExpression
629
+ ? updateNode(createElementAccessChain(expression, questionDotToken, argumentExpression), node)
630
+ : node;
631
+ }
632
+ export function createCall(expression, typeArguments, argumentsArray) {
633
+ const node = createSynthesizedNode(196 /* SyntaxKind.CallExpression */);
634
+ node.expression = parenthesizeForAccess(expression);
635
+ node.typeArguments = asNodeArray(typeArguments);
636
+ node.arguments = parenthesizeListElements(createNodeArray(argumentsArray));
637
+ return node;
638
+ }
639
+ export function updateCall(node, expression, typeArguments, argumentsArray) {
640
+ if (isOptionalChain(node)) {
641
+ return updateCallChain(node, expression, node.questionDotToken, typeArguments, argumentsArray);
642
+ }
643
+ return node.expression !== expression
644
+ || node.typeArguments !== typeArguments
645
+ || node.arguments !== argumentsArray
646
+ ? updateNode(createCall(expression, typeArguments, argumentsArray), node)
647
+ : node;
648
+ }
649
+ export function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
650
+ const node = createSynthesizedNode(196 /* SyntaxKind.CallExpression */);
651
+ node.flags |= 32 /* NodeFlags.OptionalChain */;
652
+ node.expression = parenthesizeForAccess(expression);
653
+ node.questionDotToken = questionDotToken;
654
+ node.typeArguments = asNodeArray(typeArguments);
655
+ node.arguments = parenthesizeListElements(createNodeArray(argumentsArray));
656
+ return node;
657
+ }
658
+ export function updateCallChain(node, expression, questionDotToken, typeArguments, argumentsArray) {
659
+ Debug.assert(!!(node.flags & 32 /* NodeFlags.OptionalChain */), "Cannot update a CallExpression using updateCallChain. Use updateCall instead.");
660
+ return node.expression !== expression
661
+ || node.questionDotToken !== questionDotToken
662
+ || node.typeArguments !== typeArguments
663
+ || node.arguments !== argumentsArray
664
+ ? updateNode(createCallChain(expression, questionDotToken, typeArguments, argumentsArray), node)
665
+ : node;
666
+ }
667
+ export function createParen(expression) {
668
+ const node = createSynthesizedNode(200 /* SyntaxKind.ParenthesizedExpression */);
669
+ node.expression = expression;
670
+ return node;
671
+ }
672
+ export function updateParen(node, expression) {
673
+ return node.expression !== expression
674
+ ? updateNode(createParen(expression), node)
675
+ : node;
676
+ }
677
+ export function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
678
+ const node = createSynthesizedNode(202 /* SyntaxKind.ArrowFunction */);
679
+ node.modifiers = asNodeArray(modifiers);
680
+ node.typeParameters = asNodeArray(typeParameters);
681
+ node.parameters = createNodeArray(parameters);
682
+ node.type = type;
683
+ node.equalsGreaterThanToken = equalsGreaterThanToken || createToken(38 /* SyntaxKind.EqualsGreaterThanToken */);
684
+ node.body = parenthesizeConciseBody(body);
685
+ return node;
686
+ }
687
+ export function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
688
+ return node.modifiers !== modifiers
689
+ || node.typeParameters !== typeParameters
690
+ || node.parameters !== parameters
691
+ || node.type !== type
692
+ || node.equalsGreaterThanToken !== equalsGreaterThanToken
693
+ || node.body !== body
694
+ ? updateNode(createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body), node)
695
+ : node;
696
+ }
697
+ export function createDelete(expression) {
698
+ const node = createSynthesizedNode(203 /* SyntaxKind.DeleteExpression */);
699
+ node.expression = parenthesizePrefixOperand(expression);
700
+ return node;
701
+ }
702
+ export function updateDelete(node, expression) {
703
+ return node.expression !== expression
704
+ ? updateNode(createDelete(expression), node)
705
+ : node;
706
+ }
707
+ export function createTypeOf(expression) {
708
+ const node = createSynthesizedNode(204 /* SyntaxKind.TypeOfExpression */);
709
+ node.expression = parenthesizePrefixOperand(expression);
710
+ return node;
711
+ }
712
+ export function updateTypeOf(node, expression) {
713
+ return node.expression !== expression
714
+ ? updateNode(createTypeOf(expression), node)
715
+ : node;
716
+ }
717
+ export function createAwait(expression) {
718
+ const node = createSynthesizedNode(206 /* SyntaxKind.AwaitExpression */);
719
+ node.expression = parenthesizePrefixOperand(expression);
720
+ return node;
721
+ }
722
+ export function updateAwait(node, expression) {
723
+ return node.expression !== expression
724
+ ? updateNode(createAwait(expression), node)
725
+ : node;
726
+ }
727
+ export function createPrefix(operator, operand) {
728
+ const node = createSynthesizedNode(207 /* SyntaxKind.PrefixUnaryExpression */);
729
+ node.operator = operator;
730
+ node.operand = parenthesizePrefixOperand(operand);
731
+ return node;
732
+ }
733
+ export function updatePrefix(node, operand) {
734
+ return node.operand !== operand
735
+ ? updateNode(createPrefix(node.operator, operand), node)
736
+ : node;
737
+ }
738
+ export function createPostfix(operand, operator) {
739
+ const node = createSynthesizedNode(208 /* SyntaxKind.PostfixUnaryExpression */);
740
+ node.operand = parenthesizePostfixOperand(operand);
741
+ node.operator = operator;
742
+ return node;
743
+ }
744
+ export function updatePostfix(node, operand) {
745
+ return node.operand !== operand
746
+ ? updateNode(createPostfix(operand, node.operator), node)
747
+ : node;
748
+ }
749
+ export function createBinary(left, operator, right) {
750
+ const node = createSynthesizedNode(209 /* SyntaxKind.BinaryExpression */);
751
+ const operatorToken = asToken(operator);
752
+ const operatorKind = operatorToken.kind;
753
+ node.left = parenthesizeBinaryOperand(operatorKind, left, /*isLeftSideOfBinary*/ true, /*leftOperand*/ undefined);
754
+ node.operatorToken = operatorToken;
755
+ node.right = parenthesizeBinaryOperand(operatorKind, right, /*isLeftSideOfBinary*/ false, node.left);
756
+ return node;
757
+ }
758
+ export function updateBinary(node, left, right, operator) {
759
+ return node.left !== left
760
+ || node.right !== right
761
+ ? updateNode(createBinary(left, operator || node.operatorToken, right), node)
762
+ : node;
763
+ }
764
+ export function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) {
765
+ const node = createSynthesizedNode(210 /* SyntaxKind.ConditionalExpression */);
766
+ node.condition = parenthesizeForConditionalHead(condition);
767
+ node.questionToken = whenFalse ? questionTokenOrWhenTrue : createToken(57 /* SyntaxKind.QuestionToken */);
768
+ node.whenTrue = parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenTrueOrWhenFalse : questionTokenOrWhenTrue);
769
+ node.colonToken = whenFalse ? colonToken : createToken(58 /* SyntaxKind.ColonToken */);
770
+ node.whenFalse = parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenFalse : whenTrueOrWhenFalse);
771
+ return node;
772
+ }
773
+ export function updateConditional(node, condition, questionToken, whenTrue, colonToken, whenFalse) {
774
+ return node.condition !== condition
775
+ || node.questionToken !== questionToken
776
+ || node.whenTrue !== whenTrue
777
+ || node.colonToken !== colonToken
778
+ || node.whenFalse !== whenFalse
779
+ ? updateNode(createConditional(condition, questionToken, whenTrue, colonToken, whenFalse), node)
780
+ : node;
781
+ }
782
+ export function createTemplateExpression(head, templateSpans) {
783
+ const node = createSynthesizedNode(211 /* SyntaxKind.TemplateExpression */);
784
+ node.head = head;
785
+ node.templateSpans = createNodeArray(templateSpans);
786
+ return node;
787
+ }
788
+ export function updateTemplateExpression(node, head, templateSpans) {
789
+ return node.head !== head
790
+ || node.templateSpans !== templateSpans
791
+ ? updateNode(createTemplateExpression(head, templateSpans), node)
792
+ : node;
793
+ }
794
+ let rawTextScanner;
795
+ const invalidValueSentinel = {};
796
+ function getCookedText(kind, rawText) {
797
+ if (!rawTextScanner) {
798
+ rawTextScanner = createScanner(99 /* ScriptTarget.Latest */, /*skipTrivia*/ false, 0 /* LanguageVariant.Standard */);
799
+ }
800
+ switch (kind) {
801
+ case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
802
+ rawTextScanner.setText("`" + rawText + "`");
803
+ break;
804
+ case 15 /* SyntaxKind.TemplateHead */:
805
+ rawTextScanner.setText("`" + rawText + "${");
806
+ break;
807
+ case 16 /* SyntaxKind.TemplateMiddle */:
808
+ rawTextScanner.setText("}" + rawText + "${");
809
+ break;
810
+ case 17 /* SyntaxKind.TemplateTail */:
811
+ rawTextScanner.setText("}" + rawText + "`");
812
+ break;
813
+ }
814
+ let token = rawTextScanner.scan();
815
+ if (token === 19 /* SyntaxKind.CloseBraceToken */) {
816
+ token = rawTextScanner.reScanTemplateToken();
817
+ }
818
+ if (rawTextScanner.isUnterminated()) {
819
+ rawTextScanner.setText(undefined);
820
+ return invalidValueSentinel;
821
+ }
822
+ let tokenValue;
823
+ switch (token) {
824
+ case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
825
+ case 15 /* SyntaxKind.TemplateHead */:
826
+ case 16 /* SyntaxKind.TemplateMiddle */:
827
+ case 17 /* SyntaxKind.TemplateTail */:
828
+ tokenValue = rawTextScanner.getTokenValue();
829
+ break;
830
+ }
831
+ if (rawTextScanner.scan() !== 1 /* SyntaxKind.EndOfFileToken */) {
832
+ rawTextScanner.setText(undefined);
833
+ return invalidValueSentinel;
834
+ }
835
+ rawTextScanner.setText(undefined);
836
+ return tokenValue;
837
+ }
838
+ function createTemplateLiteralLikeNode(kind, text, rawText) {
839
+ const node = createSynthesizedNode(kind);
840
+ node.text = text;
841
+ if (rawText === undefined || text === rawText) {
842
+ node.rawText = rawText;
843
+ }
844
+ else {
845
+ const cooked = getCookedText(kind, rawText);
846
+ if (typeof cooked === "object") {
847
+ return Debug.fail("Invalid raw text");
848
+ }
849
+ Debug.assert(text === cooked, "Expected argument 'text' to be the normalized (i.e. 'cooked') version of argument 'rawText'.");
850
+ node.rawText = rawText;
851
+ }
852
+ return node;
853
+ }
854
+ export function createTemplateHead(text, rawText) {
855
+ const node = createTemplateLiteralLikeNode(15 /* SyntaxKind.TemplateHead */, text, rawText);
856
+ node.text = text;
857
+ return node;
858
+ }
859
+ export function createTemplateMiddle(text, rawText) {
860
+ const node = createTemplateLiteralLikeNode(16 /* SyntaxKind.TemplateMiddle */, text, rawText);
861
+ node.text = text;
862
+ return node;
863
+ }
864
+ export function createTemplateTail(text, rawText) {
865
+ const node = createTemplateLiteralLikeNode(17 /* SyntaxKind.TemplateTail */, text, rawText);
866
+ node.text = text;
867
+ return node;
868
+ }
869
+ export function createNoSubstitutionTemplateLiteral(text, rawText) {
870
+ const node = createTemplateLiteralLikeNode(14 /* SyntaxKind.NoSubstitutionTemplateLiteral */, text, rawText);
871
+ return node;
872
+ }
873
+ export function createSpread(expression) {
874
+ const node = createSynthesizedNode(213 /* SyntaxKind.SpreadElement */);
875
+ node.expression = parenthesizeExpressionForList(expression);
876
+ return node;
877
+ }
878
+ export function updateSpread(node, expression) {
879
+ return node.expression !== expression
880
+ ? updateNode(createSpread(expression), node)
881
+ : node;
882
+ }
883
+ export function createOmittedExpression() {
884
+ return createSynthesizedNode(215 /* SyntaxKind.OmittedExpression */);
885
+ }
886
+ export function createAsExpression(expression, type) {
887
+ const node = createSynthesizedNode(217 /* SyntaxKind.AsExpression */);
888
+ node.expression = expression;
889
+ node.type = type;
890
+ return node;
891
+ }
892
+ export function updateAsExpression(node, expression, type) {
893
+ return node.expression !== expression
894
+ || node.type !== type
895
+ ? updateNode(createAsExpression(expression, type), node)
896
+ : node;
897
+ }
898
+ export function createMetaProperty(keywordToken, name) {
899
+ const node = createSynthesizedNode(219 /* SyntaxKind.MetaProperty */);
900
+ node.keywordToken = keywordToken;
901
+ node.name = name;
902
+ return node;
903
+ }
904
+ export function updateMetaProperty(node, name) {
905
+ return node.name !== name
906
+ ? updateNode(createMetaProperty(node.keywordToken, name), node)
907
+ : node;
908
+ }
909
+ // Misc
910
+ export function createTemplateSpan(expression, literal) {
911
+ const node = createSynthesizedNode(221 /* SyntaxKind.TemplateSpan */);
912
+ node.expression = expression;
913
+ node.literal = literal;
914
+ return node;
915
+ }
916
+ export function updateTemplateSpan(node, expression, literal) {
917
+ return node.expression !== expression
918
+ || node.literal !== literal
919
+ ? updateNode(createTemplateSpan(expression, literal), node)
920
+ : node;
921
+ }
922
+ // Element
923
+ export function createBlock(statements, multiLine) {
924
+ const block = createSynthesizedNode(223 /* SyntaxKind.Block */);
925
+ block.statements = createNodeArray(statements);
926
+ if (multiLine)
927
+ block.multiLine = multiLine;
928
+ return block;
929
+ }
930
+ export function updateBlock(node, statements) {
931
+ return node.statements !== statements
932
+ ? updateNode(createBlock(statements, node.multiLine), node)
933
+ : node;
934
+ }
935
+ export function createVariableStatement(modifiers, declarationList) {
936
+ const node = createSynthesizedNode(225 /* SyntaxKind.VariableStatement */);
937
+ node.modifiers = asNodeArray(modifiers);
938
+ node.declarationList = isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
939
+ return node;
940
+ }
941
+ export function updateVariableStatement(node, modifiers, declarationList) {
942
+ return node.modifiers !== modifiers
943
+ || node.declarationList !== declarationList
944
+ ? updateNode(createVariableStatement(modifiers, declarationList), node)
945
+ : node;
946
+ }
947
+ export function createEmptyStatement() {
948
+ return createSynthesizedNode(224 /* SyntaxKind.EmptyStatement */);
949
+ }
950
+ export function createExpressionStatement(expression) {
951
+ const node = createSynthesizedNode(226 /* SyntaxKind.ExpressionStatement */);
952
+ node.expression = parenthesizeExpressionForExpressionStatement(expression);
953
+ return node;
954
+ }
955
+ export function updateExpressionStatement(node, expression) {
956
+ return node.expression !== expression
957
+ ? updateNode(createExpressionStatement(expression), node)
958
+ : node;
959
+ }
960
+ /** @deprecated Use `createExpressionStatement` instead. */
961
+ export const createStatement = createExpressionStatement;
962
+ export function createIf(expression, thenStatement, elseStatement) {
963
+ const node = createSynthesizedNode(227 /* SyntaxKind.IfStatement */);
964
+ node.expression = expression;
965
+ node.thenStatement = asEmbeddedStatement(thenStatement);
966
+ node.elseStatement = asEmbeddedStatement(elseStatement);
967
+ return node;
968
+ }
969
+ export function updateIf(node, expression, thenStatement, elseStatement) {
970
+ return node.expression !== expression
971
+ || node.thenStatement !== thenStatement
972
+ || node.elseStatement !== elseStatement
973
+ ? updateNode(createIf(expression, thenStatement, elseStatement), node)
974
+ : node;
975
+ }
976
+ export function createDo(statement, expression) {
977
+ const node = createSynthesizedNode(228 /* SyntaxKind.DoStatement */);
978
+ node.statement = asEmbeddedStatement(statement);
979
+ node.expression = expression;
980
+ return node;
981
+ }
982
+ export function updateDo(node, statement, expression) {
983
+ return node.statement !== statement
984
+ || node.expression !== expression
985
+ ? updateNode(createDo(statement, expression), node)
986
+ : node;
987
+ }
988
+ export function createWhile(expression, statement) {
989
+ const node = createSynthesizedNode(229 /* SyntaxKind.WhileStatement */);
990
+ node.expression = expression;
991
+ node.statement = asEmbeddedStatement(statement);
992
+ return node;
993
+ }
994
+ export function updateWhile(node, expression, statement) {
995
+ return node.expression !== expression
996
+ || node.statement !== statement
997
+ ? updateNode(createWhile(expression, statement), node)
998
+ : node;
999
+ }
1000
+ export function createFor(initializer, condition, incrementor, statement) {
1001
+ const node = createSynthesizedNode(230 /* SyntaxKind.ForStatement */);
1002
+ node.initializer = initializer;
1003
+ node.condition = condition;
1004
+ node.incrementor = incrementor;
1005
+ node.statement = asEmbeddedStatement(statement);
1006
+ return node;
1007
+ }
1008
+ export function updateFor(node, initializer, condition, incrementor, statement) {
1009
+ return node.initializer !== initializer
1010
+ || node.condition !== condition
1011
+ || node.incrementor !== incrementor
1012
+ || node.statement !== statement
1013
+ ? updateNode(createFor(initializer, condition, incrementor, statement), node)
1014
+ : node;
1015
+ }
1016
+ export function createForIn(initializer, expression, statement) {
1017
+ const node = createSynthesizedNode(231 /* SyntaxKind.ForInStatement */);
1018
+ node.initializer = initializer;
1019
+ node.expression = expression;
1020
+ node.statement = asEmbeddedStatement(statement);
1021
+ return node;
1022
+ }
1023
+ export function updateForIn(node, initializer, expression, statement) {
1024
+ return node.initializer !== initializer
1025
+ || node.expression !== expression
1026
+ || node.statement !== statement
1027
+ ? updateNode(createForIn(initializer, expression, statement), node)
1028
+ : node;
1029
+ }
1030
+ export function createForOf(awaitModifier, initializer, expression, statement) {
1031
+ const node = createSynthesizedNode(232 /* SyntaxKind.ForOfStatement */);
1032
+ node.awaitModifier = awaitModifier;
1033
+ node.initializer = initializer;
1034
+ node.expression = isCommaSequence(expression) ? createParen(expression) : expression;
1035
+ node.statement = asEmbeddedStatement(statement);
1036
+ return node;
1037
+ }
1038
+ export function updateForOf(node, awaitModifier, initializer, expression, statement) {
1039
+ return node.awaitModifier !== awaitModifier
1040
+ || node.initializer !== initializer
1041
+ || node.expression !== expression
1042
+ || node.statement !== statement
1043
+ ? updateNode(createForOf(awaitModifier, initializer, expression, statement), node)
1044
+ : node;
1045
+ }
1046
+ export function createContinue() {
1047
+ return createSynthesizedNode(233 /* SyntaxKind.ContinueStatement */);
1048
+ }
1049
+ export function createBreak() {
1050
+ return createSynthesizedNode(234 /* SyntaxKind.BreakStatement */);
1051
+ }
1052
+ export function createReturn(expression) {
1053
+ const node = createSynthesizedNode(235 /* SyntaxKind.ReturnStatement */);
1054
+ node.expression = expression;
1055
+ return node;
1056
+ }
1057
+ export function updateReturn(node, expression) {
1058
+ return node.expression !== expression
1059
+ ? updateNode(createReturn(expression), node)
1060
+ : node;
1061
+ }
1062
+ export function createSwitch(expression, caseBlock) {
1063
+ const node = createSynthesizedNode(237 /* SyntaxKind.SwitchStatement */);
1064
+ node.expression = parenthesizeExpressionForList(expression);
1065
+ node.caseBlock = caseBlock;
1066
+ return node;
1067
+ }
1068
+ export function updateSwitch(node, expression, caseBlock) {
1069
+ return node.expression !== expression
1070
+ || node.caseBlock !== caseBlock
1071
+ ? updateNode(createSwitch(expression, caseBlock), node)
1072
+ : node;
1073
+ }
1074
+ export function createThrow(expression) {
1075
+ const node = createSynthesizedNode(239 /* SyntaxKind.ThrowStatement */);
1076
+ node.expression = expression;
1077
+ return node;
1078
+ }
1079
+ export function updateThrow(node, expression) {
1080
+ return node.expression !== expression
1081
+ ? updateNode(createThrow(expression), node)
1082
+ : node;
1083
+ }
1084
+ export function createTry(tryBlock, catchClause, finallyBlock) {
1085
+ const node = createSynthesizedNode(240 /* SyntaxKind.TryStatement */);
1086
+ node.tryBlock = tryBlock;
1087
+ node.catchClause = catchClause;
1088
+ node.finallyBlock = finallyBlock;
1089
+ return node;
1090
+ }
1091
+ export function updateTry(node, tryBlock, catchClause, finallyBlock) {
1092
+ return node.tryBlock !== tryBlock
1093
+ || node.catchClause !== catchClause
1094
+ || node.finallyBlock !== finallyBlock
1095
+ ? updateNode(createTry(tryBlock, catchClause, finallyBlock), node)
1096
+ : node;
1097
+ }
1098
+ export function createVariableDeclaration(name, type, initializer) {
1099
+ /* Internally, one should probably use createTypeScriptVariableDeclaration instead and handle definite assignment assertions */
1100
+ const node = createSynthesizedNode(242 /* SyntaxKind.VariableDeclaration */);
1101
+ node.name = asName(name);
1102
+ node.type = type;
1103
+ node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined;
1104
+ return node;
1105
+ }
1106
+ export function createTypeScriptVariableDeclaration(name, exclaimationToken, type, initializer) {
1107
+ const node = createSynthesizedNode(242 /* SyntaxKind.VariableDeclaration */);
1108
+ node.name = asName(name);
1109
+ node.type = type;
1110
+ node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined;
1111
+ node.exclamationToken = exclaimationToken;
1112
+ return node;
1113
+ }
1114
+ export function updateTypeScriptVariableDeclaration(node, name, exclaimationToken, type, initializer) {
1115
+ return node.name !== name
1116
+ || node.type !== type
1117
+ || node.initializer !== initializer
1118
+ || node.exclamationToken !== exclaimationToken
1119
+ ? updateNode(createTypeScriptVariableDeclaration(name, exclaimationToken, type, initializer), node)
1120
+ : node;
1121
+ }
1122
+ export function createVariableDeclarationList(declarations, flags = 0 /* NodeFlags.None */) {
1123
+ const node = createSynthesizedNode(243 /* SyntaxKind.VariableDeclarationList */);
1124
+ node.flags |= flags & 3 /* NodeFlags.BlockScoped */;
1125
+ node.declarations = createNodeArray(declarations);
1126
+ return node;
1127
+ }
1128
+ export function updateVariableDeclarationList(node, declarations) {
1129
+ return node.declarations !== declarations
1130
+ ? updateNode(createVariableDeclarationList(declarations, node.flags), node)
1131
+ : node;
1132
+ }
1133
+ /** A função com outro corpo. Na tag, também a `function`, o método, o acessor e o construtor (CK-02). */
1134
+ export function updateFunctionLikeBody(declaration, body) {
1135
+ switch (declaration.kind) {
1136
+ case 202 /* SyntaxKind.ArrowFunction */:
1137
+ return createArrowFunction(declaration.modifiers, declaration.typeParameters, declaration.parameters, declaration.type, declaration.equalsGreaterThanToken, body);
1138
+ }
1139
+ }
1140
+ export function createTypeAliasDeclaration(modifiers, name, typeParameters, type) {
1141
+ const node = createSynthesizedNode(247 /* SyntaxKind.TypeAliasDeclaration */);
1142
+ node.modifiers = asNodeArray(modifiers);
1143
+ node.name = asName(name);
1144
+ node.typeParameters = asNodeArray(typeParameters);
1145
+ node.type = type;
1146
+ return node;
1147
+ }
1148
+ export function updateTypeAliasDeclaration(node, modifiers, name, typeParameters, type) {
1149
+ return node.modifiers !== modifiers
1150
+ || node.name !== name
1151
+ || node.typeParameters !== typeParameters
1152
+ || node.type !== type
1153
+ ? updateNode(createTypeAliasDeclaration(modifiers, name, typeParameters, type), node)
1154
+ : node;
1155
+ }
1156
+ export function createModuleDeclaration(modifiers, name, body, flags = 0 /* NodeFlags.None */) {
1157
+ const node = createSynthesizedNode(249 /* SyntaxKind.ModuleDeclaration */);
1158
+ node.flags |= flags & (16 /* NodeFlags.Namespace */ | 4 /* NodeFlags.NestedNamespace */ | 1024 /* NodeFlags.GlobalAugmentation */);
1159
+ node.modifiers = asNodeArray(modifiers);
1160
+ node.name = name;
1161
+ node.body = body;
1162
+ return node;
1163
+ }
1164
+ export function updateModuleDeclaration(node, modifiers, name, body) {
1165
+ return node.modifiers !== modifiers
1166
+ || node.name !== name
1167
+ || node.body !== body
1168
+ ? updateNode(createModuleDeclaration(modifiers, name, body, node.flags), node)
1169
+ : node;
1170
+ }
1171
+ export function createModuleBlock(statements) {
1172
+ const node = createSynthesizedNode(250 /* SyntaxKind.ModuleBlock */);
1173
+ node.statements = createNodeArray(statements);
1174
+ return node;
1175
+ }
1176
+ export function updateModuleBlock(node, statements) {
1177
+ return node.statements !== statements
1178
+ ? updateNode(createModuleBlock(statements), node)
1179
+ : node;
1180
+ }
1181
+ export function createCaseBlock(clauses) {
1182
+ const node = createSynthesizedNode(251 /* SyntaxKind.CaseBlock */);
1183
+ node.clauses = createNodeArray(clauses);
1184
+ return node;
1185
+ }
1186
+ export function updateCaseBlock(node, clauses) {
1187
+ return node.clauses !== clauses
1188
+ ? updateNode(createCaseBlock(clauses), node)
1189
+ : node;
1190
+ }
1191
+ export function createImportDeclaration(modifiers, importClause, moduleSpecifier) {
1192
+ const node = createSynthesizedNode(254 /* SyntaxKind.ImportDeclaration */);
1193
+ node.modifiers = asNodeArray(modifiers);
1194
+ node.importClause = importClause;
1195
+ node.moduleSpecifier = moduleSpecifier;
1196
+ return node;
1197
+ }
1198
+ export function updateImportDeclaration(node, modifiers, importClause, moduleSpecifier) {
1199
+ return node.modifiers !== modifiers
1200
+ || node.importClause !== importClause
1201
+ || node.moduleSpecifier !== moduleSpecifier
1202
+ ? updateNode(createImportDeclaration(modifiers, importClause, moduleSpecifier), node)
1203
+ : node;
1204
+ }
1205
+ export function createImportClause(name, namedBindings, isTypeOnly = false) {
1206
+ const node = createSynthesizedNode(255 /* SyntaxKind.ImportClause */);
1207
+ node.name = name;
1208
+ node.namedBindings = namedBindings;
1209
+ node.isTypeOnly = isTypeOnly;
1210
+ return node;
1211
+ }
1212
+ export function updateImportClause(node, name, namedBindings, isTypeOnly) {
1213
+ return node.name !== name
1214
+ || node.namedBindings !== namedBindings
1215
+ || node.isTypeOnly !== isTypeOnly
1216
+ ? updateNode(createImportClause(name, namedBindings, isTypeOnly), node)
1217
+ : node;
1218
+ }
1219
+ export function createNamespaceImport(name) {
1220
+ const node = createSynthesizedNode(256 /* SyntaxKind.NamespaceImport */);
1221
+ node.name = name;
1222
+ return node;
1223
+ }
1224
+ export function createNamespaceExport(name) {
1225
+ const node = createSynthesizedNode(262 /* SyntaxKind.NamespaceExport */);
1226
+ node.name = name;
1227
+ return node;
1228
+ }
1229
+ export function updateNamespaceImport(node, name) {
1230
+ return node.name !== name
1231
+ ? updateNode(createNamespaceImport(name), node)
1232
+ : node;
1233
+ }
1234
+ export function updateNamespaceExport(node, name) {
1235
+ return node.name !== name
1236
+ ? updateNode(createNamespaceExport(name), node)
1237
+ : node;
1238
+ }
1239
+ export function createNamedImports(elements) {
1240
+ const node = createSynthesizedNode(257 /* SyntaxKind.NamedImports */);
1241
+ node.elements = createNodeArray(elements);
1242
+ return node;
1243
+ }
1244
+ export function updateNamedImports(node, elements) {
1245
+ return node.elements !== elements
1246
+ ? updateNode(createNamedImports(elements), node)
1247
+ : node;
1248
+ }
1249
+ export function createImportSpecifier(propertyName, name) {
1250
+ const node = createSynthesizedNode(258 /* SyntaxKind.ImportSpecifier */);
1251
+ node.propertyName = propertyName;
1252
+ node.name = name;
1253
+ return node;
1254
+ }
1255
+ export function updateImportSpecifier(node, propertyName, name) {
1256
+ return node.propertyName !== propertyName
1257
+ || node.name !== name
1258
+ ? updateNode(createImportSpecifier(propertyName, name), node)
1259
+ : node;
1260
+ }
1261
+ export function createExportAssignment(modifiers, expression) {
1262
+ const node = createSynthesizedNode(259 /* SyntaxKind.ExportAssignment */);
1263
+ node.modifiers = asNodeArray(modifiers);
1264
+ node.expression = parenthesizeDefaultExpression(expression);
1265
+ return node;
1266
+ }
1267
+ export function updateExportAssignment(node, modifiers, expression) {
1268
+ return node.modifiers !== modifiers
1269
+ || node.expression !== expression
1270
+ ? updateNode(createExportAssignment(modifiers, expression), node)
1271
+ : node;
1272
+ }
1273
+ export function createExportDeclaration(modifiers, exportClause, moduleSpecifier, isTypeOnly = false) {
1274
+ const node = createSynthesizedNode(260 /* SyntaxKind.ExportDeclaration */);
1275
+ node.modifiers = asNodeArray(modifiers);
1276
+ node.isTypeOnly = isTypeOnly;
1277
+ node.exportClause = exportClause;
1278
+ node.moduleSpecifier = moduleSpecifier;
1279
+ return node;
1280
+ }
1281
+ export function updateExportDeclaration(node, modifiers, exportClause, moduleSpecifier, isTypeOnly) {
1282
+ return node.modifiers !== modifiers
1283
+ || node.isTypeOnly !== isTypeOnly
1284
+ || node.exportClause !== exportClause
1285
+ || node.moduleSpecifier !== moduleSpecifier
1286
+ ? updateNode(createExportDeclaration(modifiers, exportClause, moduleSpecifier, isTypeOnly), node)
1287
+ : node;
1288
+ }
1289
+ export function createNamedExports(elements) {
1290
+ const node = createSynthesizedNode(261 /* SyntaxKind.NamedExports */);
1291
+ node.elements = createNodeArray(elements);
1292
+ return node;
1293
+ }
1294
+ export function updateNamedExports(node, elements) {
1295
+ return node.elements !== elements
1296
+ ? updateNode(createNamedExports(elements), node)
1297
+ : node;
1298
+ }
1299
+ export function createExportSpecifier(propertyName, name) {
1300
+ const node = createSynthesizedNode(263 /* SyntaxKind.ExportSpecifier */);
1301
+ node.propertyName = asName(propertyName);
1302
+ node.name = asName(name);
1303
+ return node;
1304
+ }
1305
+ export function updateExportSpecifier(node, propertyName, name) {
1306
+ return node.propertyName !== propertyName
1307
+ || node.name !== name
1308
+ ? updateNode(createExportSpecifier(propertyName, name), node)
1309
+ : node;
1310
+ }
1311
+ // JSX
1312
+ export function createJsxElement(openingElement, children, closingElement) {
1313
+ const node = createSynthesizedNode(266 /* SyntaxKind.JsxElement */);
1314
+ node.openingElement = openingElement;
1315
+ node.children = createNodeArray(children);
1316
+ node.closingElement = closingElement;
1317
+ return node;
1318
+ }
1319
+ export function updateJsxElement(node, openingElement, children, closingElement) {
1320
+ return node.openingElement !== openingElement
1321
+ || node.children !== children
1322
+ || node.closingElement !== closingElement
1323
+ ? updateNode(createJsxElement(openingElement, children, closingElement), node)
1324
+ : node;
1325
+ }
1326
+ export function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
1327
+ const node = createSynthesizedNode(267 /* SyntaxKind.JsxSelfClosingElement */);
1328
+ node.tagName = tagName;
1329
+ node.typeArguments = asNodeArray(typeArguments);
1330
+ node.attributes = attributes;
1331
+ return node;
1332
+ }
1333
+ export function updateJsxSelfClosingElement(node, tagName, typeArguments, attributes) {
1334
+ return node.tagName !== tagName
1335
+ || node.typeArguments !== typeArguments
1336
+ || node.attributes !== attributes
1337
+ ? updateNode(createJsxSelfClosingElement(tagName, typeArguments, attributes), node)
1338
+ : node;
1339
+ }
1340
+ export function createJsxOpeningElement(tagName, typeArguments, attributes) {
1341
+ const node = createSynthesizedNode(268 /* SyntaxKind.JsxOpeningElement */);
1342
+ node.tagName = tagName;
1343
+ node.typeArguments = asNodeArray(typeArguments);
1344
+ node.attributes = attributes;
1345
+ return node;
1346
+ }
1347
+ export function updateJsxOpeningElement(node, tagName, typeArguments, attributes) {
1348
+ return node.tagName !== tagName
1349
+ || node.typeArguments !== typeArguments
1350
+ || node.attributes !== attributes
1351
+ ? updateNode(createJsxOpeningElement(tagName, typeArguments, attributes), node)
1352
+ : node;
1353
+ }
1354
+ export function createJsxClosingElement(tagName) {
1355
+ const node = createSynthesizedNode(269 /* SyntaxKind.JsxClosingElement */);
1356
+ node.tagName = tagName;
1357
+ return node;
1358
+ }
1359
+ export function updateJsxClosingElement(node, tagName) {
1360
+ return node.tagName !== tagName
1361
+ ? updateNode(createJsxClosingElement(tagName), node)
1362
+ : node;
1363
+ }
1364
+ export function createJsxFragment(openingFragment, children, closingFragment) {
1365
+ const node = createSynthesizedNode(270 /* SyntaxKind.JsxFragment */);
1366
+ node.openingFragment = openingFragment;
1367
+ node.children = createNodeArray(children);
1368
+ node.closingFragment = closingFragment;
1369
+ return node;
1370
+ }
1371
+ export function createJsxText(text, containsOnlyTriviaWhiteSpaces) {
1372
+ const node = createSynthesizedNode(11 /* SyntaxKind.JsxText */);
1373
+ node.text = text;
1374
+ node.containsOnlyTriviaWhiteSpaces = !!containsOnlyTriviaWhiteSpaces;
1375
+ return node;
1376
+ }
1377
+ export function createJsxOpeningFragment() {
1378
+ return createSynthesizedNode(271 /* SyntaxKind.JsxOpeningFragment */);
1379
+ }
1380
+ export function createJsxJsxClosingFragment() {
1381
+ return createSynthesizedNode(272 /* SyntaxKind.JsxClosingFragment */);
1382
+ }
1383
+ export function updateJsxFragment(node, openingFragment, children, closingFragment) {
1384
+ return node.openingFragment !== openingFragment
1385
+ || node.children !== children
1386
+ || node.closingFragment !== closingFragment
1387
+ ? updateNode(createJsxFragment(openingFragment, children, closingFragment), node)
1388
+ : node;
1389
+ }
1390
+ export function createJsxAttribute(name, initializer) {
1391
+ const node = createSynthesizedNode(273 /* SyntaxKind.JsxAttribute */);
1392
+ node.name = name;
1393
+ node.initializer = initializer;
1394
+ return node;
1395
+ }
1396
+ export function updateJsxAttribute(node, name, initializer) {
1397
+ return node.name !== name
1398
+ || node.initializer !== initializer
1399
+ ? updateNode(createJsxAttribute(name, initializer), node)
1400
+ : node;
1401
+ }
1402
+ export function createJsxAttributes(properties) {
1403
+ const node = createSynthesizedNode(274 /* SyntaxKind.JsxAttributes */);
1404
+ node.properties = createNodeArray(properties);
1405
+ return node;
1406
+ }
1407
+ export function updateJsxAttributes(node, properties) {
1408
+ return node.properties !== properties
1409
+ ? updateNode(createJsxAttributes(properties), node)
1410
+ : node;
1411
+ }
1412
+ export function createJsxSpreadAttribute(expression) {
1413
+ const node = createSynthesizedNode(275 /* SyntaxKind.JsxSpreadAttribute */);
1414
+ node.expression = expression;
1415
+ return node;
1416
+ }
1417
+ export function updateJsxSpreadAttribute(node, expression) {
1418
+ return node.expression !== expression
1419
+ ? updateNode(createJsxSpreadAttribute(expression), node)
1420
+ : node;
1421
+ }
1422
+ export function createJsxExpression(dotDotDotToken, expression) {
1423
+ const node = createSynthesizedNode(276 /* SyntaxKind.JsxExpression */);
1424
+ node.dotDotDotToken = dotDotDotToken;
1425
+ node.expression = expression;
1426
+ return node;
1427
+ }
1428
+ export function updateJsxExpression(node, expression) {
1429
+ return node.expression !== expression
1430
+ ? updateNode(createJsxExpression(node.dotDotDotToken, expression), node)
1431
+ : node;
1432
+ }
1433
+ // Clauses
1434
+ export function createCaseClause(expression, statements) {
1435
+ const node = createSynthesizedNode(277 /* SyntaxKind.CaseClause */);
1436
+ node.expression = parenthesizeExpressionForList(expression);
1437
+ node.statements = createNodeArray(statements);
1438
+ return node;
1439
+ }
1440
+ export function updateCaseClause(node, expression, statements) {
1441
+ return node.expression !== expression
1442
+ || node.statements !== statements
1443
+ ? updateNode(createCaseClause(expression, statements), node)
1444
+ : node;
1445
+ }
1446
+ export function createDefaultClause(statements) {
1447
+ const node = createSynthesizedNode(278 /* SyntaxKind.DefaultClause */);
1448
+ node.statements = createNodeArray(statements);
1449
+ return node;
1450
+ }
1451
+ export function updateDefaultClause(node, statements) {
1452
+ return node.statements !== statements
1453
+ ? updateNode(createDefaultClause(statements), node)
1454
+ : node;
1455
+ }
1456
+ export function createCatchClause(variableDeclaration, block) {
1457
+ const node = createSynthesizedNode(280 /* SyntaxKind.CatchClause */);
1458
+ node.variableDeclaration = isString(variableDeclaration) ? createVariableDeclaration(variableDeclaration) : variableDeclaration;
1459
+ node.block = block;
1460
+ return node;
1461
+ }
1462
+ export function updateCatchClause(node, variableDeclaration, block) {
1463
+ return node.variableDeclaration !== variableDeclaration
1464
+ || node.block !== block
1465
+ ? updateNode(createCatchClause(variableDeclaration, block), node)
1466
+ : node;
1467
+ }
1468
+ // Property assignments
1469
+ export function createPropertyAssignment(name, initializer) {
1470
+ const node = createSynthesizedNode(281 /* SyntaxKind.PropertyAssignment */);
1471
+ node.name = asName(name);
1472
+ node.questionToken = undefined;
1473
+ node.initializer = parenthesizeExpressionForList(initializer);
1474
+ return node;
1475
+ }
1476
+ export function updatePropertyAssignment(node, name, initializer) {
1477
+ return node.name !== name
1478
+ || node.initializer !== initializer
1479
+ ? updateNode(createPropertyAssignment(name, initializer), node)
1480
+ : node;
1481
+ }
1482
+ export function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
1483
+ const node = createSynthesizedNode(282 /* SyntaxKind.ShorthandPropertyAssignment */);
1484
+ node.name = asName(name);
1485
+ node.objectAssignmentInitializer = objectAssignmentInitializer !== undefined ? parenthesizeExpressionForList(objectAssignmentInitializer) : undefined;
1486
+ return node;
1487
+ }
1488
+ export function updateShorthandPropertyAssignment(node, name, objectAssignmentInitializer) {
1489
+ return node.name !== name
1490
+ || node.objectAssignmentInitializer !== objectAssignmentInitializer
1491
+ ? updateNode(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node)
1492
+ : node;
1493
+ }
1494
+ export function createSpreadAssignment(expression) {
1495
+ const node = createSynthesizedNode(283 /* SyntaxKind.SpreadAssignment */);
1496
+ node.expression = parenthesizeExpressionForList(expression);
1497
+ return node;
1498
+ }
1499
+ export function updateSpreadAssignment(node, expression) {
1500
+ return node.expression !== expression
1501
+ ? updateNode(createSpreadAssignment(expression), node)
1502
+ : node;
1503
+ }
1504
+ // Top-level nodes
1505
+ export function updateSourceFileNode(node, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
1506
+ if (node.statements !== statements ||
1507
+ (isDeclarationFile !== undefined && node.isDeclarationFile !== isDeclarationFile) ||
1508
+ (referencedFiles !== undefined && node.referencedFiles !== referencedFiles) ||
1509
+ (typeReferences !== undefined && node.typeReferenceDirectives !== typeReferences) ||
1510
+ (libReferences !== undefined && node.libReferenceDirectives !== libReferences) ||
1511
+ (hasNoDefaultLib !== undefined && node.hasNoDefaultLib !== hasNoDefaultLib)) {
1512
+ const updated = createSynthesizedNode(290 /* SyntaxKind.SourceFile */);
1513
+ updated.flags |= node.flags;
1514
+ updated.statements = createNodeArray(statements);
1515
+ updated.endOfFileToken = node.endOfFileToken;
1516
+ updated.fileName = node.fileName;
1517
+ updated.path = node.path;
1518
+ updated.text = node.text;
1519
+ updated.isDeclarationFile = isDeclarationFile === undefined ? node.isDeclarationFile : isDeclarationFile;
1520
+ updated.referencedFiles = referencedFiles === undefined ? node.referencedFiles : referencedFiles;
1521
+ updated.typeReferenceDirectives = typeReferences === undefined ? node.typeReferenceDirectives : typeReferences;
1522
+ updated.hasNoDefaultLib = hasNoDefaultLib === undefined ? node.hasNoDefaultLib : hasNoDefaultLib;
1523
+ updated.libReferenceDirectives = libReferences === undefined ? node.libReferenceDirectives : libReferences;
1524
+ if (node.amdDependencies !== undefined)
1525
+ updated.amdDependencies = node.amdDependencies;
1526
+ if (node.moduleName !== undefined)
1527
+ updated.moduleName = node.moduleName;
1528
+ if (node.languageVariant !== undefined)
1529
+ updated.languageVariant = node.languageVariant;
1530
+ if (node.renamedDependencies !== undefined)
1531
+ updated.renamedDependencies = node.renamedDependencies;
1532
+ if (node.languageVersion !== undefined)
1533
+ updated.languageVersion = node.languageVersion;
1534
+ if (node.scriptKind !== undefined)
1535
+ updated.scriptKind = node.scriptKind;
1536
+ if (node.externalModuleIndicator !== undefined)
1537
+ updated.externalModuleIndicator = node.externalModuleIndicator;
1538
+ if (node.commonJsModuleIndicator !== undefined)
1539
+ updated.commonJsModuleIndicator = node.commonJsModuleIndicator;
1540
+ if (node.identifiers !== undefined)
1541
+ updated.identifiers = node.identifiers;
1542
+ if (node.parseDiagnostics !== undefined)
1543
+ updated.parseDiagnostics = node.parseDiagnostics;
1544
+ if (node.bindDiagnostics !== undefined)
1545
+ updated.bindDiagnostics = node.bindDiagnostics;
1546
+ if (node.bindSuggestionDiagnostics !== undefined)
1547
+ updated.bindSuggestionDiagnostics = node.bindSuggestionDiagnostics;
1548
+ if (node.lineMap !== undefined)
1549
+ updated.lineMap = node.lineMap;
1550
+ if (node.resolvedModules !== undefined)
1551
+ updated.resolvedModules = node.resolvedModules;
1552
+ if (node.imports !== undefined)
1553
+ updated.imports = node.imports;
1554
+ if (node.moduleAugmentations !== undefined)
1555
+ updated.moduleAugmentations = node.moduleAugmentations;
1556
+ if (node.pragmas !== undefined)
1557
+ updated.pragmas = node.pragmas;
1558
+ return updateNode(updated, node);
1559
+ }
1560
+ return node;
1561
+ }
1562
+ /**
1563
+ * Creates a shallow, memberwise clone of a node for mutation.
1564
+ */
1565
+ export function getMutableClone(node) {
1566
+ const clone = getSynthesizedClone(node);
1567
+ clone.pos = node.pos;
1568
+ clone.end = node.end;
1569
+ clone.parent = node.parent;
1570
+ return clone;
1571
+ }
1572
+ // Transformation nodes
1573
+ /**
1574
+ * Creates a synthetic expression to act as a placeholder for a not-emitted expression in
1575
+ * order to preserve comments or sourcemap positions.
1576
+ *
1577
+ * @param expression The inner expression to emit.
1578
+ * @param original The original outer expression.
1579
+ * @param location The location for the expression. Defaults to the positions from "original" if provided.
1580
+ */
1581
+ export function createPartiallyEmittedExpression(expression, original) {
1582
+ const node = createSynthesizedNode(326 /* SyntaxKind.PartiallyEmittedExpression */);
1583
+ node.expression = expression;
1584
+ node.original = original;
1585
+ setTextRange(node, original);
1586
+ return node;
1587
+ }
1588
+ export function updatePartiallyEmittedExpression(node, expression) {
1589
+ if (node.expression !== expression) {
1590
+ return updateNode(createPartiallyEmittedExpression(expression, node.original), node);
1591
+ }
1592
+ return node;
1593
+ }
1594
+ function flattenCommaElements(node) {
1595
+ if (nodeIsSynthesized(node) && !isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) {
1596
+ if (node.kind === 327 /* SyntaxKind.CommaListExpression */) {
1597
+ return node.elements;
1598
+ }
1599
+ if (isBinaryExpression(node) && node.operatorToken.kind === 27 /* SyntaxKind.CommaToken */) {
1600
+ return [node.left, node.right];
1601
+ }
1602
+ }
1603
+ return node;
1604
+ }
1605
+ export function createCommaList(elements) {
1606
+ const node = createSynthesizedNode(327 /* SyntaxKind.CommaListExpression */);
1607
+ node.elements = createNodeArray(sameFlatMap(elements, flattenCommaElements));
1608
+ return node;
1609
+ }
1610
+ export function updateCommaList(node, elements) {
1611
+ return node.elements !== elements
1612
+ ? updateNode(createCommaList(elements), node)
1613
+ : node;
1614
+ }
1615
+ export function createBundle(sourceFiles, prepends = emptyArray) {
1616
+ const node = createNode(291 /* SyntaxKind.Bundle */);
1617
+ node.prepends = prepends;
1618
+ node.sourceFiles = sourceFiles;
1619
+ return node;
1620
+ }
1621
+ export function createAssignment(left, right) {
1622
+ return createBinary(left, 62 /* SyntaxKind.EqualsToken */, right);
1623
+ }
1624
+ export function createExportDefault(expression) {
1625
+ return createExportAssignment(/*modifiers*/ undefined, expression);
1626
+ }
1627
+ // Utilities
1628
+ function asName(name) {
1629
+ return isString(name) ? createIdentifier(name) : name;
1630
+ }
1631
+ function asExpression(value) {
1632
+ return typeof value === "string" ? createStringLiteral(value) :
1633
+ typeof value === "number" ? createNumericLiteral("" + value) :
1634
+ typeof value === "boolean" ? value ? createTrue() : createFalse() :
1635
+ value;
1636
+ }
1637
+ function asNodeArray(array) {
1638
+ return array ? createNodeArray(array) : undefined;
1639
+ }
1640
+ function asToken(value) {
1641
+ return typeof value === "number" ? createToken(value) : value;
1642
+ }
1643
+ function asEmbeddedStatement(statement) {
1644
+ return statement && isNotEmittedStatement(statement) ? setTextRange(setOriginalNode(createEmptyStatement(), statement), statement) : statement;
1645
+ }
1646
+ /**
1647
+ * Associates a node with the current transformation, initializing
1648
+ * various transient transformation properties.
1649
+ */
1650
+ export function getOrCreateEmitNode(node) {
1651
+ if (!node.emitNode) {
1652
+ if (isParseTreeNode(node)) {
1653
+ // To avoid holding onto transformation artifacts, we keep track of any
1654
+ // parse tree node we are annotating. This allows us to clean them up after
1655
+ // all transformations have completed.
1656
+ if (node.kind === 290 /* SyntaxKind.SourceFile */) {
1657
+ return node.emitNode = { annotatedNodes: [node] };
1658
+ }
1659
+ const sourceFile = getSourceFileOfNode(getParseTreeNode(getSourceFileOfNode(node)));
1660
+ getOrCreateEmitNode(sourceFile).annotatedNodes.push(node);
1661
+ }
1662
+ node.emitNode = {};
1663
+ }
1664
+ return node.emitNode;
1665
+ }
1666
+ export function setTextRange(range, location) {
1667
+ if (location) {
1668
+ range.pos = location.pos;
1669
+ range.end = location.end;
1670
+ }
1671
+ return range;
1672
+ }
1673
+ /**
1674
+ * Sets flags that control emit behavior of a node.
1675
+ */
1676
+ export function setEmitFlags(node, emitFlags) {
1677
+ getOrCreateEmitNode(node).flags = emitFlags;
1678
+ return node;
1679
+ }
1680
+ /**
1681
+ * Sets flags that control emit behavior of a node.
1682
+ */
1683
+ export function addEmitFlags(node, emitFlags) {
1684
+ const emitNode = getOrCreateEmitNode(node);
1685
+ emitNode.flags = emitNode.flags | emitFlags;
1686
+ return node;
1687
+ }
1688
+ /**
1689
+ * Gets a custom text range to use when emitting source maps.
1690
+ */
1691
+ export function getSourceMapRange(node) {
1692
+ const emitNode = node.emitNode;
1693
+ return (emitNode && emitNode.sourceMapRange) || node;
1694
+ }
1695
+ let SourceMapSource;
1696
+ /**
1697
+ * Gets a custom text range to use when emitting comments.
1698
+ */
1699
+ export function getStartsOnNewLine(node) {
1700
+ const emitNode = node.emitNode;
1701
+ return emitNode && emitNode.startsOnNewLine;
1702
+ }
1703
+ /**
1704
+ * Sets a custom text range to use when emitting comments.
1705
+ */
1706
+ export function setStartsOnNewLine(node, newLine) {
1707
+ getOrCreateEmitNode(node).startsOnNewLine = newLine;
1708
+ return node;
1709
+ }
1710
+ /**
1711
+ * Gets a custom text range to use when emitting comments.
1712
+ */
1713
+ export function getCommentRange(node) {
1714
+ const emitNode = node.emitNode;
1715
+ return (emitNode && emitNode.commentRange) || node;
1716
+ }
1717
+ /**
1718
+ * Sets a custom text range to use when emitting comments.
1719
+ */
1720
+ export function setCommentRange(node, range) {
1721
+ getOrCreateEmitNode(node).commentRange = range;
1722
+ return node;
1723
+ }
1724
+ export function getSyntheticLeadingComments(node) {
1725
+ const emitNode = node.emitNode;
1726
+ return emitNode && emitNode.leadingComments;
1727
+ }
1728
+ export function setSyntheticLeadingComments(node, comments) {
1729
+ getOrCreateEmitNode(node).leadingComments = comments;
1730
+ return node;
1731
+ }
1732
+ export function addSyntheticLeadingComment(node, kind, text, hasTrailingNewLine) {
1733
+ return setSyntheticLeadingComments(node, append(getSyntheticLeadingComments(node), { kind, pos: -1, end: -1, hasTrailingNewLine, text }));
1734
+ }
1735
+ export function getSyntheticTrailingComments(node) {
1736
+ const emitNode = node.emitNode;
1737
+ return emitNode && emitNode.trailingComments;
1738
+ }
1739
+ export function setSyntheticTrailingComments(node, comments) {
1740
+ getOrCreateEmitNode(node).trailingComments = comments;
1741
+ return node;
1742
+ }
1743
+ export function addSyntheticTrailingComment(node, kind, text, hasTrailingNewLine) {
1744
+ return setSyntheticTrailingComments(node, append(getSyntheticTrailingComments(node), { kind, pos: -1, end: -1, hasTrailingNewLine, text }));
1745
+ }
1746
+ export function ignoreSourceNewlines(node) {
1747
+ getOrCreateEmitNode(node).flags |= 134217728 /* EmitFlags.IgnoreSourceNewlines */;
1748
+ return node;
1749
+ }
1750
+ /**
1751
+ * Gets the EmitHelpers of a node.
1752
+ */
1753
+ export function getEmitHelpers(node) {
1754
+ const emitNode = node.emitNode;
1755
+ return emitNode && emitNode.helpers;
1756
+ }
1757
+ export function setOriginalNode(node, original) {
1758
+ node.original = original;
1759
+ if (original) {
1760
+ const emitNode = original.emitNode;
1761
+ if (emitNode)
1762
+ node.emitNode = mergeEmitNode(emitNode, node.emitNode);
1763
+ }
1764
+ return node;
1765
+ }
1766
+ function mergeEmitNode(sourceEmitNode, destEmitNode) {
1767
+ const { flags, leadingComments, trailingComments, commentRange, sourceMapRange, tokenSourceMapRanges, helpers, startsOnNewLine, } = sourceEmitNode;
1768
+ if (!destEmitNode)
1769
+ destEmitNode = {};
1770
+ // We are using `.slice()` here in case `destEmitNode.leadingComments` is pushed to later.
1771
+ if (leadingComments)
1772
+ destEmitNode.leadingComments = addRange(leadingComments.slice(), destEmitNode.leadingComments);
1773
+ if (trailingComments)
1774
+ destEmitNode.trailingComments = addRange(trailingComments.slice(), destEmitNode.trailingComments);
1775
+ if (flags)
1776
+ destEmitNode.flags = flags;
1777
+ if (commentRange)
1778
+ destEmitNode.commentRange = commentRange;
1779
+ if (sourceMapRange)
1780
+ destEmitNode.sourceMapRange = sourceMapRange;
1781
+ if (tokenSourceMapRanges)
1782
+ destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges);
1783
+ if (helpers)
1784
+ destEmitNode.helpers = addRange(destEmitNode.helpers, helpers);
1785
+ if (startsOnNewLine !== undefined)
1786
+ destEmitNode.startsOnNewLine = startsOnNewLine;
1787
+ return destEmitNode;
1788
+ }
1789
+ function mergeTokenSourceMapRanges(sourceRanges, destRanges) {
1790
+ if (!destRanges)
1791
+ destRanges = [];
1792
+ for (const key in sourceRanges) {
1793
+ destRanges[key] = sourceRanges[key];
1794
+ }
1795
+ return destRanges;
1796
+ }