@tslite/parser 1.10.0 → 1.12.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.
- package/LICENSE +55 -0
- package/NOTICE +14 -0
- package/dist/_namespaces/ts.d.ts +18 -0
- package/dist/_namespaces/ts.js +21 -0
- package/dist/_namespaces/ts.performance.d.ts +1 -0
- package/dist/_namespaces/ts.performance.js +2 -0
- package/dist/core.d.ts +450 -0
- package/dist/core.js +1394 -0
- package/dist/corePublic.d.ts +62 -0
- package/dist/corePublic.js +31 -0
- package/dist/debug.d.ts +74 -0
- package/dist/debug.js +326 -0
- package/dist/diagnosticInformationMap.generated.d.ts +1435 -0
- package/dist/diagnosticInformationMap.generated.js +1441 -0
- package/dist/factory.d.ts +78 -0
- package/dist/factory.js +622 -0
- package/dist/factoryPublic.d.ts +314 -0
- package/dist/factoryPublic.js +1796 -0
- package/dist/index.d.ts +1 -249
- package/dist/index.js +4 -6
- package/dist/parser.d.ts +59 -0
- package/dist/parser.js +5075 -0
- package/dist/path.d.ts +312 -0
- package/dist/path.js +475 -0
- package/dist/perfLogger.d.ts +4 -0
- package/dist/perfLogger.js +38 -0
- package/dist/performance.d.ts +20 -0
- package/dist/performance.js +49 -0
- package/dist/performanceTimestamp.d.ts +2 -0
- package/dist/performanceTimestamp.js +2 -0
- package/dist/scanner.d.ts +80 -0
- package/dist/scanner.js +1984 -0
- package/dist/shims/mapShim.d.ts +23 -0
- package/dist/shims/mapShim.js +156 -0
- package/dist/types.d.ts +2626 -0
- package/dist/types.js +1074 -0
- package/dist/utilities.d.ts +473 -0
- package/dist/utilities.js +2632 -0
- package/dist/utilitiesPublic.d.ts +274 -0
- package/dist/utilitiesPublic.js +1049 -0
- package/dist/visitor.d.ts +15 -0
- package/dist/visitor.js +64 -0
- package/dist/visitorPublic.d.ts +82 -0
- package/dist/visitorPublic.js +352 -0
- package/package.json +14 -42
- package/dist/index.cjs +0 -6
- 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
|
+
}
|