summaryrefslogtreecommitdiff
path: root/node_modules/typescript/lib/typescript.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/typescript/lib/typescript.js')
-rw-r--r--node_modules/typescript/lib/typescript.js8531
1 files changed, 4955 insertions, 3576 deletions
diff --git a/node_modules/typescript/lib/typescript.js b/node_modules/typescript/lib/typescript.js
index 4964aa75f..d4ad545cf 100644
--- a/node_modules/typescript/lib/typescript.js
+++ b/node_modules/typescript/lib/typescript.js
@@ -333,26 +333,28 @@ var ts;
SyntaxKind[SyntaxKind["JSDocThisType"] = 277] = "JSDocThisType";
SyntaxKind[SyntaxKind["JSDocComment"] = 278] = "JSDocComment";
SyntaxKind[SyntaxKind["JSDocTag"] = 279] = "JSDocTag";
- SyntaxKind[SyntaxKind["JSDocParameterTag"] = 280] = "JSDocParameterTag";
- SyntaxKind[SyntaxKind["JSDocReturnTag"] = 281] = "JSDocReturnTag";
- SyntaxKind[SyntaxKind["JSDocTypeTag"] = 282] = "JSDocTypeTag";
- SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 283] = "JSDocTemplateTag";
- SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 284] = "JSDocTypedefTag";
- SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 285] = "JSDocPropertyTag";
- SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 286] = "JSDocTypeLiteral";
- SyntaxKind[SyntaxKind["JSDocLiteralType"] = 287] = "JSDocLiteralType";
- SyntaxKind[SyntaxKind["JSDocNullKeyword"] = 288] = "JSDocNullKeyword";
- SyntaxKind[SyntaxKind["JSDocUndefinedKeyword"] = 289] = "JSDocUndefinedKeyword";
- SyntaxKind[SyntaxKind["JSDocNeverKeyword"] = 290] = "JSDocNeverKeyword";
+ SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 280] = "JSDocAugmentsTag";
+ SyntaxKind[SyntaxKind["JSDocParameterTag"] = 281] = "JSDocParameterTag";
+ SyntaxKind[SyntaxKind["JSDocReturnTag"] = 282] = "JSDocReturnTag";
+ SyntaxKind[SyntaxKind["JSDocTypeTag"] = 283] = "JSDocTypeTag";
+ SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 284] = "JSDocTemplateTag";
+ SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 285] = "JSDocTypedefTag";
+ SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 286] = "JSDocPropertyTag";
+ SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 287] = "JSDocTypeLiteral";
+ SyntaxKind[SyntaxKind["JSDocLiteralType"] = 288] = "JSDocLiteralType";
+ SyntaxKind[SyntaxKind["JSDocNullKeyword"] = 289] = "JSDocNullKeyword";
+ SyntaxKind[SyntaxKind["JSDocUndefinedKeyword"] = 290] = "JSDocUndefinedKeyword";
+ SyntaxKind[SyntaxKind["JSDocNeverKeyword"] = 291] = "JSDocNeverKeyword";
// Synthesized list
- SyntaxKind[SyntaxKind["SyntaxList"] = 291] = "SyntaxList";
+ SyntaxKind[SyntaxKind["SyntaxList"] = 292] = "SyntaxList";
// Transformation nodes
- SyntaxKind[SyntaxKind["NotEmittedStatement"] = 292] = "NotEmittedStatement";
- SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 293] = "PartiallyEmittedExpression";
- SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 294] = "MergeDeclarationMarker";
- SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 295] = "EndOfDeclarationMarker";
+ SyntaxKind[SyntaxKind["NotEmittedStatement"] = 293] = "NotEmittedStatement";
+ SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 294] = "PartiallyEmittedExpression";
+ SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 295] = "MergeDeclarationMarker";
+ SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 296] = "EndOfDeclarationMarker";
+ SyntaxKind[SyntaxKind["RawExpression"] = 297] = "RawExpression";
// Enum value count
- SyntaxKind[SyntaxKind["Count"] = 296] = "Count";
+ SyntaxKind[SyntaxKind["Count"] = 298] = "Count";
// Markers
SyntaxKind[SyntaxKind["FirstAssignment"] = 57] = "FirstAssignment";
SyntaxKind[SyntaxKind["LastAssignment"] = 69] = "LastAssignment";
@@ -380,9 +382,9 @@ var ts;
SyntaxKind[SyntaxKind["LastBinaryOperator"] = 69] = "LastBinaryOperator";
SyntaxKind[SyntaxKind["FirstNode"] = 141] = "FirstNode";
SyntaxKind[SyntaxKind["FirstJSDocNode"] = 262] = "FirstJSDocNode";
- SyntaxKind[SyntaxKind["LastJSDocNode"] = 287] = "LastJSDocNode";
+ SyntaxKind[SyntaxKind["LastJSDocNode"] = 288] = "LastJSDocNode";
SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 278] = "FirstJSDocTagNode";
- SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 290] = "LastJSDocTagNode";
+ SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 291] = "LastJSDocTagNode";
})(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
var NodeFlags;
(function (NodeFlags) {
@@ -710,7 +712,7 @@ var ts;
TypeFlags[TypeFlags["Intrinsic"] = 16015] = "Intrinsic";
/* @internal */
TypeFlags[TypeFlags["Primitive"] = 8190] = "Primitive";
- TypeFlags[TypeFlags["StringLike"] = 34] = "StringLike";
+ TypeFlags[TypeFlags["StringLike"] = 262178] = "StringLike";
TypeFlags[TypeFlags["NumberLike"] = 340] = "NumberLike";
TypeFlags[TypeFlags["BooleanLike"] = 136] = "BooleanLike";
TypeFlags[TypeFlags["EnumLike"] = 272] = "EnumLike";
@@ -974,98 +976,95 @@ var ts;
// - Flags used to indicate that a node or subtree contains syntax that requires transformation.
TransformFlags[TransformFlags["TypeScript"] = 1] = "TypeScript";
TransformFlags[TransformFlags["ContainsTypeScript"] = 2] = "ContainsTypeScript";
- TransformFlags[TransformFlags["Jsx"] = 4] = "Jsx";
- TransformFlags[TransformFlags["ContainsJsx"] = 8] = "ContainsJsx";
- TransformFlags[TransformFlags["ESNext"] = 16] = "ESNext";
- TransformFlags[TransformFlags["ContainsESNext"] = 32] = "ContainsESNext";
- TransformFlags[TransformFlags["ES2017"] = 64] = "ES2017";
- TransformFlags[TransformFlags["ContainsES2017"] = 128] = "ContainsES2017";
- TransformFlags[TransformFlags["ES2016"] = 256] = "ES2016";
- TransformFlags[TransformFlags["ContainsES2016"] = 512] = "ContainsES2016";
- TransformFlags[TransformFlags["ES2015"] = 1024] = "ES2015";
- TransformFlags[TransformFlags["ContainsES2015"] = 2048] = "ContainsES2015";
- TransformFlags[TransformFlags["Generator"] = 4096] = "Generator";
- TransformFlags[TransformFlags["ContainsGenerator"] = 8192] = "ContainsGenerator";
- TransformFlags[TransformFlags["DestructuringAssignment"] = 16384] = "DestructuringAssignment";
- TransformFlags[TransformFlags["ContainsDestructuringAssignment"] = 32768] = "ContainsDestructuringAssignment";
+ TransformFlags[TransformFlags["ContainsJsx"] = 4] = "ContainsJsx";
+ TransformFlags[TransformFlags["ContainsESNext"] = 8] = "ContainsESNext";
+ TransformFlags[TransformFlags["ContainsES2017"] = 16] = "ContainsES2017";
+ TransformFlags[TransformFlags["ContainsES2016"] = 32] = "ContainsES2016";
+ TransformFlags[TransformFlags["ES2015"] = 64] = "ES2015";
+ TransformFlags[TransformFlags["ContainsES2015"] = 128] = "ContainsES2015";
+ TransformFlags[TransformFlags["Generator"] = 256] = "Generator";
+ TransformFlags[TransformFlags["ContainsGenerator"] = 512] = "ContainsGenerator";
+ TransformFlags[TransformFlags["DestructuringAssignment"] = 1024] = "DestructuringAssignment";
+ TransformFlags[TransformFlags["ContainsDestructuringAssignment"] = 2048] = "ContainsDestructuringAssignment";
// Markers
// - Flags used to indicate that a subtree contains a specific transformation.
- TransformFlags[TransformFlags["ContainsDecorators"] = 65536] = "ContainsDecorators";
- TransformFlags[TransformFlags["ContainsPropertyInitializer"] = 131072] = "ContainsPropertyInitializer";
- TransformFlags[TransformFlags["ContainsLexicalThis"] = 262144] = "ContainsLexicalThis";
- TransformFlags[TransformFlags["ContainsCapturedLexicalThis"] = 524288] = "ContainsCapturedLexicalThis";
- TransformFlags[TransformFlags["ContainsLexicalThisInComputedPropertyName"] = 1048576] = "ContainsLexicalThisInComputedPropertyName";
- TransformFlags[TransformFlags["ContainsDefaultValueAssignments"] = 2097152] = "ContainsDefaultValueAssignments";
- TransformFlags[TransformFlags["ContainsParameterPropertyAssignments"] = 4194304] = "ContainsParameterPropertyAssignments";
- TransformFlags[TransformFlags["ContainsSpreadExpression"] = 8388608] = "ContainsSpreadExpression";
- TransformFlags[TransformFlags["ContainsComputedPropertyName"] = 16777216] = "ContainsComputedPropertyName";
- TransformFlags[TransformFlags["ContainsBlockScopedBinding"] = 33554432] = "ContainsBlockScopedBinding";
- TransformFlags[TransformFlags["ContainsBindingPattern"] = 67108864] = "ContainsBindingPattern";
- TransformFlags[TransformFlags["ContainsYield"] = 134217728] = "ContainsYield";
- TransformFlags[TransformFlags["ContainsHoistedDeclarationOrCompletion"] = 268435456] = "ContainsHoistedDeclarationOrCompletion";
+ TransformFlags[TransformFlags["ContainsDecorators"] = 4096] = "ContainsDecorators";
+ TransformFlags[TransformFlags["ContainsPropertyInitializer"] = 8192] = "ContainsPropertyInitializer";
+ TransformFlags[TransformFlags["ContainsLexicalThis"] = 16384] = "ContainsLexicalThis";
+ TransformFlags[TransformFlags["ContainsCapturedLexicalThis"] = 32768] = "ContainsCapturedLexicalThis";
+ TransformFlags[TransformFlags["ContainsLexicalThisInComputedPropertyName"] = 65536] = "ContainsLexicalThisInComputedPropertyName";
+ TransformFlags[TransformFlags["ContainsDefaultValueAssignments"] = 131072] = "ContainsDefaultValueAssignments";
+ TransformFlags[TransformFlags["ContainsParameterPropertyAssignments"] = 262144] = "ContainsParameterPropertyAssignments";
+ TransformFlags[TransformFlags["ContainsSpread"] = 524288] = "ContainsSpread";
+ TransformFlags[TransformFlags["ContainsObjectSpread"] = 1048576] = "ContainsObjectSpread";
+ TransformFlags[TransformFlags["ContainsRest"] = 524288] = "ContainsRest";
+ TransformFlags[TransformFlags["ContainsObjectRest"] = 1048576] = "ContainsObjectRest";
+ TransformFlags[TransformFlags["ContainsComputedPropertyName"] = 2097152] = "ContainsComputedPropertyName";
+ TransformFlags[TransformFlags["ContainsBlockScopedBinding"] = 4194304] = "ContainsBlockScopedBinding";
+ TransformFlags[TransformFlags["ContainsBindingPattern"] = 8388608] = "ContainsBindingPattern";
+ TransformFlags[TransformFlags["ContainsYield"] = 16777216] = "ContainsYield";
+ TransformFlags[TransformFlags["ContainsHoistedDeclarationOrCompletion"] = 33554432] = "ContainsHoistedDeclarationOrCompletion";
TransformFlags[TransformFlags["HasComputedFlags"] = 536870912] = "HasComputedFlags";
// Assertions
// - Bitmasks that are used to assert facts about the syntax of a node and its subtree.
TransformFlags[TransformFlags["AssertTypeScript"] = 3] = "AssertTypeScript";
- TransformFlags[TransformFlags["AssertJsx"] = 12] = "AssertJsx";
- TransformFlags[TransformFlags["AssertESNext"] = 48] = "AssertESNext";
- TransformFlags[TransformFlags["AssertES2017"] = 192] = "AssertES2017";
- TransformFlags[TransformFlags["AssertES2016"] = 768] = "AssertES2016";
- TransformFlags[TransformFlags["AssertES2015"] = 3072] = "AssertES2015";
- TransformFlags[TransformFlags["AssertGenerator"] = 12288] = "AssertGenerator";
- TransformFlags[TransformFlags["AssertDestructuringAssignment"] = 49152] = "AssertDestructuringAssignment";
+ TransformFlags[TransformFlags["AssertJsx"] = 4] = "AssertJsx";
+ TransformFlags[TransformFlags["AssertESNext"] = 8] = "AssertESNext";
+ TransformFlags[TransformFlags["AssertES2017"] = 16] = "AssertES2017";
+ TransformFlags[TransformFlags["AssertES2016"] = 32] = "AssertES2016";
+ TransformFlags[TransformFlags["AssertES2015"] = 192] = "AssertES2015";
+ TransformFlags[TransformFlags["AssertGenerator"] = 768] = "AssertGenerator";
+ TransformFlags[TransformFlags["AssertDestructuringAssignment"] = 3072] = "AssertDestructuringAssignment";
// Scope Exclusions
// - Bitmasks that exclude flags from propagating out of a specific context
// into the subtree flags of their container.
- TransformFlags[TransformFlags["NodeExcludes"] = 536892757] = "NodeExcludes";
- TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 979719509] = "ArrowFunctionExcludes";
- TransformFlags[TransformFlags["FunctionExcludes"] = 980243797] = "FunctionExcludes";
- TransformFlags[TransformFlags["ConstructorExcludes"] = 975983957] = "ConstructorExcludes";
- TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 975983957] = "MethodOrAccessorExcludes";
- TransformFlags[TransformFlags["ClassExcludes"] = 559895893] = "ClassExcludes";
- TransformFlags[TransformFlags["ModuleExcludes"] = 839734613] = "ModuleExcludes";
+ TransformFlags[TransformFlags["NodeExcludes"] = 536872257] = "NodeExcludes";
+ TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 601249089] = "ArrowFunctionExcludes";
+ TransformFlags[TransformFlags["FunctionExcludes"] = 601281857] = "FunctionExcludes";
+ TransformFlags[TransformFlags["ConstructorExcludes"] = 601015617] = "ConstructorExcludes";
+ TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 601015617] = "MethodOrAccessorExcludes";
+ TransformFlags[TransformFlags["ClassExcludes"] = 539358529] = "ClassExcludes";
+ TransformFlags[TransformFlags["ModuleExcludes"] = 574674241] = "ModuleExcludes";
TransformFlags[TransformFlags["TypeExcludes"] = -3] = "TypeExcludes";
- TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 554784085] = "ObjectLiteralExcludes";
- TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 545281365] = "ArrayLiteralOrCallOrNewExcludes";
- TransformFlags[TransformFlags["VariableDeclarationListExcludes"] = 604001621] = "VariableDeclarationListExcludes";
- TransformFlags[TransformFlags["ParameterExcludes"] = 604001621] = "ParameterExcludes";
+ TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 540087617] = "ObjectLiteralExcludes";
+ TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 537396545] = "ArrayLiteralOrCallOrNewExcludes";
+ TransformFlags[TransformFlags["VariableDeclarationListExcludes"] = 546309441] = "VariableDeclarationListExcludes";
+ TransformFlags[TransformFlags["ParameterExcludes"] = 536872257] = "ParameterExcludes";
+ TransformFlags[TransformFlags["CatchClauseExcludes"] = 537920833] = "CatchClauseExcludes";
+ TransformFlags[TransformFlags["BindingPatternExcludes"] = 537396545] = "BindingPatternExcludes";
// Masks
// - Additional bitmasks
- TransformFlags[TransformFlags["TypeScriptClassSyntaxMask"] = 4390912] = "TypeScriptClassSyntaxMask";
- TransformFlags[TransformFlags["ES2015FunctionSyntaxMask"] = 2621440] = "ES2015FunctionSyntaxMask";
+ TransformFlags[TransformFlags["TypeScriptClassSyntaxMask"] = 274432] = "TypeScriptClassSyntaxMask";
+ TransformFlags[TransformFlags["ES2015FunctionSyntaxMask"] = 163840] = "ES2015FunctionSyntaxMask";
})(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
/* @internal */
var EmitFlags;
(function (EmitFlags) {
- EmitFlags[EmitFlags["EmitEmitHelpers"] = 1] = "EmitEmitHelpers";
- EmitFlags[EmitFlags["EmitExportStar"] = 2] = "EmitExportStar";
- EmitFlags[EmitFlags["EmitSuperHelper"] = 4] = "EmitSuperHelper";
- EmitFlags[EmitFlags["EmitAdvancedSuperHelper"] = 8] = "EmitAdvancedSuperHelper";
- EmitFlags[EmitFlags["UMDDefine"] = 16] = "UMDDefine";
- EmitFlags[EmitFlags["SingleLine"] = 32] = "SingleLine";
- EmitFlags[EmitFlags["AdviseOnEmitNode"] = 64] = "AdviseOnEmitNode";
- EmitFlags[EmitFlags["NoSubstitution"] = 128] = "NoSubstitution";
- EmitFlags[EmitFlags["CapturesThis"] = 256] = "CapturesThis";
- EmitFlags[EmitFlags["NoLeadingSourceMap"] = 512] = "NoLeadingSourceMap";
- EmitFlags[EmitFlags["NoTrailingSourceMap"] = 1024] = "NoTrailingSourceMap";
- EmitFlags[EmitFlags["NoSourceMap"] = 1536] = "NoSourceMap";
- EmitFlags[EmitFlags["NoNestedSourceMaps"] = 2048] = "NoNestedSourceMaps";
- EmitFlags[EmitFlags["NoTokenLeadingSourceMaps"] = 4096] = "NoTokenLeadingSourceMaps";
- EmitFlags[EmitFlags["NoTokenTrailingSourceMaps"] = 8192] = "NoTokenTrailingSourceMaps";
- EmitFlags[EmitFlags["NoTokenSourceMaps"] = 12288] = "NoTokenSourceMaps";
- EmitFlags[EmitFlags["NoLeadingComments"] = 16384] = "NoLeadingComments";
- EmitFlags[EmitFlags["NoTrailingComments"] = 32768] = "NoTrailingComments";
- EmitFlags[EmitFlags["NoComments"] = 49152] = "NoComments";
- EmitFlags[EmitFlags["NoNestedComments"] = 65536] = "NoNestedComments";
- EmitFlags[EmitFlags["ExportName"] = 131072] = "ExportName";
- EmitFlags[EmitFlags["LocalName"] = 262144] = "LocalName";
- EmitFlags[EmitFlags["Indented"] = 524288] = "Indented";
- EmitFlags[EmitFlags["NoIndentation"] = 1048576] = "NoIndentation";
- EmitFlags[EmitFlags["AsyncFunctionBody"] = 2097152] = "AsyncFunctionBody";
- EmitFlags[EmitFlags["ReuseTempVariableScope"] = 4194304] = "ReuseTempVariableScope";
- EmitFlags[EmitFlags["CustomPrologue"] = 8388608] = "CustomPrologue";
- EmitFlags[EmitFlags["NoHoisting"] = 16777216] = "NoHoisting";
- EmitFlags[EmitFlags["HasEndOfDeclarationMarker"] = 33554432] = "HasEndOfDeclarationMarker";
+ EmitFlags[EmitFlags["SingleLine"] = 1] = "SingleLine";
+ EmitFlags[EmitFlags["AdviseOnEmitNode"] = 2] = "AdviseOnEmitNode";
+ EmitFlags[EmitFlags["NoSubstitution"] = 4] = "NoSubstitution";
+ EmitFlags[EmitFlags["CapturesThis"] = 8] = "CapturesThis";
+ EmitFlags[EmitFlags["NoLeadingSourceMap"] = 16] = "NoLeadingSourceMap";
+ EmitFlags[EmitFlags["NoTrailingSourceMap"] = 32] = "NoTrailingSourceMap";
+ EmitFlags[EmitFlags["NoSourceMap"] = 48] = "NoSourceMap";
+ EmitFlags[EmitFlags["NoNestedSourceMaps"] = 64] = "NoNestedSourceMaps";
+ EmitFlags[EmitFlags["NoTokenLeadingSourceMaps"] = 128] = "NoTokenLeadingSourceMaps";
+ EmitFlags[EmitFlags["NoTokenTrailingSourceMaps"] = 256] = "NoTokenTrailingSourceMaps";
+ EmitFlags[EmitFlags["NoTokenSourceMaps"] = 384] = "NoTokenSourceMaps";
+ EmitFlags[EmitFlags["NoLeadingComments"] = 512] = "NoLeadingComments";
+ EmitFlags[EmitFlags["NoTrailingComments"] = 1024] = "NoTrailingComments";
+ EmitFlags[EmitFlags["NoComments"] = 1536] = "NoComments";
+ EmitFlags[EmitFlags["NoNestedComments"] = 2048] = "NoNestedComments";
+ EmitFlags[EmitFlags["HelperName"] = 4096] = "HelperName";
+ EmitFlags[EmitFlags["ExportName"] = 8192] = "ExportName";
+ EmitFlags[EmitFlags["LocalName"] = 16384] = "LocalName";
+ EmitFlags[EmitFlags["Indented"] = 32768] = "Indented";
+ EmitFlags[EmitFlags["NoIndentation"] = 65536] = "NoIndentation";
+ EmitFlags[EmitFlags["AsyncFunctionBody"] = 131072] = "AsyncFunctionBody";
+ EmitFlags[EmitFlags["ReuseTempVariableScope"] = 262144] = "ReuseTempVariableScope";
+ EmitFlags[EmitFlags["CustomPrologue"] = 524288] = "CustomPrologue";
+ EmitFlags[EmitFlags["NoHoisting"] = 1048576] = "NoHoisting";
+ EmitFlags[EmitFlags["HasEndOfDeclarationMarker"] = 2097152] = "HasEndOfDeclarationMarker";
})(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
/* @internal */
var EmitContext;
@@ -1172,9 +1171,13 @@ var ts;
})(ts || (ts = {}));
/// <reference path="types.ts"/>
/// <reference path="performance.ts" />
-/* @internal */
var ts;
(function (ts) {
+ /** The version of the TypeScript compiler release */
+ ts.version = "2.2.0-dev.20161127";
+})(ts || (ts = {}));
+/* @internal */
+(function (ts) {
/**
* Ternary values are defined such that
* x & y is False if either x or y is False.
@@ -1727,7 +1730,7 @@ var ts;
if (value === undefined)
return to;
if (to === undefined)
- to = [];
+ return [value];
to.push(value);
return to;
}
@@ -1750,6 +1753,17 @@ var ts;
return to;
}
ts.addRange = addRange;
+ /**
+ * Stable sort of an array. Elements equal to each other maintain their relative position in the array.
+ */
+ function stableSort(array, comparer) {
+ if (comparer === void 0) { comparer = compareValues; }
+ return array
+ .map(function (_, i) { return i; }) // create array of indices
+ .sort(function (x, y) { return comparer(array[x], array[y]) || compareValues(x, y); }) // sort indices by value then position
+ .map(function (i) { return array[i]; }); // get sorted array
+ }
+ ts.stableSort = stableSort;
function rangeEquals(array1, array2, pos, end) {
while (pos < end) {
if (array1[pos] !== array2[pos]) {
@@ -1968,6 +1982,15 @@ var ts;
}
}
ts.copyProperties = copyProperties;
+ function appendProperty(map, key, value) {
+ if (key === undefined || value === undefined)
+ return map;
+ if (map === undefined)
+ map = createMap();
+ map[key] = value;
+ return map;
+ }
+ ts.appendProperty = appendProperty;
function assign(t) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
@@ -2483,6 +2506,14 @@ var ts;
getEmitScriptTarget(compilerOptions) >= 2 /* ES2015 */ ? ts.ModuleKind.ES2015 : ts.ModuleKind.CommonJS;
}
ts.getEmitModuleKind = getEmitModuleKind;
+ function getEmitModuleResolutionKind(compilerOptions) {
+ var moduleResolution = compilerOptions.moduleResolution;
+ if (moduleResolution === undefined) {
+ moduleResolution = getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS ? ts.ModuleResolutionKind.NodeJs : ts.ModuleResolutionKind.Classic;
+ }
+ return moduleResolution;
+ }
+ ts.getEmitModuleResolutionKind = getEmitModuleResolutionKind;
/* @internal */
function hasZeroOrOneAsteriskCharacter(str) {
var seenAsterisk = false;
@@ -3140,6 +3171,17 @@ var ts;
Debug.fail = fail;
})(Debug = ts.Debug || (ts.Debug = {}));
/** Remove an item from an array, moving everything to its right one space left. */
+ function orderedRemoveItem(array, item) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] === item) {
+ orderedRemoveItemAt(array, i);
+ return true;
+ }
+ }
+ return false;
+ }
+ ts.orderedRemoveItem = orderedRemoveItem;
+ /** Remove an item by index from an array, moving everything to its right one space left. */
function orderedRemoveItemAt(array, index) {
// This seems to be faster than either `array.splice(i, 1)` or `array.copyWithin(i, i+ 1)`.
for (var i = index; i < array.length - 1; i++) {
@@ -4244,7 +4286,7 @@ var ts;
Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." },
A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." },
Enum_type_0_has_members_with_initializers_that_are_not_literals: { code: 2535, category: ts.DiagnosticCategory.Error, key: "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535", message: "Enum type '{0}' has members with initializers that are not literals." },
- Type_0_is_not_constrained_to_keyof_1: { code: 2536, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_constrained_to_keyof_1_2536", message: "Type '{0}' is not constrained to 'keyof {1}'." },
+ Type_0_cannot_be_used_to_index_type_1: { code: 2536, category: ts.DiagnosticCategory.Error, key: "Type_0_cannot_be_used_to_index_type_1_2536", message: "Type '{0}' cannot be used to index type '{1}'." },
Type_0_has_no_matching_index_signature_for_type_1: { code: 2537, category: ts.DiagnosticCategory.Error, key: "Type_0_has_no_matching_index_signature_for_type_1_2537", message: "Type '{0}' has no matching index signature for type '{1}'." },
Type_0_cannot_be_used_as_an_index_type: { code: 2538, category: ts.DiagnosticCategory.Error, key: "Type_0_cannot_be_used_as_an_index_type_2538", message: "Type '{0}' cannot be used as an index type." },
Cannot_assign_to_0_because_it_is_not_a_variable: { code: 2539, category: ts.DiagnosticCategory.Error, key: "Cannot_assign_to_0_because_it_is_not_a_variable_2539", message: "Cannot assign to '{0}' because it is not a variable." },
@@ -4309,7 +4351,8 @@ var ts;
An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: { code: 2697, category: ts.DiagnosticCategory.Error, key: "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697", message: "An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option." },
Spread_types_may_only_be_created_from_object_types: { code: 2698, category: ts.DiagnosticCategory.Error, key: "Spread_types_may_only_be_created_from_object_types_2698", message: "Spread types may only be created from object types." },
Rest_types_may_only_be_created_from_object_types: { code: 2700, category: ts.DiagnosticCategory.Error, key: "Rest_types_may_only_be_created_from_object_types_2700", message: "Rest types may only be created from object types." },
- An_object_rest_element_must_be_an_identifier: { code: 2701, category: ts.DiagnosticCategory.Error, key: "An_object_rest_element_must_be_an_identifier_2701", message: "An object rest element must be an identifier." },
+ The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access: { code: 2701, category: ts.DiagnosticCategory.Error, key: "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701", message: "The target of an object rest assignment must be a variable or a property access." },
+ _0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here: { code: 2702, category: ts.DiagnosticCategory.Error, key: "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702", message: "'{0}' only refers to a type, but is being used as a namespace here." },
Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import_declaration_0_is_using_private_name_1_4000", message: "Import declaration '{0}' is using private name '{1}'." },
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", message: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", message: "Type parameter '{0}' of exported interface has or is using private name '{1}'." },
@@ -4380,6 +4423,7 @@ var ts;
Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", message: "Parameter '{0}' of exported function has or is using private name '{1}'." },
Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: ts.DiagnosticCategory.Error, key: "Exported_type_alias_0_has_or_is_using_private_name_1_4081", message: "Exported type alias '{0}' has or is using private name '{1}'." },
Default_export_of_the_module_has_or_is_using_private_name_0: { code: 4082, category: ts.DiagnosticCategory.Error, key: "Default_export_of_the_module_has_or_is_using_private_name_0_4082", message: "Default export of the module has or is using private name '{0}'." },
+ Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1: { code: 4083, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083", message: "Type parameter '{0}' of exported type alias has or is using private name '{1}'." },
Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict: { code: 4090, category: ts.DiagnosticCategory.Message, key: "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090", message: "Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict." },
The_current_host_does_not_support_the_0_option: { code: 5001, category: ts.DiagnosticCategory.Error, key: "The_current_host_does_not_support_the_0_option_5001", message: "The current host does not support the '{0}' option." },
Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: ts.DiagnosticCategory.Error, key: "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", message: "Cannot find the common subdirectory path for the input files." },
@@ -4594,9 +4638,9 @@ var ts;
A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17007, category: ts.DiagnosticCategory.Error, key: "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", message: "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." },
JSX_element_0_has_no_corresponding_closing_tag: { code: 17008, category: ts.DiagnosticCategory.Error, key: "JSX_element_0_has_no_corresponding_closing_tag_17008", message: "JSX element '{0}' has no corresponding closing tag." },
super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { code: 17009, category: ts.DiagnosticCategory.Error, key: "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", message: "'super' must be called before accessing 'this' in the constructor of a derived class." },
- Unknown_typing_option_0: { code: 17010, category: ts.DiagnosticCategory.Error, key: "Unknown_typing_option_0_17010", message: "Unknown typing option '{0}'." },
+ Unknown_type_acquisition_option_0: { code: 17010, category: ts.DiagnosticCategory.Error, key: "Unknown_type_acquisition_option_0_17010", message: "Unknown type acquisition option '{0}'." },
Circularity_detected_while_resolving_configuration_Colon_0: { code: 18000, category: ts.DiagnosticCategory.Error, key: "Circularity_detected_while_resolving_configuration_Colon_0_18000", message: "Circularity detected while resolving configuration: {0}" },
- The_path_in_an_extends_options_must_be_relative_or_rooted: { code: 18001, category: ts.DiagnosticCategory.Error, key: "The_path_in_an_extends_options_must_be_relative_or_rooted_18001", message: "The path in an 'extends' options must be relative or rooted." },
+ A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not: { code: 18001, category: ts.DiagnosticCategory.Error, key: "A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not_18001", message: "A path in an 'extends' option must be relative or rooted, but '{0}' is not." },
The_files_list_in_config_file_0_is_empty: { code: 18002, category: ts.DiagnosticCategory.Error, key: "The_files_list_in_config_file_0_is_empty_18002", message: "The 'files' list in config file '{0}' is empty." },
No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2: { code: 18003, category: ts.DiagnosticCategory.Error, key: "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003", message: "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'." },
Add_missing_super_call: { code: 90001, category: ts.DiagnosticCategory.Message, key: "Add_missing_super_call_90001", message: "Add missing 'super()' call." },
@@ -4608,6 +4652,9 @@ var ts;
Implement_inherited_abstract_class: { code: 90007, category: ts.DiagnosticCategory.Message, key: "Implement_inherited_abstract_class_90007", message: "Implement inherited abstract class" },
Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig: { code: 90009, category: ts.DiagnosticCategory.Error, key: "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__90009", message: "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig" },
Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated: { code: 90010, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_90010", message: "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated." },
+ Import_0_from_1: { code: 90013, category: ts.DiagnosticCategory.Message, key: "Import_0_from_1_90013", message: "Import {0} from {1}" },
+ Change_0_to_1: { code: 90014, category: ts.DiagnosticCategory.Message, key: "Change_0_to_1_90014", message: "Change {0} to {1}" },
+ Add_0_to_existing_import_declaration_from_1: { code: 90015, category: ts.DiagnosticCategory.Message, key: "Add_0_to_existing_import_declaration_from_1_90015", message: "Add {0} to existing import declaration from {1}" },
};
})(ts || (ts = {}));
/// <reference path="core.ts"/>
@@ -6552,7 +6599,7 @@ var ts;
return !nodeIsMissing(node);
}
ts.nodeIsPresent = nodeIsPresent;
- function getTokenPosOfNode(node, sourceFile, includeJsDocComment) {
+ function getTokenPosOfNode(node, sourceFile, includeJsDoc) {
// With nodes that have no width (i.e. 'Missing' nodes), we actually *don't*
// want to skip trivia because this will launch us forward to the next token.
if (nodeIsMissing(node)) {
@@ -6561,25 +6608,25 @@ var ts;
if (isJSDocNode(node)) {
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ true);
}
- if (includeJsDocComment && node.jsDocComments && node.jsDocComments.length > 0) {
- return getTokenPosOfNode(node.jsDocComments[0]);
+ if (includeJsDoc && node.jsDoc && node.jsDoc.length > 0) {
+ return getTokenPosOfNode(node.jsDoc[0]);
}
// For a syntax list, it is possible that one of its children has JSDocComment nodes, while
// the syntax list itself considers them as normal trivia. Therefore if we simply skip
// trivia for the list, we may have skipped the JSDocComment as well. So we should process its
// first child to determine the actual position of its first token.
- if (node.kind === 291 /* SyntaxList */ && node._children.length > 0) {
- return getTokenPosOfNode(node._children[0], sourceFile, includeJsDocComment);
+ if (node.kind === 292 /* SyntaxList */ && node._children.length > 0) {
+ return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
}
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
}
ts.getTokenPosOfNode = getTokenPosOfNode;
function isJSDocNode(node) {
- return node.kind >= 262 /* FirstJSDocNode */ && node.kind <= 287 /* LastJSDocNode */;
+ return node.kind >= 262 /* FirstJSDocNode */ && node.kind <= 288 /* LastJSDocNode */;
}
ts.isJSDocNode = isJSDocNode;
function isJSDocTag(node) {
- return node.kind >= 278 /* FirstJSDocTagNode */ && node.kind <= 290 /* LastJSDocTagNode */;
+ return node.kind >= 278 /* FirstJSDocTagNode */ && node.kind <= 291 /* LastJSDocTagNode */;
}
ts.isJSDocTag = isJSDocTag;
function getNonDecoratorTokenPosOfNode(node, sourceFile) {
@@ -6778,7 +6825,7 @@ var ts;
case 8 /* NumericLiteral */:
return name.text;
case 142 /* ComputedPropertyName */:
- if (isStringOrNumericLiteral(name.expression.kind)) {
+ if (isStringOrNumericLiteral(name.expression)) {
return name.expression.text;
}
}
@@ -6907,7 +6954,8 @@ var ts;
}
ts.isSuperCall = isSuperCall;
function isPrologueDirective(node) {
- return node.kind === 207 /* ExpressionStatement */ && node.expression.kind === 9 /* StringLiteral */;
+ return node.kind === 207 /* ExpressionStatement */
+ && node.expression.kind === 9 /* StringLiteral */;
}
ts.isPrologueDirective = isPrologueDirective;
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
@@ -6918,26 +6966,21 @@ var ts;
return ts.getLeadingCommentRanges(text, node.pos);
}
ts.getLeadingCommentRangesOfNodeFromText = getLeadingCommentRangesOfNodeFromText;
- function getJsDocComments(node, sourceFileOfNode) {
- return getJsDocCommentsFromText(node, sourceFileOfNode.text);
- }
- ts.getJsDocComments = getJsDocComments;
- function getJsDocCommentsFromText(node, text) {
+ function getJSDocCommentRanges(node, text) {
var commentRanges = (node.kind === 144 /* Parameter */ ||
node.kind === 143 /* TypeParameter */ ||
node.kind === 184 /* FunctionExpression */ ||
node.kind === 185 /* ArrowFunction */) ?
ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
getLeadingCommentRangesOfNodeFromText(node, text);
- return ts.filter(commentRanges, isJsDocComment);
- function isJsDocComment(comment) {
- // True if the comment starts with '/**' but not if it is '/**/'
+ // True if the comment starts with '/**' but not if it is '/**/'
+ return ts.filter(commentRanges, function (comment) {
return text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ &&
text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ &&
text.charCodeAt(comment.pos + 3) !== 47 /* slash */;
- }
+ });
}
- ts.getJsDocCommentsFromText = getJsDocCommentsFromText;
+ ts.getJSDocCommentRanges = getJSDocCommentRanges;
ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
@@ -7520,6 +7563,7 @@ var ts;
case 145 /* Decorator */:
case 252 /* JsxExpression */:
case 251 /* JsxSpreadAttribute */:
+ case 259 /* SpreadAssignment */:
return true;
case 199 /* ExpressionWithTypeArguments */:
return parent_3.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_3);
@@ -7690,127 +7734,98 @@ var ts;
node.parameters[0].type.kind === 276 /* JSDocConstructorType */;
}
ts.isJSDocConstructSignature = isJSDocConstructSignature;
- function getJSDocTag(node, kind, checkParentVariableStatement) {
- if (!node) {
- return undefined;
- }
- var jsDocTags = getJSDocTags(node, checkParentVariableStatement);
- if (!jsDocTags) {
- return undefined;
- }
- for (var _i = 0, jsDocTags_1 = jsDocTags; _i < jsDocTags_1.length; _i++) {
- var tag = jsDocTags_1[_i];
- if (tag.kind === kind) {
- return tag;
- }
- }
+ function getCommentsFromJSDoc(node) {
+ return ts.map(getJSDocs(node), function (doc) { return doc.comment; });
}
- function append(previous, additional) {
- if (additional) {
- if (!previous) {
- previous = [];
- }
- for (var _i = 0, additional_1 = additional; _i < additional_1.length; _i++) {
- var x = additional_1[_i];
- previous.push(x);
- }
- }
- return previous;
- }
- function getJSDocComments(node, checkParentVariableStatement) {
- return getJSDocs(node, checkParentVariableStatement, function (docs) { return ts.map(docs, function (doc) { return doc.comment; }); }, function (tags) { return ts.map(tags, function (tag) { return tag.comment; }); });
- }
- ts.getJSDocComments = getJSDocComments;
- function getJSDocTags(node, checkParentVariableStatement) {
- return getJSDocs(node, checkParentVariableStatement, function (docs) {
+ ts.getCommentsFromJSDoc = getCommentsFromJSDoc;
+ function getJSDocTags(node, kind) {
+ var docs = getJSDocs(node);
+ if (docs) {
var result = [];
for (var _i = 0, docs_1 = docs; _i < docs_1.length; _i++) {
var doc = docs_1[_i];
- if (doc.tags) {
- result.push.apply(result, doc.tags);
+ if (doc.kind === 281 /* JSDocParameterTag */) {
+ if (doc.kind === kind) {
+ result.push(doc);
+ }
+ }
+ else {
+ result.push.apply(result, ts.filter(doc.tags, function (tag) { return tag.kind === kind; }));
}
}
return result;
- }, function (tags) { return tags; });
- }
- function getJSDocs(node, checkParentVariableStatement, getDocs, getTags) {
- // TODO: Get rid of getJsDocComments and friends (note the lowercase 's' in Js)
- // TODO: A lot of this work should be cached, maybe. I guess it's only used in services right now...
- var result = undefined;
- // prepend documentation from parent sources
- if (checkParentVariableStatement) {
+ }
+ }
+ function getFirstJSDocTag(node, kind) {
+ return node && ts.firstOrUndefined(getJSDocTags(node, kind));
+ }
+ function getJSDocs(node) {
+ var cache = node.jsDocCache;
+ if (!cache) {
+ getJSDocsWorker(node);
+ node.jsDocCache = cache;
+ }
+ return cache;
+ function getJSDocsWorker(node) {
+ var parent = node.parent;
// Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
// /**
// * @param {number} name
// * @returns {number}
// */
// var x = function(name) { return name.length; }
- var isInitializerOfVariableDeclarationInStatement = isVariableLike(node.parent) &&
- (node.parent).initializer === node &&
- node.parent.parent.parent.kind === 205 /* VariableStatement */;
+ var isInitializerOfVariableDeclarationInStatement = isVariableLike(parent) &&
+ parent.initializer === node &&
+ parent.parent.parent.kind === 205 /* VariableStatement */;
var isVariableOfVariableDeclarationStatement = isVariableLike(node) &&
- node.parent.parent.kind === 205 /* VariableStatement */;
- var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent :
- isVariableOfVariableDeclarationStatement ? node.parent.parent :
+ parent.parent.kind === 205 /* VariableStatement */;
+ var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? parent.parent.parent :
+ isVariableOfVariableDeclarationStatement ? parent.parent :
undefined;
if (variableStatementNode) {
- result = append(result, getJSDocs(variableStatementNode, checkParentVariableStatement, getDocs, getTags));
- }
- if (node.kind === 230 /* ModuleDeclaration */ &&
- node.parent && node.parent.kind === 230 /* ModuleDeclaration */) {
- result = append(result, getJSDocs(node.parent, checkParentVariableStatement, getDocs, getTags));
+ getJSDocsWorker(variableStatementNode);
}
// Also recognize when the node is the RHS of an assignment expression
- var parent_4 = node.parent;
- var isSourceOfAssignmentExpressionStatement = parent_4 && parent_4.parent &&
- parent_4.kind === 192 /* BinaryExpression */ &&
- parent_4.operatorToken.kind === 57 /* EqualsToken */ &&
- parent_4.parent.kind === 207 /* ExpressionStatement */;
+ var isSourceOfAssignmentExpressionStatement = parent && parent.parent &&
+ parent.kind === 192 /* BinaryExpression */ &&
+ parent.operatorToken.kind === 57 /* EqualsToken */ &&
+ parent.parent.kind === 207 /* ExpressionStatement */;
if (isSourceOfAssignmentExpressionStatement) {
- result = append(result, getJSDocs(parent_4.parent, checkParentVariableStatement, getDocs, getTags));
+ getJSDocsWorker(parent.parent);
}
- var isPropertyAssignmentExpression = parent_4 && parent_4.kind === 257 /* PropertyAssignment */;
- if (isPropertyAssignmentExpression) {
- result = append(result, getJSDocs(parent_4, checkParentVariableStatement, getDocs, getTags));
+ var isModuleDeclaration = node.kind === 230 /* ModuleDeclaration */ &&
+ parent && parent.kind === 230 /* ModuleDeclaration */;
+ var isPropertyAssignmentExpression = parent && parent.kind === 257 /* PropertyAssignment */;
+ if (isModuleDeclaration || isPropertyAssignmentExpression) {
+ getJSDocsWorker(parent);
}
// Pull parameter comments from declaring function as well
if (node.kind === 144 /* Parameter */) {
- var paramTags = getJSDocParameterTag(node, checkParentVariableStatement);
- if (paramTags) {
- result = append(result, getTags(paramTags));
- }
+ cache = ts.concatenate(cache, getJSDocParameterTags(node));
}
- }
- if (isVariableLike(node) && node.initializer) {
- result = append(result, getJSDocs(node.initializer, /*checkParentVariableStatement*/ false, getDocs, getTags));
- }
- if (node.jsDocComments) {
- if (result) {
- result = append(result, getDocs(node.jsDocComments));
- }
- else {
- return getDocs(node.jsDocComments);
+ if (isVariableLike(node) && node.initializer) {
+ cache = ts.concatenate(cache, node.initializer.jsDoc);
}
+ cache = ts.concatenate(cache, node.jsDoc);
}
- return result;
}
- function getJSDocParameterTag(param, checkParentVariableStatement) {
+ function getJSDocParameterTags(param) {
+ if (!isParameter(param)) {
+ return undefined;
+ }
var func = param.parent;
- var tags = getJSDocTags(func, checkParentVariableStatement);
+ var tags = getJSDocTags(func, 281 /* JSDocParameterTag */);
if (!param.name) {
// this is an anonymous jsdoc param from a `function(type1, type2): type3` specification
var i = func.parameters.indexOf(param);
- var paramTags = ts.filter(tags, function (tag) { return tag.kind === 280 /* JSDocParameterTag */; });
+ var paramTags = ts.filter(tags, function (tag) { return tag.kind === 281 /* JSDocParameterTag */; });
if (paramTags && 0 <= i && i < paramTags.length) {
return [paramTags[i]];
}
}
else if (param.name.kind === 70 /* Identifier */) {
var name_6 = param.name.text;
- var paramTags = ts.filter(tags, function (tag) { return tag.kind === 280 /* JSDocParameterTag */ && tag.parameterName.text === name_6; });
- if (paramTags) {
- return paramTags;
- }
+ return ts.filter(tags, function (tag) { return tag.kind === 281 /* JSDocParameterTag */ && tag.parameterName.text === name_6; });
}
else {
// TODO: it's a destructured parameter, so it should look up an "object type" series of multiple lines
@@ -7818,40 +7833,30 @@ var ts;
return undefined;
}
}
- function getJSDocTypeTag(node) {
- return getJSDocTag(node, 282 /* JSDocTypeTag */, /*checkParentVariableStatement*/ false);
+ ts.getJSDocParameterTags = getJSDocParameterTags;
+ function getJSDocType(node) {
+ var tag = getFirstJSDocTag(node, 283 /* JSDocTypeTag */);
+ if (!tag && node.kind === 144 /* Parameter */) {
+ var paramTags = getJSDocParameterTags(node);
+ if (paramTags) {
+ tag = ts.find(paramTags, function (tag) { return !!tag.typeExpression; });
+ }
+ }
+ return tag && tag.typeExpression && tag.typeExpression.type;
+ }
+ ts.getJSDocType = getJSDocType;
+ function getJSDocAugmentsTag(node) {
+ return getFirstJSDocTag(node, 280 /* JSDocAugmentsTag */);
}
- ts.getJSDocTypeTag = getJSDocTypeTag;
+ ts.getJSDocAugmentsTag = getJSDocAugmentsTag;
function getJSDocReturnTag(node) {
- return getJSDocTag(node, 281 /* JSDocReturnTag */, /*checkParentVariableStatement*/ true);
+ return getFirstJSDocTag(node, 282 /* JSDocReturnTag */);
}
ts.getJSDocReturnTag = getJSDocReturnTag;
function getJSDocTemplateTag(node) {
- return getJSDocTag(node, 283 /* JSDocTemplateTag */, /*checkParentVariableStatement*/ false);
+ return getFirstJSDocTag(node, 284 /* JSDocTemplateTag */);
}
ts.getJSDocTemplateTag = getJSDocTemplateTag;
- function getCorrespondingJSDocParameterTag(parameter) {
- if (parameter.name && parameter.name.kind === 70 /* Identifier */) {
- // If it's a parameter, see if the parent has a jsdoc comment with an @param
- // annotation.
- var parameterName = parameter.name.text;
- var jsDocTags = getJSDocTags(parameter.parent, /*checkParentVariableStatement*/ true);
- if (!jsDocTags) {
- return undefined;
- }
- for (var _i = 0, jsDocTags_2 = jsDocTags; _i < jsDocTags_2.length; _i++) {
- var tag = jsDocTags_2[_i];
- if (tag.kind === 280 /* JSDocParameterTag */) {
- var parameterTag = tag;
- if (parameterTag.parameterName.text === parameterName) {
- return parameterTag;
- }
- }
- }
- }
- return undefined;
- }
- ts.getCorrespondingJSDocParameterTag = getCorrespondingJSDocParameterTag;
function hasRestParameter(s) {
return isRestParameter(ts.lastOrUndefined(s.parameters));
}
@@ -7862,13 +7867,10 @@ var ts;
ts.hasDeclaredRestParameter = hasDeclaredRestParameter;
function isRestParameter(node) {
if (node && (node.flags & 2097152 /* JavaScriptFile */)) {
- if (node.type && node.type.kind === 275 /* JSDocVariadicType */) {
+ if (node.type && node.type.kind === 275 /* JSDocVariadicType */ ||
+ ts.forEach(getJSDocParameterTags(node), function (t) { return t.typeExpression && t.typeExpression.type.kind === 275 /* JSDocVariadicType */; })) {
return true;
}
- var paramTag = getCorrespondingJSDocParameterTag(node);
- if (paramTag && paramTag.typeExpression) {
- return paramTag.typeExpression.type.kind === 275 /* JSDocVariadicType */;
- }
}
return isDeclaredRestParam(node);
}
@@ -8115,8 +8117,10 @@ var ts;
return isFunctionLike(node) && hasModifier(node, 256 /* Async */) && !isAccessor(node);
}
ts.isAsyncFunctionLike = isAsyncFunctionLike;
- function isStringOrNumericLiteral(kind) {
- return kind === 9 /* StringLiteral */ || kind === 8 /* NumericLiteral */;
+ function isStringOrNumericLiteral(node) {
+ var kind = node.kind;
+ return kind === 9 /* StringLiteral */
+ || kind === 8 /* NumericLiteral */;
}
ts.isStringOrNumericLiteral = isStringOrNumericLiteral;
/**
@@ -8132,7 +8136,7 @@ var ts;
ts.hasDynamicName = hasDynamicName;
function isDynamicName(name) {
return name.kind === 142 /* ComputedPropertyName */ &&
- !isStringOrNumericLiteral(name.expression.kind) &&
+ !isStringOrNumericLiteral(name.expression) &&
!isWellKnownSymbolSyntactically(name.expression);
}
ts.isDynamicName = isDynamicName;
@@ -8356,6 +8360,7 @@ var ts;
case 194 /* TemplateExpression */:
case 183 /* ParenthesizedExpression */:
case 198 /* OmittedExpression */:
+ case 297 /* RawExpression */:
return 19;
case 181 /* TaggedTemplateExpression */:
case 177 /* PropertyAccessExpression */:
@@ -9226,19 +9231,19 @@ var ts;
}
}
ts.tryGetClassExtendingExpressionWithTypeArguments = tryGetClassExtendingExpressionWithTypeArguments;
- function isAssignmentExpression(node) {
+ function isAssignmentExpression(node, excludeCompoundAssignment) {
return isBinaryExpression(node)
- && isAssignmentOperator(node.operatorToken.kind)
+ && (excludeCompoundAssignment
+ ? node.operatorToken.kind === 57 /* EqualsToken */
+ : isAssignmentOperator(node.operatorToken.kind))
&& isLeftHandSideExpression(node.left);
}
ts.isAssignmentExpression = isAssignmentExpression;
function isDestructuringAssignment(node) {
- if (isBinaryExpression(node)) {
- if (node.operatorToken.kind === 57 /* EqualsToken */) {
- var kind = node.left.kind;
- return kind === 176 /* ObjectLiteralExpression */
- || kind === 175 /* ArrayLiteralExpression */;
- }
+ if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
+ var kind = node.left.kind;
+ return kind === 176 /* ObjectLiteralExpression */
+ || kind === 175 /* ArrayLiteralExpression */;
}
return false;
}
@@ -9632,135 +9637,6 @@ var ts;
return ts.positionIsSynthesized(range.pos) ? -1 : ts.skipTrivia(sourceFile.text, range.pos);
}
ts.getStartPositionOfRange = getStartPositionOfRange;
- function collectExternalModuleInfo(sourceFile, resolver) {
- var externalImports = [];
- var exportSpecifiers = ts.createMap();
- var exportedBindings = ts.createMap();
- var uniqueExports = ts.createMap();
- var hasExportDefault = false;
- var exportEquals = undefined;
- var hasExportStarsToExportValues = false;
- for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
- var node = _a[_i];
- switch (node.kind) {
- case 235 /* ImportDeclaration */:
- // import "mod"
- // import x from "mod"
- // import * as x from "mod"
- // import { x, y } from "mod"
- externalImports.push(node);
- break;
- case 234 /* ImportEqualsDeclaration */:
- if (node.moduleReference.kind === 245 /* ExternalModuleReference */) {
- // import x = require("mod")
- externalImports.push(node);
- }
- break;
- case 241 /* ExportDeclaration */:
- if (node.moduleSpecifier) {
- if (!node.exportClause) {
- // export * from "mod"
- externalImports.push(node);
- hasExportStarsToExportValues = true;
- }
- else {
- // export { x, y } from "mod"
- externalImports.push(node);
- }
- }
- else {
- // export { x, y }
- for (var _b = 0, _c = node.exportClause.elements; _b < _c.length; _b++) {
- var specifier = _c[_b];
- if (!uniqueExports[specifier.name.text]) {
- var name_8 = specifier.propertyName || specifier.name;
- ts.multiMapAdd(exportSpecifiers, name_8.text, specifier);
- var decl = resolver.getReferencedImportDeclaration(name_8)
- || resolver.getReferencedValueDeclaration(name_8);
- if (decl) {
- ts.multiMapAdd(exportedBindings, getOriginalNodeId(decl), specifier.name);
- }
- uniqueExports[specifier.name.text] = specifier.name;
- }
- }
- }
- break;
- case 240 /* ExportAssignment */:
- if (node.isExportEquals && !exportEquals) {
- // export = x
- exportEquals = node;
- }
- break;
- case 205 /* VariableStatement */:
- if (hasModifier(node, 1 /* Export */)) {
- for (var _d = 0, _e = node.declarationList.declarations; _d < _e.length; _d++) {
- var decl = _e[_d];
- collectExportedVariableInfo(decl, uniqueExports);
- }
- }
- break;
- case 225 /* FunctionDeclaration */:
- if (hasModifier(node, 1 /* Export */)) {
- if (hasModifier(node, 512 /* Default */)) {
- // export default function() { }
- if (!hasExportDefault) {
- ts.multiMapAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node));
- hasExportDefault = true;
- }
- }
- else {
- // export function x() { }
- var name_9 = node.name;
- if (!uniqueExports[name_9.text]) {
- ts.multiMapAdd(exportedBindings, getOriginalNodeId(node), name_9);
- uniqueExports[name_9.text] = name_9;
- }
- }
- }
- break;
- case 226 /* ClassDeclaration */:
- if (hasModifier(node, 1 /* Export */)) {
- if (hasModifier(node, 512 /* Default */)) {
- // export default class { }
- if (!hasExportDefault) {
- ts.multiMapAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node));
- hasExportDefault = true;
- }
- }
- else {
- // export class x { }
- var name_10 = node.name;
- if (!uniqueExports[name_10.text]) {
- ts.multiMapAdd(exportedBindings, getOriginalNodeId(node), name_10);
- uniqueExports[name_10.text] = name_10;
- }
- }
- }
- break;
- }
- }
- var exportedNames;
- for (var key in uniqueExports) {
- exportedNames = ts.append(exportedNames, uniqueExports[key]);
- }
- return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames };
- }
- ts.collectExternalModuleInfo = collectExternalModuleInfo;
- function collectExportedVariableInfo(decl, uniqueExports) {
- if (isBindingPattern(decl.name)) {
- for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) {
- var element = _a[_i];
- if (!isOmittedExpression(element)) {
- collectExportedVariableInfo(element, uniqueExports);
- }
- }
- }
- else if (!isGeneratedIdentifier(decl.name)) {
- if (!uniqueExports[decl.name.text]) {
- uniqueExports[decl.name.text] = decl.name;
- }
- }
- }
/**
* Determines whether a name was originally the declaration name of an enum or namespace
* declaration.
@@ -9964,6 +9840,14 @@ var ts;
}
ts.isTypeNode = isTypeNode;
// Binding patterns
+ function isArrayBindingPattern(node) {
+ return node.kind === 173 /* ArrayBindingPattern */;
+ }
+ ts.isArrayBindingPattern = isArrayBindingPattern;
+ function isObjectBindingPattern(node) {
+ return node.kind === 172 /* ObjectBindingPattern */;
+ }
+ ts.isObjectBindingPattern = isObjectBindingPattern;
function isBindingPattern(node) {
if (node) {
var kind = node.kind;
@@ -9973,6 +9857,12 @@ var ts;
return false;
}
ts.isBindingPattern = isBindingPattern;
+ function isAssignmentPattern(node) {
+ var kind = node.kind;
+ return kind === 175 /* ArrayLiteralExpression */
+ || kind === 176 /* ObjectLiteralExpression */;
+ }
+ ts.isAssignmentPattern = isAssignmentPattern;
function isBindingElement(node) {
return node.kind === 174 /* BindingElement */;
}
@@ -9983,6 +9873,51 @@ var ts;
|| kind === 198 /* OmittedExpression */;
}
ts.isArrayBindingElement = isArrayBindingElement;
+ /**
+ * Determines whether the BindingOrAssignmentElement is a BindingElement-like declaration
+ */
+ function isDeclarationBindingElement(bindingElement) {
+ switch (bindingElement.kind) {
+ case 223 /* VariableDeclaration */:
+ case 144 /* Parameter */:
+ case 174 /* BindingElement */:
+ return true;
+ }
+ return false;
+ }
+ ts.isDeclarationBindingElement = isDeclarationBindingElement;
+ /**
+ * Determines whether a node is a BindingOrAssignmentPattern
+ */
+ function isBindingOrAssignmentPattern(node) {
+ return isObjectBindingOrAssignmentPattern(node)
+ || isArrayBindingOrAssignmentPattern(node);
+ }
+ ts.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern;
+ /**
+ * Determines whether a node is an ObjectBindingOrAssignmentPattern
+ */
+ function isObjectBindingOrAssignmentPattern(node) {
+ switch (node.kind) {
+ case 172 /* ObjectBindingPattern */:
+ case 176 /* ObjectLiteralExpression */:
+ return true;
+ }
+ return false;
+ }
+ ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+ /**
+ * Determines whether a node is an ArrayBindingOrAssignmentPattern
+ */
+ function isArrayBindingOrAssignmentPattern(node) {
+ switch (node.kind) {
+ case 173 /* ArrayBindingPattern */:
+ case 175 /* ArrayLiteralExpression */:
+ return true;
+ }
+ return false;
+ }
+ ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern;
// Expression
function isArrayLiteralExpression(node) {
return node.kind === 175 /* ArrayLiteralExpression */;
@@ -10050,7 +9985,8 @@ var ts;
|| kind === 98 /* ThisKeyword */
|| kind === 100 /* TrueKeyword */
|| kind === 96 /* SuperKeyword */
- || kind === 201 /* NonNullExpression */;
+ || kind === 201 /* NonNullExpression */
+ || kind === 297 /* RawExpression */;
}
function isLeftHandSideExpression(node) {
return isLeftHandSideExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind);
@@ -10078,6 +10014,7 @@ var ts;
|| kind === 196 /* SpreadElement */
|| kind === 200 /* AsExpression */
|| kind === 198 /* OmittedExpression */
+ || kind === 297 /* RawExpression */
|| isUnaryExpressionKind(kind);
}
function isExpression(node) {
@@ -10091,11 +10028,11 @@ var ts;
}
ts.isAssertionExpression = isAssertionExpression;
function isPartiallyEmittedExpression(node) {
- return node.kind === 293 /* PartiallyEmittedExpression */;
+ return node.kind === 294 /* PartiallyEmittedExpression */;
}
ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
function isNotEmittedStatement(node) {
- return node.kind === 292 /* NotEmittedStatement */;
+ return node.kind === 293 /* NotEmittedStatement */;
}
ts.isNotEmittedStatement = isNotEmittedStatement;
function isNotEmittedOrPartiallyEmittedNode(node) {
@@ -10209,7 +10146,7 @@ var ts;
|| kind === 228 /* TypeAliasDeclaration */
|| kind === 143 /* TypeParameter */
|| kind === 223 /* VariableDeclaration */
- || kind === 284 /* JSDocTypedefTag */;
+ || kind === 285 /* JSDocTypedefTag */;
}
function isDeclarationStatementKind(kind) {
return kind === 225 /* FunctionDeclaration */
@@ -10244,9 +10181,9 @@ var ts;
|| kind === 205 /* VariableStatement */
|| kind === 210 /* WhileStatement */
|| kind === 217 /* WithStatement */
- || kind === 292 /* NotEmittedStatement */
- || kind === 295 /* EndOfDeclarationMarker */
- || kind === 294 /* MergeDeclarationMarker */;
+ || kind === 293 /* NotEmittedStatement */
+ || kind === 296 /* EndOfDeclarationMarker */
+ || kind === 295 /* MergeDeclarationMarker */;
}
function isDeclaration(node) {
return isDeclarationKind(node.kind);
@@ -10641,6 +10578,60 @@ var ts;
return flags;
}
ts.getCombinedNodeFlags = getCombinedNodeFlags;
+ /**
+ * Checks to see if the locale is in the appropriate format,
+ * and if it is, attempts to set the appropriate language.
+ */
+ function validateLocaleAndSetLanguage(locale, sys, errors) {
+ var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase());
+ if (!matchResult) {
+ if (errors) {
+ errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp"));
+ }
+ return;
+ }
+ var language = matchResult[1];
+ var territory = matchResult[3];
+ // First try the entire locale, then fall back to just language if that's all we have.
+ // Either ways do not fail, and fallback to the English diagnostic strings.
+ if (!trySetLanguageAndTerritory(language, territory, errors)) {
+ trySetLanguageAndTerritory(language, /*territory*/ undefined, errors);
+ }
+ function trySetLanguageAndTerritory(language, territory, errors) {
+ var compilerFilePath = ts.normalizePath(sys.getExecutingFilePath());
+ var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath);
+ var filePath = ts.combinePaths(containingDirectoryPath, language);
+ if (territory) {
+ filePath = filePath + "-" + territory;
+ }
+ filePath = sys.resolvePath(ts.combinePaths(filePath, "diagnosticMessages.generated.json"));
+ if (!sys.fileExists(filePath)) {
+ return false;
+ }
+ // TODO: Add codePage support for readFile?
+ var fileContents = "";
+ try {
+ fileContents = sys.readFile(filePath);
+ }
+ catch (e) {
+ if (errors) {
+ errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, filePath));
+ }
+ return false;
+ }
+ try {
+ ts.localizedDiagnosticMessages = JSON.parse(fileContents);
+ }
+ catch (e) {
+ if (errors) {
+ errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Corrupted_locale_file_0, filePath));
+ }
+ return false;
+ }
+ return true;
+ }
+ }
+ ts.validateLocaleAndSetLanguage = validateLocaleAndSetLanguage;
})(ts || (ts = {}));
/// <reference path="core.ts"/>
/// <reference path="utilities.ts"/>
@@ -10858,9 +10849,9 @@ var ts;
return node;
}
ts.createParameter = createParameter;
- function updateParameter(node, decorators, modifiers, name, type, initializer) {
- if (node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.type !== type || node.initializer !== initializer) {
- return updateNode(createParameter(decorators, modifiers, node.dotDotDotToken, name, node.questionToken, type, initializer, /*location*/ node, /*flags*/ node.flags), node);
+ function updateParameter(node, decorators, modifiers, dotDotDotToken, name, type, initializer) {
+ if (node.decorators !== decorators || node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.type !== type || node.initializer !== initializer) {
+ return updateNode(createParameter(decorators, modifiers, dotDotDotToken, name, node.questionToken, type, initializer, /*location*/ node, /*flags*/ node.flags), node);
}
return node;
}
@@ -10995,9 +10986,9 @@ var ts;
return node;
}
ts.createBindingElement = createBindingElement;
- function updateBindingElement(node, propertyName, name, initializer) {
- if (node.propertyName !== propertyName || node.name !== name || node.initializer !== initializer) {
- return updateNode(createBindingElement(propertyName, node.dotDotDotToken, name, initializer, node), node);
+ function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) {
+ if (node.propertyName !== propertyName || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.initializer !== initializer) {
+ return updateNode(createBindingElement(propertyName, dotDotDotToken, name, initializer, node), node);
}
return node;
}
@@ -11038,7 +11029,7 @@ var ts;
function createPropertyAccess(expression, name, location, flags) {
var node = createNode(177 /* PropertyAccessExpression */, location, flags);
node.expression = parenthesizeForAccess(expression);
- (node.emitNode || (node.emitNode = {})).flags |= 1048576 /* NoIndentation */;
+ (node.emitNode || (node.emitNode = {})).flags |= 65536 /* NoIndentation */;
node.name = typeof name === "string" ? createIdentifier(name) : name;
return node;
}
@@ -11260,13 +11251,23 @@ var ts;
return node;
}
ts.updateBinary = updateBinary;
- function createConditional(condition, questionToken, whenTrue, colonToken, whenFalse, location) {
- var node = createNode(193 /* ConditionalExpression */, location);
- node.condition = condition;
- node.questionToken = questionToken;
- node.whenTrue = whenTrue;
- node.colonToken = colonToken;
- node.whenFalse = whenFalse;
+ function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonTokenOrLocation, whenFalse, location) {
+ var node = createNode(193 /* ConditionalExpression */, whenFalse ? location : colonTokenOrLocation);
+ node.condition = parenthesizeForConditionalHead(condition);
+ if (whenFalse) {
+ // second overload
+ node.questionToken = questionTokenOrWhenTrue;
+ node.whenTrue = parenthesizeSubexpressionOfConditionalExpression(whenTrueOrWhenFalse);
+ node.colonToken = colonTokenOrLocation;
+ node.whenFalse = parenthesizeSubexpressionOfConditionalExpression(whenFalse);
+ }
+ else {
+ // first overload
+ node.questionToken = createToken(54 /* QuestionToken */);
+ node.whenTrue = parenthesizeSubexpressionOfConditionalExpression(questionTokenOrWhenTrue);
+ node.colonToken = createToken(55 /* ColonToken */);
+ node.whenFalse = parenthesizeSubexpressionOfConditionalExpression(whenTrueOrWhenFalse);
+ }
return node;
}
ts.createConditional = createConditional;
@@ -12082,8 +12083,6 @@ var ts;
updated.imports = node.imports;
if (node.moduleAugmentations !== undefined)
updated.moduleAugmentations = node.moduleAugmentations;
- if (node.externalHelpersModuleName !== undefined)
- updated.externalHelpersModuleName = node.externalHelpersModuleName;
return updateNode(updated, node);
}
return node;
@@ -12097,7 +12096,7 @@ var ts;
* @param original The original statement.
*/
function createNotEmittedStatement(original) {
- var node = createNode(292 /* NotEmittedStatement */, /*location*/ original);
+ var node = createNode(293 /* NotEmittedStatement */, /*location*/ original);
node.original = original;
return node;
}
@@ -12107,7 +12106,7 @@ var ts;
* order to properly emit exports.
*/
function createEndOfDeclarationMarker(original) {
- var node = createNode(295 /* EndOfDeclarationMarker */);
+ var node = createNode(296 /* EndOfDeclarationMarker */);
node.emitNode = {};
node.original = original;
return node;
@@ -12118,7 +12117,7 @@ var ts;
* order to properly emit exports.
*/
function createMergeDeclarationMarker(original) {
- var node = createNode(294 /* MergeDeclarationMarker */);
+ var node = createNode(295 /* MergeDeclarationMarker */);
node.emitNode = {};
node.original = original;
return node;
@@ -12133,7 +12132,7 @@ var ts;
* @param location The location for the expression. Defaults to the positions from "original" if provided.
*/
function createPartiallyEmittedExpression(expression, original, location) {
- var node = createNode(293 /* PartiallyEmittedExpression */, /*location*/ location || original);
+ var node = createNode(294 /* PartiallyEmittedExpression */, /*location*/ location || original);
node.expression = expression;
node.original = original;
return node;
@@ -12146,6 +12145,19 @@ var ts;
return node;
}
ts.updatePartiallyEmittedExpression = updatePartiallyEmittedExpression;
+ /**
+ * Creates a node that emits a string of raw text in an expression position. Raw text is never
+ * transformed, should be ES3 compliant, and should have the same precedence as
+ * PrimaryExpression.
+ *
+ * @param text The raw text of the node.
+ */
+ function createRawExpression(text) {
+ var node = createNode(297 /* RawExpression */);
+ node.text = text;
+ return node;
+ }
+ ts.createRawExpression = createRawExpression;
// Compound nodes
function createComma(left, right) {
return createBinary(left, 25 /* CommaToken */, right);
@@ -12195,13 +12207,19 @@ var ts;
return createVoid(createLiteral(0));
}
ts.createVoidZero = createVoidZero;
+ function createTypeCheck(value, tag) {
+ return tag === "undefined"
+ ? createStrictEquality(value, createVoidZero())
+ : createStrictEquality(createTypeOf(value), createLiteral(tag));
+ }
+ ts.createTypeCheck = createTypeCheck;
function createMemberAccessForPropertyName(target, memberName, location) {
if (ts.isComputedPropertyName(memberName)) {
return createElementAccess(target, memberName.expression, location);
}
else {
var expression = ts.isIdentifier(memberName) ? createPropertyAccess(target, memberName, location) : createElementAccess(target, memberName, location);
- (expression.emitNode || (expression.emitNode = {})).flags |= 2048 /* NoNestedSourceMaps */;
+ (expression.emitNode || (expression.emitNode = {})).flags |= 64 /* NoNestedSourceMaps */;
return expression;
}
}
@@ -12245,14 +12263,17 @@ var ts;
// flag and setting a parent node.
var react = createIdentifier(reactNamespace || "React");
react.flags &= ~8 /* Synthesized */;
- // Set the parent that is in parse tree
+ // Set the parent that is in parse tree
// this makes sure that parent chain is intact for checker to traverse complete scope tree
react.parent = ts.getParseTreeNode(parent);
return react;
}
function createJsxFactoryExpressionFromEntityName(jsxFactory, parent) {
if (ts.isQualifiedName(jsxFactory)) {
- return createPropertyAccess(createJsxFactoryExpressionFromEntityName(jsxFactory.left, parent), setEmitFlags(getMutableClone(jsxFactory.right), 1536 /* NoSourceMap */));
+ var left = createJsxFactoryExpressionFromEntityName(jsxFactory.left, parent);
+ var right = createSynthesizedNode(70 /* Identifier */);
+ right.text = jsxFactory.right.text;
+ return createPropertyAccess(left, right);
}
else {
return createReactNamespace(jsxFactory.text, parent);
@@ -12308,170 +12329,10 @@ var ts;
}
ts.createConstDeclarationList = createConstDeclarationList;
// Helpers
- function createHelperName(externalHelpersModuleName, name) {
- return externalHelpersModuleName
- ? createPropertyAccess(externalHelpersModuleName, name)
- : createIdentifier(name);
- }
- ts.createHelperName = createHelperName;
- function createExtendsHelper(externalHelpersModuleName, name) {
- return createCall(createHelperName(externalHelpersModuleName, "__extends"),
- /*typeArguments*/ undefined, [
- name,
- createIdentifier("_super")
- ]);
- }
- ts.createExtendsHelper = createExtendsHelper;
- function createAssignHelper(externalHelpersModuleName, attributesSegments) {
- return createCall(createHelperName(externalHelpersModuleName, "__assign"),
- /*typeArguments*/ undefined, attributesSegments);
- }
- ts.createAssignHelper = createAssignHelper;
- function createParamHelper(externalHelpersModuleName, expression, parameterOffset, location) {
- return createCall(createHelperName(externalHelpersModuleName, "__param"),
- /*typeArguments*/ undefined, [
- createLiteral(parameterOffset),
- expression
- ], location);
- }
- ts.createParamHelper = createParamHelper;
- function createMetadataHelper(externalHelpersModuleName, metadataKey, metadataValue) {
- return createCall(createHelperName(externalHelpersModuleName, "__metadata"),
- /*typeArguments*/ undefined, [
- createLiteral(metadataKey),
- metadataValue
- ]);
- }
- ts.createMetadataHelper = createMetadataHelper;
- function createDecorateHelper(externalHelpersModuleName, decoratorExpressions, target, memberName, descriptor, location) {
- var argumentsArray = [];
- argumentsArray.push(createArrayLiteral(decoratorExpressions, /*location*/ undefined, /*multiLine*/ true));
- argumentsArray.push(target);
- if (memberName) {
- argumentsArray.push(memberName);
- if (descriptor) {
- argumentsArray.push(descriptor);
- }
- }
- return createCall(createHelperName(externalHelpersModuleName, "__decorate"), /*typeArguments*/ undefined, argumentsArray, location);
- }
- ts.createDecorateHelper = createDecorateHelper;
- function createAwaiterHelper(externalHelpersModuleName, hasLexicalArguments, promiseConstructor, body) {
- var generatorFunc = createFunctionExpression(
- /*modifiers*/ undefined, createToken(38 /* AsteriskToken */),
- /*name*/ undefined,
- /*typeParameters*/ undefined,
- /*parameters*/ [],
- /*type*/ undefined, body);
- // Mark this node as originally an async function
- (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 2097152 /* AsyncFunctionBody */;
- return createCall(createHelperName(externalHelpersModuleName, "__awaiter"),
- /*typeArguments*/ undefined, [
- createThis(),
- hasLexicalArguments ? createIdentifier("arguments") : createVoidZero(),
- promiseConstructor ? createExpressionFromEntityName(promiseConstructor) : createVoidZero(),
- generatorFunc
- ]);
+ function getHelperName(name) {
+ return setEmitFlags(createIdentifier(name), 4096 /* HelperName */ | 2 /* AdviseOnEmitNode */);
}
- ts.createAwaiterHelper = createAwaiterHelper;
- function createHasOwnProperty(target, propertyName) {
- return createCall(createPropertyAccess(target, "hasOwnProperty"),
- /*typeArguments*/ undefined, [propertyName]);
- }
- ts.createHasOwnProperty = createHasOwnProperty;
- function createObjectCreate(prototype) {
- return createCall(createPropertyAccess(createIdentifier("Object"), "create"),
- /*typeArguments*/ undefined, [prototype]);
- }
- function createGeti(target) {
- // name => super[name]
- return createArrowFunction(
- /*modifiers*/ undefined,
- /*typeParameters*/ undefined, [createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "name")],
- /*type*/ undefined, createToken(35 /* EqualsGreaterThanToken */), createElementAccess(target, createIdentifier("name")));
- }
- function createSeti(target) {
- // (name, value) => super[name] = value
- return createArrowFunction(
- /*modifiers*/ undefined,
- /*typeParameters*/ undefined, [
- createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "name"),
- createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "value")
- ],
- /*type*/ undefined, createToken(35 /* EqualsGreaterThanToken */), createAssignment(createElementAccess(target, createIdentifier("name")), createIdentifier("value")));
- }
- function createAdvancedAsyncSuperHelper() {
- // const _super = (function (geti, seti) {
- // const cache = Object.create(null);
- // return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });
- // })(name => super[name], (name, value) => super[name] = value);
- // const cache = Object.create(null);
- var createCache = createVariableStatement(
- /*modifiers*/ undefined, createConstDeclarationList([
- createVariableDeclaration("cache",
- /*type*/ undefined, createObjectCreate(createNull()))
- ]));
- // get value() { return geti(name); }
- var getter = createGetAccessor(
- /*decorators*/ undefined,
- /*modifiers*/ undefined, "value",
- /*parameters*/ [],
- /*type*/ undefined, createBlock([
- createReturn(createCall(createIdentifier("geti"),
- /*typeArguments*/ undefined, [createIdentifier("name")]))
- ]));
- // set value(v) { seti(name, v); }
- var setter = createSetAccessor(
- /*decorators*/ undefined,
- /*modifiers*/ undefined, "value", [createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "v")], createBlock([
- createStatement(createCall(createIdentifier("seti"),
- /*typeArguments*/ undefined, [
- createIdentifier("name"),
- createIdentifier("v")
- ]))
- ]));
- // return name => cache[name] || ...
- var getOrCreateAccessorsForName = createReturn(createArrowFunction(
- /*modifiers*/ undefined,
- /*typeParameters*/ undefined, [createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "name")],
- /*type*/ undefined, createToken(35 /* EqualsGreaterThanToken */), createLogicalOr(createElementAccess(createIdentifier("cache"), createIdentifier("name")), createParen(createAssignment(createElementAccess(createIdentifier("cache"), createIdentifier("name")), createObjectLiteral([
- getter,
- setter
- ]))))));
- // const _super = (function (geti, seti) {
- // const cache = Object.create(null);
- // return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });
- // })(name => super[name], (name, value) => super[name] = value);
- return createVariableStatement(
- /*modifiers*/ undefined, createConstDeclarationList([
- createVariableDeclaration("_super",
- /*type*/ undefined, createCall(createParen(createFunctionExpression(
- /*modifiers*/ undefined,
- /*asteriskToken*/ undefined,
- /*name*/ undefined,
- /*typeParameters*/ undefined, [
- createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "geti"),
- createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "seti")
- ],
- /*type*/ undefined, createBlock([
- createCache,
- getOrCreateAccessorsForName
- ]))),
- /*typeArguments*/ undefined, [
- createGeti(createSuper()),
- createSeti(createSuper())
- ]))
- ]));
- }
- ts.createAdvancedAsyncSuperHelper = createAdvancedAsyncSuperHelper;
- function createSimpleAsyncSuperHelper() {
- return createVariableStatement(
- /*modifiers*/ undefined, createConstDeclarationList([
- createVariableDeclaration("_super",
- /*type*/ undefined, createGeti(createSuper()))
- ]));
- }
- ts.createSimpleAsyncSuperHelper = createSimpleAsyncSuperHelper;
+ ts.getHelperName = getHelperName;
function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
var target = skipParentheses(node);
switch (target.kind) {
@@ -12657,14 +12518,14 @@ var ts;
* @param allowSourceMaps A value indicating whether source maps may be emitted for the name.
*/
function getLocalName(node, allowComments, allowSourceMaps) {
- return getName(node, allowComments, allowSourceMaps, 262144 /* LocalName */);
+ return getName(node, allowComments, allowSourceMaps, 16384 /* LocalName */);
}
ts.getLocalName = getLocalName;
/**
* Gets whether an identifier should only be referred to by its local name.
*/
function isLocalName(node) {
- return (getEmitFlags(node) & 262144 /* LocalName */) !== 0;
+ return (getEmitFlags(node) & 16384 /* LocalName */) !== 0;
}
ts.isLocalName = isLocalName;
/**
@@ -12678,7 +12539,7 @@ var ts;
* @param allowSourceMaps A value indicating whether source maps may be emitted for the name.
*/
function getExportName(node, allowComments, allowSourceMaps) {
- return getName(node, allowComments, allowSourceMaps, 131072 /* ExportName */);
+ return getName(node, allowComments, allowSourceMaps, 8192 /* ExportName */);
}
ts.getExportName = getExportName;
/**
@@ -12686,7 +12547,7 @@ var ts;
* name points to an exported symbol.
*/
function isExportName(node) {
- return (getEmitFlags(node) & 131072 /* ExportName */) !== 0;
+ return (getEmitFlags(node) & 8192 /* ExportName */) !== 0;
}
ts.isExportName = isExportName;
/**
@@ -12702,15 +12563,15 @@ var ts;
ts.getDeclarationName = getDeclarationName;
function getName(node, allowComments, allowSourceMaps, emitFlags) {
if (node.name && ts.isIdentifier(node.name) && !ts.isGeneratedIdentifier(node.name)) {
- var name_11 = getMutableClone(node.name);
+ var name_8 = getMutableClone(node.name);
emitFlags |= getEmitFlags(node.name);
if (!allowSourceMaps)
- emitFlags |= 1536 /* NoSourceMap */;
+ emitFlags |= 48 /* NoSourceMap */;
if (!allowComments)
- emitFlags |= 49152 /* NoComments */;
+ emitFlags |= 1536 /* NoComments */;
if (emitFlags)
- setEmitFlags(name_11, emitFlags);
- return name_11;
+ setEmitFlags(name_8, emitFlags);
+ return name_8;
}
return getGeneratedNameForNode(node);
}
@@ -12744,15 +12605,18 @@ var ts;
var qualifiedName = createPropertyAccess(ns, ts.nodeIsSynthesized(name) ? name : getSynthesizedClone(name), /*location*/ name);
var emitFlags;
if (!allowSourceMaps)
- emitFlags |= 1536 /* NoSourceMap */;
+ emitFlags |= 48 /* NoSourceMap */;
if (!allowComments)
- emitFlags |= 49152 /* NoComments */;
+ emitFlags |= 1536 /* NoComments */;
if (emitFlags)
setEmitFlags(qualifiedName, emitFlags);
return qualifiedName;
}
ts.getNamespaceMemberName = getNamespaceMemberName;
- // Utilities
+ function convertToFunctionBody(node, multiLine) {
+ return ts.isBlock(node) ? node : createBlock([createReturn(node, /*location*/ node)], /*location*/ node, multiLine);
+ }
+ ts.convertToFunctionBody = convertToFunctionBody;
function isUseStrictPrologue(node) {
return node.expression.text === "use strict";
}
@@ -12790,7 +12654,7 @@ var ts;
}
while (statementOffset < numStatements) {
var statement = source[statementOffset];
- if (getEmitFlags(statement) & 8388608 /* CustomPrologue */) {
+ if (getEmitFlags(statement) & 524288 /* CustomPrologue */) {
target.push(visitor ? ts.visitNode(statement, visitor, ts.isStatement) : statement);
}
else {
@@ -12801,15 +12665,22 @@ var ts;
return statementOffset;
}
ts.addPrologueDirectives = addPrologueDirectives;
+ function startsWithUseStrict(statements) {
+ var firstStatement = ts.firstOrUndefined(statements);
+ return firstStatement !== undefined
+ && ts.isPrologueDirective(firstStatement)
+ && isUseStrictPrologue(firstStatement);
+ }
+ ts.startsWithUseStrict = startsWithUseStrict;
/**
* Ensures "use strict" directive is added
*
- * @param node source file
+ * @param statements An array of statements
*/
- function ensureUseStrict(node) {
+ function ensureUseStrict(statements) {
var foundUseStrict = false;
- for (var _i = 0, _a = node.statements; _i < _a.length; _i++) {
- var statement = _a[_i];
+ for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
+ var statement = statements_1[_i];
if (ts.isPrologueDirective(statement)) {
if (isUseStrictPrologue(statement)) {
foundUseStrict = true;
@@ -12821,12 +12692,11 @@ var ts;
}
}
if (!foundUseStrict) {
- var statements = [];
- statements.push(startOnNewLine(createStatement(createLiteral("use strict"))));
- // add "use strict" as the first statement
- return updateSourceFileNode(node, statements.concat(node.statements));
+ return createNodeArray([
+ startOnNewLine(createStatement(createLiteral("use strict")))
+ ].concat(statements), statements);
}
- return node;
+ return statements;
}
ts.ensureUseStrict = ensureUseStrict;
/**
@@ -12987,6 +12857,24 @@ var ts;
}
return 0 /* Unknown */;
}
+ function parenthesizeForConditionalHead(condition) {
+ var conditionalPrecedence = ts.getOperatorPrecedence(193 /* ConditionalExpression */, 54 /* QuestionToken */);
+ var emittedCondition = skipPartiallyEmittedExpressions(condition);
+ var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
+ if (ts.compareValues(conditionPrecedence, conditionalPrecedence) === -1 /* LessThan */) {
+ return createParen(condition);
+ }
+ return condition;
+ }
+ ts.parenthesizeForConditionalHead = parenthesizeForConditionalHead;
+ function parenthesizeSubexpressionOfConditionalExpression(e) {
+ // per ES grammar both 'whenTrue' and 'whenFalse' parts of conditional expression are assignment expressions
+ // so in case when comma expression is introduced as a part of previous transformations
+ // if should be wrapped in parens since comma operator has the lowest precedence
+ return e.kind === 192 /* BinaryExpression */ && e.operatorToken.kind === 25 /* CommaToken */
+ ? createParen(e)
+ : e;
+ }
/**
* Wraps an expression in parentheses if it is needed in order to use the expression
* as the expression of a NewExpression node.
@@ -13118,7 +13006,7 @@ var ts;
case 177 /* PropertyAccessExpression */:
node = node.expression;
continue;
- case 293 /* PartiallyEmittedExpression */:
+ case 294 /* PartiallyEmittedExpression */:
node = node.expression;
continue;
}
@@ -13173,7 +13061,7 @@ var ts;
}
ts.skipAssertions = skipAssertions;
function skipPartiallyEmittedExpressions(node) {
- while (node.kind === 293 /* PartiallyEmittedExpression */) {
+ while (node.kind === 294 /* PartiallyEmittedExpression */) {
node = node.expression;
}
return node;
@@ -13195,8 +13083,8 @@ var ts;
}
ts.setOriginalNode = setOriginalNode;
function mergeEmitNode(sourceEmitNode, destEmitNode) {
- var flags = sourceEmitNode.flags, commentRange = sourceEmitNode.commentRange, sourceMapRange = sourceEmitNode.sourceMapRange, tokenSourceMapRanges = sourceEmitNode.tokenSourceMapRanges;
- if (!destEmitNode && (flags || commentRange || sourceMapRange || tokenSourceMapRanges))
+ var flags = sourceEmitNode.flags, commentRange = sourceEmitNode.commentRange, sourceMapRange = sourceEmitNode.sourceMapRange, tokenSourceMapRanges = sourceEmitNode.tokenSourceMapRanges, constantValue = sourceEmitNode.constantValue, helpers = sourceEmitNode.helpers;
+ if (!destEmitNode)
destEmitNode = {};
if (flags)
destEmitNode.flags = flags;
@@ -13206,6 +13094,10 @@ var ts;
destEmitNode.sourceMapRange = sourceMapRange;
if (tokenSourceMapRanges)
destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges);
+ if (constantValue !== undefined)
+ destEmitNode.constantValue = constantValue;
+ if (helpers)
+ destEmitNode.helpers = ts.addRange(destEmitNode.helpers, helpers);
return destEmitNode;
}
function mergeTokenSourceMapRanges(sourceRanges, destRanges) {
@@ -13258,6 +13150,7 @@ var ts;
}
return node.emitNode;
}
+ ts.getOrCreateEmitNode = getOrCreateEmitNode;
/**
* Gets flags that control emit behavior of a node.
*
@@ -13280,6 +13173,16 @@ var ts;
}
ts.setEmitFlags = setEmitFlags;
/**
+ * Gets a custom text range to use when emitting source maps.
+ *
+ * @param node The node.
+ */
+ function getSourceMapRange(node) {
+ var emitNode = node.emitNode;
+ return (emitNode && emitNode.sourceMapRange) || node;
+ }
+ ts.getSourceMapRange = getSourceMapRange;
+ /**
* Sets a custom text range to use when emitting source maps.
*
* @param node The node.
@@ -13291,6 +13194,18 @@ var ts;
}
ts.setSourceMapRange = setSourceMapRange;
/**
+ * Gets the TextRange to use for source maps for a token of a node.
+ *
+ * @param node The node.
+ * @param token The token.
+ */
+ function getTokenSourceMapRange(node, token) {
+ var emitNode = node.emitNode;
+ var tokenSourceMapRanges = emitNode && emitNode.tokenSourceMapRanges;
+ return tokenSourceMapRanges && tokenSourceMapRanges[token];
+ }
+ ts.getTokenSourceMapRange = getTokenSourceMapRange;
+ /**
* Sets the TextRange to use for source maps for a token of a node.
*
* @param node The node.
@@ -13305,14 +13220,6 @@ var ts;
}
ts.setTokenSourceMapRange = setTokenSourceMapRange;
/**
- * Sets a custom text range to use when emitting comments.
- */
- function setCommentRange(node, range) {
- getOrCreateEmitNode(node).commentRange = range;
- return node;
- }
- ts.setCommentRange = setCommentRange;
- /**
* Gets a custom text range to use when emitting comments.
*
* @param node The node.
@@ -13323,27 +13230,13 @@ var ts;
}
ts.getCommentRange = getCommentRange;
/**
- * Gets a custom text range to use when emitting source maps.
- *
- * @param node The node.
- */
- function getSourceMapRange(node) {
- var emitNode = node.emitNode;
- return (emitNode && emitNode.sourceMapRange) || node;
- }
- ts.getSourceMapRange = getSourceMapRange;
- /**
- * Gets the TextRange to use for source maps for a token of a node.
- *
- * @param node The node.
- * @param token The token.
+ * Sets a custom text range to use when emitting comments.
*/
- function getTokenSourceMapRange(node, token) {
- var emitNode = node.emitNode;
- var tokenSourceMapRanges = emitNode && emitNode.tokenSourceMapRanges;
- return tokenSourceMapRanges && tokenSourceMapRanges[token];
+ function setCommentRange(node, range) {
+ getOrCreateEmitNode(node).commentRange = range;
+ return node;
}
- ts.getTokenSourceMapRange = getTokenSourceMapRange;
+ ts.setCommentRange = setCommentRange;
/**
* Gets the constant value to emit for an expression.
*/
@@ -13361,6 +13254,118 @@ var ts;
return node;
}
ts.setConstantValue = setConstantValue;
+ function getExternalHelpersModuleName(node) {
+ var parseNode = ts.getOriginalNode(node, ts.isSourceFile);
+ var emitNode = parseNode && parseNode.emitNode;
+ return emitNode && emitNode.externalHelpersModuleName;
+ }
+ ts.getExternalHelpersModuleName = getExternalHelpersModuleName;
+ function getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions) {
+ if (compilerOptions.importHelpers && (ts.isExternalModule(node) || compilerOptions.isolatedModules)) {
+ var externalHelpersModuleName = getExternalHelpersModuleName(node);
+ if (externalHelpersModuleName) {
+ return externalHelpersModuleName;
+ }
+ var helpers = getEmitHelpers(node);
+ if (helpers) {
+ for (var _i = 0, helpers_1 = helpers; _i < helpers_1.length; _i++) {
+ var helper = helpers_1[_i];
+ if (!helper.scoped) {
+ var parseNode = ts.getOriginalNode(node, ts.isSourceFile);
+ var emitNode = getOrCreateEmitNode(parseNode);
+ return emitNode.externalHelpersModuleName || (emitNode.externalHelpersModuleName = createUniqueName(ts.externalHelpersModuleNameText));
+ }
+ }
+ }
+ }
+ }
+ ts.getOrCreateExternalHelpersModuleNameIfNeeded = getOrCreateExternalHelpersModuleNameIfNeeded;
+ /**
+ * Adds an EmitHelper to a node.
+ */
+ function addEmitHelper(node, helper) {
+ var emitNode = getOrCreateEmitNode(node);
+ emitNode.helpers = ts.append(emitNode.helpers, helper);
+ return node;
+ }
+ ts.addEmitHelper = addEmitHelper;
+ /**
+ * Adds an EmitHelper to a node.
+ */
+ function addEmitHelpers(node, helpers) {
+ if (ts.some(helpers)) {
+ var emitNode = getOrCreateEmitNode(node);
+ for (var _i = 0, helpers_2 = helpers; _i < helpers_2.length; _i++) {
+ var helper = helpers_2[_i];
+ if (!ts.contains(emitNode.helpers, helper)) {
+ emitNode.helpers = ts.append(emitNode.helpers, helper);
+ }
+ }
+ }
+ return node;
+ }
+ ts.addEmitHelpers = addEmitHelpers;
+ /**
+ * Removes an EmitHelper from a node.
+ */
+ function removeEmitHelper(node, helper) {
+ var emitNode = node.emitNode;
+ if (emitNode) {
+ var helpers = emitNode.helpers;
+ if (helpers) {
+ return ts.orderedRemoveItem(helpers, helper);
+ }
+ }
+ return false;
+ }
+ ts.removeEmitHelper = removeEmitHelper;
+ /**
+ * Gets the EmitHelpers of a node.
+ */
+ function getEmitHelpers(node) {
+ var emitNode = node.emitNode;
+ return emitNode && emitNode.helpers;
+ }
+ ts.getEmitHelpers = getEmitHelpers;
+ /**
+ * Moves matching emit helpers from a source node to a target node.
+ */
+ function moveEmitHelpers(source, target, predicate) {
+ var sourceEmitNode = source.emitNode;
+ var sourceEmitHelpers = sourceEmitNode && sourceEmitNode.helpers;
+ if (!ts.some(sourceEmitHelpers))
+ return;
+ var targetEmitNode = getOrCreateEmitNode(target);
+ var helpersRemoved = 0;
+ for (var i = 0; i < sourceEmitHelpers.length; i++) {
+ var helper = sourceEmitHelpers[i];
+ if (predicate(helper)) {
+ helpersRemoved++;
+ if (!ts.contains(targetEmitNode.helpers, helper)) {
+ targetEmitNode.helpers = ts.append(targetEmitNode.helpers, helper);
+ }
+ }
+ else if (helpersRemoved > 0) {
+ sourceEmitHelpers[i - helpersRemoved] = helper;
+ }
+ }
+ if (helpersRemoved > 0) {
+ sourceEmitHelpers.length -= helpersRemoved;
+ }
+ }
+ ts.moveEmitHelpers = moveEmitHelpers;
+ function compareEmitHelpers(x, y) {
+ if (x === y)
+ return 0 /* EqualTo */;
+ if (x.priority === y.priority)
+ return 0 /* EqualTo */;
+ if (x.priority === undefined)
+ return 1 /* GreaterThan */;
+ if (y.priority === undefined)
+ return -1 /* LessThan */;
+ return ts.compareValues(x.priority, y.priority);
+ }
+ ts.compareEmitHelpers = compareEmitHelpers;
function setTextRange(node, location) {
if (location) {
node.pos = location.pos;
@@ -13390,8 +13395,8 @@ var ts;
function getLocalNameForExternalImport(node, sourceFile) {
var namespaceDeclaration = ts.getNamespaceDeclarationNode(node);
if (namespaceDeclaration && !ts.isDefaultImport(node)) {
- var name_12 = namespaceDeclaration.name;
- return ts.isGeneratedIdentifier(name_12) ? name_12 : createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, namespaceDeclaration.name));
+ var name_9 = namespaceDeclaration.name;
+ return ts.isGeneratedIdentifier(name_9) ? name_9 : createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, namespaceDeclaration.name));
}
if (node.kind === 235 /* ImportDeclaration */ && node.importClause) {
return getGeneratedNameForNode(node);
@@ -13454,362 +13459,390 @@ var ts;
return tryGetModuleNameFromFile(resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions);
}
/**
- * Transforms the body of a function-like node.
- *
- * @param node A function-like node.
+ * Gets the initializer of an BindingOrAssignmentElement.
*/
- function transformFunctionBody(node, visitor, currentSourceFile, context, enableSubstitutionsForCapturedThis, convertObjectRest) {
- var multiLine = false; // indicates whether the block *must* be emitted as multiple lines
- var singleLine = false; // indicates whether the block *may* be emitted as a single line
- var statementsLocation;
- var closeBraceLocation;
- var statements = [];
- var body = node.body;
- var statementOffset;
- context.startLexicalEnvironment();
- if (ts.isBlock(body)) {
- // ensureUseStrict is false because no new prologue-directive should be added.
- // addPrologueDirectives will simply put already-existing directives at the beginning of the target statement-array
- statementOffset = addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor);
- }
- addCaptureThisForNodeIfNeeded(statements, node, enableSubstitutionsForCapturedThis);
- addDefaultValueAssignmentsIfNeeded(statements, node, visitor, convertObjectRest);
- addRestParameterIfNeeded(statements, node, /*inConstructorWithSynthesizedSuper*/ false);
- // If we added any generated statements, this must be a multi-line block.
- if (!multiLine && statements.length > 0) {
- multiLine = true;
- }
- if (ts.isBlock(body)) {
- statementsLocation = body.statements;
- ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, statementOffset));
- // If the original body was a multi-line block, this must be a multi-line block.
- if (!multiLine && body.multiLine) {
- multiLine = true;
- }
- }
- else {
- ts.Debug.assert(node.kind === 185 /* ArrowFunction */);
- // To align with the old emitter, we use a synthetic end position on the location
- // for the statement list we synthesize when we down-level an arrow function with
- // an expression function body. This prevents both comments and source maps from
- // being emitted for the end position only.
- statementsLocation = ts.moveRangeEnd(body, -1);
- var equalsGreaterThanToken = node.equalsGreaterThanToken;
- if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) {
- if (ts.rangeEndIsOnSameLineAsRangeStart(equalsGreaterThanToken, body, currentSourceFile)) {
- singleLine = true;
- }
- else {
- multiLine = true;
- }
- }
- var expression = ts.visitNode(body, visitor, ts.isExpression);
- var returnStatement = createReturn(expression, /*location*/ body);
- setEmitFlags(returnStatement, 12288 /* NoTokenSourceMaps */ | 1024 /* NoTrailingSourceMap */ | 32768 /* NoTrailingComments */);
- statements.push(returnStatement);
- // To align with the source map emit for the old emitter, we set a custom
- // source map location for the close brace.
- closeBraceLocation = body;
+ function getInitializerOfBindingOrAssignmentElement(bindingElement) {
+ if (ts.isDeclarationBindingElement(bindingElement)) {
+ // `1` in `let { a = 1 } = ...`
+ // `1` in `let { a: b = 1 } = ...`
+ // `1` in `let { a: {b} = 1 } = ...`
+ // `1` in `let { a: [b] = 1 } = ...`
+ // `1` in `let [a = 1] = ...`
+ // `1` in `let [{a} = 1] = ...`
+ // `1` in `let [[a] = 1] = ...`
+ return bindingElement.initializer;
+ }
+ if (ts.isPropertyAssignment(bindingElement)) {
+ // `1` in `({ a: b = 1 } = ...)`
+ // `1` in `({ a: {b} = 1 } = ...)`
+ // `1` in `({ a: [b] = 1 } = ...)`
+ return ts.isAssignmentExpression(bindingElement.initializer, /*excludeCompoundAssignment*/ true)
+ ? bindingElement.initializer.right
+ : undefined;
}
- var lexicalEnvironment = context.endLexicalEnvironment();
- ts.addRange(statements, lexicalEnvironment);
- // If we added any final generated statements, this must be a multi-line block
- if (!multiLine && lexicalEnvironment && lexicalEnvironment.length) {
- multiLine = true;
+ if (ts.isShorthandPropertyAssignment(bindingElement)) {
+ // `1` in `({ a = 1 } = ...)`
+ return bindingElement.objectAssignmentInitializer;
}
- var block = createBlock(createNodeArray(statements, statementsLocation), node.body, multiLine);
- if (!multiLine && singleLine) {
- setEmitFlags(block, 32 /* SingleLine */);
+ if (ts.isAssignmentExpression(bindingElement, /*excludeCompoundAssignment*/ true)) {
+ // `1` in `[a = 1] = ...`
+ // `1` in `[{a} = 1] = ...`
+ // `1` in `[[a] = 1] = ...`
+ return bindingElement.right;
}
- if (closeBraceLocation) {
- setTokenSourceMapRange(block, 17 /* CloseBraceToken */, closeBraceLocation);
+ if (ts.isSpreadExpression(bindingElement)) {
+ // Recovery consistent with existing emit.
+ return getInitializerOfBindingOrAssignmentElement(bindingElement.expression);
}
- setOriginalNode(block, node.body);
- return block;
}
- ts.transformFunctionBody = transformFunctionBody;
+ ts.getInitializerOfBindingOrAssignmentElement = getInitializerOfBindingOrAssignmentElement;
/**
- * Adds a statement to capture the `this` of a function declaration if it is needed.
- *
- * @param statements The statements for the new function body.
- * @param node A node.
+ * Gets the name of an BindingOrAssignmentElement.
*/
- function addCaptureThisForNodeIfNeeded(statements, node, enableSubstitutionsForCapturedThis) {
- if (node.transformFlags & 524288 /* ContainsCapturedLexicalThis */ && node.kind !== 185 /* ArrowFunction */) {
- captureThisForNode(statements, node, createThis(), enableSubstitutionsForCapturedThis);
- }
- }
- ts.addCaptureThisForNodeIfNeeded = addCaptureThisForNodeIfNeeded;
- function captureThisForNode(statements, node, initializer, enableSubstitutionsForCapturedThis, originalStatement) {
- enableSubstitutionsForCapturedThis();
- var captureThisStatement = createVariableStatement(
- /*modifiers*/ undefined, createVariableDeclarationList([
- createVariableDeclaration("_this",
- /*type*/ undefined, initializer)
- ]), originalStatement);
- setEmitFlags(captureThisStatement, 49152 /* NoComments */ | 8388608 /* CustomPrologue */);
- setSourceMapRange(captureThisStatement, node);
- statements.push(captureThisStatement);
- }
- ts.captureThisForNode = captureThisForNode;
+ function getTargetOfBindingOrAssignmentElement(bindingElement) {
+ if (ts.isDeclarationBindingElement(bindingElement)) {
+ // `a` in `let { a } = ...`
+ // `a` in `let { a = 1 } = ...`
+ // `b` in `let { a: b } = ...`
+ // `b` in `let { a: b = 1 } = ...`
+ // `a` in `let { ...a } = ...`
+ // `{b}` in `let { a: {b} } = ...`
+ // `{b}` in `let { a: {b} = 1 } = ...`
+ // `[b]` in `let { a: [b] } = ...`
+ // `[b]` in `let { a: [b] = 1 } = ...`
+ // `a` in `let [a] = ...`
+ // `a` in `let [a = 1] = ...`
+ // `a` in `let [...a] = ...`
+ // `{a}` in `let [{a}] = ...`
+ // `{a}` in `let [{a} = 1] = ...`
+ // `[a]` in `let [[a]] = ...`
+ // `[a]` in `let [[a] = 1] = ...`
+ return bindingElement.name;
+ }
+ if (ts.isObjectLiteralElementLike(bindingElement)) {
+ switch (bindingElement.kind) {
+ case 257 /* PropertyAssignment */:
+ // `b` in `({ a: b } = ...)`
+ // `b` in `({ a: b = 1 } = ...)`
+ // `{b}` in `({ a: {b} } = ...)`
+ // `{b}` in `({ a: {b} = 1 } = ...)`
+ // `[b]` in `({ a: [b] } = ...)`
+ // `[b]` in `({ a: [b] = 1 } = ...)`
+ // `b.c` in `({ a: b.c } = ...)`
+ // `b.c` in `({ a: b.c = 1 } = ...)`
+ // `b[0]` in `({ a: b[0] } = ...)`
+ // `b[0]` in `({ a: b[0] = 1 } = ...)`
+ return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
+ case 258 /* ShorthandPropertyAssignment */:
+ // `a` in `({ a } = ...)`
+ // `a` in `({ a = 1 } = ...)`
+ return bindingElement.name;
+ case 259 /* SpreadAssignment */:
+ // `a` in `({ ...a } = ...)`
+ return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
+ }
+ // no target
+ return undefined;
+ }
+ if (ts.isAssignmentExpression(bindingElement, /*excludeCompoundAssignment*/ true)) {
+ // `a` in `[a = 1] = ...`
+ // `{a}` in `[{a} = 1] = ...`
+ // `[a]` in `[[a] = 1] = ...`
+ // `a.b` in `[a.b = 1] = ...`
+ // `a[0]` in `[a[0] = 1] = ...`
+ return getTargetOfBindingOrAssignmentElement(bindingElement.left);
+ }
+ if (ts.isSpreadExpression(bindingElement)) {
+ // `a` in `[...a] = ...`
+ return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
+ }
+ // `a` in `[a] = ...`
+ // `{a}` in `[{a}] = ...`
+ // `[a]` in `[[a]] = ...`
+ // `a.b` in `[a.b] = ...`
+ // `a[0]` in `[a[0]] = ...`
+ return bindingElement;
+ }
+ ts.getTargetOfBindingOrAssignmentElement = getTargetOfBindingOrAssignmentElement;
/**
- * Gets a value indicating whether we need to add default value assignments for a
- * function-like node.
- *
- * @param node A function-like node.
+ * Determines whether an BindingOrAssignmentElement is a rest element.
*/
- function shouldAddDefaultValueAssignments(node) {
- return (node.transformFlags & 2097152 /* ContainsDefaultValueAssignments */) !== 0;
+ function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
+ switch (bindingElement.kind) {
+ case 144 /* Parameter */:
+ case 174 /* BindingElement */:
+ // `...` in `let [...a] = ...`
+ return bindingElement.dotDotDotToken;
+ case 196 /* SpreadElement */:
+ case 259 /* SpreadAssignment */:
+ // `...` in `[...a] = ...`
+ return bindingElement;
+ }
+ return undefined;
}
+ ts.getRestIndicatorOfBindingOrAssignmentElement = getRestIndicatorOfBindingOrAssignmentElement;
/**
- * Adds statements to the body of a function-like node if it contains parameters with
- * binding patterns or initializers.
- *
- * @param statements The statements for the new function body.
- * @param node A function-like node.
+ * Gets the property name of a BindingOrAssignmentElement
*/
- function addDefaultValueAssignmentsIfNeeded(statements, node, visitor, convertObjectRest) {
- if (!shouldAddDefaultValueAssignments(node)) {
- return;
+ function getPropertyNameOfBindingOrAssignmentElement(bindingElement) {
+ switch (bindingElement.kind) {
+ case 174 /* BindingElement */:
+ // `a` in `let { a: b } = ...`
+ // `[a]` in `let { [a]: b } = ...`
+ // `"a"` in `let { "a": b } = ...`
+ // `1` in `let { 1: b } = ...`
+ if (bindingElement.propertyName) {
+ var propertyName = bindingElement.propertyName;
+ return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression)
+ ? propertyName.expression
+ : propertyName;
+ }
+ break;
+ case 257 /* PropertyAssignment */:
+ // `a` in `({ a: b } = ...)`
+ // `[a]` in `({ [a]: b } = ...)`
+ // `"a"` in `({ "a": b } = ...)`
+ // `1` in `({ 1: b } = ...)`
+ if (bindingElement.name) {
+ var propertyName = bindingElement.name;
+ return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression)
+ ? propertyName.expression
+ : propertyName;
+ }
+ break;
+ case 259 /* SpreadAssignment */:
+ // `a` in `({ ...a } = ...)`
+ return bindingElement.name;
}
- for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
- var parameter = _a[_i];
- var name_13 = parameter.name, initializer = parameter.initializer, dotDotDotToken = parameter.dotDotDotToken;
- // A rest parameter cannot have a binding pattern or an initializer,
- // so let's just ignore it.
- if (dotDotDotToken) {
- continue;
- }
- if (ts.isBindingPattern(name_13)) {
- addDefaultValueAssignmentForBindingPattern(statements, parameter, name_13, initializer, visitor, convertObjectRest);
- }
- else if (initializer) {
- addDefaultValueAssignmentForInitializer(statements, parameter, name_13, initializer, visitor);
- }
+ var target = getTargetOfBindingOrAssignmentElement(bindingElement);
+ if (target && ts.isPropertyName(target)) {
+ return ts.isComputedPropertyName(target) && ts.isStringOrNumericLiteral(target.expression)
+ ? target.expression
+ : target;
}
+ ts.Debug.fail("Invalid property name for binding element.");
}
- ts.addDefaultValueAssignmentsIfNeeded = addDefaultValueAssignmentsIfNeeded;
+ ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
/**
- * Adds statements to the body of a function-like node for parameters with binding patterns
- *
- * @param statements The statements for the new function body.
- * @param parameter The parameter for the function.
- * @param name The name of the parameter.
- * @param initializer The initializer for the parameter.
+ * Gets the elements of a BindingOrAssignmentPattern
*/
- function addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer, visitor, convertObjectRest) {
- var temp = getGeneratedNameForNode(parameter);
- // In cases where a binding pattern is simply '[]' or '{}',
- // we usually don't want to emit a var declaration; however, in the presence
- // of an initializer, we must emit that expression to preserve side effects.
- if (name.elements.length > 0) {
- statements.push(setEmitFlags(createVariableStatement(
- /*modifiers*/ undefined, createVariableDeclarationList(ts.flattenParameterDestructuring(parameter, temp, visitor, convertObjectRest))), 8388608 /* CustomPrologue */));
+ function getElementsOfBindingOrAssignmentPattern(name) {
+ switch (name.kind) {
+ case 172 /* ObjectBindingPattern */:
+ case 173 /* ArrayBindingPattern */:
+ case 175 /* ArrayLiteralExpression */:
+ // `a` in `{a}`
+ // `a` in `[a]`
+ return name.elements;
+ case 176 /* ObjectLiteralExpression */:
+ // `a` in `{a}`
+ return name.properties;
}
- else if (initializer) {
- statements.push(setEmitFlags(createStatement(createAssignment(temp, ts.visitNode(initializer, visitor, ts.isExpression))), 8388608 /* CustomPrologue */));
+ }
+ ts.getElementsOfBindingOrAssignmentPattern = getElementsOfBindingOrAssignmentPattern;
+ function convertToArrayAssignmentElement(element) {
+ if (ts.isBindingElement(element)) {
+ if (element.dotDotDotToken) {
+ ts.Debug.assertNode(element.name, ts.isIdentifier);
+ return setOriginalNode(createSpread(element.name, element), element);
+ }
+ var expression = convertToAssignmentElementTarget(element.name);
+ return element.initializer ? setOriginalNode(createAssignment(expression, element.initializer, element), element) : expression;
}
+ ts.Debug.assertNode(element, ts.isExpression);
+ return element;
}
- /**
- * Adds statements to the body of a function-like node for parameters with initializers.
- *
- * @param statements The statements for the new function body.
- * @param parameter The parameter for the function.
- * @param name The name of the parameter.
- * @param initializer The initializer for the parameter.
- */
- function addDefaultValueAssignmentForInitializer(statements, parameter, name, initializer, visitor) {
- initializer = ts.visitNode(initializer, visitor, ts.isExpression);
- var statement = createIf(createStrictEquality(getSynthesizedClone(name), createVoidZero()), setEmitFlags(createBlock([
- createStatement(createAssignment(setEmitFlags(getMutableClone(name), 1536 /* NoSourceMap */), setEmitFlags(initializer, 1536 /* NoSourceMap */ | getEmitFlags(initializer)),
- /*location*/ parameter))
- ], /*location*/ parameter), 32 /* SingleLine */ | 1024 /* NoTrailingSourceMap */ | 12288 /* NoTokenSourceMaps */),
- /*elseStatement*/ undefined,
- /*location*/ parameter);
- statement.startsOnNewLine = true;
- setEmitFlags(statement, 12288 /* NoTokenSourceMaps */ | 1024 /* NoTrailingSourceMap */ | 8388608 /* CustomPrologue */);
- statements.push(statement);
+ ts.convertToArrayAssignmentElement = convertToArrayAssignmentElement;
+ function convertToObjectAssignmentElement(element) {
+ if (ts.isBindingElement(element)) {
+ if (element.dotDotDotToken) {
+ ts.Debug.assertNode(element.name, ts.isIdentifier);
+ return setOriginalNode(createSpreadAssignment(element.name, element), element);
+ }
+ if (element.propertyName) {
+ var expression = convertToAssignmentElementTarget(element.name);
+ return setOriginalNode(createPropertyAssignment(element.propertyName, element.initializer ? createAssignment(expression, element.initializer) : expression, element), element);
+ }
+ ts.Debug.assertNode(element.name, ts.isIdentifier);
+ return setOriginalNode(createShorthandPropertyAssignment(element.name, element.initializer, element), element);
+ }
+ ts.Debug.assertNode(element, ts.isObjectLiteralElementLike);
+ return element;
}
- /**
- * Gets a value indicating whether we need to add statements to handle a rest parameter.
- *
- * @param node A ParameterDeclaration node.
- * @param inConstructorWithSynthesizedSuper A value indicating whether the parameter is
- * part of a constructor declaration with a
- * synthesized call to `super`
- */
- function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) {
- return node && node.dotDotDotToken && node.name.kind === 70 /* Identifier */ && !inConstructorWithSynthesizedSuper;
+ ts.convertToObjectAssignmentElement = convertToObjectAssignmentElement;
+ function convertToAssignmentPattern(node) {
+ switch (node.kind) {
+ case 173 /* ArrayBindingPattern */:
+ case 175 /* ArrayLiteralExpression */:
+ return convertToArrayAssignmentPattern(node);
+ case 172 /* ObjectBindingPattern */:
+ case 176 /* ObjectLiteralExpression */:
+ return convertToObjectAssignmentPattern(node);
+ }
}
- /**
- * Adds statements to the body of a function-like node if it contains a rest parameter.
- *
- * @param statements The statements for the new function body.
- * @param node A function-like node.
- * @param inConstructorWithSynthesizedSuper A value indicating whether the parameter is
- * part of a constructor declaration with a
- * synthesized call to `super`
- */
- function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) {
- var parameter = ts.lastOrUndefined(node.parameters);
- if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) {
- return;
+ ts.convertToAssignmentPattern = convertToAssignmentPattern;
+ function convertToObjectAssignmentPattern(node) {
+ if (ts.isObjectBindingPattern(node)) {
+ return setOriginalNode(createObjectLiteral(ts.map(node.elements, convertToObjectAssignmentElement), node), node);
}
- // `declarationName` is the name of the local declaration for the parameter.
- var declarationName = getMutableClone(parameter.name);
- setEmitFlags(declarationName, 1536 /* NoSourceMap */);
- // `expressionName` is the name of the parameter used in expressions.
- var expressionName = getSynthesizedClone(parameter.name);
- var restIndex = node.parameters.length - 1;
- var temp = createLoopVariable();
- // var param = [];
- statements.push(setEmitFlags(createVariableStatement(
- /*modifiers*/ undefined, createVariableDeclarationList([
- createVariableDeclaration(declarationName,
- /*type*/ undefined, createArrayLiteral([]))
- ]),
- /*location*/ parameter), 8388608 /* CustomPrologue */));
- // for (var _i = restIndex; _i < arguments.length; _i++) {
- // param[_i - restIndex] = arguments[_i];
- // }
- var forStatement = createFor(createVariableDeclarationList([
- createVariableDeclaration(temp, /*type*/ undefined, createLiteral(restIndex))
- ], /*location*/ parameter), createLessThan(temp, createPropertyAccess(createIdentifier("arguments"), "length"),
- /*location*/ parameter), createPostfixIncrement(temp, /*location*/ parameter), createBlock([
- startOnNewLine(createStatement(createAssignment(createElementAccess(expressionName, createSubtract(temp, createLiteral(restIndex))), createElementAccess(createIdentifier("arguments"), temp)),
- /*location*/ parameter))
- ]));
- setEmitFlags(forStatement, 8388608 /* CustomPrologue */);
- startOnNewLine(forStatement);
- statements.push(forStatement);
- }
- ts.addRestParameterIfNeeded = addRestParameterIfNeeded;
- function convertForOf(node, convertedLoopBodyStatements, visitor, enableSubstitutionsForBlockScopedBindings, context, convertObjectRest) {
- // The following ES6 code:
- //
- // for (let v of expr) { }
- //
- // should be emitted as
- //
- // for (var _i = 0, _a = expr; _i < _a.length; _i++) {
- // var v = _a[_i];
- // }
- //
- // where _a and _i are temps emitted to capture the RHS and the counter,
- // respectively.
- // When the left hand side is an expression instead of a let declaration,
- // the "let v" is not emitted.
- // When the left hand side is a let/const, the v is renamed if there is
- // another v in scope.
- // Note that all assignments to the LHS are emitted in the body, including
- // all destructuring.
- // Note also that because an extra statement is needed to assign to the LHS,
- // for-of bodies are always emitted as blocks.
- var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
- var initializer = node.initializer;
- var statements = [];
- // In the case where the user wrote an identifier as the RHS, like this:
- //
- // for (let v of arr) { }
- //
- // we don't want to emit a temporary variable for the RHS, just use it directly.
- var counter = convertObjectRest ? undefined : createLoopVariable();
- var rhsReference = expression.kind === 70 /* Identifier */
- ? createUniqueName(expression.text)
- : createTempVariable(/*recordTempVariable*/ undefined);
- var elementAccess = convertObjectRest ? rhsReference : createElementAccess(rhsReference, counter);
- // Initialize LHS
- // var v = _a[_i];
- if (ts.isVariableDeclarationList(initializer)) {
- if (initializer.flags & 3 /* BlockScoped */) {
- enableSubstitutionsForBlockScopedBindings();
- }
- var firstOriginalDeclaration = ts.firstOrUndefined(initializer.declarations);
- if (firstOriginalDeclaration && ts.isBindingPattern(firstOriginalDeclaration.name)) {
- // This works whether the declaration is a var, let, or const.
- // It will use rhsIterationValue _a[_i] as the initializer.
- var declarations = ts.flattenVariableDestructuring(firstOriginalDeclaration, elementAccess, visitor,
- /*recordTempVariable*/ undefined, convertObjectRest);
- var declarationList = createVariableDeclarationList(declarations, /*location*/ initializer);
- setOriginalNode(declarationList, initializer);
- // Adjust the source map range for the first declaration to align with the old
- // emitter.
- var firstDeclaration = declarations[0];
- var lastDeclaration = ts.lastOrUndefined(declarations);
- setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, lastDeclaration.end));
- statements.push(createVariableStatement(
- /*modifiers*/ undefined, declarationList));
- }
- else {
- // The following call does not include the initializer, so we have
- // to emit it separately.
- statements.push(createVariableStatement(
- /*modifiers*/ undefined, setOriginalNode(createVariableDeclarationList([
- createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : createTempVariable(/*recordTempVariable*/ undefined),
- /*type*/ undefined, createElementAccess(rhsReference, counter))
- ], /*location*/ ts.moveRangePos(initializer, -1)), initializer),
- /*location*/ ts.moveRangeEnd(initializer, -1)));
- }
+ ts.Debug.assertNode(node, ts.isObjectLiteralExpression);
+ return node;
+ }
+ ts.convertToObjectAssignmentPattern = convertToObjectAssignmentPattern;
+ function convertToArrayAssignmentPattern(node) {
+ if (ts.isArrayBindingPattern(node)) {
+ return setOriginalNode(createArrayLiteral(ts.map(node.elements, convertToArrayAssignmentElement), node), node);
}
- else {
- // Initializer is an expression. Emit the expression in the body, so that it's
- // evaluated on every iteration.
- var assignment = createAssignment(initializer, elementAccess);
- if (ts.isDestructuringAssignment(assignment)) {
- // This is a destructuring pattern, so we flatten the destructuring instead.
- statements.push(createStatement(ts.flattenDestructuringAssignment(context, assignment,
- /*needsValue*/ false, context.hoistVariableDeclaration, visitor, convertObjectRest)));
- }
- else {
- // Currently there is not way to check that assignment is binary expression of destructing assignment
- // so we have to cast never type to binaryExpression
- assignment.end = initializer.end;
- statements.push(createStatement(assignment, /*location*/ ts.moveRangeEnd(initializer, -1)));
- }
+ ts.Debug.assertNode(node, ts.isArrayLiteralExpression);
+ return node;
+ }
+ ts.convertToArrayAssignmentPattern = convertToArrayAssignmentPattern;
+ function convertToAssignmentElementTarget(node) {
+ if (ts.isBindingPattern(node)) {
+ return convertToAssignmentPattern(node);
}
- var bodyLocation;
- var statementsLocation;
- if (convertedLoopBodyStatements) {
- ts.addRange(statements, convertedLoopBodyStatements);
+ ts.Debug.assertNode(node, ts.isExpression);
+ return node;
+ }
+ ts.convertToAssignmentElementTarget = convertToAssignmentElementTarget;
+ function collectExternalModuleInfo(sourceFile, resolver, compilerOptions) {
+ var externalImports = [];
+ var exportSpecifiers = ts.createMap();
+ var exportedBindings = ts.createMap();
+ var uniqueExports = ts.createMap();
+ var exportedNames;
+ var hasExportDefault = false;
+ var exportEquals = undefined;
+ var hasExportStarsToExportValues = false;
+ var externalHelpersModuleName = getOrCreateExternalHelpersModuleNameIfNeeded(sourceFile, compilerOptions);
+ var externalHelpersImportDeclaration = externalHelpersModuleName && createImportDeclaration(
+ /*decorators*/ undefined,
+ /*modifiers*/ undefined, createImportClause(/*name*/ undefined, createNamespaceImport(externalHelpersModuleName)), createLiteral(ts.externalHelpersModuleNameText));
+ if (externalHelpersImportDeclaration) {
+ externalImports.push(externalHelpersImportDeclaration);
}
- else {
- var statement = ts.visitNode(node.statement, visitor, ts.isStatement);
- if (ts.isBlock(statement)) {
- ts.addRange(statements, statement.statements);
- bodyLocation = statement;
- statementsLocation = statement.statements;
- }
- else {
- statements.push(statement);
+ for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
+ var node = _a[_i];
+ switch (node.kind) {
+ case 235 /* ImportDeclaration */:
+ // import "mod"
+ // import x from "mod"
+ // import * as x from "mod"
+ // import { x, y } from "mod"
+ externalImports.push(node);
+ break;
+ case 234 /* ImportEqualsDeclaration */:
+ if (node.moduleReference.kind === 245 /* ExternalModuleReference */) {
+ // import x = require("mod")
+ externalImports.push(node);
+ }
+ break;
+ case 241 /* ExportDeclaration */:
+ if (node.moduleSpecifier) {
+ if (!node.exportClause) {
+ // export * from "mod"
+ externalImports.push(node);
+ hasExportStarsToExportValues = true;
+ }
+ else {
+ // export { x, y } from "mod"
+ externalImports.push(node);
+ }
+ }
+ else {
+ // export { x, y }
+ for (var _b = 0, _c = node.exportClause.elements; _b < _c.length; _b++) {
+ var specifier = _c[_b];
+ if (!uniqueExports[specifier.name.text]) {
+ var name_10 = specifier.propertyName || specifier.name;
+ ts.multiMapAdd(exportSpecifiers, name_10.text, specifier);
+ var decl = resolver.getReferencedImportDeclaration(name_10)
+ || resolver.getReferencedValueDeclaration(name_10);
+ if (decl) {
+ ts.multiMapAdd(exportedBindings, ts.getOriginalNodeId(decl), specifier.name);
+ }
+ uniqueExports[specifier.name.text] = true;
+ exportedNames = ts.append(exportedNames, specifier.name);
+ }
+ }
+ }
+ break;
+ case 240 /* ExportAssignment */:
+ if (node.isExportEquals && !exportEquals) {
+ // export = x
+ exportEquals = node;
+ }
+ break;
+ case 205 /* VariableStatement */:
+ if (ts.hasModifier(node, 1 /* Export */)) {
+ for (var _d = 0, _e = node.declarationList.declarations; _d < _e.length; _d++) {
+ var decl = _e[_d];
+ exportedNames = collectExportedVariableInfo(decl, uniqueExports, exportedNames);
+ }
+ }
+ break;
+ case 225 /* FunctionDeclaration */:
+ if (ts.hasModifier(node, 1 /* Export */)) {
+ if (ts.hasModifier(node, 512 /* Default */)) {
+ // export default function() { }
+ if (!hasExportDefault) {
+ ts.multiMapAdd(exportedBindings, ts.getOriginalNodeId(node), getDeclarationName(node));
+ hasExportDefault = true;
+ }
+ }
+ else {
+ // export function x() { }
+ var name_11 = node.name;
+ if (!uniqueExports[name_11.text]) {
+ ts.multiMapAdd(exportedBindings, ts.getOriginalNodeId(node), name_11);
+ uniqueExports[name_11.text] = true;
+ exportedNames = ts.append(exportedNames, name_11);
+ }
+ }
+ }
+ break;
+ case 226 /* ClassDeclaration */:
+ if (ts.hasModifier(node, 1 /* Export */)) {
+ if (ts.hasModifier(node, 512 /* Default */)) {
+ // export default class { }
+ if (!hasExportDefault) {
+ ts.multiMapAdd(exportedBindings, ts.getOriginalNodeId(node), getDeclarationName(node));
+ hasExportDefault = true;
+ }
+ }
+ else {
+ // export class x { }
+ var name_12 = node.name;
+ if (!uniqueExports[name_12.text]) {
+ ts.multiMapAdd(exportedBindings, ts.getOriginalNodeId(node), name_12);
+ uniqueExports[name_12.text] = true;
+ exportedNames = ts.append(exportedNames, name_12);
+ }
+ }
+ }
+ break;
}
}
- // The old emitter does not emit source maps for the expression
- setEmitFlags(expression, 1536 /* NoSourceMap */ | getEmitFlags(expression));
- // The old emitter does not emit source maps for the block.
- // We add the location to preserve comments.
- var body = createBlock(createNodeArray(statements, /*location*/ statementsLocation),
- /*location*/ bodyLocation);
- setEmitFlags(body, 1536 /* NoSourceMap */ | 12288 /* NoTokenSourceMaps */);
- var forStatement;
- if (convertObjectRest) {
- forStatement = createForOf(createVariableDeclarationList([
- createVariableDeclaration(rhsReference, /*type*/ undefined, /*initializer*/ undefined, /*location*/ node.expression)
- ], /*location*/ node.expression), node.expression, body,
- /*location*/ node);
+ return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames, externalHelpersImportDeclaration: externalHelpersImportDeclaration };
+ }
+ ts.collectExternalModuleInfo = collectExternalModuleInfo;
+ function collectExportedVariableInfo(decl, uniqueExports, exportedNames) {
+ if (ts.isBindingPattern(decl.name)) {
+ for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) {
+ var element = _a[_i];
+ if (!ts.isOmittedExpression(element)) {
+ exportedNames = collectExportedVariableInfo(element, uniqueExports, exportedNames);
+ }
+ }
}
- else {
- forStatement = createFor(setEmitFlags(createVariableDeclarationList([
- createVariableDeclaration(counter, /*type*/ undefined, createLiteral(0), /*location*/ ts.moveRangePos(node.expression, -1)),
- createVariableDeclaration(rhsReference, /*type*/ undefined, expression, /*location*/ node.expression)
- ], /*location*/ node.expression), 16777216 /* NoHoisting */), createLessThan(counter, createPropertyAccess(rhsReference, "length"),
- /*location*/ node.expression), createPostfixIncrement(counter, /*location*/ node.expression), body,
- /*location*/ node);
+ else if (!ts.isGeneratedIdentifier(decl.name)) {
+ if (!uniqueExports[decl.name.text]) {
+ uniqueExports[decl.name.text] = true;
+ exportedNames = ts.append(exportedNames, decl.name);
+ }
}
- // Disable trailing source maps for the OpenParenToken to align source map emit with the old emitter.
- setEmitFlags(forStatement, 8192 /* NoTokenTrailingSourceMaps */);
- return forStatement;
+ return exportedNames;
}
- ts.convertForOf = convertForOf;
})(ts || (ts = {}));
/// <reference path="utilities.ts"/>
/// <reference path="scanner.ts"/>
@@ -14217,29 +14250,31 @@ var ts;
visitNode(cbNode, node.type);
case 278 /* JSDocComment */:
return visitNodes(cbNodes, node.tags);
- case 280 /* JSDocParameterTag */:
+ case 281 /* JSDocParameterTag */:
return visitNode(cbNode, node.preParameterName) ||
visitNode(cbNode, node.typeExpression) ||
visitNode(cbNode, node.postParameterName);
- case 281 /* JSDocReturnTag */:
+ case 282 /* JSDocReturnTag */:
return visitNode(cbNode, node.typeExpression);
- case 282 /* JSDocTypeTag */:
+ case 283 /* JSDocTypeTag */:
return visitNode(cbNode, node.typeExpression);
- case 283 /* JSDocTemplateTag */:
+ case 280 /* JSDocAugmentsTag */:
+ return visitNode(cbNode, node.typeExpression);
+ case 284 /* JSDocTemplateTag */:
return visitNodes(cbNodes, node.typeParameters);
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
return visitNode(cbNode, node.typeExpression) ||
visitNode(cbNode, node.fullName) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.jsDocTypeLiteral);
- case 286 /* JSDocTypeLiteral */:
+ case 287 /* JSDocTypeLiteral */:
return visitNodes(cbNodes, node.jsDocPropertyTags);
- case 285 /* JSDocPropertyTag */:
+ case 286 /* JSDocPropertyTag */:
return visitNode(cbNode, node.typeExpression) ||
visitNode(cbNode, node.name);
- case 293 /* PartiallyEmittedExpression */:
+ case 294 /* PartiallyEmittedExpression */:
return visitNode(cbNode, node.expression);
- case 287 /* JSDocLiteralType */:
+ case 288 /* JSDocLiteralType */:
return visitNode(cbNode, node.literal);
}
}
@@ -14462,7 +14497,7 @@ var ts;
return sourceFile;
}
function addJSDocComment(node) {
- var comments = ts.getJsDocCommentsFromText(node, sourceFile.text);
+ var comments = ts.getJSDocCommentRanges(node, sourceFile.text);
if (comments) {
for (var _i = 0, comments_2 = comments; _i < comments_2.length; _i++) {
var comment = comments_2[_i];
@@ -14470,10 +14505,10 @@ var ts;
if (!jsDoc) {
continue;
}
- if (!node.jsDocComments) {
- node.jsDocComments = [];
+ if (!node.jsDoc) {
+ node.jsDoc = [];
}
- node.jsDocComments.push(jsDoc);
+ node.jsDoc.push(jsDoc);
}
}
return node;
@@ -14495,12 +14530,12 @@ var ts;
var saveParent = parent;
parent = n;
forEachChild(n, visitNode);
- if (n.jsDocComments) {
- for (var _i = 0, _a = n.jsDocComments; _i < _a.length; _i++) {
- var jsDocComment = _a[_i];
- jsDocComment.parent = n;
- parent = jsDocComment;
- forEachChild(jsDocComment, visitNode);
+ if (n.jsDoc) {
+ for (var _i = 0, _a = n.jsDoc; _i < _a.length; _i++) {
+ var jsDoc = _a[_i];
+ jsDoc.parent = n;
+ parent = jsDoc;
+ forEachChild(jsDoc, visitNode);
}
}
parent = saveParent;
@@ -18524,8 +18559,8 @@ var ts;
}
if (decorators || modifiers) {
// treat this as a property declaration with a missing name.
- var name_14 = createMissingNode(70 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
- return parsePropertyDeclaration(fullStart, decorators, modifiers, name_14, /*questionToken*/ undefined);
+ var name_13 = createMissingNode(70 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+ return parsePropertyDeclaration(fullStart, decorators, modifiers, name_13, /*questionToken*/ undefined);
}
// 'isClassMemberStart' should have hinted not to attempt parsing.
ts.Debug.fail("Should not have attempted to parse class member declaration.");
@@ -19276,7 +19311,7 @@ var ts;
return finishNode(result);
}
function parseJSDocLiteralType() {
- var result = createNode(287 /* JSDocLiteralType */);
+ var result = createNode(288 /* JSDocLiteralType */);
result.literal = parseLiteralTypeNode();
return finishNode(result);
}
@@ -19486,6 +19521,9 @@ var ts;
var tag;
if (tagName) {
switch (tagName.text) {
+ case "augments":
+ tag = parseAugmentsTag(atToken, tagName);
+ break;
case "param":
tag = parseParamTag(atToken, tagName);
break;
@@ -19633,7 +19671,7 @@ var ts;
if (!typeExpression) {
typeExpression = tryParseTypeExpression();
}
- var result = createNode(280 /* JSDocParameterTag */, atToken.pos);
+ var result = createNode(281 /* JSDocParameterTag */, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.preParameterName = preName;
@@ -19644,20 +19682,20 @@ var ts;
return finishNode(result);
}
function parseReturnTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 281 /* JSDocReturnTag */; })) {
+ if (ts.forEach(tags, function (t) { return t.kind === 282 /* JSDocReturnTag */; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
}
- var result = createNode(281 /* JSDocReturnTag */, atToken.pos);
+ var result = createNode(282 /* JSDocReturnTag */, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeExpression = tryParseTypeExpression();
return finishNode(result);
}
function parseTypeTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 282 /* JSDocTypeTag */; })) {
+ if (ts.forEach(tags, function (t) { return t.kind === 283 /* JSDocTypeTag */; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
}
- var result = createNode(282 /* JSDocTypeTag */, atToken.pos);
+ var result = createNode(283 /* JSDocTypeTag */, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeExpression = tryParseTypeExpression();
@@ -19672,17 +19710,25 @@ var ts;
parseErrorAtPosition(scanner.getStartPos(), /*length*/ 0, ts.Diagnostics.Identifier_expected);
return undefined;
}
- var result = createNode(285 /* JSDocPropertyTag */, atToken.pos);
+ var result = createNode(286 /* JSDocPropertyTag */, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.name = name;
result.typeExpression = typeExpression;
return finishNode(result);
}
+ function parseAugmentsTag(atToken, tagName) {
+ var typeExpression = tryParseTypeExpression();
+ var result = createNode(280 /* JSDocAugmentsTag */, atToken.pos);
+ result.atToken = atToken;
+ result.tagName = tagName;
+ result.typeExpression = typeExpression;
+ return finishNode(result);
+ }
function parseTypedefTag(atToken, tagName) {
var typeExpression = tryParseTypeExpression();
skipWhitespace();
- var typedefTag = createNode(284 /* JSDocTypedefTag */, atToken.pos);
+ var typedefTag = createNode(285 /* JSDocTypedefTag */, atToken.pos);
typedefTag.atToken = atToken;
typedefTag.tagName = tagName;
typedefTag.fullName = parseJSDocTypeNameWithNamespace(/*flags*/ 0);
@@ -19699,8 +19745,8 @@ var ts;
if (typeExpression.type.kind === 272 /* JSDocTypeReference */) {
var jsDocTypeReference = typeExpression.type;
if (jsDocTypeReference.name.kind === 70 /* Identifier */) {
- var name_15 = jsDocTypeReference.name;
- if (name_15.text === "Object") {
+ var name_14 = jsDocTypeReference.name;
+ if (name_14.text === "Object") {
typedefTag.jsDocTypeLiteral = scanChildTags();
}
}
@@ -19714,7 +19760,7 @@ var ts;
}
return finishNode(typedefTag);
function scanChildTags() {
- var jsDocTypeLiteral = createNode(286 /* JSDocTypeLiteral */, scanner.getStartPos());
+ var jsDocTypeLiteral = createNode(287 /* JSDocTypeLiteral */, scanner.getStartPos());
var resumePos = scanner.getStartPos();
var canParseTag = true;
var seenAsterisk = false;
@@ -19801,20 +19847,20 @@ var ts;
return false;
}
function parseTemplateTag(atToken, tagName) {
- if (ts.forEach(tags, function (t) { return t.kind === 283 /* JSDocTemplateTag */; })) {
+ if (ts.forEach(tags, function (t) { return t.kind === 284 /* JSDocTemplateTag */; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text);
}
// Type parameter list looks like '@template T,U,V'
var typeParameters = createNodeArray();
while (true) {
- var name_16 = parseJSDocIdentifierName();
+ var name_15 = parseJSDocIdentifierName();
skipWhitespace();
- if (!name_16) {
+ if (!name_15) {
parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected);
return undefined;
}
- var typeParameter = createNode(143 /* TypeParameter */, name_16.pos);
- typeParameter.name = name_16;
+ var typeParameter = createNode(143 /* TypeParameter */, name_15.pos);
+ typeParameter.name = name_15;
finishNode(typeParameter);
typeParameters.push(typeParameter);
if (token() === 25 /* CommaToken */) {
@@ -19825,7 +19871,7 @@ var ts;
break;
}
}
- var result = createNode(283 /* JSDocTemplateTag */, atToken.pos);
+ var result = createNode(284 /* JSDocTemplateTag */, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeParameters = typeParameters;
@@ -19952,8 +19998,8 @@ var ts;
ts.Debug.assert(text === newText.substring(node.pos, node.end));
}
forEachChild(node, visitNode, visitArray);
- if (node.jsDocComments) {
- for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) {
+ if (node.jsDoc) {
+ for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
var jsDocComment = _a[_i];
forEachChild(jsDocComment, visitNode, visitArray);
}
@@ -20530,7 +20576,7 @@ var ts;
if (node.name.kind === 142 /* ComputedPropertyName */) {
var nameExpression = node.name.expression;
// treat computed property names where expression is string/numeric literal as just string/numeric literal
- if (ts.isStringOrNumericLiteral(nameExpression.kind)) {
+ if (ts.isStringOrNumericLiteral(nameExpression)) {
return nameExpression.text;
}
ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression));
@@ -20580,7 +20626,7 @@ var ts;
var functionType = node.parent;
var index = ts.indexOf(functionType.parameters, node);
return "arg" + index;
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
var parentNode = node.parent && node.parent.parent;
var nameFromParentNode = void 0;
if (parentNode && parentNode.kind === 205 /* VariableStatement */) {
@@ -20713,7 +20759,7 @@ var ts;
// during global merging in the checker. Why? The only case when ambient module is permitted inside another module is module augmentation
// and this case is specially handled. Module augmentations should only be merged with original module definition
// and should never be merged directly with other augmentation, and the latter case would be possible if automatic merge is allowed.
- var isJSDocTypedefInJSDocNamespace = node.kind === 284 /* JSDocTypedefTag */ &&
+ var isJSDocTypedefInJSDocNamespace = node.kind === 285 /* JSDocTypedefTag */ &&
node.name &&
node.name.kind === 70 /* Identifier */ &&
node.name.isInJSDocNamespace;
@@ -20845,15 +20891,38 @@ var ts;
subtreeTransformFlags = savedSubtreeTransformFlags | computeTransformFlagsForNode(node, subtreeTransformFlags);
}
}
+ function bindEach(nodes) {
+ if (nodes === undefined) {
+ return;
+ }
+ if (skipTransformFlagAggregation) {
+ ts.forEach(nodes, bind);
+ }
+ else {
+ var savedSubtreeTransformFlags = subtreeTransformFlags;
+ subtreeTransformFlags = 0 /* None */;
+ var nodeArrayFlags = 0 /* None */;
+ for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
+ var node = nodes_2[_i];
+ bind(node);
+ nodeArrayFlags |= node.transformFlags & ~536870912 /* HasComputedFlags */;
+ }
+ nodes.transformFlags = nodeArrayFlags | 536870912 /* HasComputedFlags */;
+ subtreeTransformFlags |= savedSubtreeTransformFlags;
+ }
+ }
+ function bindEachChild(node) {
+ ts.forEachChild(node, bind, bindEach);
+ }
function bindChildrenWorker(node) {
// Binding of JsDocComment should be done before the current block scope container changes.
// because the scope of JsDocComment should not be affected by whether the current node is a
// container or not.
- if (ts.isInJavaScriptFile(node) && node.jsDocComments) {
- ts.forEach(node.jsDocComments, bind);
+ if (ts.isInJavaScriptFile(node) && node.jsDoc) {
+ ts.forEach(node.jsDoc, bind);
}
if (checkUnreachable(node)) {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
return;
}
switch (node.kind) {
@@ -20918,7 +20987,7 @@ var ts;
bindCallExpressionFlow(node);
break;
default:
- ts.forEachChild(node, bind);
+ bindEachChild(node);
break;
}
}
@@ -21224,7 +21293,7 @@ var ts;
}
return undefined;
}
- function bindbreakOrContinueFlow(node, breakTarget, continueTarget) {
+ function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
var flowLabel = node.kind === 215 /* BreakStatement */ ? breakTarget : continueTarget;
if (flowLabel) {
addAntecedent(flowLabel, currentFlow);
@@ -21237,11 +21306,11 @@ var ts;
var activeLabel = findActiveLabel(node.label.text);
if (activeLabel) {
activeLabel.referenced = true;
- bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget);
+ bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget);
}
}
else {
- bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget);
+ bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget);
}
}
function bindTryStatement(node) {
@@ -21303,6 +21372,8 @@ var ts;
currentFlow = finishFlowLabel(postSwitchLabel);
}
function bindCaseBlock(node) {
+ var savedSubtreeTransformFlags = subtreeTransformFlags;
+ subtreeTransformFlags = 0;
var clauses = node.clauses;
var fallthroughFlow = unreachableFlow;
for (var i = 0; i < clauses.length; i++) {
@@ -21322,13 +21393,15 @@ var ts;
errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch);
}
}
+ clauses.transformFlags = subtreeTransformFlags | 536870912 /* HasComputedFlags */;
+ subtreeTransformFlags |= savedSubtreeTransformFlags;
}
function bindCaseClause(node) {
var saveCurrentFlow = currentFlow;
currentFlow = preSwitchCaseFlow;
bind(node.expression);
currentFlow = saveCurrentFlow;
- ts.forEach(node.statements, bind);
+ bindEach(node.statements);
}
function pushActiveLabel(name, breakTarget, continueTarget) {
var activeLabel = {
@@ -21415,19 +21488,19 @@ var ts;
var saveTrueTarget = currentTrueTarget;
currentTrueTarget = currentFalseTarget;
currentFalseTarget = saveTrueTarget;
- ts.forEachChild(node, bind);
+ bindEachChild(node);
currentFalseTarget = currentTrueTarget;
currentTrueTarget = saveTrueTarget;
}
else {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
if (node.operator === 42 /* PlusPlusToken */ || node.operator === 43 /* MinusMinusToken */) {
bindAssignmentTargetFlow(node.operand);
}
}
}
function bindPostfixUnaryExpressionFlow(node) {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
if (node.operator === 42 /* PlusPlusToken */ || node.operator === 43 /* MinusMinusToken */) {
bindAssignmentTargetFlow(node.operand);
}
@@ -21445,7 +21518,7 @@ var ts;
}
}
else {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
bindAssignmentTargetFlow(node.left);
if (operator === 57 /* EqualsToken */ && node.left.kind === 178 /* ElementAccessExpression */) {
@@ -21458,7 +21531,7 @@ var ts;
}
}
function bindDeleteExpressionFlow(node) {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
if (node.expression.kind === 177 /* PropertyAccessExpression */) {
bindAssignmentTargetFlow(node.expression);
}
@@ -21491,7 +21564,7 @@ var ts;
}
}
function bindVariableDeclarationFlow(node) {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
if (node.initializer || node.parent.parent.kind === 212 /* ForInStatement */ || node.parent.parent.kind === 213 /* ForOfStatement */) {
bindInitializedVariableFlow(node);
}
@@ -21505,12 +21578,12 @@ var ts;
expr = expr.expression;
}
if (expr.kind === 184 /* FunctionExpression */ || expr.kind === 185 /* ArrowFunction */) {
- ts.forEach(node.typeArguments, bind);
- ts.forEach(node.arguments, bind);
+ bindEach(node.typeArguments);
+ bindEach(node.arguments);
bind(node.expression);
}
else {
- ts.forEachChild(node, bind);
+ bindEachChild(node);
}
if (node.expression.kind === 177 /* PropertyAccessExpression */) {
var propertyAccess = node.expression;
@@ -21526,7 +21599,7 @@ var ts;
case 229 /* EnumDeclaration */:
case 176 /* ObjectLiteralExpression */:
case 161 /* TypeLiteral */:
- case 286 /* JSDocTypeLiteral */:
+ case 287 /* JSDocTypeLiteral */:
case 270 /* JSDocRecordType */:
return 1 /* IsContainer */;
case 227 /* InterfaceDeclaration */:
@@ -21616,7 +21689,7 @@ var ts;
case 176 /* ObjectLiteralExpression */:
case 227 /* InterfaceDeclaration */:
case 270 /* JSDocRecordType */:
- case 286 /* JSDocTypeLiteral */:
+ case 287 /* JSDocTypeLiteral */:
// Interface/Object-types always have their children added to the 'members' of
// their container. They are only accessible through an instance of their
// container, and are never in scope otherwise (even inside the body of the
@@ -21990,8 +22063,8 @@ var ts;
}
function updateStrictModeStatementList(statements) {
if (!inStrictMode) {
- for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
- var statement = statements_1[_i];
+ for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) {
+ var statement = statements_2[_i];
if (!ts.isPrologueDirective(statement)) {
return;
}
@@ -22018,7 +22091,7 @@ var ts;
// current "blockScopeContainer" needs to be set to its immediate namespace parent.
if (node.isInJSDocNamespace) {
var parentNode = node.parent;
- while (parentNode && parentNode.kind !== 284 /* JSDocTypedefTag */) {
+ while (parentNode && parentNode.kind !== 285 /* JSDocTypedefTag */) {
parentNode = parentNode.parent;
}
bindBlockScopedDeclaration(parentNode, 524288 /* TypeAlias */, 793064 /* TypeAliasExcludes */);
@@ -22089,7 +22162,7 @@ var ts;
case 146 /* PropertySignature */:
case 271 /* JSDocRecordMember */:
return bindPropertyOrMethodOrAccessor(node, 4 /* Property */ | (node.questionToken ? 536870912 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */);
- case 285 /* JSDocPropertyTag */:
+ case 286 /* JSDocPropertyTag */:
return bindJSDocProperty(node);
case 257 /* PropertyAssignment */:
case 258 /* ShorthandPropertyAssignment */:
@@ -22137,7 +22210,7 @@ var ts;
return bindFunctionOrConstructorType(node);
case 161 /* TypeLiteral */:
case 170 /* MappedType */:
- case 286 /* JSDocTypeLiteral */:
+ case 287 /* JSDocTypeLiteral */:
case 270 /* JSDocRecordType */:
return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type");
case 176 /* ObjectLiteralExpression */:
@@ -22158,7 +22231,7 @@ var ts;
return bindClassLikeDeclaration(node);
case 227 /* InterfaceDeclaration */:
return bindBlockScopedDeclaration(node, 64 /* Interface */, 792968 /* InterfaceExcludes */);
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
if (!node.fullName || node.fullName.kind === 70 /* Identifier */) {
return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 793064 /* TypeAliasExcludes */);
}
@@ -22238,12 +22311,12 @@ var ts;
return;
}
else {
- var parent_5 = node.parent;
- if (!ts.isExternalModule(parent_5)) {
+ var parent_4 = node.parent;
+ if (!ts.isExternalModule(parent_4)) {
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files));
return;
}
- if (!parent_5.isDeclarationFile) {
+ if (!parent_4.isDeclarationFile) {
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files));
return;
}
@@ -22591,14 +22664,14 @@ var ts;
if (node.typeArguments) {
transformFlags |= 3 /* AssertTypeScript */;
}
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */
+ if (subtreeFlags & 524288 /* ContainsSpread */
|| isSuperOrSuperProperty(expression, expressionKind)) {
// If the this node contains a SpreadExpression, or is a super call, then it is an ES6
// node.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~545281365 /* ArrayLiteralOrCallOrNewExcludes */;
+ return transformFlags & ~537396545 /* ArrayLiteralOrCallOrNewExcludes */;
}
function isSuperOrSuperProperty(node, kind) {
switch (kind) {
@@ -22617,13 +22690,13 @@ var ts;
if (node.typeArguments) {
transformFlags |= 3 /* AssertTypeScript */;
}
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
+ if (subtreeFlags & 524288 /* ContainsSpread */) {
// If the this node contains a SpreadElementExpression then it is an ES6
// node.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~545281365 /* ArrayLiteralOrCallOrNewExcludes */;
+ return transformFlags & ~537396545 /* ArrayLiteralOrCallOrNewExcludes */;
}
function computeBinaryExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22632,19 +22705,19 @@ var ts;
if (operatorTokenKind === 57 /* EqualsToken */ && leftKind === 176 /* ObjectLiteralExpression */) {
// Destructuring object assignments with are ES2015 syntax
// and possibly ESNext if they contain rest
- transformFlags |= 48 /* AssertESNext */ | 3072 /* AssertES2015 */ | 49152 /* AssertDestructuringAssignment */;
+ transformFlags |= 8 /* AssertESNext */ | 192 /* AssertES2015 */ | 3072 /* AssertDestructuringAssignment */;
}
else if (operatorTokenKind === 57 /* EqualsToken */ && leftKind === 175 /* ArrayLiteralExpression */) {
// Destructuring assignments are ES2015 syntax.
- transformFlags |= 3072 /* AssertES2015 */ | 49152 /* AssertDestructuringAssignment */;
+ transformFlags |= 192 /* AssertES2015 */ | 3072 /* AssertDestructuringAssignment */;
}
else if (operatorTokenKind === 39 /* AsteriskAsteriskToken */
|| operatorTokenKind === 61 /* AsteriskAsteriskEqualsToken */) {
// Exponentiation is ES2016 syntax.
- transformFlags |= 768 /* AssertES2016 */;
+ transformFlags |= 32 /* AssertES2016 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeParameter(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22656,25 +22729,25 @@ var ts;
// syntax.
if (node.questionToken
|| node.type
- || subtreeFlags & 65536 /* ContainsDecorators */
+ || subtreeFlags & 4096 /* ContainsDecorators */
|| ts.isThisIdentifier(name)) {
transformFlags |= 3 /* AssertTypeScript */;
}
// If a parameter has an accessibility modifier, then it is TypeScript syntax.
if (modifierFlags & 92 /* ParameterPropertyModifier */) {
- transformFlags |= 3 /* AssertTypeScript */ | 4194304 /* ContainsParameterPropertyAssignments */;
+ transformFlags |= 3 /* AssertTypeScript */ | 262144 /* ContainsParameterPropertyAssignments */;
}
// parameters with object rest destructuring are ES Next syntax
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
- transformFlags |= 48 /* AssertESNext */;
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
}
// If a parameter has an initializer, a binding pattern or a dotDotDot token, then
// it is ES6 syntax and its container must emit default value assignments or parameter destructuring downlevel.
- if (subtreeFlags & 67108864 /* ContainsBindingPattern */ || initializer || dotDotDotToken) {
- transformFlags |= 3072 /* AssertES2015 */ | 2097152 /* ContainsDefaultValueAssignments */;
+ if (subtreeFlags & 8388608 /* ContainsBindingPattern */ || initializer || dotDotDotToken) {
+ transformFlags |= 192 /* AssertES2015 */ | 131072 /* ContainsDefaultValueAssignments */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~604001621 /* ParameterExcludes */;
+ return transformFlags & ~536872257 /* ParameterExcludes */;
}
function computeParenthesizedExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22690,11 +22763,11 @@ var ts;
}
// If the expression of a ParenthesizedExpression is a destructuring assignment,
// then the ParenthesizedExpression is a destructuring assignment.
- if (expressionTransformFlags & 16384 /* DestructuringAssignment */) {
- transformFlags |= 16384 /* DestructuringAssignment */;
+ if (expressionTransformFlags & 1024 /* DestructuringAssignment */) {
+ transformFlags |= 1024 /* DestructuringAssignment */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeClassDeclaration(node, subtreeFlags) {
var transformFlags;
@@ -22705,47 +22778,47 @@ var ts;
}
else {
// A ClassDeclaration is ES6 syntax.
- transformFlags = subtreeFlags | 3072 /* AssertES2015 */;
+ transformFlags = subtreeFlags | 192 /* AssertES2015 */;
// A class with a parameter property assignment, property initializer, or decorator is
// TypeScript syntax.
// An exported declaration may be TypeScript syntax, but is handled by the visitor
// for a namespace declaration.
- if ((subtreeFlags & 4390912 /* TypeScriptClassSyntaxMask */)
+ if ((subtreeFlags & 274432 /* TypeScriptClassSyntaxMask */)
|| node.typeParameters) {
transformFlags |= 3 /* AssertTypeScript */;
}
- if (subtreeFlags & 1048576 /* ContainsLexicalThisInComputedPropertyName */) {
+ if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) {
// A computed property name containing `this` might need to be rewritten,
// so propagate the ContainsLexicalThis flag upward.
- transformFlags |= 262144 /* ContainsLexicalThis */;
+ transformFlags |= 16384 /* ContainsLexicalThis */;
}
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~559895893 /* ClassExcludes */;
+ return transformFlags & ~539358529 /* ClassExcludes */;
}
function computeClassExpression(node, subtreeFlags) {
// A ClassExpression is ES6 syntax.
- var transformFlags = subtreeFlags | 3072 /* AssertES2015 */;
+ var transformFlags = subtreeFlags | 192 /* AssertES2015 */;
// A class with a parameter property assignment, property initializer, or decorator is
// TypeScript syntax.
- if (subtreeFlags & 4390912 /* TypeScriptClassSyntaxMask */
+ if (subtreeFlags & 274432 /* TypeScriptClassSyntaxMask */
|| node.typeParameters) {
transformFlags |= 3 /* AssertTypeScript */;
}
- if (subtreeFlags & 1048576 /* ContainsLexicalThisInComputedPropertyName */) {
+ if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) {
// A computed property name containing `this` might need to be rewritten,
// so propagate the ContainsLexicalThis flag upward.
- transformFlags |= 262144 /* ContainsLexicalThis */;
+ transformFlags |= 16384 /* ContainsLexicalThis */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~559895893 /* ClassExcludes */;
+ return transformFlags & ~539358529 /* ClassExcludes */;
}
function computeHeritageClause(node, subtreeFlags) {
var transformFlags = subtreeFlags;
switch (node.token) {
case 84 /* ExtendsKeyword */:
// An `extends` HeritageClause is ES6 syntax.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
break;
case 107 /* ImplementsKeyword */:
// An `implements` HeritageClause is TypeScript syntax.
@@ -22756,27 +22829,27 @@ var ts;
break;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeCatchClause(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (node.variableDeclaration && ts.isBindingPattern(node.variableDeclaration.name)) {
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~537920833 /* CatchClauseExcludes */;
}
function computeExpressionWithTypeArguments(node, subtreeFlags) {
// An ExpressionWithTypeArguments is ES6 syntax, as it is used in the
// extends clause of a class.
- var transformFlags = subtreeFlags | 3072 /* AssertES2015 */;
+ var transformFlags = subtreeFlags | 192 /* AssertES2015 */;
// If an ExpressionWithTypeArguments contains type arguments, then it
// is TypeScript syntax.
if (node.typeArguments) {
transformFlags |= 3 /* AssertTypeScript */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeConstructor(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22785,12 +22858,16 @@ var ts;
|| !node.body) {
transformFlags |= 3 /* AssertTypeScript */;
}
+ // function declarations with object rest destructuring are ES Next syntax
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
+ }
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~975983957 /* ConstructorExcludes */;
+ return transformFlags & ~601015617 /* ConstructorExcludes */;
}
function computeMethod(node, subtreeFlags) {
// A MethodDeclaration is ES6 syntax.
- var transformFlags = subtreeFlags | 3072 /* AssertES2015 */;
+ var transformFlags = subtreeFlags | 192 /* AssertES2015 */;
// Decorators, TypeScript-specific modifiers, type parameters, type annotations, and
// overloads are TypeScript syntax.
if (node.decorators
@@ -22800,16 +22877,20 @@ var ts;
|| !node.body) {
transformFlags |= 3 /* AssertTypeScript */;
}
+ // function declarations with object rest destructuring are ES Next syntax
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
+ }
// An async method declaration is ES2017 syntax.
if (ts.hasModifier(node, 256 /* Async */)) {
- transformFlags |= 192 /* AssertES2017 */;
+ transformFlags |= 16 /* AssertES2017 */;
}
// Currently, we only support generators that were originally async function bodies.
- if (node.asteriskToken && ts.getEmitFlags(node) & 2097152 /* AsyncFunctionBody */) {
- transformFlags |= 12288 /* AssertGenerator */;
+ if (node.asteriskToken && ts.getEmitFlags(node) & 131072 /* AsyncFunctionBody */) {
+ transformFlags |= 768 /* AssertGenerator */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~975983957 /* MethodOrAccessorExcludes */;
+ return transformFlags & ~601015617 /* MethodOrAccessorExcludes */;
}
function computeAccessor(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22821,8 +22902,12 @@ var ts;
|| !node.body) {
transformFlags |= 3 /* AssertTypeScript */;
}
+ // function declarations with object rest destructuring are ES Next syntax
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
+ }
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~975983957 /* MethodOrAccessorExcludes */;
+ return transformFlags & ~601015617 /* MethodOrAccessorExcludes */;
}
function computePropertyDeclaration(node, subtreeFlags) {
// A PropertyDeclaration is TypeScript syntax.
@@ -22830,10 +22915,10 @@ var ts;
// If the PropertyDeclaration has an initializer, we need to inform its ancestor
// so that it handle the transformation.
if (node.initializer) {
- transformFlags |= 131072 /* ContainsPropertyInitializer */;
+ transformFlags |= 8192 /* ContainsPropertyInitializer */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeFunctionDeclaration(node, subtreeFlags) {
var transformFlags;
@@ -22845,7 +22930,7 @@ var ts;
transformFlags = 3 /* AssertTypeScript */;
}
else {
- transformFlags = subtreeFlags | 268435456 /* ContainsHoistedDeclarationOrCompletion */;
+ transformFlags = subtreeFlags | 33554432 /* ContainsHoistedDeclarationOrCompletion */;
// TypeScript-specific modifiers, type parameters, and type annotations are TypeScript
// syntax.
if (modifierFlags & 2270 /* TypeScriptModifier */
@@ -22855,29 +22940,29 @@ var ts;
}
// An async function declaration is ES2017 syntax.
if (modifierFlags & 256 /* Async */) {
- transformFlags |= 192 /* AssertES2017 */;
+ transformFlags |= 16 /* AssertES2017 */;
}
// function declarations with object rest destructuring are ES Next syntax
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
- transformFlags |= 48 /* AssertESNext */;
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
}
// If a FunctionDeclaration's subtree has marked the container as needing to capture the
// lexical this, or the function contains parameters with initializers, then this node is
// ES6 syntax.
- if (subtreeFlags & 2621440 /* ES2015FunctionSyntaxMask */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (subtreeFlags & 163840 /* ES2015FunctionSyntaxMask */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
// If a FunctionDeclaration is generator function and is the body of a
// transformed async function, then this node can be transformed to a
// down-level generator.
// Currently we do not support transforming any other generator fucntions
// down level.
- if (node.asteriskToken && ts.getEmitFlags(node) & 2097152 /* AsyncFunctionBody */) {
- transformFlags |= 12288 /* AssertGenerator */;
+ if (node.asteriskToken && ts.getEmitFlags(node) & 131072 /* AsyncFunctionBody */) {
+ transformFlags |= 768 /* AssertGenerator */;
}
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~980243797 /* FunctionExcludes */;
+ return transformFlags & ~601281857 /* FunctionExcludes */;
}
function computeFunctionExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22890,32 +22975,32 @@ var ts;
}
// An async function expression is ES2017 syntax.
if (ts.hasModifier(node, 256 /* Async */)) {
- transformFlags |= 192 /* AssertES2017 */;
+ transformFlags |= 16 /* AssertES2017 */;
}
// function expressions with object rest destructuring are ES Next syntax
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
- transformFlags |= 48 /* AssertESNext */;
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
}
// If a FunctionExpression's subtree has marked the container as needing to capture the
// lexical this, or the function contains parameters with initializers, then this node is
// ES6 syntax.
- if (subtreeFlags & 2621440 /* ES2015FunctionSyntaxMask */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (subtreeFlags & 163840 /* ES2015FunctionSyntaxMask */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
// If a FunctionExpression is generator function and is the body of a
// transformed async function, then this node can be transformed to a
// down-level generator.
// Currently we do not support transforming any other generator fucntions
// down level.
- if (node.asteriskToken && ts.getEmitFlags(node) & 2097152 /* AsyncFunctionBody */) {
- transformFlags |= 12288 /* AssertGenerator */;
+ if (node.asteriskToken && ts.getEmitFlags(node) & 131072 /* AsyncFunctionBody */) {
+ transformFlags |= 768 /* AssertGenerator */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~980243797 /* FunctionExcludes */;
+ return transformFlags & ~601281857 /* FunctionExcludes */;
}
function computeArrowFunction(node, subtreeFlags) {
// An ArrowFunction is ES6 syntax, and excludes markers that should not escape the scope of an ArrowFunction.
- var transformFlags = subtreeFlags | 3072 /* AssertES2015 */;
+ var transformFlags = subtreeFlags | 192 /* AssertES2015 */;
// TypeScript-specific modifiers, type parameters, and type annotations are TypeScript
// syntax.
if (ts.hasModifier(node, 2270 /* TypeScriptModifier */)
@@ -22925,18 +23010,18 @@ var ts;
}
// An async arrow function is ES2017 syntax.
if (ts.hasModifier(node, 256 /* Async */)) {
- transformFlags |= 192 /* AssertES2017 */;
+ transformFlags |= 16 /* AssertES2017 */;
}
// arrow functions with object rest destructuring are ES Next syntax
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
- transformFlags |= 48 /* AssertESNext */;
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
}
// If an ArrowFunction contains a lexical this, its container must capture the lexical this.
- if (subtreeFlags & 262144 /* ContainsLexicalThis */) {
- transformFlags |= 524288 /* ContainsCapturedLexicalThis */;
+ if (subtreeFlags & 16384 /* ContainsLexicalThis */) {
+ transformFlags |= 32768 /* ContainsCapturedLexicalThis */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~979719509 /* ArrowFunctionExcludes */;
+ return transformFlags & ~601249089 /* ArrowFunctionExcludes */;
}
function computePropertyAccess(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -22945,28 +23030,24 @@ var ts;
// If a PropertyAccessExpression starts with a super keyword, then it is
// ES6 syntax, and requires a lexical `this` binding.
if (expressionKind === 96 /* SuperKeyword */) {
- transformFlags |= 262144 /* ContainsLexicalThis */;
+ transformFlags |= 16384 /* ContainsLexicalThis */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeVariableDeclaration(node, subtreeFlags) {
var transformFlags = subtreeFlags;
- var nameKind = node.name.kind;
- // A VariableDeclaration with an object binding pattern is ES2015 syntax
- // and possibly ESNext syntax if it contains an object binding pattern
- if (nameKind === 172 /* ObjectBindingPattern */) {
- transformFlags |= 48 /* AssertESNext */ | 3072 /* AssertES2015 */ | 67108864 /* ContainsBindingPattern */;
- }
- else if (nameKind === 173 /* ArrayBindingPattern */) {
- transformFlags |= 3072 /* AssertES2015 */ | 67108864 /* ContainsBindingPattern */;
+ transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */;
+ // A VariableDeclaration containing ObjectRest is ESNext syntax
+ if (subtreeFlags & 1048576 /* ContainsObjectRest */) {
+ transformFlags |= 8 /* AssertESNext */;
}
// Type annotations are TypeScript syntax.
if (node.type) {
transformFlags |= 3 /* AssertTypeScript */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeVariableStatement(node, subtreeFlags) {
var transformFlags;
@@ -22978,22 +23059,22 @@ var ts;
}
else {
transformFlags = subtreeFlags;
- if (declarationListTransformFlags & 67108864 /* ContainsBindingPattern */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (declarationListTransformFlags & 8388608 /* ContainsBindingPattern */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeLabeledStatement(node, subtreeFlags) {
var transformFlags = subtreeFlags;
// A labeled statement containing a block scoped binding *may* need to be transformed from ES6.
- if (subtreeFlags & 33554432 /* ContainsBlockScopedBinding */
+ if (subtreeFlags & 4194304 /* ContainsBlockScopedBinding */
&& ts.isIterationStatement(node, /*lookInLabeledStatements*/ true)) {
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeImportEquals(node, subtreeFlags) {
var transformFlags = subtreeFlags;
@@ -23002,18 +23083,18 @@ var ts;
transformFlags |= 3 /* AssertTypeScript */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeExpressionStatement(node, subtreeFlags) {
var transformFlags = subtreeFlags;
// If the expression of an expression statement is a destructuring assignment,
// then we treat the statement as ES6 so that we can indicate that we do not
// need to hold on to the right-hand side.
- if (node.expression.transformFlags & 16384 /* DestructuringAssignment */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (node.expression.transformFlags & 1024 /* DestructuringAssignment */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~536892757 /* NodeExcludes */;
+ return transformFlags & ~536872257 /* NodeExcludes */;
}
function computeModuleDeclaration(node, subtreeFlags) {
var transformFlags = 3 /* AssertTypeScript */;
@@ -23022,29 +23103,29 @@ var ts;
transformFlags |= subtreeFlags;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~839734613 /* ModuleExcludes */;
+ return transformFlags & ~574674241 /* ModuleExcludes */;
}
function computeVariableDeclarationList(node, subtreeFlags) {
- var transformFlags = subtreeFlags | 268435456 /* ContainsHoistedDeclarationOrCompletion */;
- if (subtreeFlags & 67108864 /* ContainsBindingPattern */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ var transformFlags = subtreeFlags | 33554432 /* ContainsHoistedDeclarationOrCompletion */;
+ if (subtreeFlags & 8388608 /* ContainsBindingPattern */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
// If a VariableDeclarationList is `let` or `const`, then it is ES6 syntax.
if (node.flags & 3 /* BlockScoped */) {
- transformFlags |= 3072 /* AssertES2015 */ | 33554432 /* ContainsBlockScopedBinding */;
+ transformFlags |= 192 /* AssertES2015 */ | 4194304 /* ContainsBlockScopedBinding */;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
- return transformFlags & ~604001621 /* VariableDeclarationListExcludes */;
+ return transformFlags & ~546309441 /* VariableDeclarationListExcludes */;
}
function computeOther(node, kind, subtreeFlags) {
// Mark transformations needed for each node
var transformFlags = subtreeFlags;
- var excludeFlags = 536892757 /* NodeExcludes */;
+ var excludeFlags = 536872257 /* NodeExcludes */;
switch (kind) {
case 119 /* AsyncKeyword */:
case 189 /* AwaitExpression */:
// async/await is ES2017 syntax
- transformFlags |= 192 /* AssertES2017 */;
+ transformFlags |= 16 /* AssertES2017 */;
break;
case 113 /* PublicKeyword */:
case 111 /* PrivateKeyword */:
@@ -23070,11 +23151,11 @@ var ts;
case 251 /* JsxSpreadAttribute */:
case 252 /* JsxExpression */:
// These nodes are Jsx syntax.
- transformFlags |= 12 /* AssertJsx */;
+ transformFlags |= 4 /* AssertJsx */;
break;
case 213 /* ForOfStatement */:
// for-of might be ESNext if it has a rest destructuring
- transformFlags |= 48 /* AssertESNext */;
+ transformFlags |= 8 /* AssertESNext */;
// FALLTHROUGH
case 12 /* NoSubstitutionTemplateLiteral */:
case 13 /* TemplateHead */:
@@ -23085,11 +23166,11 @@ var ts;
case 258 /* ShorthandPropertyAssignment */:
case 114 /* StaticKeyword */:
// These nodes are ES6 syntax.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
break;
case 195 /* YieldExpression */:
// This node is ES6 syntax.
- transformFlags |= 3072 /* AssertES2015 */ | 134217728 /* ContainsYield */;
+ transformFlags |= 192 /* AssertES2015 */ | 16777216 /* ContainsYield */;
break;
case 118 /* AnyKeyword */:
case 132 /* NumberKeyword */:
@@ -23130,8 +23211,8 @@ var ts;
// Even though computed property names are ES6, we don't treat them as such.
// This is so that they can flow through PropertyName transforms unaffected.
// Instead, we mark the container as ES6, so that it can properly handle the transform.
- transformFlags |= 16777216 /* ContainsComputedPropertyName */;
- if (subtreeFlags & 262144 /* ContainsLexicalThis */) {
+ transformFlags |= 2097152 /* ContainsComputedPropertyName */;
+ if (subtreeFlags & 16384 /* ContainsLexicalThis */) {
// A computed method name like `[this.getName()](x: string) { ... }` needs to
// distinguish itself from the normal case of a method body containing `this`:
// `this` inside a method doesn't need to be rewritten (the method provides `this`),
@@ -23140,66 +23221,69 @@ var ts;
// `_this = this; () => class K { [_this.getName()]() { ... } }`
// To make this distinction, use ContainsLexicalThisInComputedPropertyName
// instead of ContainsLexicalThis for computed property names
- transformFlags |= 1048576 /* ContainsLexicalThisInComputedPropertyName */;
+ transformFlags |= 65536 /* ContainsLexicalThisInComputedPropertyName */;
}
break;
case 196 /* SpreadElement */:
+ transformFlags |= 192 /* AssertES2015 */ | 524288 /* ContainsSpread */;
+ break;
case 259 /* SpreadAssignment */:
- // This node is ES6 or ES next syntax, but is handled by a containing node.
- transformFlags |= 8388608 /* ContainsSpreadExpression */;
+ transformFlags |= 8 /* AssertESNext */ | 1048576 /* ContainsObjectSpread */;
break;
- case 174 /* BindingElement */:
- if (node.dotDotDotToken) {
- // this node is ES2015 or ES next syntax, but is handled by a containing node.
- transformFlags |= 8388608 /* ContainsSpreadExpression */;
- }
case 96 /* SuperKeyword */:
// This node is ES6 syntax.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
break;
case 98 /* ThisKeyword */:
// Mark this node and its ancestors as containing a lexical `this` keyword.
- transformFlags |= 262144 /* ContainsLexicalThis */;
+ transformFlags |= 16384 /* ContainsLexicalThis */;
break;
case 172 /* ObjectBindingPattern */:
- case 173 /* ArrayBindingPattern */:
- // These nodes are ES2015 or ES Next syntax.
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
- transformFlags |= 48 /* AssertESNext */ | 67108864 /* ContainsBindingPattern */;
+ transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */;
+ if (subtreeFlags & 524288 /* ContainsRest */) {
+ transformFlags |= 8 /* AssertESNext */ | 1048576 /* ContainsObjectRest */;
}
- else {
- transformFlags |= 3072 /* AssertES2015 */ | 67108864 /* ContainsBindingPattern */;
+ excludeFlags = 537396545 /* BindingPatternExcludes */;
+ break;
+ case 173 /* ArrayBindingPattern */:
+ transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */;
+ excludeFlags = 537396545 /* BindingPatternExcludes */;
+ break;
+ case 174 /* BindingElement */:
+ transformFlags |= 192 /* AssertES2015 */;
+ if (node.dotDotDotToken) {
+ transformFlags |= 524288 /* ContainsRest */;
}
break;
case 145 /* Decorator */:
// This node is TypeScript syntax, and marks its container as also being TypeScript syntax.
- transformFlags |= 3 /* AssertTypeScript */ | 65536 /* ContainsDecorators */;
+ transformFlags |= 3 /* AssertTypeScript */ | 4096 /* ContainsDecorators */;
break;
case 176 /* ObjectLiteralExpression */:
- excludeFlags = 554784085 /* ObjectLiteralExcludes */;
- if (subtreeFlags & 16777216 /* ContainsComputedPropertyName */) {
+ excludeFlags = 540087617 /* ObjectLiteralExcludes */;
+ if (subtreeFlags & 2097152 /* ContainsComputedPropertyName */) {
// If an ObjectLiteralExpression contains a ComputedPropertyName, then it
// is an ES6 node.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
- if (subtreeFlags & 1048576 /* ContainsLexicalThisInComputedPropertyName */) {
+ if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) {
// A computed property name containing `this` might need to be rewritten,
// so propagate the ContainsLexicalThis flag upward.
- transformFlags |= 262144 /* ContainsLexicalThis */;
+ transformFlags |= 16384 /* ContainsLexicalThis */;
}
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
+ if (subtreeFlags & 1048576 /* ContainsObjectSpread */) {
// If an ObjectLiteralExpression contains a spread element, then it
// is an ES next node.
- transformFlags |= 48 /* AssertESNext */;
+ transformFlags |= 8 /* AssertESNext */;
}
break;
case 175 /* ArrayLiteralExpression */:
case 180 /* NewExpression */:
- excludeFlags = 545281365 /* ArrayLiteralOrCallOrNewExcludes */;
- if (subtreeFlags & 8388608 /* ContainsSpreadExpression */) {
+ excludeFlags = 537396545 /* ArrayLiteralOrCallOrNewExcludes */;
+ if (subtreeFlags & 524288 /* ContainsSpread */) {
// If the this node contains a SpreadExpression, then it is an ES6
// node.
- transformFlags |= 3072 /* AssertES2015 */;
+ transformFlags |= 192 /* AssertES2015 */;
}
break;
case 209 /* DoStatement */:
@@ -23207,19 +23291,19 @@ var ts;
case 211 /* ForStatement */:
case 212 /* ForInStatement */:
// A loop containing a block scoped binding *may* need to be transformed from ES6.
- if (subtreeFlags & 33554432 /* ContainsBlockScopedBinding */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (subtreeFlags & 4194304 /* ContainsBlockScopedBinding */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
break;
case 261 /* SourceFile */:
- if (subtreeFlags & 524288 /* ContainsCapturedLexicalThis */) {
- transformFlags |= 3072 /* AssertES2015 */;
+ if (subtreeFlags & 32768 /* ContainsCapturedLexicalThis */) {
+ transformFlags |= 192 /* AssertES2015 */;
}
break;
case 216 /* ReturnStatement */:
case 214 /* ContinueStatement */:
case 215 /* BreakStatement */:
- transformFlags |= 268435456 /* ContainsHoistedDeclarationOrCompletion */;
+ transformFlags |= 33554432 /* ContainsHoistedDeclarationOrCompletion */;
break;
}
node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */;
@@ -23241,27 +23325,27 @@ var ts;
case 179 /* CallExpression */:
case 180 /* NewExpression */:
case 175 /* ArrayLiteralExpression */:
- return 545281365 /* ArrayLiteralOrCallOrNewExcludes */;
+ return 537396545 /* ArrayLiteralOrCallOrNewExcludes */;
case 230 /* ModuleDeclaration */:
- return 839734613 /* ModuleExcludes */;
+ return 574674241 /* ModuleExcludes */;
case 144 /* Parameter */:
- return 604001621 /* ParameterExcludes */;
+ return 536872257 /* ParameterExcludes */;
case 185 /* ArrowFunction */:
- return 979719509 /* ArrowFunctionExcludes */;
+ return 601249089 /* ArrowFunctionExcludes */;
case 184 /* FunctionExpression */:
case 225 /* FunctionDeclaration */:
- return 980243797 /* FunctionExcludes */;
+ return 601281857 /* FunctionExcludes */;
case 224 /* VariableDeclarationList */:
- return 604001621 /* VariableDeclarationListExcludes */;
+ return 546309441 /* VariableDeclarationListExcludes */;
case 226 /* ClassDeclaration */:
case 197 /* ClassExpression */:
- return 559895893 /* ClassExcludes */;
+ return 539358529 /* ClassExcludes */;
case 150 /* Constructor */:
- return 975983957 /* ConstructorExcludes */;
+ return 601015617 /* ConstructorExcludes */;
case 149 /* MethodDeclaration */:
case 151 /* GetAccessor */:
case 152 /* SetAccessor */:
- return 975983957 /* MethodOrAccessorExcludes */;
+ return 601015617 /* MethodOrAccessorExcludes */;
case 118 /* AnyKeyword */:
case 132 /* NumberKeyword */:
case 129 /* NeverKeyword */:
@@ -23279,9 +23363,14 @@ var ts;
case 228 /* TypeAliasDeclaration */:
return -3 /* TypeExcludes */;
case 176 /* ObjectLiteralExpression */:
- return 554784085 /* ObjectLiteralExcludes */;
+ return 540087617 /* ObjectLiteralExcludes */;
+ case 256 /* CatchClause */:
+ return 537920833 /* CatchClauseExcludes */;
+ case 172 /* ObjectBindingPattern */:
+ case 173 /* ArrayBindingPattern */:
+ return 537396545 /* BindingPatternExcludes */;
default:
- return 536892757 /* NodeExcludes */;
+ return 536872257 /* NodeExcludes */;
}
}
ts.getTransformFlagsSubtreeExclusions = getTransformFlagsSubtreeExclusions;
@@ -23332,6 +23421,7 @@ var ts;
function moduleHasNonRelativeName(moduleName) {
return !(ts.isRootedDiskPath(moduleName) || ts.isExternalModuleNameRelative(moduleName));
}
+ ts.moduleHasNonRelativeName = moduleHasNonRelativeName;
function tryReadTypesSection(extensions, packageJsonPath, baseDirectory, state) {
var jsonContent = readJson(packageJsonPath, state.host);
switch (extensions) {
@@ -24100,6 +24190,7 @@ var ts;
getJsxElementAttributesType: getJsxElementAttributesType,
getJsxIntrinsicTagNames: getJsxIntrinsicTagNames,
isOptionalParameter: isOptionalParameter,
+ tryGetMemberInModuleExports: tryGetMemberInModuleExports,
tryFindAmbientModuleWithoutAugmentations: function (moduleName) {
// we deliberately exclude augmentations
// since we are only interested in declarations of the module itself
@@ -24111,6 +24202,7 @@ var ts;
var intersectionTypes = ts.createMap();
var stringLiteralTypes = ts.createMap();
var numericLiteralTypes = ts.createMap();
+ var indexedAccessTypes = ts.createMap();
var evolvingArrayTypes = [];
var unknownSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "unknown");
var resolvingSymbol = createSymbol(67108864 /* Transient */, "__resolving__");
@@ -24130,7 +24222,6 @@ var ts;
var voidType = createIntrinsicType(1024 /* Void */, "void");
var neverType = createIntrinsicType(8192 /* Never */, "never");
var silentNeverType = createIntrinsicType(8192 /* Never */, "never");
- var stringOrNumberType = getUnionType([stringType, numberType]);
var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */ | 67108864 /* Transient */, "__type");
emptyTypeLiteralSymbol.members = ts.createMap();
@@ -24853,6 +24944,7 @@ var ts;
if (!errorLocation ||
!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) &&
!checkAndReportErrorForExtendingInterface(errorLocation) &&
+ !checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) &&
!checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning)) {
error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
}
@@ -24951,6 +25043,16 @@ var ts;
return undefined;
}
}
+ function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) {
+ if (meaning === 1920 /* Namespace */) {
+ var symbol = resolveSymbol(resolveName(errorLocation, name, 793064 /* Type */ & ~107455 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined));
+ if (symbol) {
+ error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here, name);
+ return true;
+ }
+ }
+ return false;
+ }
function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) {
if (meaning & (107455 /* Value */ & ~1024 /* NamespaceModule */)) {
var symbol = resolveSymbol(resolveName(errorLocation, name, 793064 /* Type */ & ~107455 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined));
@@ -25079,31 +25181,31 @@ var ts;
var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier);
if (targetSymbol) {
- var name_17 = specifier.propertyName || specifier.name;
- if (name_17.text) {
+ var name_16 = specifier.propertyName || specifier.name;
+ if (name_16.text) {
if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) {
return moduleSymbol;
}
var symbolFromVariable = void 0;
// First check if module was specified with "export=". If so, get the member from the resolved type
if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) {
- symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_17.text);
+ symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_16.text);
}
else {
- symbolFromVariable = getPropertyOfVariable(targetSymbol, name_17.text);
+ symbolFromVariable = getPropertyOfVariable(targetSymbol, name_16.text);
}
// if symbolFromVariable is export - get its final target
symbolFromVariable = resolveSymbol(symbolFromVariable);
- var symbolFromModule = getExportOfModule(targetSymbol, name_17.text);
+ var symbolFromModule = getExportOfModule(targetSymbol, name_16.text);
// If the export member we're looking for is default, and there is no real default but allowSyntheticDefaultImports is on, return the entire module as the default
- if (!symbolFromModule && allowSyntheticDefaultImports && name_17.text === "default") {
+ if (!symbolFromModule && allowSyntheticDefaultImports && name_16.text === "default") {
symbolFromModule = resolveExternalModuleSymbol(moduleSymbol) || resolveSymbol(moduleSymbol);
}
var symbol = symbolFromModule && symbolFromVariable ?
combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
symbolFromModule || symbolFromVariable;
if (!symbol) {
- error(name_17, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_17));
+ error(name_16, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_16));
}
return symbol;
}
@@ -25357,6 +25459,12 @@ var ts;
function getExportsOfModuleAsArray(moduleSymbol) {
return symbolsToArray(getExportsOfModule(moduleSymbol));
}
+ function tryGetMemberInModuleExports(memberName, moduleSymbol) {
+ var symbolTable = getExportsOfModule(moduleSymbol);
+ if (symbolTable) {
+ return symbolTable[memberName];
+ }
+ }
function getExportsOfSymbol(symbol) {
return symbol.flags & 1536 /* Module */ ? getExportsOfModule(symbol) : symbol.exports || emptySymbols;
}
@@ -25967,9 +26075,9 @@ var ts;
if (!accessibleSymbolChain ||
needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
// Go up and add our parent.
- var parent_6 = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
- if (parent_6) {
- walkSymbol(parent_6, getQualifiedLeftMeaning(meaning), /*endOfChain*/ false);
+ var parent_5 = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
+ if (parent_5) {
+ walkSymbol(parent_5, getQualifiedLeftMeaning(meaning), /*endOfChain*/ false);
}
}
if (accessibleSymbolChain) {
@@ -26119,14 +26227,14 @@ var ts;
while (i < length_1) {
// Find group of type arguments for type parameters with the same declaring container.
var start = i;
- var parent_7 = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
+ var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
do {
i++;
- } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_7);
+ } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6);
// When type parameters are their own type arguments for the whole group (i.e. we have
// the default outer type arguments), we don't show the group.
if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) {
- writeSymbolTypeReference(parent_7, typeArguments, start, i, flags);
+ writeSymbolTypeReference(parent_6, typeArguments, start, i, flags);
writePunctuation(writer, 22 /* DotToken */);
}
}
@@ -26565,14 +26673,14 @@ var ts;
if (ts.isExternalModuleAugmentation(node)) {
return true;
}
- var parent_8 = getDeclarationContainer(node);
+ var parent_7 = getDeclarationContainer(node);
// If the node is not exported or it is not ambient module element (except import declaration)
if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
- !(node.kind !== 234 /* ImportEqualsDeclaration */ && parent_8.kind !== 261 /* SourceFile */ && ts.isInAmbientContext(parent_8))) {
- return isGlobalSourceFile(parent_8);
+ !(node.kind !== 234 /* ImportEqualsDeclaration */ && parent_7.kind !== 261 /* SourceFile */ && ts.isInAmbientContext(parent_7))) {
+ return isGlobalSourceFile(parent_7);
}
// Exported members/ambient module elements (exception import declaration) are visible if parent is visible
- return isDeclarationVisible(parent_8);
+ return isDeclarationVisible(parent_7);
case 147 /* PropertyDeclaration */:
case 146 /* PropertySignature */:
case 151 /* GetAccessor */:
@@ -26757,15 +26865,15 @@ var ts;
return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false);
}
function isComputedNonLiteralName(name) {
- return name.kind === 142 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression.kind);
+ return name.kind === 142 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression);
}
function getRestType(source, properties, symbol) {
ts.Debug.assert(!!(source.flags & 32768 /* Object */), "Rest types only support object types right now.");
var members = ts.createMap();
var names = ts.createMap();
for (var _i = 0, properties_2 = properties; _i < properties_2.length; _i++) {
- var name_18 = properties_2[_i];
- names[ts.getTextOfPropertyName(name_18)] = true;
+ var name_17 = properties_2[_i];
+ names[ts.getTextOfPropertyName(name_17)] = true;
}
for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
var prop = _b[_a];
@@ -26808,7 +26916,7 @@ var ts;
var literalMembers = [];
for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
var element = _a[_i];
- if (element.kind !== 198 /* OmittedExpression */ && !element.dotDotDotToken) {
+ if (!element.dotDotDotToken) {
literalMembers.push(element.propertyName || element.name);
}
}
@@ -26816,8 +26924,8 @@ var ts;
}
else {
// Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
- var name_19 = declaration.propertyName || declaration.name;
- if (isComputedNonLiteralName(name_19)) {
+ var name_18 = declaration.propertyName || declaration.name;
+ if (isComputedNonLiteralName(name_18)) {
// computed properties with non-literal names are treated as 'any'
return anyType;
}
@@ -26826,12 +26934,12 @@ var ts;
}
// Use type of the specified property, or otherwise, for a numeric name, the type of the numeric index signature,
// or otherwise the type of the string index signature.
- var text = ts.getTextOfPropertyName(name_19);
+ var text = ts.getTextOfPropertyName(name_18);
type = getTypeOfPropertyOfType(parentType, text) ||
isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1 /* Number */) ||
getIndexTypeOfType(parentType, 0 /* String */);
if (!type) {
- error(name_19, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_19));
+ error(name_18, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_18));
return unknownType;
}
}
@@ -26872,33 +26980,9 @@ var ts;
type;
}
function getTypeForVariableLikeDeclarationFromJSDocComment(declaration) {
- var jsDocType = getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration);
- if (jsDocType) {
- return getTypeFromTypeNode(jsDocType);
- }
- }
- function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration) {
- // First, see if this node has an @type annotation on it directly.
- var typeTag = ts.getJSDocTypeTag(declaration);
- if (typeTag && typeTag.typeExpression) {
- return typeTag.typeExpression.type;
- }
- if (declaration.kind === 223 /* VariableDeclaration */ &&
- declaration.parent.kind === 224 /* VariableDeclarationList */ &&
- declaration.parent.parent.kind === 205 /* VariableStatement */) {
- // @type annotation might have been on the variable statement, try that instead.
- var annotation = ts.getJSDocTypeTag(declaration.parent.parent);
- if (annotation && annotation.typeExpression) {
- return annotation.typeExpression.type;
- }
- }
- else if (declaration.kind === 144 /* Parameter */) {
- // If it's a parameter, see if the parent has a jsdoc comment with an @param
- // annotation.
- var paramTag = ts.getCorrespondingJSDocParameterTag(declaration);
- if (paramTag && paramTag.typeExpression) {
- return paramTag.typeExpression.type;
- }
+ var jsdocType = ts.getJSDocType(declaration);
+ if (jsdocType) {
+ return getTypeFromTypeNode(jsdocType);
}
return undefined;
}
@@ -26924,9 +27008,11 @@ var ts;
return type;
}
}
- // A variable declared in a for..in statement is always of type string
+ // A variable declared in a for..in statement is of type string, or of type keyof T when the
+ // right hand expression is of a type parameter type.
if (declaration.parent.parent.kind === 212 /* ForInStatement */) {
- return stringType;
+ var indexType = getIndexType(checkNonNullExpression(declaration.parent.parent.expression));
+ return indexType.flags & (16384 /* TypeParameter */ | 262144 /* Index */) ? indexType : stringType;
}
if (declaration.parent.parent.kind === 213 /* ForOfStatement */) {
// checkRightHandSideOfForOf will return undefined if the for-of expression type was
@@ -26942,9 +27028,11 @@ var ts;
if (declaration.type) {
return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ declaration.questionToken && includeOptionality);
}
- if (declaration.kind === 223 /* VariableDeclaration */ && !ts.isBindingPattern(declaration.name) &&
+ if ((compilerOptions.noImplicitAny || declaration.flags & 2097152 /* JavaScriptFile */) &&
+ declaration.kind === 223 /* VariableDeclaration */ && !ts.isBindingPattern(declaration.name) &&
!(ts.getCombinedModifierFlags(declaration) & 1 /* Export */) && !ts.isInAmbientContext(declaration)) {
- // Use control flow tracked 'any' type for non-ambient, non-exported var or let variables with no
+ // If --noImplicitAny is on or the declaration is in a Javascript file,
+ // use control flow tracked 'any' type for non-ambient, non-exported var or let variables with no
// initializer or a 'null' or 'undefined' initializer.
if (!(ts.getCombinedNodeFlags(declaration) & 2 /* Const */) && (!declaration.initializer || isNullOrUndefined(declaration.initializer))) {
return autoType;
@@ -27123,7 +27211,7 @@ var ts;
if (declaration.kind === 240 /* ExportAssignment */) {
return links.type = checkExpression(declaration.expression);
}
- if (declaration.flags & 2097152 /* JavaScriptFile */ && declaration.kind === 285 /* JSDocPropertyTag */ && declaration.typeExpression) {
+ if (declaration.flags & 2097152 /* JavaScriptFile */ && declaration.kind === 286 /* JSDocPropertyTag */ && declaration.typeExpression) {
return links.type = getTypeFromTypeNode(declaration.typeExpression.type);
}
// Handle variable, parameter or property
@@ -27140,9 +27228,9 @@ var ts;
declaration.kind === 177 /* PropertyAccessExpression */ && declaration.parent.kind === 192 /* BinaryExpression */) {
// Use JS Doc type if present on parent expression statement
if (declaration.flags & 2097152 /* JavaScriptFile */) {
- var typeTag = ts.getJSDocTypeTag(declaration.parent);
- if (typeTag && typeTag.typeExpression) {
- return links.type = getTypeFromTypeNode(typeTag.typeExpression.type);
+ var jsdocType = ts.getJSDocType(declaration.parent);
+ if (jsdocType) {
+ return links.type = getTypeFromTypeNode(jsdocType);
}
}
var declaredTypes = ts.map(symbol.declarations, function (decl) { return decl.kind === 192 /* BinaryExpression */ ?
@@ -27477,6 +27565,14 @@ var ts;
}
baseType = getReturnTypeOfSignature(constructors[0]);
}
+ // In a JS file, you can use the @augments jsdoc tag to specify a base type with type parameters
+ var valueDecl = type.symbol.valueDeclaration;
+ if (valueDecl && ts.isInJavaScriptFile(valueDecl)) {
+ var augTag = ts.getJSDocAugmentsTag(type.symbol.valueDeclaration);
+ if (augTag) {
+ baseType = getTypeFromTypeNode(augTag.typeExpression.type);
+ }
+ }
if (baseType === unknownType) {
return;
}
@@ -27485,7 +27581,7 @@ var ts;
return;
}
if (type === baseType || hasBaseType(baseType, type)) {
- error(type.symbol.valueDeclaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, 1 /* WriteArrayAsGenericType */));
+ error(valueDecl, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, 1 /* WriteArrayAsGenericType */));
return;
}
if (type.resolvedBaseTypes === emptyArray) {
@@ -27599,7 +27695,7 @@ var ts;
if (!pushTypeResolution(symbol, 2 /* DeclaredType */)) {
return unknownType;
}
- var declaration = ts.getDeclarationOfKind(symbol, 284 /* JSDocTypedefTag */);
+ var declaration = ts.getDeclarationOfKind(symbol, 285 /* JSDocTypedefTag */);
var type = void 0;
if (declaration) {
if (declaration.jsDocTypeLiteral) {
@@ -28123,6 +28219,8 @@ var ts;
var members = ts.createMap();
var stringIndexInfo;
var numberIndexInfo;
+ // Resolve upfront such that recursive references see an empty object type.
+ setStructuredTypeMembers(type, emptySymbols, emptyArray, emptyArray, undefined, undefined);
// In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
// and T as the template type.
var typeParameter = getTypeParameterFromMappedType(type);
@@ -28180,6 +28278,9 @@ var ts;
instantiateType(getTypeFromTypeNode(type.declaration.type), type.mapper || identityMapper) :
unknownType);
}
+ function getErasedTemplateTypeFromMappedType(type) {
+ return instantiateType(getTemplateTypeFromMappedType(type), createUnaryTypeMapper(getTypeParameterFromMappedType(type), anyType));
+ }
function isGenericMappedType(type) {
if (getObjectFlags(type) & 32 /* Mapped */) {
var constraintType = getConstraintTypeFromMappedType(type);
@@ -28278,18 +28379,25 @@ var ts;
return type.resolvedApparentType;
}
/**
+ * The apparent type of an indexed access T[K] is the type of T's string index signature, if any.
+ */
+ function getApparentTypeOfIndexedAccess(type) {
+ return getIndexTypeOfType(getApparentType(type.objectType), 0 /* String */) || type;
+ }
+ /**
* For a type parameter, return the base constraint of the type parameter. For the string, number,
* boolean, and symbol primitive types, return the corresponding object types. Otherwise return the
* type itself. Note that the apparent type of a union type is the union type itself.
*/
function getApparentType(type) {
- var t = type.flags & 16384 /* TypeParameter */ ? getApparentTypeOfTypeParameter(type) : type;
- return t.flags & 34 /* StringLike */ ? globalStringType :
+ var t = type.flags & 16384 /* TypeParameter */ ? getApparentTypeOfTypeParameter(type) :
+ type.flags & 524288 /* IndexedAccess */ ? getApparentTypeOfIndexedAccess(type) :
+ type;
+ return t.flags & 262178 /* StringLike */ ? globalStringType :
t.flags & 340 /* NumberLike */ ? globalNumberType :
t.flags & 136 /* BooleanLike */ ? globalBooleanType :
t.flags & 512 /* ESSymbol */ ? getGlobalESSymbolType() :
- t.flags & 262144 /* Index */ ? stringOrNumberType :
- t;
+ t;
}
function createUnionOrIntersectionProperty(containingType, name) {
var types = containingType.types;
@@ -28487,13 +28595,16 @@ var ts;
if (node.type && node.type.kind === 273 /* JSDocOptionalType */) {
return true;
}
- var paramTag = ts.getCorrespondingJSDocParameterTag(node);
- if (paramTag) {
- if (paramTag.isBracketed) {
- return true;
- }
- if (paramTag.typeExpression) {
- return paramTag.typeExpression.type.kind === 273 /* JSDocOptionalType */;
+ var paramTags = ts.getJSDocParameterTags(node);
+ if (paramTags) {
+ for (var _i = 0, paramTags_1 = paramTags; _i < paramTags_1.length; _i++) {
+ var paramTag = paramTags_1[_i];
+ if (paramTag.isBracketed) {
+ return true;
+ }
+ if (paramTag.typeExpression) {
+ return paramTag.typeExpression.type.kind === 273 /* JSDocOptionalType */;
+ }
}
}
}
@@ -29408,10 +29519,14 @@ var ts;
}
function getIndexType(type) {
return type.flags & 16384 /* TypeParameter */ ? getIndexTypeForTypeParameter(type) :
- type.flags & 1 /* Any */ || getIndexInfoOfType(type, 0 /* String */) ? stringOrNumberType :
- getIndexInfoOfType(type, 1 /* Number */) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type)]) :
+ getObjectFlags(type) & 32 /* Mapped */ ? getConstraintTypeFromMappedType(type) :
+ type.flags & 1 /* Any */ || getIndexInfoOfType(type, 0 /* String */) ? stringType :
getLiteralTypeFromPropertyNames(type);
}
+ function getIndexTypeOrString(type) {
+ var indexType = getIndexType(type);
+ return indexType !== neverType ? indexType : stringType;
+ }
function getTypeFromTypeOperatorNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
@@ -29425,10 +29540,6 @@ var ts;
type.indexType = indexType;
return type;
}
- function getIndexedAccessTypeForTypeParameter(objectType, indexType) {
- var indexedAccessTypes = indexType.resolvedIndexedAccessTypes || (indexType.resolvedIndexedAccessTypes = []);
- return indexedAccessTypes[objectType.id] || (indexedAccessTypes[objectType.id] = createIndexedAccessType(objectType, indexType));
- }
function getPropertyTypeForIndexType(objectType, indexType, accessNode, cacheSymbol) {
var accessExpression = accessNode && accessNode.kind === 178 /* ElementAccessExpression */ ? accessNode : undefined;
var propName = indexType.flags & (32 /* StringLiteral */ | 64 /* NumberLiteral */ | 256 /* EnumLiteral */) ?
@@ -29451,7 +29562,7 @@ var ts;
return getTypeOfSymbol(prop);
}
}
- if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 34 /* StringLike */ | 340 /* NumberLike */ | 512 /* ESSymbol */)) {
+ if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 262178 /* StringLike */ | 340 /* NumberLike */ | 512 /* ESSymbol */)) {
if (isTypeAny(objectType)) {
return anyType;
}
@@ -29491,20 +29602,46 @@ var ts;
}
return unknownType;
}
+ function getIndexedAccessForMappedType(type, indexType, accessNode) {
+ var accessExpression = accessNode && accessNode.kind === 178 /* ElementAccessExpression */ ? accessNode : undefined;
+ if (accessExpression && ts.isAssignmentTarget(accessExpression) && type.declaration.readonlyToken) {
+ error(accessExpression, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(type));
+ return unknownType;
+ }
+ var mapper = createUnaryTypeMapper(getTypeParameterFromMappedType(type), indexType);
+ var templateMapper = type.mapper ? combineTypeMappers(type.mapper, mapper) : mapper;
+ return addOptionality(instantiateType(getTemplateTypeFromMappedType(type), templateMapper), !!type.declaration.questionToken);
+ }
function getIndexedAccessType(objectType, indexType, accessNode) {
- if (indexType.flags & 16384 /* TypeParameter */) {
- if (accessNode && !isTypeAssignableTo(getConstraintOfTypeParameter(indexType) || emptyObjectType, getIndexType(objectType))) {
- error(accessNode, ts.Diagnostics.Type_0_is_not_constrained_to_keyof_1, typeToString(indexType), typeToString(objectType));
- return unknownType;
+ if (indexType.flags & 16384 /* TypeParameter */ ||
+ objectType.flags & 16384 /* TypeParameter */ && indexType.flags & 262144 /* Index */ ||
+ isGenericMappedType(objectType)) {
+ // If either the object type or the index type are type parameters, or if the object type is a mapped
+ // type with a generic constraint, we are performing a higher-order index access where we cannot
+ // meaningfully access the properties of the object type. In those cases, we first check that the
+ // index type is assignable to 'keyof T' for the object type.
+ if (accessNode) {
+ if (!isTypeAssignableTo(indexType, getIndexType(objectType))) {
+ error(accessNode, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType));
+ return unknownType;
+ }
}
- return getIndexedAccessTypeForTypeParameter(objectType, indexType);
+ // If the object type is a mapped type { [P in K]: E }, we instantiate E using a mapper that substitutes
+ // the index type for P. For example, for an index access { [P in K]: Box<T[P]> }[X], we construct the
+ // type Box<T[X]>.
+ if (isGenericMappedType(objectType)) {
+ return getIndexedAccessForMappedType(objectType, indexType, accessNode);
+ }
+ // Otherwise we defer the operation by creating an indexed access type.
+ var id = objectType.id + "," + indexType.id;
+ return indexedAccessTypes[id] || (indexedAccessTypes[id] = createIndexedAccessType(objectType, indexType));
}
- var apparentType = getApparentType(objectType);
+ var apparentObjectType = getApparentType(objectType);
if (indexType.flags & 65536 /* Union */ && !(indexType.flags & 8190 /* Primitive */)) {
var propTypes = [];
for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
var t = _a[_i];
- var propType = getPropertyTypeForIndexType(apparentType, t, accessNode, /*cacheSymbol*/ false);
+ var propType = getPropertyTypeForIndexType(apparentObjectType, t, accessNode, /*cacheSymbol*/ false);
if (propType === unknownType) {
return unknownType;
}
@@ -29512,7 +29649,7 @@ var ts;
}
return getUnionType(propTypes);
}
- return getPropertyTypeForIndexType(apparentType, indexType, accessNode, /*cacheSymbol*/ true);
+ return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, /*cacheSymbol*/ true);
}
function getTypeFromIndexedAccessTypeNode(node) {
var links = getNodeLinks(node);
@@ -29529,6 +29666,9 @@ var ts;
type.aliasSymbol = getAliasSymbolForTypeNode(node);
type.aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node);
links.resolvedType = type;
+ // Eagerly resolve the constraint type which forces an error if the constraint type circularly
+ // references itself through one or more type aliases.
+ getConstraintTypeFromMappedType(type);
}
return links.resolvedType;
}
@@ -29705,18 +29845,18 @@ var ts;
return nullType;
case 129 /* NeverKeyword */:
return neverType;
- case 288 /* JSDocNullKeyword */:
+ case 289 /* JSDocNullKeyword */:
return nullType;
- case 289 /* JSDocUndefinedKeyword */:
+ case 290 /* JSDocUndefinedKeyword */:
return undefinedType;
- case 290 /* JSDocNeverKeyword */:
+ case 291 /* JSDocNeverKeyword */:
return neverType;
case 167 /* ThisType */:
case 98 /* ThisKeyword */:
return getTypeFromThisTypeNode(node);
case 171 /* LiteralType */:
return getTypeFromLiteralTypeNode(node);
- case 287 /* JSDocLiteralType */:
+ case 288 /* JSDocLiteralType */:
return getTypeFromLiteralTypeNode(node.literal);
case 157 /* TypeReference */:
case 272 /* JSDocTypeReference */:
@@ -29749,7 +29889,7 @@ var ts;
case 158 /* FunctionType */:
case 159 /* ConstructorType */:
case 161 /* TypeLiteral */:
- case 286 /* JSDocTypeLiteral */:
+ case 287 /* JSDocTypeLiteral */:
case 274 /* JSDocFunctionType */:
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
case 168 /* TypeOperator */:
@@ -29920,6 +30060,33 @@ var ts;
return result;
}
function instantiateMappedType(type, mapper) {
+ // Check if we have an isomorphic mapped type, i.e. a type of the form { [P in keyof T]: X } for some
+ // type parameter T. If so, the mapped type is distributive over a union type and when T is instantiated
+ // to a union type A | B, we produce { [P in keyof A]: X } | { [P in keyof B]: X }. Furthermore, for
+ // isomorphic mapped types we leave primitive types alone. For example, when T is instantiated to a
+ // union type A | undefined, we produce { [P in keyof A]: X } | undefined.
+ var constraintType = getConstraintTypeFromMappedType(type);
+ if (constraintType.flags & 262144 /* Index */) {
+ var typeParameter_1 = constraintType.type;
+ var mappedTypeParameter = mapper(typeParameter_1);
+ if (typeParameter_1 !== mappedTypeParameter) {
+ return mapType(mappedTypeParameter, function (t) {
+ if (isMappableType(t)) {
+ var replacementMapper = createUnaryTypeMapper(typeParameter_1, t);
+ var combinedMapper = mapper.mappedTypes && mapper.mappedTypes.length === 1 ? replacementMapper : combineTypeMappers(replacementMapper, mapper);
+ combinedMapper.mappedTypes = mapper.mappedTypes;
+ return instantiateMappedObjectType(type, combinedMapper);
+ }
+ return t;
+ });
+ }
+ }
+ return instantiateMappedObjectType(type, mapper);
+ }
+ function isMappableType(type) {
+ return type.flags & (16384 /* TypeParameter */ | 32768 /* Object */ | 131072 /* Intersection */ | 524288 /* IndexedAccess */);
+ }
+ function instantiateMappedObjectType(type, mapper) {
var result = createObjectType(32 /* Mapped */ | 64 /* Instantiated */, type.symbol);
result.declaration = type.declaration;
result.mapper = type.mapper ? combineTypeMappers(type.mapper, mapper) : mapper;
@@ -30337,7 +30504,7 @@ var ts;
return false;
if (target.flags & 1 /* Any */ || source.flags & 8192 /* Never */)
return true;
- if (source.flags & 34 /* StringLike */ && target.flags & 2 /* String */)
+ if (source.flags & 262178 /* StringLike */ && target.flags & 2 /* String */)
return true;
if (source.flags & 340 /* NumberLike */ && target.flags & 4 /* Number */)
return true;
@@ -30476,12 +30643,6 @@ var ts;
}
if (isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined))
return -1 /* True */;
- if (source.flags & 262144 /* Index */) {
- // A keyof T is related to a union type containing both string and number
- if (maybeTypeOfKind(target, 2 /* String */) && maybeTypeOfKind(target, 4 /* Number */)) {
- return -1 /* True */;
- }
- }
if (getObjectFlags(source) & 128 /* ObjectLiteral */ && source.flags & 1048576 /* FreshLiteral */) {
if (hasExcessProperties(source, target, reportErrors)) {
if (reportErrors) {
@@ -30541,12 +30702,24 @@ var ts;
}
}
if (target.flags & 16384 /* TypeParameter */) {
- // Given a type parameter K with a constraint keyof T, a type S is
- // assignable to K if S is assignable to keyof T.
- var constraint = getConstraintOfTypeParameter(target);
- if (constraint && constraint.flags & 262144 /* Index */) {
- if (result = isRelatedTo(source, constraint, reportErrors)) {
- return result;
+ // A source type { [P in keyof T]: X } is related to a target type T if X is related to T[P].
+ if (getObjectFlags(source) & 32 /* Mapped */ && getConstraintTypeFromMappedType(source) === getIndexType(target)) {
+ if (!source.declaration.questionToken) {
+ var templateType = getTemplateTypeFromMappedType(source);
+ var indexedAccessType = getIndexedAccessType(target, getTypeParameterFromMappedType(source));
+ if (result = isRelatedTo(templateType, indexedAccessType, reportErrors)) {
+ return result;
+ }
+ }
+ }
+ else {
+ // Given a type parameter K with a constraint keyof T, a type S is
+ // assignable to K if S is assignable to keyof T.
+ var constraint = getConstraintOfTypeParameter(target);
+ if (constraint && constraint.flags & 262144 /* Index */) {
+ if (result = isRelatedTo(source, constraint, reportErrors)) {
+ return result;
+ }
}
}
}
@@ -30566,18 +30739,37 @@ var ts;
}
}
}
+ else if (target.flags & 524288 /* IndexedAccess */) {
+ // if we have indexed access types with identical index types, see if relationship holds for
+ // the two object types.
+ if (source.flags & 524288 /* IndexedAccess */ && source.indexType === target.indexType) {
+ if (result = isRelatedTo(source.objectType, target.objectType, reportErrors)) {
+ return result;
+ }
+ }
+ }
if (source.flags & 16384 /* TypeParameter */) {
- var constraint = getConstraintOfTypeParameter(source);
- if (!constraint || constraint.flags & 1 /* Any */) {
- constraint = emptyObjectType;
- }
- // The constraint may need to be further instantiated with its 'this' type.
- constraint = getTypeWithThisArgument(constraint, source);
- // Report constraint errors only if the constraint is not the empty object type
- var reportConstraintErrors = reportErrors && constraint !== emptyObjectType;
- if (result = isRelatedTo(constraint, target, reportConstraintErrors)) {
- errorInfo = saveErrorInfo;
- return result;
+ // A source type T is related to a target type { [P in keyof T]: X } if T[P] is related to X.
+ if (getObjectFlags(target) & 32 /* Mapped */ && getConstraintTypeFromMappedType(target) === getIndexType(source)) {
+ var indexedAccessType = getIndexedAccessType(source, getTypeParameterFromMappedType(target));
+ var templateType = getTemplateTypeFromMappedType(target);
+ if (result = isRelatedTo(indexedAccessType, templateType, reportErrors)) {
+ return result;
+ }
+ }
+ else {
+ var constraint = getConstraintOfTypeParameter(source);
+ if (!constraint || constraint.flags & 1 /* Any */) {
+ constraint = emptyObjectType;
+ }
+ // The constraint may need to be further instantiated with its 'this' type.
+ constraint = getTypeWithThisArgument(constraint, source);
+ // Report constraint errors only if the constraint is not the empty object type
+ var reportConstraintErrors = reportErrors && constraint !== emptyObjectType;
+ if (result = isRelatedTo(constraint, target, reportConstraintErrors)) {
+ errorInfo = saveErrorInfo;
+ return result;
+ }
}
}
else {
@@ -30587,29 +30779,18 @@ var ts;
return result;
}
}
- if (isGenericMappedType(target)) {
- // A type [P in S]: X is related to a type [P in T]: Y if T is related to S and X is related to Y.
- if (isGenericMappedType(source)) {
- if ((result = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) &&
- (result = isRelatedTo(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target), reportErrors))) {
- return result;
- }
- }
- }
- else {
- // Even if relationship doesn't hold for unions, intersections, or generic type references,
- // it may hold in a structural comparison.
- var apparentSource = getApparentType(source);
- // In a check of the form X = A & B, we will have previously checked if A relates to X or B relates
- // to X. Failing both of those we want to check if the aggregation of A and B's members structurally
- // relates to X. Thus, we include intersection types on the source side here.
- if (apparentSource.flags & (32768 /* Object */ | 131072 /* Intersection */) && target.flags & 32768 /* Object */) {
- // Report structural errors only if we haven't reported any errors yet
- var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !(source.flags & 8190 /* Primitive */);
- if (result = objectTypeRelatedTo(apparentSource, source, target, reportStructuralErrors)) {
- errorInfo = saveErrorInfo;
- return result;
- }
+ // Even if relationship doesn't hold for unions, intersections, or generic type references,
+ // it may hold in a structural comparison.
+ var apparentSource = getApparentType(source);
+ // In a check of the form X = A & B, we will have previously checked if A relates to X or B relates
+ // to X. Failing both of those we want to check if the aggregation of A and B's members structurally
+ // relates to X. Thus, we include intersection types on the source side here.
+ if (apparentSource.flags & (32768 /* Object */ | 131072 /* Intersection */) && target.flags & 32768 /* Object */) {
+ // Report structural errors only if we haven't reported any errors yet
+ var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !(source.flags & 8190 /* Primitive */);
+ if (result = objectTypeRelatedTo(apparentSource, source, target, reportStructuralErrors)) {
+ errorInfo = saveErrorInfo;
+ return result;
}
}
}
@@ -30832,6 +31013,9 @@ var ts;
if (expandingFlags === 3) {
result = 1 /* Maybe */;
}
+ else if (isGenericMappedType(source) || isGenericMappedType(target)) {
+ result = mappedTypeRelatedTo(source, target, reportErrors);
+ }
else {
result = propertiesRelatedTo(source, target, reportErrors);
if (result) {
@@ -30862,6 +31046,34 @@ var ts;
}
return result;
}
+ // A type [P in S]: X is related to a type [P in T]: Y if T is related to S and X is related to Y.
+ function mappedTypeRelatedTo(source, target, reportErrors) {
+ if (isGenericMappedType(target)) {
+ if (isGenericMappedType(source)) {
+ var result_2;
+ if (relation === identityRelation) {
+ var readonlyMatches = !source.declaration.readonlyToken === !target.declaration.readonlyToken;
+ var optionalMatches = !source.declaration.questionToken === !target.declaration.questionToken;
+ if (readonlyMatches && optionalMatches) {
+ if (result_2 = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) {
+ return result_2 & isRelatedTo(getErasedTemplateTypeFromMappedType(source), getErasedTemplateTypeFromMappedType(target), reportErrors);
+ }
+ }
+ }
+ else {
+ if (relation === comparableRelation || !source.declaration.questionToken || target.declaration.questionToken) {
+ if (result_2 = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) {
+ return result_2 & isRelatedTo(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target), reportErrors);
+ }
+ }
+ }
+ }
+ }
+ else if (relation !== identityRelation && isEmptyObjectType(resolveStructuredTypeMembers(target))) {
+ return -1 /* True */;
+ }
+ return 0 /* False */;
+ }
function propertiesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return propertiesIdenticalTo(source, target);
@@ -31401,7 +31613,7 @@ var ts;
return type;
}
var types = [type];
- if (flags & 34 /* StringLike */)
+ if (flags & 262178 /* StringLike */)
types.push(emptyStringType);
if (flags & 340 /* NumberLike */)
types.push(zeroType);
@@ -31791,19 +32003,6 @@ var ts;
}
}
else {
- if (getObjectFlags(target) & 32 /* Mapped */) {
- var constraintType = getConstraintTypeFromMappedType(target);
- if (getObjectFlags(source) & 32 /* Mapped */) {
- inferFromTypes(getConstraintTypeFromMappedType(source), constraintType);
- inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target));
- return;
- }
- if (constraintType.flags & 16384 /* TypeParameter */) {
- inferFromTypes(getIndexType(source), constraintType);
- inferFromTypes(getUnionType(ts.map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target));
- return;
- }
- }
source = getApparentType(source);
if (source.flags & 32768 /* Object */) {
if (isInProcess(source, target)) {
@@ -31824,14 +32023,30 @@ var ts;
sourceStack[depth] = source;
targetStack[depth] = target;
depth++;
- inferFromProperties(source, target);
- inferFromSignatures(source, target, 0 /* Call */);
- inferFromSignatures(source, target, 1 /* Construct */);
- inferFromIndexTypes(source, target);
+ inferFromObjectTypes(source, target);
depth--;
}
}
}
+ function inferFromObjectTypes(source, target) {
+ if (getObjectFlags(target) & 32 /* Mapped */) {
+ var constraintType = getConstraintTypeFromMappedType(target);
+ if (getObjectFlags(source) & 32 /* Mapped */) {
+ inferFromTypes(getConstraintTypeFromMappedType(source), constraintType);
+ inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target));
+ return;
+ }
+ if (constraintType.flags & 16384 /* TypeParameter */) {
+ inferFromTypes(getIndexType(source), constraintType);
+ inferFromTypes(getUnionType(ts.map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target));
+ return;
+ }
+ }
+ inferFromProperties(source, target);
+ inferFromSignatures(source, target, 0 /* Call */);
+ inferFromSignatures(source, target, 1 /* Construct */);
+ inferFromIndexTypes(source, target);
+ }
function inferFromProperties(source, target) {
var properties = getPropertiesOfObjectType(target);
for (var _i = 0, properties_4 = properties; _i < properties_4.length; _i++) {
@@ -32200,7 +32415,7 @@ var ts;
}
function getTypeWithDefault(type, defaultExpression) {
if (defaultExpression) {
- var defaultType = checkExpression(defaultExpression);
+ var defaultType = getTypeOfExpression(defaultExpression);
return getUnionType([getTypeWithFacts(type, 131072 /* NEUndefined */), defaultType]);
}
return type;
@@ -32223,7 +32438,7 @@ var ts;
function getAssignedTypeOfBinaryExpression(node) {
return node.parent.kind === 175 /* ArrayLiteralExpression */ || node.parent.kind === 257 /* PropertyAssignment */ ?
getTypeWithDefault(getAssignedType(node), node.right) :
- checkExpression(node.right);
+ getTypeOfExpression(node.right);
}
function getAssignedTypeOfArrayLiteralElement(node, element) {
return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element));
@@ -32274,7 +32489,7 @@ var ts;
// from its initializer, we'll already have cached the type. Otherwise we compute it now
// without caching such that transient types are reflected.
var links = getNodeLinks(node);
- return links.resolvedType || checkExpression(node);
+ return links.resolvedType || getTypeOfExpression(node);
}
function getInitialTypeOfVariableDeclaration(node) {
if (node.initializer) {
@@ -32327,7 +32542,7 @@ var ts;
}
function getTypeOfSwitchClause(clause) {
if (clause.kind === 253 /* CaseClause */) {
- var caseType = getRegularTypeOfLiteralType(checkExpression(clause.expression));
+ var caseType = getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
return isUnitType(caseType) ? caseType : undefined;
}
return neverType;
@@ -32419,7 +32634,7 @@ var ts;
// we defer subtype reduction until the evolving array type is finalized into a manifest
// array type.
function addEvolvingArrayElementType(evolvingArrayType, node) {
- var elementType = getBaseTypeOfLiteralType(checkExpression(node));
+ var elementType = getBaseTypeOfLiteralType(getTypeOfExpression(node));
return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType]));
}
function createFinalArrayType(elementType) {
@@ -32473,7 +32688,7 @@ var ts;
parent.parent.operatorToken.kind === 57 /* EqualsToken */ &&
parent.parent.left === parent &&
!ts.isAssignmentTarget(parent.parent) &&
- isTypeAnyOrAllConstituentTypesHaveKind(checkExpression(parent.argumentExpression), 340 /* NumberLike */ | 2048 /* Undefined */);
+ isTypeAnyOrAllConstituentTypesHaveKind(getTypeOfExpression(parent.argumentExpression), 340 /* NumberLike */ | 2048 /* Undefined */);
return isLengthPushOrUnshift || isElementAssignment;
}
function maybeTypePredicateCall(node) {
@@ -32630,7 +32845,7 @@ var ts;
}
}
else {
- var indexType = checkExpression(node.left.argumentExpression);
+ var indexType = getTypeOfExpression(node.left.argumentExpression);
if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 340 /* NumberLike */ | 2048 /* Undefined */)) {
evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, node.right);
}
@@ -32848,7 +33063,7 @@ var ts;
if (operator === 32 /* ExclamationEqualsToken */ || operator === 34 /* ExclamationEqualsEqualsToken */) {
assumeTrue = !assumeTrue;
}
- var valueType = checkExpression(value);
+ var valueType = getTypeOfExpression(value);
if (valueType.flags & 6144 /* Nullable */) {
if (!strictNullChecks) {
return type;
@@ -32930,7 +33145,7 @@ var ts;
return type;
}
// Check that right operand is a function type with a prototype property
- var rightType = checkExpression(expr.right);
+ var rightType = getTypeOfExpression(expr.right);
if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
return type;
}
@@ -32961,18 +33176,18 @@ var ts;
}
}
if (targetType) {
- return getNarrowedType(type, targetType, assumeTrue);
+ return getNarrowedType(type, targetType, assumeTrue, isTypeInstanceOf);
}
return type;
}
- function getNarrowedType(type, candidate, assumeTrue) {
+ function getNarrowedType(type, candidate, assumeTrue, isRelated) {
if (!assumeTrue) {
- return filterType(type, function (t) { return !isTypeInstanceOf(t, candidate); });
+ return filterType(type, function (t) { return !isRelated(t, candidate); });
}
// If the current type is a union type, remove all constituents that couldn't be instances of
// the candidate type. If one or more constituents remain, return a union of those.
if (type.flags & 65536 /* Union */) {
- var assignableType = filterType(type, function (t) { return isTypeInstanceOf(t, candidate); });
+ var assignableType = filterType(type, function (t) { return isRelated(t, candidate); });
if (!(assignableType.flags & 8192 /* Never */)) {
return assignableType;
}
@@ -33005,7 +33220,7 @@ var ts;
var predicateArgument = callExpression.arguments[predicate.parameterIndex];
if (predicateArgument) {
if (isMatchingReference(reference, predicateArgument)) {
- return getNarrowedType(type, predicate.type, assumeTrue);
+ return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf);
}
if (containsMatchingReference(reference, predicateArgument)) {
return declaredType;
@@ -33018,7 +33233,7 @@ var ts;
var accessExpression = invokedExpression;
var possibleReference = ts.skipParentheses(accessExpression.expression);
if (isMatchingReference(reference, possibleReference)) {
- return getNarrowedType(type, predicate.type, assumeTrue);
+ return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf);
}
if (containsMatchingReference(reference, possibleReference)) {
return declaredType;
@@ -33060,7 +33275,7 @@ var ts;
location = location.parent;
}
if (ts.isPartOfExpression(location) && !ts.isAssignmentTarget(location)) {
- var type = checkExpression(location);
+ var type = getTypeOfExpression(location);
if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) {
return type;
}
@@ -33473,9 +33688,9 @@ var ts;
return anyType;
}
function getTypeForThisExpressionFromJSDoc(node) {
- var typeTag = ts.getJSDocTypeTag(node);
- if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 274 /* JSDocFunctionType */) {
- var jsDocFunctionType = typeTag.typeExpression.type;
+ var jsdocType = ts.getJSDocType(node);
+ if (jsdocType && jsdocType.kind === 274 /* JSDocFunctionType */) {
+ var jsDocFunctionType = jsdocType;
if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 277 /* JSDocThisType */) {
return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type);
}
@@ -33745,11 +33960,11 @@ var ts;
}
if (ts.isBindingPattern(declaration.parent)) {
var parentDeclaration = declaration.parent.parent;
- var name_20 = declaration.propertyName || declaration.name;
+ var name_19 = declaration.propertyName || declaration.name;
if (ts.isVariableLike(parentDeclaration) &&
parentDeclaration.type &&
- !ts.isBindingPattern(name_20)) {
- var text = ts.getTextOfPropertyName(name_20);
+ !ts.isBindingPattern(name_19)) {
+ var text = ts.getTextOfPropertyName(name_19);
if (text) {
return getTypeOfPropertyOfType(getTypeFromTypeNode(parentDeclaration.type), text);
}
@@ -33835,7 +34050,7 @@ var ts;
}
// In an assignment expression, the right operand is contextually typed by the type of the left operand.
if (node === binaryExpression.right) {
- return checkExpression(binaryExpression.left);
+ return getTypeOfExpression(binaryExpression.left);
}
}
else if (operator === 53 /* BarBarToken */) {
@@ -33843,7 +34058,7 @@ var ts;
// expression has no contextual type, the right operand is contextually typed by the type of the left operand.
var type = getContextualType(binaryExpression);
if (!type && node === binaryExpression.right) {
- type = checkExpression(binaryExpression.left);
+ type = getTypeOfExpression(binaryExpression.left);
}
return type;
}
@@ -34261,7 +34476,7 @@ var ts;
links.resolvedType = checkExpression(node.expression);
// This will allow types number, string, symbol or any. It will also allow enums, the unknown
// type, and any union of these types (like string | number).
- if (!isTypeAnyOrAllConstituentTypesHaveKind(links.resolvedType, 340 /* NumberLike */ | 34 /* StringLike */ | 512 /* ESSymbol */)) {
+ if (!isTypeAnyOrAllConstituentTypesHaveKind(links.resolvedType, 340 /* NumberLike */ | 262178 /* StringLike */ | 512 /* ESSymbol */)) {
error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
}
else {
@@ -34270,10 +34485,10 @@ var ts;
}
return links.resolvedType;
}
- function getObjectLiteralIndexInfo(node, properties, kind) {
+ function getObjectLiteralIndexInfo(propertyNodes, offset, properties, kind) {
var propTypes = [];
for (var i = 0; i < properties.length; i++) {
- if (kind === 0 /* String */ || isNumericName(node.properties[i].name)) {
+ if (kind === 0 /* String */ || isNumericName(propertyNodes[i + offset].name)) {
propTypes.push(getTypeOfSymbol(properties[i]));
}
}
@@ -34295,8 +34510,9 @@ var ts;
var patternWithComputedProperties = false;
var hasComputedStringProperty = false;
var hasComputedNumberProperty = false;
- for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
- var memberDecl = _a[_i];
+ var offset = 0;
+ for (var i = 0; i < node.properties.length; i++) {
+ var memberDecl = node.properties[i];
var member = memberDecl.symbol;
if (memberDecl.kind === 257 /* PropertyAssignment */ ||
memberDecl.kind === 258 /* ShorthandPropertyAssignment */ ||
@@ -34361,6 +34577,7 @@ var ts;
return unknownType;
}
spread = getSpreadType(spread, type, /*isFromObjectLiteral*/ false);
+ offset = i + 1;
continue;
}
else {
@@ -34388,8 +34605,8 @@ var ts;
// If object literal is contextually typed by the implied type of a binding pattern, augment the result
// type with those properties for which the binding pattern specifies a default value.
if (contextualTypeHasPattern) {
- for (var _b = 0, _c = getPropertiesOfType(contextualType); _b < _c.length; _b++) {
- var prop = _c[_b];
+ for (var _i = 0, _a = getPropertiesOfType(contextualType); _i < _a.length; _i++) {
+ var prop = _a[_i];
if (!propertiesTable[prop.name]) {
if (!(prop.flags & 536870912 /* Optional */)) {
error(prop.valueDeclaration || prop.bindingElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
@@ -34409,8 +34626,8 @@ var ts;
}
return createObjectLiteralType();
function createObjectLiteralType() {
- var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, propertiesArray, 0 /* String */) : undefined;
- var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, propertiesArray, 1 /* Number */) : undefined;
+ var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 0 /* String */) : undefined;
+ var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 1 /* Number */) : undefined;
var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo);
var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 1048576 /* FreshLiteral */;
result.flags |= 4194304 /* ContainsObjectLiteral */ | freshObjectLiteralFlag | (typeFlags & 14680064 /* PropagatingFlags */);
@@ -35085,7 +35302,7 @@ var ts;
if (node.kind === 212 /* ForInStatement */ &&
child === node.statement &&
getForInVariableSymbol(node) === symbol &&
- hasNumericPropertyNames(checkExpression(node.expression))) {
+ hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
return true;
}
child = node;
@@ -35191,13 +35408,13 @@ var ts;
for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
var signature = signatures_2[_i];
var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
- var parent_9 = signature.declaration && signature.declaration.parent;
+ var parent_8 = signature.declaration && signature.declaration.parent;
if (!lastSymbol || symbol === lastSymbol) {
- if (lastParent && parent_9 === lastParent) {
+ if (lastParent && parent_8 === lastParent) {
index++;
}
else {
- lastParent = parent_9;
+ lastParent = parent_8;
index = cutoffIndex;
}
}
@@ -35205,7 +35422,7 @@ var ts;
// current declaration belongs to a different symbol
// set cutoffIndex so re-orderings in the future won't change result set from 0 to cutoffIndex
index = cutoffIndex = result.length;
- lastParent = parent_9;
+ lastParent = parent_8;
}
lastSymbol = symbol;
// specialized signatures always need to be placed before non-specialized signatures regardless
@@ -36537,7 +36754,7 @@ var ts;
if (!node.possiblyExhaustive) {
return false;
}
- var type = checkExpression(node.expression);
+ var type = getTypeOfExpression(node.expression);
if (!isLiteralType(type)) {
return false;
}
@@ -36944,10 +37161,10 @@ var ts;
// The in operator requires the left operand to be of type Any, the String primitive type, or the Number primitive type,
// and the right operand to be of type Any, an object type, or a type parameter type.
// The result is always of the Boolean primitive type.
- if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 34 /* StringLike */ | 340 /* NumberLike */ | 512 /* ESSymbol */)) {
+ if (!(isTypeComparableTo(leftType, stringType) || isTypeOfKind(leftType, 340 /* NumberLike */ | 512 /* ESSymbol */))) {
error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
}
- if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 32768 /* Object */ | 16384 /* TypeParameter */)) {
+ if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 32768 /* Object */ | 16384 /* TypeParameter */ | 524288 /* IndexedAccess */)) {
error(right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
return booleanType;
@@ -36956,20 +37173,21 @@ var ts;
var properties = node.properties;
for (var _i = 0, properties_5 = properties; _i < properties_5.length; _i++) {
var p = properties_5[_i];
- checkObjectLiteralDestructuringPropertyAssignment(sourceType, p);
+ checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, properties);
}
return sourceType;
}
- function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property) {
+ /** Note: If property cannot be a SpreadAssignment, then allProperties does not need to be provided */
+ function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, allProperties) {
if (property.kind === 257 /* PropertyAssignment */ || property.kind === 258 /* ShorthandPropertyAssignment */) {
- var name_21 = property.name;
- if (name_21.kind === 142 /* ComputedPropertyName */) {
- checkComputedPropertyName(name_21);
+ var name_20 = property.name;
+ if (name_20.kind === 142 /* ComputedPropertyName */) {
+ checkComputedPropertyName(name_20);
}
- if (isComputedNonLiteralName(name_21)) {
+ if (isComputedNonLiteralName(name_20)) {
return undefined;
}
- var text = ts.getTextOfPropertyName(name_21);
+ var text = ts.getTextOfPropertyName(name_20);
var type = isTypeAny(objectLiteralType)
? objectLiteralType
: getTypeOfPropertyOfType(objectLiteralType, text) ||
@@ -36985,13 +37203,18 @@ var ts;
}
}
else {
- error(name_21, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_21));
+ error(name_20, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_20));
}
}
else if (property.kind === 259 /* SpreadAssignment */) {
- if (property.expression.kind !== 70 /* Identifier */) {
- error(property.expression, ts.Diagnostics.An_object_rest_element_must_be_an_identifier);
+ var nonRestNames = [];
+ if (allProperties) {
+ for (var i = 0; i < allProperties.length - 1; i++) {
+ nonRestNames.push(allProperties[i].name);
+ }
}
+ var type = getRestType(objectLiteralType, nonRestNames, objectLiteralType.symbol);
+ return checkDestructuringAssignment(property.expression, type);
}
else {
error(property, ts.Diagnostics.Property_assignment_expected);
@@ -37083,7 +37306,10 @@ var ts;
}
function checkReferenceAssignment(target, sourceType, contextualMapper) {
var targetType = checkExpression(target, contextualMapper);
- if (checkReferenceExpression(target, ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access)) {
+ var error = target.parent.kind === 259 /* SpreadAssignment */ ?
+ ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
+ ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
+ if (checkReferenceExpression(target, error)) {
checkTypeAssignableTo(sourceType, targetType, target, /*headMessage*/ undefined);
}
return sourceType;
@@ -37246,7 +37472,7 @@ var ts;
resultType = numberType;
}
else {
- if (isTypeOfKind(leftType, 34 /* StringLike */) || isTypeOfKind(rightType, 34 /* StringLike */)) {
+ if (isTypeOfKind(leftType, 262178 /* StringLike */) || isTypeOfKind(rightType, 262178 /* StringLike */)) {
// If one or both operands are of the String primitive type, the result is of the String primitive type.
resultType = stringType;
}
@@ -37273,6 +37499,8 @@ var ts;
case 29 /* LessThanEqualsToken */:
case 30 /* GreaterThanEqualsToken */:
if (checkForDisallowedESSymbolOperand(operator)) {
+ leftType = getBaseTypeOfLiteralType(leftType);
+ rightType = getBaseTypeOfLiteralType(rightType);
if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) {
reportOperatorError();
}
@@ -37469,7 +37697,7 @@ var ts;
function checkDeclarationInitializer(declaration) {
var type = checkExpressionCached(declaration.initializer);
return ts.getCombinedNodeFlags(declaration) & 2 /* Const */ ||
- ts.getCombinedModifierFlags(declaration) & 64 /* Readonly */ ||
+ ts.getCombinedModifierFlags(declaration) & 64 /* Readonly */ && !ts.isParameterPropertyDeclaration(declaration) ||
isTypeAssertion(declaration.initializer) ? type : getWidenedLiteralType(type);
}
function isLiteralContextualType(contextualType) {
@@ -37484,7 +37712,7 @@ var ts;
}
contextualType = apparentType;
}
- return maybeTypeOfKind(contextualType, 480 /* Literal */);
+ return maybeTypeOfKind(contextualType, (480 /* Literal */ | 262144 /* Index */));
}
return false;
}
@@ -37528,6 +37756,23 @@ var ts;
}
return type;
}
+ // Returns the type of an expression. Unlike checkExpression, this function is simply concerned
+ // with computing the type and may not fully check all contained sub-expressions for errors.
+ function getTypeOfExpression(node) {
+ // Optimize for the common case of a call to a function with a single non-generic call
+ // signature where we can just fetch the return type without checking the arguments.
+ if (node.kind === 179 /* CallExpression */ && node.expression.kind !== 96 /* SuperKeyword */) {
+ var funcType = checkNonNullExpression(node.expression);
+ var signature = getSingleCallSignature(funcType);
+ if (signature && !signature.typeParameters) {
+ return getReturnTypeOfSignature(signature);
+ }
+ }
+ // Otherwise simply call checkExpression. Ideally, the entire family of checkXXX functions
+ // should have a parameter that indicates whether full error checking is required such that
+ // we can perform the optimizations locally.
+ return checkExpression(node);
+ }
// Checks an expression and returns its type. The contextualMapper parameter serves two purposes: When
// contextualMapper is not undefined and not equal to the identityMapper function object it indicates that the
// expression is being inferentially typed (section 4.15.2 in spec) and provides the type mapper to use in
@@ -37730,9 +37975,9 @@ var ts;
else if (parameterName) {
var hasReportedError = false;
for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) {
- var name_22 = _a[_i].name;
- if (ts.isBindingPattern(name_22) &&
- checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_22, parameterName, typePredicate.parameterName)) {
+ var name_21 = _a[_i].name;
+ if (ts.isBindingPattern(name_21) &&
+ checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_21, parameterName, typePredicate.parameterName)) {
hasReportedError = true;
break;
}
@@ -37752,9 +37997,9 @@ var ts;
case 158 /* FunctionType */:
case 149 /* MethodDeclaration */:
case 148 /* MethodSignature */:
- var parent_10 = node.parent;
- if (node === parent_10.type) {
- return parent_10;
+ var parent_9 = node.parent;
+ if (node === parent_9.type) {
+ return parent_9;
}
}
}
@@ -37764,15 +38009,15 @@ var ts;
if (ts.isOmittedExpression(element)) {
continue;
}
- var name_23 = element.name;
- if (name_23.kind === 70 /* Identifier */ &&
- name_23.text === predicateVariableName) {
+ var name_22 = element.name;
+ if (name_22.kind === 70 /* Identifier */ &&
+ name_22.text === predicateVariableName) {
error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
return true;
}
- else if (name_23.kind === 173 /* ArrayBindingPattern */ ||
- name_23.kind === 172 /* ObjectBindingPattern */) {
- if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_23, predicateVariableNode, predicateVariableName)) {
+ else if (name_22.kind === 173 /* ArrayBindingPattern */ ||
+ name_22.kind === 172 /* ObjectBindingPattern */) {
+ if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_22, predicateVariableNode, predicateVariableName)) {
return true;
}
}
@@ -38040,8 +38285,8 @@ var ts;
if (superCallShouldBeFirst) {
var statements = node.body.statements;
var superCallStatement = void 0;
- for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) {
- var statement = statements_2[_i];
+ for (var _i = 0, statements_3 = statements; _i < statements_3.length; _i++) {
+ var statement = statements_3[_i];
if (statement.kind === 207 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
superCallStatement = statement;
break;
@@ -38194,7 +38439,7 @@ var ts;
var type = getTypeFromMappedTypeNode(node);
var constraintType = getConstraintTypeFromMappedType(type);
var keyType = constraintType.flags & 16384 /* TypeParameter */ ? getApparentTypeOfTypeParameter(constraintType) : constraintType;
- checkTypeAssignableTo(keyType, stringOrNumberType, node.typeParameter.constraint);
+ checkTypeAssignableTo(keyType, stringType, node.typeParameter.constraint);
}
function isPrivateWithinAmbient(node) {
return (ts.getModifierFlags(node) & 8 /* Private */) && ts.isInAmbientContext(node);
@@ -38475,10 +38720,10 @@ var ts;
case 229 /* EnumDeclaration */:
return 2097152 /* ExportType */ | 1048576 /* ExportValue */;
case 234 /* ImportEqualsDeclaration */:
- var result_2 = 0;
+ var result_3 = 0;
var target = resolveAlias(getSymbolOfNode(d));
- ts.forEach(target.declarations, function (d) { result_2 |= getDeclarationSpaces(d); });
- return result_2;
+ ts.forEach(target.declarations, function (d) { result_3 |= getDeclarationSpaces(d); });
+ return result_3;
default:
return 1048576 /* ExportValue */;
}
@@ -39211,8 +39456,8 @@ var ts;
// otherwise if variable has an initializer - show error that initialization will fail
// since LHS will be block scoped name instead of function scoped
if (!namesShareScope) {
- var name_24 = symbolToString(localDeclarationSymbol);
- error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_24, name_24);
+ var name_23 = symbolToString(localDeclarationSymbol);
+ error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_23, name_23);
}
}
}
@@ -39303,13 +39548,13 @@ var ts;
checkComputedPropertyName(node.propertyName);
}
// check private/protected variable access
- var parent_11 = node.parent.parent;
- var parentType = getTypeForBindingElementParent(parent_11);
- var name_25 = node.propertyName || node.name;
- var property = getPropertyOfType(parentType, ts.getTextOfPropertyName(name_25));
+ var parent_10 = node.parent.parent;
+ var parentType = getTypeForBindingElementParent(parent_10);
+ var name_24 = node.propertyName || node.name;
+ var property = getPropertyOfType(parentType, ts.getTextOfPropertyName(name_24));
markPropertyAsReferenced(property);
- if (parent_11.initializer && property && getParentOfSymbol(property)) {
- checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property);
+ if (parent_10.initializer && property && getParentOfSymbol(property)) {
+ checkClassPropertyAccess(parent_10, parent_10.initializer, parentType, property);
}
}
// For a binding pattern, check contained binding elements
@@ -39501,6 +39746,7 @@ var ts;
function checkForInStatement(node) {
// Grammar checking
checkGrammarForInOrForOfStatement(node);
+ var rightType = checkNonNullExpression(node.expression);
// TypeScript 1.0 spec (April 2014): 5.4
// In a 'for-in' statement of the form
// for (let VarDecl in Expr) Statement
@@ -39523,7 +39769,7 @@ var ts;
if (varExpr.kind === 175 /* ArrayLiteralExpression */ || varExpr.kind === 176 /* ObjectLiteralExpression */) {
error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
}
- else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 34 /* StringLike */)) {
+ else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
}
else {
@@ -39531,10 +39777,9 @@ var ts;
checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access);
}
}
- var rightType = checkNonNullExpression(node.expression);
// unknownType is returned i.e. if node.expression is identifier whose name cannot be resolved
// in this case error about missing name is already reported - do not report extra one
- if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 32768 /* Object */ | 16384 /* TypeParameter */)) {
+ if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 32768 /* Object */ | 16384 /* TypeParameter */ | 524288 /* IndexedAccess */)) {
error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
checkSourceElement(node.statement);
@@ -39724,12 +39969,12 @@ var ts;
// After we remove all types that are StringLike, we will know if there was a string constituent
// based on whether the result of filter is a new array.
var arrayTypes = arrayOrStringType.types;
- var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 34 /* StringLike */); });
+ var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 262178 /* StringLike */); });
if (filteredTypes !== arrayTypes) {
arrayType = getUnionType(filteredTypes, /*subtypeReduction*/ true);
}
}
- else if (arrayOrStringType.flags & 34 /* StringLike */) {
+ else if (arrayOrStringType.flags & 262178 /* StringLike */) {
arrayType = neverType;
}
var hasStringConstituent = arrayOrStringType !== arrayType;
@@ -39761,7 +40006,7 @@ var ts;
var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */) || unknownType;
if (hasStringConstituent) {
// This is just an optimization for the case where arrayOrStringType is string | string[]
- if (arrayElementType.flags & 34 /* StringLike */) {
+ if (arrayElementType.flags & 262178 /* StringLike */) {
return stringType;
}
return getUnionType([arrayElementType, stringType], /*subtypeReduction*/ true);
@@ -40532,7 +40777,7 @@ var ts;
return undefined;
}
}
- enumType_1 = checkExpression(expression);
+ enumType_1 = getTypeOfExpression(expression);
// allow references to constant members of other enums
if (!(enumType_1.symbol && (enumType_1.symbol.flags & 384 /* Enum */))) {
return undefined;
@@ -40753,9 +40998,9 @@ var ts;
break;
case 174 /* BindingElement */:
case 223 /* VariableDeclaration */:
- var name_26 = node.name;
- if (ts.isBindingPattern(name_26)) {
- for (var _b = 0, _c = name_26.elements; _b < _c.length; _b++) {
+ var name_25 = node.name;
+ if (ts.isBindingPattern(name_25)) {
+ for (var _b = 0, _c = name_25.elements; _b < _c.length; _b++) {
var el = _c[_b];
// mark individual names in binding pattern
checkModuleAugmentationElement(el, isGlobalAugmentation);
@@ -41587,7 +41832,7 @@ var ts;
}
// fallthrough
case 96 /* SuperKeyword */:
- var type = ts.isPartOfExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node);
+ var type = ts.isPartOfExpression(node) ? getTypeOfExpression(node) : getTypeFromTypeNode(node);
return type.symbol;
case 167 /* ThisType */:
return getTypeFromTypeNode(node).symbol;
@@ -41613,7 +41858,7 @@ var ts;
case 8 /* NumericLiteral */:
// index access
if (node.parent.kind === 178 /* ElementAccessExpression */ && node.parent.argumentExpression === node) {
- var objectType = checkExpression(node.parent.expression);
+ var objectType = getTypeOfExpression(node.parent.expression);
if (objectType === unknownType)
return undefined;
var apparentType = getApparentType(objectType);
@@ -41649,7 +41894,7 @@ var ts;
return getTypeFromTypeNode(node);
}
if (ts.isPartOfExpression(node)) {
- return getTypeOfExpression(node);
+ return getRegularTypeOfExpression(node);
}
if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) {
// A SyntaxKind.ExpressionWithTypeArguments is considered a type node, except when it occurs in the
@@ -41702,7 +41947,7 @@ var ts;
// If this is from "for" initializer
// for ({a } = elems[0];.....) { }
if (expr.parent.kind === 192 /* BinaryExpression */) {
- var iteratedType = checkExpression(expr.parent.right);
+ var iteratedType = getTypeOfExpression(expr.parent.right);
return checkDestructuringAssignment(expr, iteratedType || unknownType);
}
// If this is from nested object binding pattern
@@ -41729,11 +41974,11 @@ var ts;
var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent);
return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.text);
}
- function getTypeOfExpression(expr) {
+ function getRegularTypeOfExpression(expr) {
if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
expr = expr.parent;
}
- return getRegularTypeOfLiteralType(checkExpression(expr));
+ return getRegularTypeOfLiteralType(getTypeOfExpression(expr));
}
/**
* Gets either the static or instance type of a class element, based on
@@ -41762,9 +42007,9 @@ var ts;
function getRootSymbols(symbol) {
if (symbol.flags & 268435456 /* SyntheticProperty */) {
var symbols_3 = [];
- var name_27 = symbol.name;
+ var name_26 = symbol.name;
ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) {
- var symbol = getPropertyOfType(t, name_27);
+ var symbol = getPropertyOfType(t, name_26);
if (symbol) {
symbols_3.push(symbol);
}
@@ -41823,7 +42068,7 @@ var ts;
}
function isNameOfModuleOrEnumDeclaration(node) {
var parent = node.parent;
- return ts.isModuleOrEnumDeclaration(parent) && node === parent.name;
+ return parent && ts.isModuleOrEnumDeclaration(parent) && node === parent.name;
}
// When resolved as an expression identifier, if the given node references an exported entity, return the declaration
// node of the exported entity's container. Otherwise, return undefined.
@@ -42084,7 +42329,7 @@ var ts;
else if (isTypeOfKind(type, 340 /* NumberLike */)) {
return ts.TypeReferenceSerializationKind.NumberLikeType;
}
- else if (isTypeOfKind(type, 34 /* StringLike */)) {
+ else if (isTypeOfKind(type, 262178 /* StringLike */)) {
return ts.TypeReferenceSerializationKind.StringLikeType;
}
else if (isTupleType(type)) {
@@ -42116,7 +42361,7 @@ var ts;
getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
}
function writeTypeOfExpression(expr, enclosingDeclaration, flags, writer) {
- var type = getWidenedType(getTypeOfExpression(expr));
+ var type = getWidenedType(getRegularTypeOfExpression(expr));
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
}
function writeBaseConstructorTypeOfClass(node, enclosingDeclaration, flags, writer) {
@@ -42137,9 +42382,9 @@ var ts;
if (startInDeclarationContainer) {
// When resolving the name of a declaration as a value, we need to start resolution
// at a point outside of the declaration.
- var parent_12 = reference.parent;
- if (ts.isDeclaration(parent_12) && reference === parent_12.name) {
- location = getDeclarationContainer(parent_12);
+ var parent_11 = reference.parent;
+ if (ts.isDeclaration(parent_11) && reference === parent_11.name) {
+ location = getDeclarationContainer(parent_11);
}
}
return resolveName(location, reference.text, 107455 /* Value */ | 1048576 /* ExportValue */ | 8388608 /* Alias */, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined);
@@ -42268,9 +42513,9 @@ var ts;
// external modules cannot define or contribute to type declaration files
var current = symbol;
while (true) {
- var parent_13 = getParentOfSymbol(current);
- if (parent_13) {
- current = parent_13;
+ var parent_12 = getParentOfSymbol(current);
+ if (parent_12) {
+ current = parent_12;
}
else {
break;
@@ -42973,10 +43218,10 @@ var ts;
if (prop.kind === 259 /* SpreadAssignment */) {
continue;
}
- var name_28 = prop.name;
- if (name_28.kind === 142 /* ComputedPropertyName */) {
+ var name_27 = prop.name;
+ if (name_27.kind === 142 /* ComputedPropertyName */) {
// If the name is not a ComputedPropertyName, the grammar checking will skip it
- checkGrammarComputedPropertyName(name_28);
+ checkGrammarComputedPropertyName(name_27);
}
if (prop.kind === 258 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
// having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
@@ -43004,8 +43249,8 @@ var ts;
if (prop.kind === 257 /* PropertyAssignment */ || prop.kind === 258 /* ShorthandPropertyAssignment */) {
// Grammar checking for computedPropertyName and shorthandPropertyAssignment
checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
- if (name_28.kind === 8 /* NumericLiteral */) {
- checkGrammarNumericLiteral(name_28);
+ if (name_27.kind === 8 /* NumericLiteral */) {
+ checkGrammarNumericLiteral(name_27);
}
currentKind = Property;
}
@@ -43021,7 +43266,7 @@ var ts;
else {
ts.Debug.fail("Unexpected syntax kind:" + prop.kind);
}
- var effectiveName = ts.getPropertyNameForPropertyNameNode(name_28);
+ var effectiveName = ts.getPropertyNameForPropertyNameNode(name_27);
if (effectiveName === undefined) {
continue;
}
@@ -43031,18 +43276,18 @@ var ts;
else {
var existingKind = seen[effectiveName];
if (currentKind === Property && existingKind === Property) {
- grammarErrorOnNode(name_28, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_28));
+ grammarErrorOnNode(name_27, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_27));
}
else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
seen[effectiveName] = currentKind | existingKind;
}
else {
- return grammarErrorOnNode(name_28, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
+ return grammarErrorOnNode(name_27, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
}
}
else {
- return grammarErrorOnNode(name_28, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
+ return grammarErrorOnNode(name_27, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
}
}
}
@@ -43055,12 +43300,12 @@ var ts;
continue;
}
var jsxAttr = attr;
- var name_29 = jsxAttr.name;
- if (!seen[name_29.text]) {
- seen[name_29.text] = true;
+ var name_28 = jsxAttr.name;
+ if (!seen[name_28.text]) {
+ seen[name_28.text] = true;
}
else {
- return grammarErrorOnNode(name_29, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
+ return grammarErrorOnNode(name_28, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
}
var initializer = jsxAttr.initializer;
if (initializer && initializer.kind === 252 /* JsxExpression */ && !initializer.expression) {
@@ -43577,19 +43822,24 @@ var ts;
function reduceNode(node, f, initial) {
return node ? f(initial, node) : initial;
}
+ function reduceNodeArray(nodes, f, initial) {
+ return nodes ? f(initial, nodes) : initial;
+ }
/**
* Similar to `reduceLeft`, performs a reduction against each child of a node.
* NOTE: Unlike `forEachChild`, this does *not* visit every node. Only nodes added to the
* `nodeEdgeTraversalMap` above will be visited.
*
* @param node The node containing the children to reduce.
- * @param f The callback function
* @param initial The initial value to supply to the reduction.
+ * @param f The callback function
*/
- function reduceEachChild(node, f, initial) {
+ function reduceEachChild(node, initial, cbNode, cbNodeArray) {
if (node === undefined) {
return initial;
}
+ var reduceNodes = cbNodeArray ? reduceNodeArray : ts.reduceLeft;
+ var cbNodes = cbNodeArray || cbNode;
var kind = node.kind;
// No need to visit nodes with no children.
if ((kind > 0 /* FirstToken */ && kind <= 140 /* LastToken */)) {
@@ -43606,114 +43856,114 @@ var ts;
case 206 /* EmptyStatement */:
case 198 /* OmittedExpression */:
case 222 /* DebuggerStatement */:
- case 292 /* NotEmittedStatement */:
+ case 293 /* NotEmittedStatement */:
// No need to visit nodes with no children.
break;
// Names
case 142 /* ComputedPropertyName */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
// Signature elements
case 144 /* Parameter */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
case 145 /* Decorator */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
// Type member
case 147 /* PropertyDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
case 149 /* MethodDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 150 /* Constructor */:
- result = ts.reduceLeft(node.modifiers, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 151 /* GetAccessor */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 152 /* SetAccessor */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.body, cbNode, result);
break;
// Binding patterns
case 172 /* ObjectBindingPattern */:
case 173 /* ArrayBindingPattern */:
- result = ts.reduceLeft(node.elements, f, result);
+ result = reduceNodes(node.elements, cbNodes, result);
break;
case 174 /* BindingElement */:
- result = reduceNode(node.propertyName, f, result);
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNode(node.propertyName, cbNode, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
// Expression
case 175 /* ArrayLiteralExpression */:
- result = ts.reduceLeft(node.elements, f, result);
+ result = reduceNodes(node.elements, cbNodes, result);
break;
case 176 /* ObjectLiteralExpression */:
- result = ts.reduceLeft(node.properties, f, result);
+ result = reduceNodes(node.properties, cbNodes, result);
break;
case 177 /* PropertyAccessExpression */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.name, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.name, cbNode, result);
break;
case 178 /* ElementAccessExpression */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.argumentExpression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.argumentExpression, cbNode, result);
break;
case 179 /* CallExpression */:
- result = reduceNode(node.expression, f, result);
- result = ts.reduceLeft(node.typeArguments, f, result);
- result = ts.reduceLeft(node.arguments, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNodes(node.typeArguments, cbNodes, result);
+ result = reduceNodes(node.arguments, cbNodes, result);
break;
case 180 /* NewExpression */:
- result = reduceNode(node.expression, f, result);
- result = ts.reduceLeft(node.typeArguments, f, result);
- result = ts.reduceLeft(node.arguments, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNodes(node.typeArguments, cbNodes, result);
+ result = reduceNodes(node.arguments, cbNodes, result);
break;
case 181 /* TaggedTemplateExpression */:
- result = reduceNode(node.tag, f, result);
- result = reduceNode(node.template, f, result);
+ result = reduceNode(node.tag, cbNode, result);
+ result = reduceNode(node.template, cbNode, result);
break;
case 184 /* FunctionExpression */:
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 185 /* ArrowFunction */:
- result = ts.reduceLeft(node.modifiers, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 183 /* ParenthesizedExpression */:
case 186 /* DeleteExpression */:
@@ -43723,212 +43973,212 @@ var ts;
case 195 /* YieldExpression */:
case 196 /* SpreadElement */:
case 201 /* NonNullExpression */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 190 /* PrefixUnaryExpression */:
case 191 /* PostfixUnaryExpression */:
- result = reduceNode(node.operand, f, result);
+ result = reduceNode(node.operand, cbNode, result);
break;
case 192 /* BinaryExpression */:
- result = reduceNode(node.left, f, result);
- result = reduceNode(node.right, f, result);
+ result = reduceNode(node.left, cbNode, result);
+ result = reduceNode(node.right, cbNode, result);
break;
case 193 /* ConditionalExpression */:
- result = reduceNode(node.condition, f, result);
- result = reduceNode(node.whenTrue, f, result);
- result = reduceNode(node.whenFalse, f, result);
+ result = reduceNode(node.condition, cbNode, result);
+ result = reduceNode(node.whenTrue, cbNode, result);
+ result = reduceNode(node.whenFalse, cbNode, result);
break;
case 194 /* TemplateExpression */:
- result = reduceNode(node.head, f, result);
- result = ts.reduceLeft(node.templateSpans, f, result);
+ result = reduceNode(node.head, cbNode, result);
+ result = reduceNodes(node.templateSpans, cbNodes, result);
break;
case 197 /* ClassExpression */:
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.heritageClauses, f, result);
- result = ts.reduceLeft(node.members, f, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.heritageClauses, cbNodes, result);
+ result = reduceNodes(node.members, cbNodes, result);
break;
case 199 /* ExpressionWithTypeArguments */:
- result = reduceNode(node.expression, f, result);
- result = ts.reduceLeft(node.typeArguments, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNodes(node.typeArguments, cbNodes, result);
break;
// Misc
case 202 /* TemplateSpan */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.literal, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.literal, cbNode, result);
break;
// Element
case 204 /* Block */:
- result = ts.reduceLeft(node.statements, f, result);
+ result = reduceNodes(node.statements, cbNodes, result);
break;
case 205 /* VariableStatement */:
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.declarationList, f, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.declarationList, cbNode, result);
break;
case 207 /* ExpressionStatement */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 208 /* IfStatement */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.thenStatement, f, result);
- result = reduceNode(node.elseStatement, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.thenStatement, cbNode, result);
+ result = reduceNode(node.elseStatement, cbNode, result);
break;
case 209 /* DoStatement */:
- result = reduceNode(node.statement, f, result);
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.statement, cbNode, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 210 /* WhileStatement */:
case 217 /* WithStatement */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.statement, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.statement, cbNode, result);
break;
case 211 /* ForStatement */:
- result = reduceNode(node.initializer, f, result);
- result = reduceNode(node.condition, f, result);
- result = reduceNode(node.incrementor, f, result);
- result = reduceNode(node.statement, f, result);
+ result = reduceNode(node.initializer, cbNode, result);
+ result = reduceNode(node.condition, cbNode, result);
+ result = reduceNode(node.incrementor, cbNode, result);
+ result = reduceNode(node.statement, cbNode, result);
break;
case 212 /* ForInStatement */:
case 213 /* ForOfStatement */:
- result = reduceNode(node.initializer, f, result);
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.statement, f, result);
+ result = reduceNode(node.initializer, cbNode, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.statement, cbNode, result);
break;
case 216 /* ReturnStatement */:
case 220 /* ThrowStatement */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 218 /* SwitchStatement */:
- result = reduceNode(node.expression, f, result);
- result = reduceNode(node.caseBlock, f, result);
+ result = reduceNode(node.expression, cbNode, result);
+ result = reduceNode(node.caseBlock, cbNode, result);
break;
case 219 /* LabeledStatement */:
- result = reduceNode(node.label, f, result);
- result = reduceNode(node.statement, f, result);
+ result = reduceNode(node.label, cbNode, result);
+ result = reduceNode(node.statement, cbNode, result);
break;
case 221 /* TryStatement */:
- result = reduceNode(node.tryBlock, f, result);
- result = reduceNode(node.catchClause, f, result);
- result = reduceNode(node.finallyBlock, f, result);
+ result = reduceNode(node.tryBlock, cbNode, result);
+ result = reduceNode(node.catchClause, cbNode, result);
+ result = reduceNode(node.finallyBlock, cbNode, result);
break;
case 223 /* VariableDeclaration */:
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
case 224 /* VariableDeclarationList */:
- result = ts.reduceLeft(node.declarations, f, result);
+ result = reduceNodes(node.declarations, cbNodes, result);
break;
case 225 /* FunctionDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.parameters, f, result);
- result = reduceNode(node.type, f, result);
- result = reduceNode(node.body, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.parameters, cbNodes, result);
+ result = reduceNode(node.type, cbNode, result);
+ result = reduceNode(node.body, cbNode, result);
break;
case 226 /* ClassDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.name, f, result);
- result = ts.reduceLeft(node.typeParameters, f, result);
- result = ts.reduceLeft(node.heritageClauses, f, result);
- result = ts.reduceLeft(node.members, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNodes(node.typeParameters, cbNodes, result);
+ result = reduceNodes(node.heritageClauses, cbNodes, result);
+ result = reduceNodes(node.members, cbNodes, result);
break;
case 232 /* CaseBlock */:
- result = ts.reduceLeft(node.clauses, f, result);
+ result = reduceNodes(node.clauses, cbNodes, result);
break;
case 235 /* ImportDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.importClause, f, result);
- result = reduceNode(node.moduleSpecifier, f, result);
+ result = reduceNodes(node.decorators, cbNodes, result);
+ result = reduceNodes(node.modifiers, cbNodes, result);
+ result = reduceNode(node.importClause, cbNode, result);
+ result = reduceNode(node.moduleSpecifier, cbNode, result);
break;
case 236 /* ImportClause */:
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.namedBindings, f, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.namedBindings, cbNode, result);
break;
case 237 /* NamespaceImport */:
- result = reduceNode(node.name, f, result);
+ result = reduceNode(node.name, cbNode, result);
break;
case 238 /* NamedImports */:
case 242 /* NamedExports */:
- result = ts.reduceLeft(node.elements, f, result);
+ result = reduceNodes(node.elements, cbNodes, result);
break;
case 239 /* ImportSpecifier */:
case 243 /* ExportSpecifier */:
- result = reduceNode(node.propertyName, f, result);
- result = reduceNode(node.name, f, result);
+ result = reduceNode(node.propertyName, cbNode, result);
+ result = reduceNode(node.name, cbNode, result);
break;
case 240 /* ExportAssignment */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.expression, f, result);
+ result = ts.reduceLeft(node.decorators, cbNode, result);
+ result = ts.reduceLeft(node.modifiers, cbNode, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 241 /* ExportDeclaration */:
- result = ts.reduceLeft(node.decorators, f, result);
- result = ts.reduceLeft(node.modifiers, f, result);
- result = reduceNode(node.exportClause, f, result);
- result = reduceNode(node.moduleSpecifier, f, result);
+ result = ts.reduceLeft(node.decorators, cbNode, result);
+ result = ts.reduceLeft(node.modifiers, cbNode, result);
+ result = reduceNode(node.exportClause, cbNode, result);
+ result = reduceNode(node.moduleSpecifier, cbNode, result);
break;
// JSX
case 246 /* JsxElement */:
- result = reduceNode(node.openingElement, f, result);
- result = ts.reduceLeft(node.children, f, result);
- result = reduceNode(node.closingElement, f, result);
+ result = reduceNode(node.openingElement, cbNode, result);
+ result = ts.reduceLeft(node.children, cbNode, result);
+ result = reduceNode(node.closingElement, cbNode, result);
break;
case 247 /* JsxSelfClosingElement */:
case 248 /* JsxOpeningElement */:
- result = reduceNode(node.tagName, f, result);
- result = ts.reduceLeft(node.attributes, f, result);
+ result = reduceNode(node.tagName, cbNode, result);
+ result = reduceNodes(node.attributes, cbNodes, result);
break;
case 249 /* JsxClosingElement */:
- result = reduceNode(node.tagName, f, result);
+ result = reduceNode(node.tagName, cbNode, result);
break;
case 250 /* JsxAttribute */:
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
case 251 /* JsxSpreadAttribute */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
case 252 /* JsxExpression */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
// Clauses
case 253 /* CaseClause */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
// fall-through
case 254 /* DefaultClause */:
- result = ts.reduceLeft(node.statements, f, result);
+ result = reduceNodes(node.statements, cbNodes, result);
break;
case 255 /* HeritageClause */:
- result = ts.reduceLeft(node.types, f, result);
+ result = reduceNodes(node.types, cbNodes, result);
break;
case 256 /* CatchClause */:
- result = reduceNode(node.variableDeclaration, f, result);
- result = reduceNode(node.block, f, result);
+ result = reduceNode(node.variableDeclaration, cbNode, result);
+ result = reduceNode(node.block, cbNode, result);
break;
// Property assignments
case 257 /* PropertyAssignment */:
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.initializer, f, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.initializer, cbNode, result);
break;
case 258 /* ShorthandPropertyAssignment */:
- result = reduceNode(node.name, f, result);
- result = reduceNode(node.objectAssignmentInitializer, f, result);
+ result = reduceNode(node.name, cbNode, result);
+ result = reduceNode(node.objectAssignmentInitializer, cbNode, result);
break;
case 259 /* SpreadAssignment */:
- result = reduceNode(node.expression, f, result);
+ result = reduceNode(node.expression, cbNode, result);
break;
// Top-level nodes
case 261 /* SourceFile */:
- result = ts.reduceLeft(node.statements, f, result);
+ result = reduceNodes(node.statements, cbNodes, result);
break;
- case 293 /* PartiallyEmittedExpression */:
- result = reduceNode(node.expression, f, result);
+ case 294 /* PartiallyEmittedExpression */:
+ result = reduceNode(node.expression, cbNode, result);
break;
default:
var edgeTraversalPath = nodeEdgeTraversalMap[kind];
@@ -43938,8 +44188,8 @@ var ts;
var value = node[edge.name];
if (value !== undefined) {
result = ts.isArray(value)
- ? ts.reduceLeft(value, f, result)
- : f(result, value);
+ ? reduceNodes(value, cbNodes, result)
+ : cbNode(result, value);
}
}
}
@@ -43949,8 +44199,8 @@ var ts;
}
ts.reduceEachChild = reduceEachChild;
function visitNode(node, visitor, test, optional, lift, parenthesize, parentNode) {
- if (node === undefined) {
- return undefined;
+ if (node === undefined || visitor === undefined) {
+ return node;
}
aggregateTransformFlags(node);
var visited = visitor(node);
@@ -44034,6 +44284,43 @@ var ts;
return updated || nodes;
}
ts.visitNodes = visitNodes;
+ /**
+ * Starts a new lexical environment and visits a statement list, ending the lexical environment
+ * and merging hoisted declarations upon completion.
+ */
+ function visitLexicalEnvironment(statements, visitor, context, start, ensureUseStrict) {
+ context.startLexicalEnvironment();
+ statements = visitNodes(statements, visitor, ts.isStatement, start);
+ if (ensureUseStrict && !ts.startsWithUseStrict(statements)) {
+ statements = ts.createNodeArray([ts.createStatement(ts.createLiteral("use strict"))].concat(statements), statements);
+ }
+ var declarations = context.endLexicalEnvironment();
+ return ts.createNodeArray(ts.concatenate(statements, declarations), statements);
+ }
+ ts.visitLexicalEnvironment = visitLexicalEnvironment;
+ /**
+ * Starts a new lexical environment and visits a parameter list, suspending the lexical
+ * environment upon completion.
+ */
+ function visitParameterList(nodes, visitor, context) {
+ context.startLexicalEnvironment();
+ var updated = visitNodes(nodes, visitor, ts.isParameterDeclaration);
+ context.suspendLexicalEnvironment();
+ return updated;
+ }
+ ts.visitParameterList = visitParameterList;
+ function visitFunctionBody(node, visitor, context) {
+ context.resumeLexicalEnvironment();
+ var updated = visitNode(node, visitor, ts.isConciseBody);
+ var declarations = context.endLexicalEnvironment();
+ if (ts.some(declarations)) {
+ var block = ts.convertToFunctionBody(updated);
+ var statements = mergeLexicalEnvironment(block.statements, declarations);
+ return ts.updateBlock(block, statements);
+ }
+ return updated;
+ }
+ ts.visitFunctionBody = visitFunctionBody;
function visitEachChild(node, visitor, context) {
if (node === undefined) {
return undefined;
@@ -44059,25 +44346,25 @@ var ts;
return ts.updateComputedPropertyName(node, visitNode(node.expression, visitor, ts.isExpression));
// Signature elements
case 144 /* Parameter */:
- return ts.updateParameter(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitNode(node.initializer, visitor, ts.isExpression, /*optional*/ true));
+ return ts.updateParameter(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), node.dotDotDotToken, visitNode(node.name, visitor, ts.isBindingName), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitNode(node.initializer, visitor, ts.isExpression, /*optional*/ true));
// Type member
case 147 /* PropertyDeclaration */:
return ts.updateProperty(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitNode(node.initializer, visitor, ts.isExpression, /*optional*/ true));
case 149 /* MethodDeclaration */:
- return ts.updateMethod(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateMethod(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), visitParameterList(node.parameters, visitor, context), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitFunctionBody(node.body, visitor, context));
case 150 /* Constructor */:
- return ts.updateConstructor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateConstructor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context), visitFunctionBody(node.body, visitor, context));
case 151 /* GetAccessor */:
- return ts.updateGetAccessor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateGetAccessor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitFunctionBody(node.body, visitor, context));
case 152 /* SetAccessor */:
- return ts.updateSetAccessor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateSetAccessor(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context), visitFunctionBody(node.body, visitor, context));
// Binding patterns
case 172 /* ObjectBindingPattern */:
return ts.updateObjectBindingPattern(node, visitNodes(node.elements, visitor, ts.isBindingElement));
case 173 /* ArrayBindingPattern */:
return ts.updateArrayBindingPattern(node, visitNodes(node.elements, visitor, ts.isArrayBindingElement));
case 174 /* BindingElement */:
- return ts.updateBindingElement(node, visitNode(node.propertyName, visitor, ts.isPropertyName, /*optional*/ true), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.initializer, visitor, ts.isExpression, /*optional*/ true));
+ return ts.updateBindingElement(node, node.dotDotDotToken, visitNode(node.propertyName, visitor, ts.isPropertyName, /*optional*/ true), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.initializer, visitor, ts.isExpression, /*optional*/ true));
// Expression
case 175 /* ArrayLiteralExpression */:
return ts.updateArrayLiteral(node, visitNodes(node.elements, visitor, ts.isExpression));
@@ -44096,9 +44383,9 @@ var ts;
case 183 /* ParenthesizedExpression */:
return ts.updateParen(node, visitNode(node.expression, visitor, ts.isExpression));
case 184 /* FunctionExpression */:
- return ts.updateFunctionExpression(node, visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateFunctionExpression(node, visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), visitParameterList(node.parameters, visitor, context), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitFunctionBody(node.body, visitor, context));
case 185 /* ArrowFunction */:
- return ts.updateArrowFunction(node, visitNodes(node.modifiers, visitor, ts.isModifier), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isConciseBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateArrowFunction(node, visitNodes(node.modifiers, visitor, ts.isModifier), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), visitParameterList(node.parameters, visitor, context), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitFunctionBody(node.body, visitor, context));
case 186 /* DeleteExpression */:
return ts.updateDelete(node, visitNode(node.expression, visitor, ts.isExpression));
case 187 /* TypeOfExpression */:
@@ -44168,7 +44455,7 @@ var ts;
case 224 /* VariableDeclarationList */:
return ts.updateVariableDeclarationList(node, visitNodes(node.declarations, visitor, ts.isVariableDeclaration));
case 225 /* FunctionDeclaration */:
- return ts.updateFunctionDeclaration(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), (context.startLexicalEnvironment(), visitNodes(node.parameters, visitor, ts.isParameter)), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), mergeFunctionBodyLexicalEnvironment(visitNode(node.body, visitor, ts.isFunctionBody, /*optional*/ true), context.endLexicalEnvironment()));
+ return ts.updateFunctionDeclaration(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), visitParameterList(node.parameters, visitor, context), visitNode(node.type, visitor, ts.isTypeNode, /*optional*/ true), visitFunctionBody(node.body, visitor, context));
case 226 /* ClassDeclaration */:
return ts.updateClassDeclaration(node, visitNodes(node.decorators, visitor, ts.isDecorator), visitNodes(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier, /*optional*/ true), visitNodes(node.typeParameters, visitor, ts.isTypeParameter), visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), visitNodes(node.members, visitor, ts.isClassElement));
case 232 /* CaseBlock */:
@@ -44224,10 +44511,9 @@ var ts;
return ts.updateSpreadAssignment(node, visitNode(node.expression, visitor, ts.isExpression));
// Top-level nodes
case 261 /* SourceFile */:
- context.startLexicalEnvironment();
- return ts.updateSourceFileNode(node, ts.createNodeArray(ts.concatenate(visitNodes(node.statements, visitor, ts.isStatement), context.endLexicalEnvironment()), node.statements));
+ return ts.updateSourceFileNode(node, visitLexicalEnvironment(node.statements, visitor, context));
// Transformation nodes
- case 293 /* PartiallyEmittedExpression */:
+ case 294 /* PartiallyEmittedExpression */:
return ts.updatePartiallyEmittedExpression(node, visitNode(node.expression, visitor, ts.isExpression));
default:
var updated = void 0;
@@ -44256,6 +44542,15 @@ var ts;
// return node;
}
ts.visitEachChild = visitEachChild;
+ function mergeLexicalEnvironment(statements, declarations) {
+ if (!ts.some(declarations)) {
+ return statements;
+ }
+ return ts.isNodeArray(statements)
+ ? ts.createNodeArray(ts.concatenate(statements, declarations), statements)
+ : ts.addRange(statements, declarations);
+ }
+ ts.mergeLexicalEnvironment = mergeLexicalEnvironment;
function mergeFunctionBodyLexicalEnvironment(body, declarations) {
if (body && declarations !== undefined && declarations.length > 0) {
if (ts.isBlock(body)) {
@@ -44308,13 +44603,25 @@ var ts;
if (node === undefined) {
return 0 /* None */;
}
- else if (node.transformFlags & 536870912 /* HasComputedFlags */) {
+ if (node.transformFlags & 536870912 /* HasComputedFlags */) {
return node.transformFlags & ~ts.getTransformFlagsSubtreeExclusions(node.kind);
}
- else {
- var subtreeFlags = aggregateTransformFlagsForSubtree(node);
- return ts.computeTransformFlagsForNode(node, subtreeFlags);
+ var subtreeFlags = aggregateTransformFlagsForSubtree(node);
+ return ts.computeTransformFlagsForNode(node, subtreeFlags);
+ }
+ function aggregateTransformFlagsForNodeArray(nodes) {
+ if (nodes === undefined) {
+ return 0 /* None */;
+ }
+ var subtreeFlags = 0 /* None */;
+ var nodeArrayFlags = 0 /* None */;
+ for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
+ var node = nodes_3[_i];
+ subtreeFlags |= aggregateTransformFlagsForNode(node);
+ nodeArrayFlags |= node.transformFlags & ~536870912 /* HasComputedFlags */;
}
+ nodes.transformFlags = nodeArrayFlags | 536870912 /* HasComputedFlags */;
+ return subtreeFlags;
}
/**
* Aggregates the transform flags for the subtree of a node.
@@ -44326,14 +44633,17 @@ var ts;
return 0 /* None */;
}
// Aggregate the transform flags of each child.
- return reduceEachChild(node, aggregateTransformFlagsForChildNode, 0 /* None */);
+ return reduceEachChild(node, 0 /* None */, aggregateTransformFlagsForChildNode, aggregateTransformFlagsForChildNodes);
}
/**
* Aggregates the TransformFlags of a child node with the TransformFlags of its
* siblings.
*/
- function aggregateTransformFlagsForChildNode(transformFlags, child) {
- return transformFlags | aggregateTransformFlagsForNode(child);
+ function aggregateTransformFlagsForChildNode(transformFlags, node) {
+ return transformFlags | aggregateTransformFlagsForNode(node);
+ }
+ function aggregateTransformFlagsForChildNodes(transformFlags, nodes) {
+ return transformFlags | aggregateTransformFlagsForNodeArray(nodes);
}
var Debug;
(function (Debug) {
@@ -44343,9 +44653,21 @@ var ts;
Debug.failBadSyntaxKind = Debug.shouldAssert(1 /* Normal */)
? function (node, message) { return Debug.assert(false, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was unexpected."; }); }
: ts.noop;
+ Debug.assertEachNode = Debug.shouldAssert(1 /* Normal */)
+ ? function (nodes, test, message) { return Debug.assert(test === undefined || ts.every(nodes, test), message || "Unexpected node.", function () { return "Node array did not pass test '" + getFunctionName(test) + "'."; }); }
+ : ts.noop;
Debug.assertNode = Debug.shouldAssert(1 /* Normal */)
? function (node, test, message) { return Debug.assert(test === undefined || test(node), message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }); }
: ts.noop;
+ Debug.assertOptionalNode = Debug.shouldAssert(1 /* Normal */)
+ ? function (node, test, message) { return Debug.assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }); }
+ : ts.noop;
+ Debug.assertOptionalToken = Debug.shouldAssert(1 /* Normal */)
+ ? function (node, kind, message) { return Debug.assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was not a '" + ts.formatSyntaxKind(kind) + "' token."; }); }
+ : ts.noop;
+ Debug.assertMissingNode = Debug.shouldAssert(1 /* Normal */)
+ ? function (node, message) { return Debug.assert(node === undefined, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was unexpected'."; }); }
+ : ts.noop;
function getFunctionName(func) {
if (typeof func !== "function") {
return "";
@@ -44367,504 +44689,348 @@ var ts;
/*@internal*/
var ts;
(function (ts) {
+ var FlattenLevel;
+ (function (FlattenLevel) {
+ FlattenLevel[FlattenLevel["All"] = 0] = "All";
+ FlattenLevel[FlattenLevel["ObjectRest"] = 1] = "ObjectRest";
+ })(FlattenLevel = ts.FlattenLevel || (ts.FlattenLevel = {}));
/**
- * Flattens a destructuring assignment expression.
+ * Flattens a DestructuringAssignment or a VariableDeclaration to an expression.
*
- * @param root The destructuring assignment expression.
- * @param needsValue Indicates whether the value from the right-hand-side of the
- * destructuring assignment is needed as part of a larger expression.
- * @param recordTempVariable A callback used to record new temporary variables.
- * @param visitor An optional visitor to use to visit expressions.
+ * @param node The node to flatten.
+ * @param visitor An optional visitor used to visit initializers.
+ * @param context The transformation context.
+ * @param level Indicates the extent to which flattening should occur.
+ * @param needsValue An optional value indicating whether the value from the right-hand-side of
+ * the destructuring assignment is needed as part of a larger expression.
+ * @param createAssignmentCallback An optional callback used to create the assignment expression.
*/
- function flattenDestructuringAssignment(context, node, needsValue, recordTempVariable, visitor, transformRest) {
- if (ts.isEmptyObjectLiteralOrArrayLiteral(node.left)) {
- var right = node.right;
- if (ts.isDestructuringAssignment(right)) {
- return flattenDestructuringAssignment(context, right, needsValue, recordTempVariable, visitor);
- }
- else {
- return node.right;
- }
- }
+ function flattenDestructuringAssignment(node, visitor, context, level, needsValue, createAssignmentCallback) {
var location = node;
- var value = node.right;
- var expressions = [];
- if (needsValue) {
- // If the right-hand value of the destructuring assignment needs to be preserved (as
- // is the case when the destructuring assignmen) is part of a larger expression),
- // then we need to cache the right-hand value.
- //
- // The source map location for the assignment should point to the entire binary
- // expression.
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, location, emitTempVariableAssignment, visitor);
+ var value;
+ if (ts.isDestructuringAssignment(node)) {
+ value = node.right;
+ while (ts.isEmptyObjectLiteralOrArrayLiteral(node.left)) {
+ if (ts.isDestructuringAssignment(value)) {
+ location = node = value;
+ value = node.right;
+ }
+ else {
+ return value;
+ }
+ }
}
- else if (ts.nodeIsSynthesized(node)) {
- // Generally, the source map location for a destructuring assignment is the root
- // expression.
- //
- // However, if the root expression is synthesized (as in the case
- // of the initializer when transforming a ForOfStatement), then the source map
- // location should point to the right-hand value of the expression.
- location = value;
+ var expressions;
+ var flattenContext = {
+ context: context,
+ level: level,
+ hoistTempVariables: true,
+ emitExpression: emitExpression,
+ emitBindingOrAssignment: emitBindingOrAssignment,
+ createArrayBindingOrAssignmentPattern: makeArrayAssignmentPattern,
+ createObjectBindingOrAssignmentPattern: makeObjectAssignmentPattern,
+ createArrayBindingOrAssignmentElement: makeAssignmentElement,
+ visitor: visitor
+ };
+ if (value) {
+ value = ts.visitNode(value, visitor, ts.isExpression);
+ if (needsValue) {
+ // If the right-hand value of the destructuring assignment needs to be preserved (as
+ // is the case when the destructuring assignment is part of a larger expression),
+ // then we need to cache the right-hand value.
+ //
+ // The source map location for the assignment should point to the entire binary
+ // expression.
+ value = ensureIdentifier(flattenContext, value, /*reuseIdentifierExpressions*/ true, location);
+ }
+ else if (ts.nodeIsSynthesized(node)) {
+ // Generally, the source map location for a destructuring assignment is the root
+ // expression.
+ //
+ // However, if the root expression is synthesized (as in the case
+ // of the initializer when transforming a ForOfStatement), then the source map
+ // location should point to the right-hand value of the expression.
+ location = value;
+ }
}
- flattenDestructuring(node, value, location, emitAssignment, emitTempVariableAssignment, recordTempVariable, emitRestAssignment, transformRest, visitor);
- if (needsValue) {
+ flattenBindingOrAssignmentElement(flattenContext, node, value, location, /*skipInitializer*/ ts.isDestructuringAssignment(node));
+ if (value && needsValue) {
+ if (!ts.some(expressions)) {
+ return value;
+ }
expressions.push(value);
}
- var expression = ts.inlineExpressions(expressions);
- ts.aggregateTransformFlags(expression);
- return expression;
- function emitAssignment(name, value, location) {
- var expression = ts.createAssignment(name, value, location);
+ return ts.aggregateTransformFlags(ts.inlineExpressions(expressions)) || ts.createOmittedExpression();
+ function emitExpression(expression) {
// NOTE: this completely disables source maps, but aligns with the behavior of
// `emitAssignment` in the old emitter.
- ts.setEmitFlags(expression, 2048 /* NoNestedSourceMaps */);
+ ts.setEmitFlags(expression, 64 /* NoNestedSourceMaps */);
ts.aggregateTransformFlags(expression);
- expressions.push(expression);
- }
- function emitTempVariableAssignment(value, location) {
- var name = ts.createTempVariable(recordTempVariable);
- emitAssignment(name, value, location);
- return name;
+ expressions = ts.append(expressions, expression);
}
- function emitRestAssignment(elements, value, location) {
- emitAssignment(ts.createObjectLiteral(elements), value, location);
+ function emitBindingOrAssignment(target, value, location, original) {
+ ts.Debug.assertNode(target, createAssignmentCallback ? ts.isIdentifier : ts.isExpression);
+ var expression = createAssignmentCallback
+ ? createAssignmentCallback(target, value, location)
+ : ts.createAssignment(ts.visitNode(target, visitor, ts.isExpression), value, location);
+ expression.original = original;
+ emitExpression(expression);
}
}
ts.flattenDestructuringAssignment = flattenDestructuringAssignment;
/**
- * Flattens binding patterns in a parameter declaration.
+ * Flattens a VariableDeclaration or ParameterDeclaration to one or more variable declarations.
*
- * @param node The ParameterDeclaration to flatten.
- * @param value The rhs value for the binding pattern.
- * @param visitor An optional visitor to use to visit expressions.
+ * @param node The node to flatten.
+ * @param visitor An optional visitor used to visit initializers.
+ * @param context The transformation context.
+ * @param boundValue The value bound to the declaration.
+ * @param skipInitializer A value indicating whether to ignore the initializer of `node`.
+ * @param hoistTempVariables Indicates whether temporary variables should not be recorded in-line.
+ * @param level Indicates the extent to which flattening should occur.
*/
- function flattenParameterDestructuring(node, value, visitor, transformRest) {
+ function flattenDestructuringBinding(node, visitor, context, level, rval, hoistTempVariables, skipInitializer) {
+ var pendingExpressions;
+ var pendingDeclarations = [];
var declarations = [];
- flattenDestructuring(node, value, node, emitAssignment, emitTempVariableAssignment, ts.noop, emitRestAssignment, transformRest, visitor);
- return declarations;
- function emitAssignment(name, value, location) {
- var declaration = ts.createVariableDeclaration(name, /*type*/ undefined, value, location);
- // NOTE: this completely disables source maps, but aligns with the behavior of
- // `emitAssignment` in the old emitter.
- ts.setEmitFlags(declaration, 2048 /* NoNestedSourceMaps */);
- ts.aggregateTransformFlags(declaration);
- declarations.push(declaration);
- }
- function emitTempVariableAssignment(value, location) {
- var name = ts.createTempVariable(/*recordTempVariable*/ undefined);
- emitAssignment(name, value, location);
- return name;
+ var flattenContext = {
+ context: context,
+ level: level,
+ hoistTempVariables: hoistTempVariables,
+ emitExpression: emitExpression,
+ emitBindingOrAssignment: emitBindingOrAssignment,
+ createArrayBindingOrAssignmentPattern: makeArrayBindingPattern,
+ createObjectBindingOrAssignmentPattern: makeObjectBindingPattern,
+ createArrayBindingOrAssignmentElement: makeBindingElement,
+ visitor: visitor
+ };
+ flattenBindingOrAssignmentElement(flattenContext, node, rval, node, skipInitializer);
+ if (pendingExpressions) {
+ var temp = ts.createTempVariable(/*recordTempVariable*/ undefined);
+ if (hoistTempVariables) {
+ var value = ts.inlineExpressions(pendingExpressions);
+ pendingExpressions = undefined;
+ emitBindingOrAssignment(temp, value, /*location*/ undefined, /*original*/ undefined);
+ }
+ else {
+ context.hoistVariableDeclaration(temp);
+ var pendingDeclaration = ts.lastOrUndefined(pendingDeclarations);
+ pendingDeclaration.pendingExpressions = ts.append(pendingDeclaration.pendingExpressions, ts.createAssignment(temp, pendingDeclaration.value));
+ ts.addRange(pendingDeclaration.pendingExpressions, pendingExpressions);
+ pendingDeclaration.value = temp;
+ }
}
- function emitRestAssignment(elements, value, location) {
- emitAssignment(ts.createObjectBindingPattern(elements), value, location);
+ for (var _i = 0, pendingDeclarations_1 = pendingDeclarations; _i < pendingDeclarations_1.length; _i++) {
+ var _a = pendingDeclarations_1[_i], pendingExpressions_1 = _a.pendingExpressions, name_29 = _a.name, value = _a.value, location_2 = _a.location, original = _a.original;
+ var variable = ts.createVariableDeclaration(name_29,
+ /*type*/ undefined, pendingExpressions_1 ? ts.inlineExpressions(ts.append(pendingExpressions_1, value)) : value, location_2);
+ variable.original = original;
+ if (ts.isIdentifier(name_29)) {
+ ts.setEmitFlags(variable, 64 /* NoNestedSourceMaps */);
+ }
+ ts.aggregateTransformFlags(variable);
+ declarations.push(variable);
}
- }
- ts.flattenParameterDestructuring = flattenParameterDestructuring;
- /**
- * Flattens binding patterns in a variable declaration.
- *
- * @param node The VariableDeclaration to flatten.
- * @param value An optional rhs value for the binding pattern.
- * @param visitor An optional visitor to use to visit expressions.
- */
- function flattenVariableDestructuring(node, value, visitor, recordTempVariable, transformRest) {
- var declarations = [];
- var pendingAssignments;
- flattenDestructuring(node, value, node, emitAssignment, emitTempVariableAssignment, recordTempVariable, emitRestAssignment, transformRest, visitor);
return declarations;
- function emitAssignment(name, value, location, original) {
- if (pendingAssignments) {
- pendingAssignments.push(value);
- value = ts.inlineExpressions(pendingAssignments);
- pendingAssignments = undefined;
- }
- var declaration = ts.createVariableDeclaration(name, /*type*/ undefined, value, location);
- declaration.original = original;
- // NOTE: this completely disables source maps, but aligns with the behavior of
- // `emitAssignment` in the old emitter.
- ts.setEmitFlags(declaration, 2048 /* NoNestedSourceMaps */);
- declarations.push(declaration);
- ts.aggregateTransformFlags(declaration);
+ function emitExpression(value) {
+ pendingExpressions = ts.append(pendingExpressions, value);
}
- function emitTempVariableAssignment(value, location) {
- var name = ts.createTempVariable(recordTempVariable);
- if (recordTempVariable) {
- var assignment = ts.createAssignment(name, value, location);
- if (pendingAssignments) {
- pendingAssignments.push(assignment);
- }
- else {
- pendingAssignments = [assignment];
- }
- }
- else {
- emitAssignment(name, value, location, /*original*/ undefined);
+ function emitBindingOrAssignment(target, value, location, original) {
+ ts.Debug.assertNode(target, ts.isBindingName);
+ if (pendingExpressions) {
+ value = ts.inlineExpressions(ts.append(pendingExpressions, value));
+ pendingExpressions = undefined;
}
- return name;
- }
- function emitRestAssignment(elements, value, location, original) {
- emitAssignment(ts.createObjectBindingPattern(elements), value, location, original);
+ pendingDeclarations.push({ pendingExpressions: pendingExpressions, name: target, value: value, location: location, original: original });
}
}
- ts.flattenVariableDestructuring = flattenVariableDestructuring;
+ ts.flattenDestructuringBinding = flattenDestructuringBinding;
/**
- * Flattens binding patterns in a variable declaration and transforms them into an expression.
+ * Flattens a BindingOrAssignmentElement into zero or more bindings or assignments.
*
- * @param node The VariableDeclaration to flatten.
- * @param recordTempVariable A callback used to record new temporary variables.
- * @param createAssignmentCallback An optional callback used to create assignment expressions
- * for non-temporary variables.
- * @param visitor An optional visitor to use to visit expressions.
+ * @param flattenContext Options used to control flattening.
+ * @param element The element to flatten.
+ * @param value The current RHS value to assign to the element.
+ * @param location The location to use for source maps and comments.
+ * @param skipInitializer An optional value indicating whether to include the initializer
+ * for the element.
*/
- function flattenVariableDestructuringToExpression(node, recordTempVariable, createAssignmentCallback, visitor) {
- var pendingAssignments = [];
- flattenDestructuring(node, /*value*/ undefined, node, emitAssignment, emitTempVariableAssignment, ts.noop, emitRestAssignment, /*transformRest*/ false, visitor);
- var expression = ts.inlineExpressions(pendingAssignments);
- ts.aggregateTransformFlags(expression);
- return expression;
- function emitAssignment(name, value, location, original) {
- var expression = createAssignmentCallback
- ? createAssignmentCallback(name.kind === 70 /* Identifier */ ? name : emitTempVariableAssignment(name, location), value, location)
- : ts.createAssignment(name, value, location);
- emitPendingAssignment(expression, original);
- }
- function emitTempVariableAssignment(value, location) {
- var name = ts.createTempVariable(recordTempVariable);
- emitPendingAssignment(ts.createAssignment(name, value, location), /*original*/ undefined);
- return name;
- }
- function emitRestAssignment(elements, value, location, original) {
- emitAssignment(ts.createObjectLiteral(elements), value, location, original);
- }
- function emitPendingAssignment(expression, original) {
- expression.original = original;
- // NOTE: this completely disables source maps, but aligns with the behavior of
- // `emitAssignment` in the old emitter.
- ts.setEmitFlags(expression, 2048 /* NoNestedSourceMaps */);
- pendingAssignments.push(expression);
- }
- }
- ts.flattenVariableDestructuringToExpression = flattenVariableDestructuringToExpression;
- function flattenDestructuring(root, value, location, emitAssignment, emitTempVariableAssignment, recordTempVariable, emitRestAssignment, transformRest, visitor) {
- if (value && visitor) {
- value = ts.visitNode(value, visitor, ts.isExpression);
- }
- if (ts.isBinaryExpression(root)) {
- emitDestructuringAssignment(root.left, value, location);
- }
- else {
- emitBindingElement(root, value);
- }
- function emitDestructuringAssignment(bindingTarget, value, location) {
- // When emitting target = value use source map node to highlight, including any temporary assignments needed for this
- var target;
- if (ts.isShorthandPropertyAssignment(bindingTarget)) {
- var initializer = visitor
- ? ts.visitNode(bindingTarget.objectAssignmentInitializer, visitor, ts.isExpression)
- : bindingTarget.objectAssignmentInitializer;
- if (initializer) {
- value = createDefaultValueCheck(value, initializer, location);
- }
- target = bindingTarget.name;
- }
- else if (ts.isBinaryExpression(bindingTarget) && bindingTarget.operatorToken.kind === 57 /* EqualsToken */) {
- var initializer = visitor
- ? ts.visitNode(bindingTarget.right, visitor, ts.isExpression)
- : bindingTarget.right;
- value = createDefaultValueCheck(value, initializer, location);
- target = bindingTarget.left;
- }
- else {
- target = bindingTarget;
- }
- if (target.kind === 176 /* ObjectLiteralExpression */) {
- emitObjectLiteralAssignment(target, value, location);
- }
- else if (target.kind === 175 /* ArrayLiteralExpression */) {
- emitArrayLiteralAssignment(target, value, location);
+ function flattenBindingOrAssignmentElement(flattenContext, element, value, location, skipInitializer) {
+ if (!skipInitializer) {
+ var initializer = ts.visitNode(ts.getInitializerOfBindingOrAssignmentElement(element), flattenContext.visitor, ts.isExpression);
+ if (initializer) {
+ // Combine value and initializer
+ value = value ? createDefaultValueCheck(flattenContext, value, initializer, location) : initializer;
}
- else {
- var name_30 = ts.getMutableClone(target);
- ts.setSourceMapRange(name_30, target);
- ts.setCommentRange(name_30, target);
- emitAssignment(name_30, value, location, /*original*/ undefined);
+ else if (!value) {
+ // Use 'void 0' in absence of value and initializer
+ value = ts.createVoidZero();
}
}
- function emitObjectLiteralAssignment(target, value, location) {
- var properties = target.properties;
- if (properties.length !== 1) {
- // For anything but a single element destructuring we need to generate a temporary
- // to ensure value is evaluated exactly once.
- // When doing so we want to hightlight the passed in source map node since thats the one needing this temp assignment
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, location, emitTempVariableAssignment);
- }
- var bindingElements = [];
- for (var i = 0; i < properties.length; i++) {
- var p = properties[i];
- if (p.kind === 257 /* PropertyAssignment */ || p.kind === 258 /* ShorthandPropertyAssignment */) {
- if (!transformRest ||
- p.transformFlags & 8388608 /* ContainsSpreadExpression */ ||
- (p.kind === 257 /* PropertyAssignment */ && p.initializer.transformFlags & 8388608 /* ContainsSpreadExpression */)) {
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, location, target);
- bindingElements = [];
- }
- var propName = p.name;
- var bindingTarget = p.kind === 258 /* ShorthandPropertyAssignment */ ? p : p.initializer || propName;
- // Assignment for bindingTarget = value.propName should highlight whole property, hence use p as source map node
- emitDestructuringAssignment(bindingTarget, createDestructuringPropertyAccess(value, propName), p);
- }
- else {
- bindingElements.push(p);
- }
- }
- else if (i === properties.length - 1 &&
- p.kind === 259 /* SpreadAssignment */ &&
- p.expression.kind === 70 /* Identifier */) {
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, location, target);
- bindingElements = [];
- }
- var propName = p.expression;
- var restCall = createRestCall(value, target.properties, function (p) { return p.name; }, target);
- emitDestructuringAssignment(propName, restCall, p);
- }
- }
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, location, target);
- bindingElements = [];
- }
+ var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element);
+ if (ts.isObjectBindingOrAssignmentPattern(bindingTarget)) {
+ flattenObjectBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location);
}
- function emitArrayLiteralAssignment(target, value, location) {
- if (transformRest) {
- emitESNextArrayLiteralAssignment(target, value, location);
- }
- else {
- emitES2015ArrayLiteralAssignment(target, value, location);
- }
+ else if (ts.isArrayBindingOrAssignmentPattern(bindingTarget)) {
+ flattenArrayBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location);
}
- function emitESNextArrayLiteralAssignment(target, value, location) {
- var elements = target.elements;
- var numElements = elements.length;
- if (numElements !== 1) {
- // For anything but a single element destructuring we need to generate a temporary
- // to ensure value is evaluated exactly once.
- // When doing so we want to highlight the passed-in source map node since thats the one needing this temp assignment
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, location, emitTempVariableAssignment);
- }
- var expressions = [];
- var spreadContainingExpressions = [];
- for (var i = 0; i < numElements; i++) {
- var e = elements[i];
- if (e.kind === 198 /* OmittedExpression */) {
- continue;
- }
- if (e.transformFlags & 8388608 /* ContainsSpreadExpression */ && i < numElements - 1) {
- var tmp = ts.createTempVariable(recordTempVariable);
- spreadContainingExpressions.push([e, tmp]);
- expressions.push(tmp);
+ else {
+ flattenContext.emitBindingOrAssignment(bindingTarget, value, location, /*original*/ element);
+ }
+ }
+ /**
+ * Flattens an ObjectBindingOrAssignmentPattern into zero or more bindings or assignments.
+ *
+ * @param flattenContext Options used to control flattening.
+ * @param parent The parent element of the pattern.
+ * @param pattern The ObjectBindingOrAssignmentPattern to flatten.
+ * @param value The current RHS value to assign to the element.
+ * @param location The location to use for source maps and comments.
+ */
+ function flattenObjectBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) {
+ var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern);
+ var numElements = elements.length;
+ if (numElements !== 1) {
+ // For anything other than a single-element destructuring we need to generate a temporary
+ // to ensure value is evaluated exactly once. Additionally, if we have zero elements
+ // we need to emit *something* to ensure that in case a 'var' keyword was already emitted,
+ // so in that case, we'll intentionally create that temporary.
+ var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0;
+ value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location);
+ }
+ var bindingElements;
+ var computedTempVariables;
+ for (var i = 0; i < numElements; i++) {
+ var element = elements[i];
+ if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) {
+ var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(element);
+ if (flattenContext.level >= 1 /* ObjectRest */
+ && !(element.transformFlags & (524288 /* ContainsRest */ | 1048576 /* ContainsObjectRest */))
+ && !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (524288 /* ContainsRest */ | 1048576 /* ContainsObjectRest */))
+ && !ts.isComputedPropertyName(propertyName)) {
+ bindingElements = ts.append(bindingElements, element);
}
else {
- expressions.push(e);
- }
- }
- emitAssignment(ts.updateArrayLiteral(target, expressions), value, undefined, undefined);
- for (var _i = 0, spreadContainingExpressions_1 = spreadContainingExpressions; _i < spreadContainingExpressions_1.length; _i++) {
- var _a = spreadContainingExpressions_1[_i], e = _a[0], tmp = _a[1];
- emitDestructuringAssignment(e, tmp, e);
- }
- }
- function emitES2015ArrayLiteralAssignment(target, value, location) {
- var elements = target.elements;
- var numElements = elements.length;
- if (numElements !== 1) {
- // For anything but a single element destructuring we need to generate a temporary
- // to ensure value is evaluated exactly once.
- // When doing so we want to highlight the passed-in source map node since thats the one needing this temp assignment
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, location, emitTempVariableAssignment);
- }
- for (var i = 0; i < numElements; i++) {
- var e = elements[i];
- if (e.kind !== 198 /* OmittedExpression */) {
- // Assignment for target = value.propName should highligh whole property, hence use e as source map node
- if (e.kind !== 196 /* SpreadElement */) {
- emitDestructuringAssignment(e, ts.createElementAccess(value, ts.createLiteral(i)), e);
+ if (bindingElements) {
+ flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
+ bindingElements = undefined;
}
- else if (i === numElements - 1) {
- emitDestructuringAssignment(e.expression, ts.createArraySlice(value, i), e);
+ var rhsValue = createDestructuringPropertyAccess(flattenContext, value, propertyName);
+ if (ts.isComputedPropertyName(propertyName)) {
+ computedTempVariables = ts.append(computedTempVariables, rhsValue.argumentExpression);
}
+ flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element);
}
}
- }
- /** Given value: o, propName: p, pattern: { a, b, ...p } from the original statement
- * `{ a, b, ...p } = o`, create `p = __rest(o, ["a", "b"]);`*/
- function createRestCall(value, elements, getPropertyName, location) {
- var propertyNames = [];
- for (var i = 0; i < elements.length - 1; i++) {
- if (ts.isOmittedExpression(elements[i])) {
- continue;
+ else if (i === numElements - 1) {
+ if (bindingElements) {
+ flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
+ bindingElements = undefined;
}
- var str = ts.createSynthesizedNode(9 /* StringLiteral */);
- str.pos = location.pos;
- str.end = location.end;
- str.text = ts.getTextOfPropertyName(getPropertyName(elements[i]));
- propertyNames.push(str);
+ var rhsValue = createRestCall(flattenContext.context, value, elements, computedTempVariables, pattern);
+ flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
}
- var args = ts.createSynthesizedNodeArray([value, ts.createArrayLiteral(propertyNames, location)]);
- return ts.createCall(ts.createIdentifier("__rest"), undefined, args);
}
- function emitBindingElement(target, value) {
- // Any temporary assignments needed to emit target = value should point to target
- var initializer = visitor ? ts.visitNode(target.initializer, visitor, ts.isExpression) : target.initializer;
- if (transformRest) {
- value = value || initializer;
- }
- else if (initializer) {
- // Combine value and initializer
- value = value ? createDefaultValueCheck(value, initializer, target) : initializer;
- }
- else if (!value) {
- // Use 'void 0' in absence of value and initializer
- value = ts.createVoidZero();
- }
- var name = target.name;
- if (!ts.isBindingPattern(name)) {
- emitAssignment(name, value, target, target);
- }
- else {
- var numElements = name.elements.length;
- if (numElements !== 1) {
- // For anything other than a single-element destructuring we need to generate a temporary
- // to ensure value is evaluated exactly once. Additionally, if we have zero elements
- // we need to emit *something* to ensure that in case a 'var' keyword was already emitted,
- // so in that case, we'll intentionally create that temporary.
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ numElements !== 0, target, emitTempVariableAssignment);
- }
- if (name.kind === 173 /* ArrayBindingPattern */) {
- emitArrayBindingElement(name, value);
+ if (bindingElements) {
+ flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
+ }
+ }
+ /**
+ * Flattens an ArrayBindingOrAssignmentPattern into zero or more bindings or assignments.
+ *
+ * @param flattenContext Options used to control flattening.
+ * @param parent The parent element of the pattern.
+ * @param pattern The ArrayBindingOrAssignmentPattern to flatten.
+ * @param value The current RHS value to assign to the element.
+ * @param location The location to use for source maps and comments.
+ */
+ function flattenArrayBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) {
+ var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern);
+ var numElements = elements.length;
+ if (numElements !== 1 && (flattenContext.level < 1 /* ObjectRest */ || numElements === 0)) {
+ // For anything other than a single-element destructuring we need to generate a temporary
+ // to ensure value is evaluated exactly once. Additionally, if we have zero elements
+ // we need to emit *something* to ensure that in case a 'var' keyword was already emitted,
+ // so in that case, we'll intentionally create that temporary.
+ var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0;
+ value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location);
+ }
+ var bindingElements;
+ var restContainingElements;
+ for (var i = 0; i < numElements; i++) {
+ var element = elements[i];
+ if (flattenContext.level >= 1 /* ObjectRest */) {
+ // If an array pattern contains an ObjectRest, we must cache the result so that we
+ // can perform the ObjectRest destructuring in a different declaration
+ if (element.transformFlags & 1048576 /* ContainsObjectRest */) {
+ var temp = ts.createTempVariable(/*recordTempVariable*/ undefined);
+ if (flattenContext.hoistTempVariables) {
+ flattenContext.context.hoistVariableDeclaration(temp);
+ }
+ restContainingElements = ts.append(restContainingElements, [temp, element]);
+ bindingElements = ts.append(bindingElements, flattenContext.createArrayBindingOrAssignmentElement(temp));
}
else {
- emitObjectBindingElement(target, value);
+ bindingElements = ts.append(bindingElements, element);
}
}
- }
- function emitArrayBindingElement(name, value) {
- if (transformRest) {
- emitESNextArrayBindingElement(name, value);
+ else if (ts.isOmittedExpression(element)) {
+ continue;
}
- else {
- emitES2015ArrayBindingElement(name, value);
+ else if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) {
+ var rhsValue = ts.createElementAccess(value, i);
+ flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element);
}
- }
- function emitES2015ArrayBindingElement(name, value) {
- var elements = name.elements;
- var numElements = elements.length;
- for (var i = 0; i < numElements; i++) {
- var element = elements[i];
- if (ts.isOmittedExpression(element)) {
- continue;
- }
- if (!element.dotDotDotToken) {
- // Rewrite element to a declaration that accesses array element at index i
- emitBindingElement(element, ts.createElementAccess(value, i));
- }
- else if (i === numElements - 1) {
- emitBindingElement(element, ts.createArraySlice(value, i));
- }
+ else if (i === numElements - 1) {
+ var rhsValue = ts.createArraySlice(value, i);
+ flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element);
}
}
- function emitESNextArrayBindingElement(name, value) {
- var elements = name.elements;
- var numElements = elements.length;
- var bindingElements = [];
- var spreadContainingElements = [];
- for (var i = 0; i < numElements; i++) {
- var element = elements[i];
- if (ts.isOmittedExpression(element)) {
- continue;
- }
- if (element.transformFlags & 8388608 /* ContainsSpreadExpression */ && i < numElements - 1) {
- spreadContainingElements.push(element);
- bindingElements.push(ts.createBindingElement(undefined, undefined, ts.getGeneratedNameForNode(element), undefined, value));
- }
- else {
- bindingElements.push(element);
- }
- }
- emitAssignment(ts.updateArrayBindingPattern(name, bindingElements), value, undefined, undefined);
- for (var _i = 0, spreadContainingElements_1 = spreadContainingElements; _i < spreadContainingElements_1.length; _i++) {
- var element = spreadContainingElements_1[_i];
- emitBindingElement(element, ts.getGeneratedNameForNode(element));
- }
+ if (bindingElements) {
+ flattenContext.emitBindingOrAssignment(flattenContext.createArrayBindingOrAssignmentPattern(bindingElements), value, location, pattern);
}
- function emitObjectBindingElement(target, value) {
- var name = target.name;
- var elements = name.elements;
- var numElements = elements.length;
- var bindingElements = [];
- for (var i = 0; i < numElements; i++) {
- var element = elements[i];
- if (ts.isOmittedExpression(element)) {
- continue;
- }
- if (i === numElements - 1 && element.dotDotDotToken) {
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, target, target);
- bindingElements = [];
- }
- var restCall = createRestCall(value, name.elements, function (element) { return element.propertyName || element.name; }, name);
- emitBindingElement(element, restCall);
- }
- else if (transformRest && !(element.transformFlags & 8388608 /* ContainsSpreadExpression */)) {
- // do not emit until we have a complete bundle of ES2015 syntax
- bindingElements.push(element);
- }
- else {
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, target, target);
- bindingElements = [];
- }
- // Rewrite element to a declaration with an initializer that fetches property
- var propName = element.propertyName || element.name;
- emitBindingElement(element, createDestructuringPropertyAccess(value, propName));
- }
- }
- if (bindingElements.length) {
- emitRestAssignment(bindingElements, value, target, target);
- bindingElements = [];
+ if (restContainingElements) {
+ for (var _i = 0, restContainingElements_1 = restContainingElements; _i < restContainingElements_1.length; _i++) {
+ var _a = restContainingElements_1[_i], id = _a[0], element = _a[1];
+ flattenBindingOrAssignmentElement(flattenContext, element, id, element);
}
}
- function createDefaultValueCheck(value, defaultValue, location) {
- value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, location, emitTempVariableAssignment);
- return ts.createConditional(ts.createStrictEquality(value, ts.createVoidZero()), ts.createToken(54 /* QuestionToken */), defaultValue, ts.createToken(55 /* ColonToken */), value);
+ }
+ /**
+ * Creates an expression used to provide a default value if a value is `undefined` at runtime.
+ *
+ * @param flattenContext Options used to control flattening.
+ * @param value The RHS value to test.
+ * @param defaultValue The default value to use if `value` is `undefined` at runtime.
+ * @param location The location to use for source maps and comments.
+ */
+ function createDefaultValueCheck(flattenContext, value, defaultValue, location) {
+ value = ensureIdentifier(flattenContext, value, /*reuseIdentifierExpressions*/ true, location);
+ return ts.createConditional(ts.createTypeCheck(value, "undefined"), defaultValue, value);
+ }
+ /**
+ * Creates either a PropertyAccessExpression or an ElementAccessExpression for the
+ * right-hand side of a transformed destructuring assignment.
+ *
+ * @link https://tc39.github.io/ecma262/#sec-runtime-semantics-keyeddestructuringassignmentevaluation
+ *
+ * @param flattenContext Options used to control flattening.
+ * @param value The RHS value that is the source of the property.
+ * @param propertyName The destructuring property name.
+ */
+ function createDestructuringPropertyAccess(flattenContext, value, propertyName) {
+ if (ts.isComputedPropertyName(propertyName)) {
+ var argumentExpression = ensureIdentifier(flattenContext, propertyName.expression, /*reuseIdentifierExpressions*/ false, /*location*/ propertyName);
+ return ts.createElementAccess(value, argumentExpression);
}
- /**
- * Creates either a PropertyAccessExpression or an ElementAccessExpression for the
- * right-hand side of a transformed destructuring assignment.
- *
- * @param expression The right-hand expression that is the source of the property.
- * @param propertyName The destructuring property name.
- */
- function createDestructuringPropertyAccess(expression, propertyName) {
- if (ts.isComputedPropertyName(propertyName)) {
- return ts.createElementAccess(expression, ensureIdentifier(propertyName.expression, /*reuseIdentifierExpressions*/ false, /*location*/ propertyName, emitTempVariableAssignment));
- }
- else if (ts.isLiteralExpression(propertyName)) {
- var clone_2 = ts.getSynthesizedClone(propertyName);
- clone_2.text = ts.unescapeIdentifier(clone_2.text);
- return ts.createElementAccess(expression, clone_2);
- }
- else {
- if (ts.isGeneratedIdentifier(propertyName)) {
- var clone_3 = ts.getSynthesizedClone(propertyName);
- clone_3.text = ts.unescapeIdentifier(clone_3.text);
- return ts.createPropertyAccess(expression, clone_3);
- }
- else {
- return ts.createPropertyAccess(expression, ts.createIdentifier(ts.unescapeIdentifier(propertyName.text)));
- }
- }
+ else if (ts.isStringOrNumericLiteral(propertyName)) {
+ var argumentExpression = ts.getSynthesizedClone(propertyName);
+ argumentExpression.text = ts.unescapeIdentifier(argumentExpression.text);
+ return ts.createElementAccess(value, argumentExpression);
+ }
+ else {
+ var name_30 = ts.createIdentifier(ts.unescapeIdentifier(propertyName.text));
+ return ts.createPropertyAccess(value, name_30);
}
}
/**
@@ -44872,23 +45038,74 @@ var ts;
* This function is useful to ensure that the expression's value can be read from in subsequent expressions.
* Unless 'reuseIdentifierExpressions' is false, 'value' will be returned if it is just an identifier.
*
+ * @param flattenContext Options used to control flattening.
* @param value the expression whose value needs to be bound.
* @param reuseIdentifierExpressions true if identifier expressions can simply be returned;
- * false if it is necessary to always emit an identifier.
+ * false if it is necessary to always emit an identifier.
* @param location The location to use for source maps and comments.
- * @param emitTempVariableAssignment A callback used to emit a temporary variable.
- * @param visitor An optional callback used to visit the value.
*/
- function ensureIdentifier(value, reuseIdentifierExpressions, location, emitTempVariableAssignment, visitor) {
+ function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) {
if (ts.isIdentifier(value) && reuseIdentifierExpressions) {
return value;
}
else {
- if (visitor) {
- value = ts.visitNode(value, visitor, ts.isExpression);
+ var temp = ts.createTempVariable(/*recordTempVariable*/ undefined);
+ if (flattenContext.hoistTempVariables) {
+ flattenContext.context.hoistVariableDeclaration(temp);
+ flattenContext.emitExpression(ts.createAssignment(temp, value, location));
+ }
+ else {
+ flattenContext.emitBindingOrAssignment(temp, value, location, /*original*/ undefined);
+ }
+ return temp;
+ }
+ }
+ function makeArrayBindingPattern(elements) {
+ ts.Debug.assertEachNode(elements, ts.isArrayBindingElement);
+ return ts.createArrayBindingPattern(elements);
+ }
+ function makeArrayAssignmentPattern(elements) {
+ return ts.createArrayLiteral(ts.map(elements, ts.convertToArrayAssignmentElement));
+ }
+ function makeObjectBindingPattern(elements) {
+ ts.Debug.assertEachNode(elements, ts.isBindingElement);
+ return ts.createObjectBindingPattern(elements);
+ }
+ function makeObjectAssignmentPattern(elements) {
+ return ts.createObjectLiteral(ts.map(elements, ts.convertToObjectAssignmentElement));
+ }
+ function makeBindingElement(name) {
+ return ts.createBindingElement(/*propertyName*/ undefined, /*dotDotDotToken*/ undefined, name);
+ }
+ function makeAssignmentElement(name) {
+ return name;
+ }
+ var restHelper = {
+ name: "typescript:rest",
+ scoped: false,
+ text: "\n var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n t[p[i]] = s[p[i]];\n return t;\n };"
+ };
+ /** Given value: o, propName: p, pattern: { a, b, ...p } from the original statement
+ * `{ a, b, ...p } = o`, create `p = __rest(o, ["a", "b"]);`*/
+ function createRestCall(context, value, elements, computedTempVariables, location) {
+ context.requestEmitHelper(restHelper);
+ var propertyNames = [];
+ var computedTempVariableOffset = 0;
+ for (var i = 0; i < elements.length - 1; i++) {
+ var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(elements[i]);
+ if (propertyName) {
+ if (ts.isComputedPropertyName(propertyName)) {
+ var temp = computedTempVariables[computedTempVariableOffset];
+ computedTempVariableOffset++;
+ // typeof _tmp === "symbol" ? _tmp : _tmp + ""
+ propertyNames.push(ts.createConditional(ts.createTypeCheck(temp, "symbol"), temp, ts.createAdd(temp, ts.createLiteral(""))));
+ }
+ else {
+ propertyNames.push(ts.createLiteral(propertyName));
+ }
}
- return emitTempVariableAssignment(value, location);
}
+ return ts.createCall(ts.getHelperName("__rest"), undefined, [value, ts.createArrayLiteral(propertyNames, location)]);
}
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
@@ -44911,7 +45128,7 @@ var ts;
TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["NonQualifiedEnumMembers"] = 8] = "NonQualifiedEnumMembers";
})(TypeScriptSubstitutionFlags || (TypeScriptSubstitutionFlags = {}));
function transformTypeScript(context) {
- var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
+ var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var resolver = context.getEmitResolver();
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
@@ -44931,7 +45148,6 @@ var ts;
var currentNamespaceContainerName;
var currentScope;
var currentScopeFirstDeclarationsOfName;
- var currentExternalHelpersModuleName;
/**
* Keeps track of whether expression substitution has been enabled for specific edge cases.
* They are persisted between each SourceFile transformation and should not be reset.
@@ -44957,7 +45173,11 @@ var ts;
if (ts.isDeclarationFile(node)) {
return node;
}
- return ts.visitNode(node, visitor, ts.isSourceFile);
+ currentSourceFile = node;
+ var visited = saveStateAndInvoke(node, visitSourceFile);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
+ currentSourceFile = undefined;
+ return visited;
}
/**
* Visits a node, saving and restoring state variables on the stack.
@@ -44979,6 +45199,29 @@ var ts;
return visited;
}
/**
+ * Performs actions that should always occur immediately before visiting a node.
+ *
+ * @param node The node to visit.
+ */
+ function onBeforeVisitNode(node) {
+ switch (node.kind) {
+ case 261 /* SourceFile */:
+ case 232 /* CaseBlock */:
+ case 231 /* ModuleBlock */:
+ case 204 /* Block */:
+ currentScope = node;
+ currentScopeFirstDeclarationsOfName = undefined;
+ break;
+ case 226 /* ClassDeclaration */:
+ case 225 /* FunctionDeclaration */:
+ if (ts.hasModifier(node, 2 /* Ambient */)) {
+ break;
+ }
+ recordEmittedDeclarationInScope(node);
+ break;
+ }
+ }
+ /**
* General-purpose node visitor.
*
* @param node The node to visit.
@@ -44992,10 +45235,7 @@ var ts;
* @param node The node to visit.
*/
function visitorWorker(node) {
- if (node.kind === 261 /* SourceFile */) {
- return visitSourceFile(node);
- }
- else if (node.transformFlags & 1 /* TypeScript */) {
+ if (node.transformFlags & 1 /* TypeScript */) {
// This node is explicitly marked as TypeScript, so we should transform the node.
return visitTypeScript(node);
}
@@ -45265,67 +45505,9 @@ var ts;
return ts.visitEachChild(node, visitor, context);
}
}
- /**
- * Performs actions that should always occur immediately before visiting a node.
- *
- * @param node The node to visit.
- */
- function onBeforeVisitNode(node) {
- switch (node.kind) {
- case 261 /* SourceFile */:
- case 232 /* CaseBlock */:
- case 231 /* ModuleBlock */:
- case 204 /* Block */:
- currentScope = node;
- currentScopeFirstDeclarationsOfName = undefined;
- break;
- case 226 /* ClassDeclaration */:
- case 225 /* FunctionDeclaration */:
- if (ts.hasModifier(node, 2 /* Ambient */)) {
- break;
- }
- recordEmittedDeclarationInScope(node);
- break;
- }
- }
function visitSourceFile(node) {
- currentSourceFile = node;
- // ensure "use strict" is emitted in all scenarios in alwaysStrict mode
- // There is no need to emit "use strict" in the following cases:
- // 1. The file is an external module and target is es2015 or higher
- // or 2. The file is an external module and module-kind is es6 or es2015 as such value is not allowed when targeting es5 or lower
- if (compilerOptions.alwaysStrict &&
- !(ts.isExternalModule(node) && (compilerOptions.target >= 2 /* ES2015 */ || compilerOptions.module === ts.ModuleKind.ES2015))) {
- node = ts.ensureUseStrict(node);
- }
- // If the source file requires any helpers and is an external module, and
- // the importHelpers compiler option is enabled, emit a synthesized import
- // statement for the helpers library.
- if (node.flags & 64512 /* EmitHelperFlags */
- && compilerOptions.importHelpers
- && (ts.isExternalModule(node) || compilerOptions.isolatedModules)) {
- startLexicalEnvironment();
- var statements = [];
- var statementOffset = ts.addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ false, visitor);
- var externalHelpersModuleName = ts.createUniqueName(ts.externalHelpersModuleNameText);
- var externalHelpersModuleImport = ts.createImportDeclaration(
- /*decorators*/ undefined,
- /*modifiers*/ undefined, ts.createImportClause(/*name*/ undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText));
- externalHelpersModuleImport.parent = node;
- externalHelpersModuleImport.flags &= ~8 /* Synthesized */;
- statements.push(externalHelpersModuleImport);
- currentExternalHelpersModuleName = externalHelpersModuleName;
- ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
- ts.addRange(statements, endLexicalEnvironment());
- currentExternalHelpersModuleName = undefined;
- node = ts.updateSourceFileNode(node, ts.createNodeArray(statements, node.statements));
- node.externalHelpersModuleName = externalHelpersModuleName;
- }
- else {
- node = ts.visitEachChild(node, sourceElementVisitor, context);
- }
- ts.setEmitFlags(node, 1 /* EmitEmitHelpers */ | ts.getEmitFlags(node));
- return node;
+ var alwaysStrict = compilerOptions.alwaysStrict && !(ts.isExternalModule(node) && moduleKind === ts.ModuleKind.ES2015);
+ return ts.updateSourceFileNode(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
}
/**
* Tests whether we should emit a __decorate call for a class declaration.
@@ -45402,7 +45584,7 @@ var ts;
if (statements.length > 1) {
// Add a DeclarationMarker as a marker for the end of the declaration
statements.push(ts.createEndOfDeclarationMarker(node));
- ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 33554432 /* HasEndOfDeclarationMarker */);
+ ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 2097152 /* HasEndOfDeclarationMarker */);
}
return ts.singleOrMany(statements);
}
@@ -45425,7 +45607,7 @@ var ts;
// To better align with the old emitter, we should not emit a trailing source map
// entry if the class has static properties.
if (hasStaticProperties) {
- emitFlags |= 1024 /* NoTrailingSourceMap */;
+ emitFlags |= 32 /* NoTrailingSourceMap */;
}
ts.setOriginalNode(classDeclaration, node);
ts.setEmitFlags(classDeclaration, emitFlags);
@@ -45570,7 +45752,7 @@ var ts;
}
// To preserve the behavior of the old emitter, we explicitly indent
// the body of a class with static initializers.
- ts.setEmitFlags(classExpression, 524288 /* Indented */ | ts.getEmitFlags(classExpression));
+ ts.setEmitFlags(classExpression, 32768 /* Indented */ | ts.getEmitFlags(classExpression));
expressions.push(ts.startOnNewLine(ts.createAssignment(temp, classExpression)));
ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
expressions.push(ts.startOnNewLine(temp));
@@ -45604,7 +45786,7 @@ var ts;
// If there is a property assignment, we need to emit constructor whether users define it or not
// If there is no property assignment, we can omit constructor if users do not define it
var hasInstancePropertyWithInitializer = ts.forEach(node.members, isInstanceInitializedProperty);
- var hasParameterPropertyAssignments = node.transformFlags & 4194304 /* ContainsParameterPropertyAssignments */;
+ var hasParameterPropertyAssignments = node.transformFlags & 262144 /* ContainsParameterPropertyAssignments */;
var constructor = ts.getFirstConstructorWithBody(node);
// If the class does not contain nodes that require a synthesized constructor,
// accept the current constructor if it exists.
@@ -45644,9 +45826,8 @@ var ts;
// downlevel the '...args' portion less efficiently by naively copying the contents of 'arguments' to an array.
// Instead, we'll avoid using a rest parameter and spread into the super call as
// 'super(...arguments)' instead of 'super(...args)', as you can see in "transformConstructorBody".
- return constructor
- ? ts.visitNodes(constructor.parameters, visitor, ts.isParameter)
- : [];
+ return ts.visitParameterList(constructor && constructor.parameters, visitor, context)
+ || [];
}
/**
* Transforms (or creates) a constructor body for a class with parameter property
@@ -45659,8 +45840,7 @@ var ts;
function transformConstructorBody(node, constructor, hasExtendsClause) {
var statements = [];
var indexOfFirstStatement = 0;
- // The body of a constructor is a new lexical environment
- startLexicalEnvironment();
+ resumeLexicalEnvironment();
if (constructor) {
indexOfFirstStatement = addPrologueDirectivesAndInitialSuperCall(constructor, statements);
// Add parameters with property assignments. Transforms this:
@@ -45704,9 +45884,10 @@ var ts;
}
// End the lexical environment.
ts.addRange(statements, endLexicalEnvironment());
- return ts.setMultiLine(ts.createBlock(ts.createNodeArray(statements,
+ return ts.createBlock(ts.createNodeArray(statements,
/*location*/ constructor ? constructor.body.statements : node.members),
- /*location*/ constructor ? constructor.body : undefined), true);
+ /*location*/ constructor ? constructor.body : undefined,
+ /*multiLine*/ true);
}
/**
* Adds super call and preceding prologue directives into the list of statements.
@@ -45758,9 +45939,9 @@ var ts;
ts.Debug.assert(ts.isIdentifier(node.name));
var name = node.name;
var propertyName = ts.getMutableClone(name);
- ts.setEmitFlags(propertyName, 49152 /* NoComments */ | 1536 /* NoSourceMap */);
+ ts.setEmitFlags(propertyName, 1536 /* NoComments */ | 48 /* NoSourceMap */);
var localName = ts.getMutableClone(name);
- ts.setEmitFlags(localName, 49152 /* NoComments */);
+ ts.setEmitFlags(localName, 1536 /* NoComments */);
return ts.startOnNewLine(ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createThis(), propertyName,
/*location*/ node.name), localName),
/*location*/ ts.moveRangePos(node, -1)));
@@ -46072,13 +46253,13 @@ var ts;
// __metadata("design:type", Function),
// __metadata("design:paramtypes", [Object]),
// __metadata("design:returntype", void 0)
- // ], C.prototype, "method", undefined);
+ // ], C.prototype, "method", null);
//
// The emit for an accessor is:
//
// __decorate([
// dec
- // ], C.prototype, "accessor", undefined);
+ // ], C.prototype, "accessor", null);
//
// The emit for a property is:
//
@@ -46093,8 +46274,8 @@ var ts;
? ts.createVoidZero()
: ts.createNull()
: undefined;
- var helper = ts.createDecorateHelper(currentExternalHelpersModuleName, decoratorExpressions, prefix, memberName, descriptor, ts.moveRangePastDecorators(member));
- ts.setEmitFlags(helper, 49152 /* NoComments */);
+ var helper = createDecorateHelper(context, decoratorExpressions, prefix, memberName, descriptor, ts.moveRangePastDecorators(member));
+ ts.setEmitFlags(helper, 1536 /* NoComments */);
return helper;
}
/**
@@ -46121,9 +46302,9 @@ var ts;
}
var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
var localName = ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
- var decorate = ts.createDecorateHelper(currentExternalHelpersModuleName, decoratorExpressions, localName);
+ var decorate = createDecorateHelper(context, decoratorExpressions, localName);
var expression = ts.createAssignment(localName, classAlias ? ts.createAssignment(classAlias, decorate) : decorate);
- ts.setEmitFlags(expression, 49152 /* NoComments */);
+ ts.setEmitFlags(expression, 1536 /* NoComments */);
ts.setSourceMapRange(expression, ts.moveRangePastDecorators(node));
return expression;
}
@@ -46147,9 +46328,9 @@ var ts;
expressions = [];
for (var _i = 0, decorators_1 = decorators; _i < decorators_1.length; _i++) {
var decorator = decorators_1[_i];
- var helper = ts.createParamHelper(currentExternalHelpersModuleName, transformDecorator(decorator), parameterOffset,
+ var helper = createParamHelper(context, transformDecorator(decorator), parameterOffset,
/*location*/ decorator.expression);
- ts.setEmitFlags(helper, 49152 /* NoComments */);
+ ts.setEmitFlags(helper, 1536 /* NoComments */);
expressions.push(helper);
}
}
@@ -46172,13 +46353,13 @@ var ts;
function addOldTypeMetadata(node, decoratorExpressions) {
if (compilerOptions.emitDecoratorMetadata) {
if (shouldAddTypeMetadata(node)) {
- decoratorExpressions.push(ts.createMetadataHelper(currentExternalHelpersModuleName, "design:type", serializeTypeOfNode(node)));
+ decoratorExpressions.push(createMetadataHelper(context, "design:type", serializeTypeOfNode(node)));
}
if (shouldAddParamTypesMetadata(node)) {
- decoratorExpressions.push(ts.createMetadataHelper(currentExternalHelpersModuleName, "design:paramtypes", serializeParameterTypesOfNode(node)));
+ decoratorExpressions.push(createMetadataHelper(context, "design:paramtypes", serializeParameterTypesOfNode(node)));
}
if (shouldAddReturnTypeMetadata(node)) {
- decoratorExpressions.push(ts.createMetadataHelper(currentExternalHelpersModuleName, "design:returntype", serializeReturnTypeOfNode(node)));
+ decoratorExpressions.push(createMetadataHelper(context, "design:returntype", serializeReturnTypeOfNode(node)));
}
}
}
@@ -46195,7 +46376,7 @@ var ts;
(properties || (properties = [])).push(ts.createPropertyAssignment("returnType", ts.createArrowFunction(/*modifiers*/ undefined, /*typeParameters*/ undefined, [], /*type*/ undefined, ts.createToken(35 /* EqualsGreaterThanToken */), serializeReturnTypeOfNode(node))));
}
if (properties) {
- decoratorExpressions.push(ts.createMetadataHelper(currentExternalHelpersModuleName, "design:typeinfo", ts.createObjectLiteral(properties, /*location*/ undefined, /*multiLine*/ true)));
+ decoratorExpressions.push(createMetadataHelper(context, "design:typeinfo", ts.createObjectLiteral(properties, /*location*/ undefined, /*multiLine*/ true)));
}
}
}
@@ -46435,7 +46616,7 @@ var ts;
case ts.TypeReferenceSerializationKind.Unknown:
var serialized = serializeEntityNameAsExpression(node.typeName, /*useFallback*/ true);
var temp = ts.createTempVariable(hoistVariableDeclaration);
- return ts.createLogicalOr(ts.createLogicalAnd(ts.createStrictEquality(ts.createTypeOf(ts.createAssignment(temp, serialized)), ts.createLiteral("function")), temp), ts.createIdentifier("Object"));
+ return ts.createLogicalOr(ts.createLogicalAnd(ts.createTypeCheck(ts.createAssignment(temp, serialized), "function"), temp), ts.createIdentifier("Object"));
case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:
return serializeEntityNameAsExpression(node.typeName, /*useFallback*/ false);
case ts.TypeReferenceSerializationKind.VoidNullableOrNeverType:
@@ -46511,7 +46692,7 @@ var ts;
* available.
*/
function getGlobalSymbolNameWithFallback() {
- return ts.createConditional(ts.createStrictEquality(ts.createTypeOf(ts.createIdentifier("Symbol")), ts.createLiteral("function")), ts.createToken(54 /* QuestionToken */), ts.createIdentifier("Symbol"), ts.createToken(55 /* ColonToken */), ts.createIdentifier("Object"));
+ return ts.createConditional(ts.createTypeCheck(ts.createIdentifier("Symbol"), "function"), ts.createIdentifier("Symbol"), ts.createIdentifier("Object"));
}
/**
* Gets an expression that represents a property name. For a computed property, a
@@ -46613,17 +46794,17 @@ var ts;
if (!shouldEmitFunctionLikeDeclaration(node)) {
return undefined;
}
- var method = ts.createMethod(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, visitPropertyNameOfClassElement(node),
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- // While we emit the source map for the node after skipping decorators and modifiers,
- // we need to emit the comments for the original range.
- ts.setCommentRange(method, node);
- ts.setSourceMapRange(method, ts.moveRangePastDecorators(node));
- ts.setOriginalNode(method, node);
- return method;
+ var updated = ts.updateMethod(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node),
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context));
+ if (updated !== node) {
+ // While we emit the source map for the node after skipping decorators and modifiers,
+ // we need to emit the comments for the original range.
+ ts.setCommentRange(updated, node);
+ ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
+ }
+ return updated;
}
/**
* Determines whether to emit an accessor declaration. We should not emit the
@@ -46647,16 +46828,16 @@ var ts;
if (!shouldEmitAccessorDeclaration(node)) {
return undefined;
}
- var accessor = ts.createGetAccessor(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, node.body ? ts.visitEachChild(node.body, visitor, context) : ts.createBlock([]),
- /*location*/ node);
- // While we emit the source map for the node after skipping decorators and modifiers,
- // we need to emit the comments for the original range.
- ts.setOriginalNode(accessor, node);
- ts.setCommentRange(accessor, node);
- ts.setSourceMapRange(accessor, ts.moveRangePastDecorators(node));
- return accessor;
+ var updated = ts.updateGetAccessor(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
+ if (updated !== node) {
+ // While we emit the source map for the node after skipping decorators and modifiers,
+ // we need to emit the comments for the original range.
+ ts.setCommentRange(updated, node);
+ ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
+ }
+ return updated;
}
/**
* Visits a set accessor declaration of a class.
@@ -46671,15 +46852,15 @@ var ts;
if (!shouldEmitAccessorDeclaration(node)) {
return undefined;
}
- var accessor = ts.createSetAccessor(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitNodes(node.parameters, visitor, ts.isParameter), node.body ? ts.visitEachChild(node.body, visitor, context) : ts.createBlock([]),
- /*location*/ node);
- // While we emit the source map for the node after skipping decorators and modifiers,
- // we need to emit the comments for the original range.
- ts.setOriginalNode(accessor, node);
- ts.setCommentRange(accessor, node);
- ts.setSourceMapRange(accessor, ts.moveRangePastDecorators(node));
- return accessor;
+ var updated = ts.updateSetAccessor(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
+ if (updated !== node) {
+ // While we emit the source map for the node after skipping decorators and modifiers,
+ // we need to emit the comments for the original range.
+ ts.setCommentRange(updated, node);
+ ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
+ }
+ return updated;
}
/**
* Visits a function declaration.
@@ -46695,18 +46876,16 @@ var ts;
if (!shouldEmitFunctionLikeDeclaration(node)) {
return ts.createNotEmittedStatement(node);
}
- var func = ts.createFunctionDeclaration(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
+ var updated = ts.updateFunctionDeclaration(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
if (isNamespaceExport(node)) {
- var statements = [func];
+ var statements = [updated];
addExportMemberAssignment(statements, node);
return statements;
}
- return func;
+ return updated;
}
/**
* Visits a function expression node.
@@ -46720,12 +46899,10 @@ var ts;
if (ts.nodeIsMissing(node.body)) {
return ts.createOmittedExpression();
}
- var func = ts.createFunctionExpression(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
- return func;
+ var updated = ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context));
+ return updated;
}
/**
* @remarks
@@ -46733,51 +46910,10 @@ var ts;
* - The node has type annotations
*/
function visitArrowFunction(node) {
- var func = ts.createArrowFunction(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier),
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, node.equalsGreaterThanToken, transformConciseBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
- return func;
- }
- function transformFunctionBody(node) {
- return transformFunctionBodyWorker(node.body);
- }
- function transformFunctionBodyWorker(body, start) {
- if (start === void 0) { start = 0; }
- var savedCurrentScope = currentScope;
- var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName;
- currentScope = body;
- currentScopeFirstDeclarationsOfName = ts.createMap();
- startLexicalEnvironment();
- var statements = ts.visitNodes(body.statements, visitor, ts.isStatement, start);
- var visited = ts.updateBlock(body, statements);
- var declarations = endLexicalEnvironment();
- currentScope = savedCurrentScope;
- currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
- return ts.mergeFunctionBodyLexicalEnvironment(visited, declarations);
- }
- function transformConciseBody(node) {
- return transformConciseBodyWorker(node.body, /*forceBlockFunctionBody*/ false);
- }
- function transformConciseBodyWorker(body, forceBlockFunctionBody) {
- if (ts.isBlock(body)) {
- return transformFunctionBodyWorker(body);
- }
- else {
- startLexicalEnvironment();
- var visited = ts.visitNode(body, visitor, ts.isConciseBody);
- var declarations = endLexicalEnvironment();
- var merged = ts.mergeFunctionBodyLexicalEnvironment(visited, declarations);
- if (forceBlockFunctionBody && !ts.isBlock(merged)) {
- return ts.createBlock([
- ts.createReturn(merged)
- ]);
- }
- else {
- return merged;
- }
- }
+ var updated = ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier),
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context));
+ return updated;
}
/**
* Visits a parameter declaration node.
@@ -46804,7 +46940,7 @@ var ts;
ts.setOriginalNode(parameter, node);
ts.setCommentRange(parameter, node);
ts.setSourceMapRange(parameter, ts.moveRangePastModifiers(node));
- ts.setEmitFlags(parameter.name, 1024 /* NoTrailingSourceMap */);
+ ts.setEmitFlags(parameter.name, 32 /* NoTrailingSourceMap */);
return parameter;
}
/**
@@ -46830,7 +46966,8 @@ var ts;
function transformInitializedVariable(node) {
var name = node.name;
if (ts.isBindingPattern(name)) {
- return ts.flattenVariableDestructuringToExpression(node, hoistVariableDeclaration, createNamespaceExportExpression, visitor);
+ return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */,
+ /*needsValue*/ false, createNamespaceExportExpression);
}
else {
return ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), ts.visitNode(node.initializer, visitor, ts.isExpression),
@@ -46910,14 +47047,14 @@ var ts;
var statements = [];
// We request to be advised when the printer is about to print this node. This allows
// us to set up the correct state for later substitutions.
- var emitFlags = 64 /* AdviseOnEmitNode */;
+ var emitFlags = 2 /* AdviseOnEmitNode */;
// If needed, we should emit a variable declaration for the enum. If we emit
// a leading variable declaration, we should not emit leading comments for the
// enum body.
if (addVarForEnumOrModuleDeclaration(statements, node)) {
// We should still emit the comments if we are emitting a system module.
if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) {
- emitFlags |= 16384 /* NoLeadingComments */;
+ emitFlags |= 512 /* NoLeadingComments */;
}
}
// `parameterName` is the declaration name used inside of the enum.
@@ -47094,7 +47231,7 @@ var ts;
// })(m1 || (m1 = {})); // trailing comment module
//
ts.setCommentRange(statement, node);
- ts.setEmitFlags(statement, 32768 /* NoTrailingComments */ | 33554432 /* HasEndOfDeclarationMarker */);
+ ts.setEmitFlags(statement, 1024 /* NoTrailingComments */ | 2097152 /* HasEndOfDeclarationMarker */);
statements.push(statement);
return true;
}
@@ -47104,7 +47241,7 @@ var ts;
// begin/end semantics of the declararation and to properly handle exports
// we wrap the leading variable declaration in a `MergeDeclarationMarker`.
var mergeMarker = ts.createMergeDeclarationMarker(statement);
- ts.setEmitFlags(mergeMarker, 49152 /* NoComments */ | 33554432 /* HasEndOfDeclarationMarker */);
+ ts.setEmitFlags(mergeMarker, 1536 /* NoComments */ | 2097152 /* HasEndOfDeclarationMarker */);
statements.push(mergeMarker);
return false;
}
@@ -47125,14 +47262,14 @@ var ts;
var statements = [];
// We request to be advised when the printer is about to print this node. This allows
// us to set up the correct state for later substitutions.
- var emitFlags = 64 /* AdviseOnEmitNode */;
+ var emitFlags = 2 /* AdviseOnEmitNode */;
// If needed, we should emit a variable declaration for the module. If we emit
// a leading variable declaration, we should not emit leading comments for the
// module body.
if (addVarForEnumOrModuleDeclaration(statements, node)) {
// We should still emit the comments if we are emitting a system module.
if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) {
- emitFlags |= 16384 /* NoLeadingComments */;
+ emitFlags |= 512 /* NoLeadingComments */;
}
}
// `parameterName` is the declaration name used inside of the namespace.
@@ -47235,7 +47372,7 @@ var ts;
// })(hello || (hello = {}));
// We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
if (body.kind !== 231 /* ModuleBlock */) {
- ts.setEmitFlags(block, ts.getEmitFlags(block) | 49152 /* NoComments */);
+ ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
}
return block;
}
@@ -47384,7 +47521,7 @@ var ts;
return undefined;
}
var moduleReference = ts.createExpressionFromEntityName(node.moduleReference);
- ts.setEmitFlags(moduleReference, 49152 /* NoComments */ | 65536 /* NoNestedComments */);
+ ts.setEmitFlags(moduleReference, 1536 /* NoComments */ | 2048 /* NoNestedComments */);
if (isNamedExternalModuleExport(node) || !isNamespaceExport(node)) {
// export var ${name} = ${moduleReference};
// var ${name} = ${moduleReference};
@@ -47602,10 +47739,10 @@ var ts;
if (declaration) {
var classAlias = classAliases[declaration.id];
if (classAlias) {
- var clone_4 = ts.getSynthesizedClone(classAlias);
- ts.setSourceMapRange(clone_4, node);
- ts.setCommentRange(clone_4, node);
- return clone_4;
+ var clone_2 = ts.getSynthesizedClone(classAlias);
+ ts.setSourceMapRange(clone_2, node);
+ ts.setCommentRange(clone_2, node);
+ return clone_2;
}
}
}
@@ -47614,7 +47751,7 @@ var ts;
}
function trySubstituteNamespaceExportedName(node) {
// If this is explicitly a local name, do not substitute.
- if (enabledSubstitutions & applicableSubstitutions && !ts.isLocalName(node)) {
+ if (enabledSubstitutions & applicableSubstitutions && !ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
// If we are nested within a namespace declaration, we may need to qualifiy
// an identifier that is exported from a merged namespace.
var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
@@ -47661,13 +47798,335 @@ var ts;
}
}
ts.transformTypeScript = transformTypeScript;
+ var paramHelper = {
+ name: "typescript:param",
+ scoped: false,
+ priority: 4,
+ text: "\n var __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n };"
+ };
+ function createParamHelper(context, expression, parameterOffset, location) {
+ context.requestEmitHelper(paramHelper);
+ return ts.createCall(ts.getHelperName("__param"),
+ /*typeArguments*/ undefined, [
+ ts.createLiteral(parameterOffset),
+ expression
+ ], location);
+ }
+ var metadataHelper = {
+ name: "typescript:metadata",
+ scoped: false,
+ priority: 3,
+ text: "\n var __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n };"
+ };
+ function createMetadataHelper(context, metadataKey, metadataValue) {
+ context.requestEmitHelper(metadataHelper);
+ return ts.createCall(ts.getHelperName("__metadata"),
+ /*typeArguments*/ undefined, [
+ ts.createLiteral(metadataKey),
+ metadataValue
+ ]);
+ }
+ var decorateHelper = {
+ name: "typescript:decorate",
+ scoped: false,
+ priority: 2,
+ text: "\n var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n };"
+ };
+ function createDecorateHelper(context, decoratorExpressions, target, memberName, descriptor, location) {
+ context.requestEmitHelper(decorateHelper);
+ var argumentsArray = [];
+ argumentsArray.push(ts.createArrayLiteral(decoratorExpressions, /*location*/ undefined, /*multiLine*/ true));
+ argumentsArray.push(target);
+ if (memberName) {
+ argumentsArray.push(memberName);
+ if (descriptor) {
+ argumentsArray.push(descriptor);
+ }
+ }
+ return ts.createCall(ts.getHelperName("__decorate"), /*typeArguments*/ undefined, argumentsArray, location);
+ }
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
/// <reference path="../visitor.ts" />
/*@internal*/
var ts;
(function (ts) {
- var entities = createEntitiesMap();
+ function transformESNext(context) {
+ var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment;
+ return transformSourceFile;
+ function transformSourceFile(node) {
+ if (ts.isDeclarationFile(node)) {
+ return node;
+ }
+ var visited = ts.visitEachChild(node, visitor, context);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
+ return visited;
+ }
+ function visitor(node) {
+ return visitorWorker(node, /*noDestructuringValue*/ false);
+ }
+ function visitorNoDestructuringValue(node) {
+ return visitorWorker(node, /*noDestructuringValue*/ true);
+ }
+ function visitorWorker(node, noDestructuringValue) {
+ if ((node.transformFlags & 8 /* ContainsESNext */) === 0) {
+ return node;
+ }
+ switch (node.kind) {
+ case 176 /* ObjectLiteralExpression */:
+ return visitObjectLiteralExpression(node);
+ case 192 /* BinaryExpression */:
+ return visitBinaryExpression(node, noDestructuringValue);
+ case 223 /* VariableDeclaration */:
+ return visitVariableDeclaration(node);
+ case 213 /* ForOfStatement */:
+ return visitForOfStatement(node);
+ case 211 /* ForStatement */:
+ return visitForStatement(node);
+ case 188 /* VoidExpression */:
+ return visitVoidExpression(node);
+ case 150 /* Constructor */:
+ return visitConstructorDeclaration(node);
+ case 149 /* MethodDeclaration */:
+ return visitMethodDeclaration(node);
+ case 151 /* GetAccessor */:
+ return visitGetAccessorDeclaration(node);
+ case 152 /* SetAccessor */:
+ return visitSetAccessorDeclaration(node);
+ case 225 /* FunctionDeclaration */:
+ return visitFunctionDeclaration(node);
+ case 184 /* FunctionExpression */:
+ return visitFunctionExpression(node);
+ case 185 /* ArrowFunction */:
+ return visitArrowFunction(node);
+ case 144 /* Parameter */:
+ return visitParameter(node);
+ case 207 /* ExpressionStatement */:
+ return visitExpressionStatement(node);
+ case 183 /* ParenthesizedExpression */:
+ return visitParenthesizedExpression(node, noDestructuringValue);
+ default:
+ return ts.visitEachChild(node, visitor, context);
+ }
+ }
+ function chunkObjectLiteralElements(elements) {
+ var chunkObject;
+ var objects = [];
+ for (var _i = 0, elements_3 = elements; _i < elements_3.length; _i++) {
+ var e = elements_3[_i];
+ if (e.kind === 259 /* SpreadAssignment */) {
+ if (chunkObject) {
+ objects.push(ts.createObjectLiteral(chunkObject));
+ chunkObject = undefined;
+ }
+ var target = e.expression;
+ objects.push(ts.visitNode(target, visitor, ts.isExpression));
+ }
+ else {
+ if (!chunkObject) {
+ chunkObject = [];
+ }
+ if (e.kind === 257 /* PropertyAssignment */) {
+ var p = e;
+ chunkObject.push(ts.createPropertyAssignment(p.name, ts.visitNode(p.initializer, visitor, ts.isExpression)));
+ }
+ else {
+ chunkObject.push(e);
+ }
+ }
+ }
+ if (chunkObject) {
+ objects.push(ts.createObjectLiteral(chunkObject));
+ }
+ return objects;
+ }
+ function visitObjectLiteralExpression(node) {
+ if (node.transformFlags & 1048576 /* ContainsObjectSpread */) {
+ // spread elements emit like so:
+ // non-spread elements are chunked together into object literals, and then all are passed to __assign:
+ // { a, ...o, b } => __assign({a}, o, {b});
+ // If the first element is a spread element, then the first argument to __assign is {}:
+ // { ...o, a, b, ...o2 } => __assign({}, o, {a, b}, o2)
+ var objects = chunkObjectLiteralElements(node.properties);
+ if (objects.length && objects[0].kind !== 176 /* ObjectLiteralExpression */) {
+ objects.unshift(ts.createObjectLiteral());
+ }
+ return createAssignHelper(context, objects);
+ }
+ return ts.visitEachChild(node, visitor, context);
+ }
+ function visitExpressionStatement(node) {
+ return ts.visitEachChild(node, visitorNoDestructuringValue, context);
+ }
+ function visitParenthesizedExpression(node, noDestructuringValue) {
+ return ts.visitEachChild(node, noDestructuringValue ? visitorNoDestructuringValue : visitor, context);
+ }
+ /**
+ * Visits a BinaryExpression that contains a destructuring assignment.
+ *
+ * @param node A BinaryExpression node.
+ */
+ function visitBinaryExpression(node, noDestructuringValue) {
+ if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 1048576 /* ContainsObjectRest */) {
+ return ts.flattenDestructuringAssignment(node, visitor, context, 1 /* ObjectRest */, !noDestructuringValue);
+ }
+ else if (node.operatorToken.kind === 25 /* CommaToken */) {
+ return ts.updateBinary(node, ts.visitNode(node.left, visitorNoDestructuringValue, ts.isExpression), ts.visitNode(node.right, noDestructuringValue ? visitorNoDestructuringValue : visitor, ts.isExpression));
+ }
+ return ts.visitEachChild(node, visitor, context);
+ }
+ /**
+ * Visits a VariableDeclaration node with a binding pattern.
+ *
+ * @param node A VariableDeclaration node.
+ */
+ function visitVariableDeclaration(node) {
+ // If we are here it is because the name contains a binding pattern with a rest somewhere in it.
+ if (ts.isBindingPattern(node.name) && node.name.transformFlags & 1048576 /* ContainsObjectRest */) {
+ return ts.flattenDestructuringBinding(node, visitor, context, 1 /* ObjectRest */);
+ }
+ return ts.visitEachChild(node, visitor, context);
+ }
+ function visitForStatement(node) {
+ return ts.updateFor(node, ts.visitNode(node.initializer, visitorNoDestructuringValue, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement));
+ }
+ function visitVoidExpression(node) {
+ return ts.visitEachChild(node, visitorNoDestructuringValue, context);
+ }
+ /**
+ * Visits a ForOfStatement and converts it into a ES2015-compatible ForOfStatement.
+ *
+ * @param node A ForOfStatement.
+ */
+ function visitForOfStatement(node) {
+ var leadingStatements;
+ var temp;
+ var initializer = ts.skipParentheses(node.initializer);
+ if (initializer.transformFlags & 1048576 /* ContainsObjectRest */) {
+ if (ts.isVariableDeclarationList(initializer)) {
+ temp = ts.createTempVariable(/*recordTempVariable*/ undefined);
+ var firstDeclaration = ts.firstOrUndefined(initializer.declarations);
+ var declarations = ts.flattenDestructuringBinding(firstDeclaration, visitor, context, 1 /* ObjectRest */, temp,
+ /*doNotRecordTempVariablesInLine*/ false,
+ /*skipInitializer*/ true);
+ if (ts.some(declarations)) {
+ var statement = ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.updateVariableDeclarationList(initializer, declarations),
+ /*location*/ initializer);
+ leadingStatements = ts.append(leadingStatements, statement);
+ }
+ }
+ else if (ts.isAssignmentPattern(initializer)) {
+ temp = ts.createTempVariable(/*recordTempVariable*/ undefined);
+ var expression = ts.flattenDestructuringAssignment(ts.aggregateTransformFlags(ts.createAssignment(initializer, temp, /*location*/ node.initializer)), visitor, context, 1 /* ObjectRest */);
+ leadingStatements = ts.append(leadingStatements, ts.createStatement(expression, /*location*/ node.initializer));
+ }
+ }
+ if (temp) {
+ var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+ var statement = ts.visitNode(node.statement, visitor, ts.isStatement);
+ var block = ts.isBlock(statement)
+ ? ts.updateBlock(statement, ts.createNodeArray(ts.concatenate(leadingStatements, statement.statements), statement.statements))
+ : ts.createBlock(ts.append(leadingStatements, statement), statement, /*multiLine*/ true);
+ return ts.updateForOf(node, ts.createVariableDeclarationList([
+ ts.createVariableDeclaration(temp, /*type*/ undefined, /*initializer*/ undefined, node.initializer)
+ ], node.initializer, 1 /* Let */), expression, block);
+ }
+ return ts.visitEachChild(node, visitor, context);
+ }
+ function visitParameter(node) {
+ if (node.transformFlags & 1048576 /* ContainsObjectRest */) {
+ // Binding patterns are converted into a generated name and are
+ // evaluated inside the function body.
+ return ts.updateParameter(node,
+ /*decorators*/ undefined,
+ /*modifiers*/ undefined, node.dotDotDotToken, ts.getGeneratedNameForNode(node),
+ /*type*/ undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
+ }
+ return ts.visitEachChild(node, visitor, context);
+ }
+ function visitConstructorDeclaration(node) {
+ return ts.updateConstructor(node,
+ /*decorators*/ undefined, node.modifiers, ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node));
+ }
+ function visitGetAccessorDeclaration(node) {
+ return ts.updateGetAccessor(node,
+ /*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node));
+ }
+ function visitSetAccessorDeclaration(node) {
+ return ts.updateSetAccessor(node,
+ /*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node));
+ }
+ function visitMethodDeclaration(node) {
+ return ts.updateMethod(node,
+ /*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName),
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node));
+ }
+ function visitFunctionDeclaration(node) {
+ return ts.updateFunctionDeclaration(node,
+ /*decorators*/ undefined, node.modifiers, node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node));
+ }
+ function visitArrowFunction(node) {
+ return ts.updateArrowFunction(node, node.modifiers,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node));
+ }
+ function visitFunctionExpression(node) {
+ return ts.updateFunctionExpression(node, node.modifiers, node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node));
+ }
+ function transformFunctionBody(node) {
+ resumeLexicalEnvironment();
+ var leadingStatements;
+ for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
+ var parameter = _a[_i];
+ if (parameter.transformFlags & 1048576 /* ContainsObjectRest */) {
+ var temp = ts.getGeneratedNameForNode(parameter);
+ var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1 /* ObjectRest */, temp,
+ /*doNotRecordTempVariablesInLine*/ false,
+ /*skipInitializer*/ true);
+ if (ts.some(declarations)) {
+ var statement = ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.createVariableDeclarationList(declarations));
+ ts.setEmitFlags(statement, 524288 /* CustomPrologue */);
+ leadingStatements = ts.append(leadingStatements, statement);
+ }
+ }
+ }
+ var body = ts.visitNode(node.body, visitor, ts.isConciseBody);
+ var trailingStatements = endLexicalEnvironment();
+ if (ts.some(leadingStatements) || ts.some(trailingStatements)) {
+ var block = ts.convertToFunctionBody(body, /*multiLine*/ true);
+ return ts.updateBlock(block, ts.createNodeArray(ts.concatenate(ts.concatenate(leadingStatements, block.statements), trailingStatements), block.statements));
+ }
+ return body;
+ }
+ }
+ ts.transformESNext = transformESNext;
+ var assignHelper = {
+ name: "typescript:assign",
+ scoped: false,
+ priority: 1,
+ text: "\n var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };"
+ };
+ function createAssignHelper(context, attributesSegments) {
+ context.requestEmitHelper(assignHelper);
+ return ts.createCall(ts.getHelperName("__assign"),
+ /*typeArguments*/ undefined, attributesSegments);
+ }
+ ts.createAssignHelper = createAssignHelper;
+})(ts || (ts = {}));
+/// <reference path="../factory.ts" />
+/// <reference path="../visitor.ts" />
+/// <reference path="./esnext.ts" />
+/*@internal*/
+var ts;
+(function (ts) {
function transformJsx(context) {
var compilerOptions = context.getCompilerOptions();
var currentSourceFile;
@@ -47682,17 +48141,15 @@ var ts;
return node;
}
currentSourceFile = node;
- node = ts.visitEachChild(node, visitor, context);
+ var visited = ts.visitEachChild(node, visitor, context);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
currentSourceFile = undefined;
- return node;
+ return visited;
}
function visitor(node) {
- if (node.transformFlags & 4 /* Jsx */) {
+ if (node.transformFlags & 4 /* ContainsJsx */) {
return visitorWorker(node);
}
- else if (node.transformFlags & 8 /* ContainsJsx */) {
- return ts.visitEachChild(node, visitor, context);
- }
else {
return node;
}
@@ -47706,8 +48163,7 @@ var ts;
case 252 /* JsxExpression */:
return visitJsxExpression(node);
default:
- ts.Debug.failBadSyntaxKind(node);
- return undefined;
+ return ts.visitEachChild(node, visitor, context);
}
}
function transformJsxChildToExpression(node) {
@@ -47752,8 +48208,10 @@ var ts;
}
// Either emit one big object literal (no spread attribs), or
// a call to the __assign helper.
- objectProperties = ts.singleOrUndefined(segments)
- || ts.createAssignHelper(currentSourceFile.externalHelpersModuleName, segments);
+ objectProperties = ts.singleOrUndefined(segments);
+ if (!objectProperties) {
+ objectProperties = ts.createAssignHelper(context, segments);
+ }
}
var element = ts.createExpressionForJsxElement(context.getEmitResolver().getJsxFactoryEntity(), compilerOptions.reactNamespace, tagName, objectProperties, ts.filter(ts.map(children, transformJsxChildToExpression), ts.isDefined), node, location);
if (isChild) {
@@ -47891,519 +48349,285 @@ var ts;
}
}
ts.transformJsx = transformJsx;
- function createEntitiesMap() {
- return ts.createMap({
- "quot": 0x0022,
- "amp": 0x0026,
- "apos": 0x0027,
- "lt": 0x003C,
- "gt": 0x003E,
- "nbsp": 0x00A0,
- "iexcl": 0x00A1,
- "cent": 0x00A2,
- "pound": 0x00A3,
- "curren": 0x00A4,
- "yen": 0x00A5,
- "brvbar": 0x00A6,
- "sect": 0x00A7,
- "uml": 0x00A8,
- "copy": 0x00A9,
- "ordf": 0x00AA,
- "laquo": 0x00AB,
- "not": 0x00AC,
- "shy": 0x00AD,
- "reg": 0x00AE,
- "macr": 0x00AF,
- "deg": 0x00B0,
- "plusmn": 0x00B1,
- "sup2": 0x00B2,
- "sup3": 0x00B3,
- "acute": 0x00B4,
- "micro": 0x00B5,
- "para": 0x00B6,
- "middot": 0x00B7,
- "cedil": 0x00B8,
- "sup1": 0x00B9,
- "ordm": 0x00BA,
- "raquo": 0x00BB,
- "frac14": 0x00BC,
- "frac12": 0x00BD,
- "frac34": 0x00BE,
- "iquest": 0x00BF,
- "Agrave": 0x00C0,
- "Aacute": 0x00C1,
- "Acirc": 0x00C2,
- "Atilde": 0x00C3,
- "Auml": 0x00C4,
- "Aring": 0x00C5,
- "AElig": 0x00C6,
- "Ccedil": 0x00C7,
- "Egrave": 0x00C8,
- "Eacute": 0x00C9,
- "Ecirc": 0x00CA,
- "Euml": 0x00CB,
- "Igrave": 0x00CC,
- "Iacute": 0x00CD,
- "Icirc": 0x00CE,
- "Iuml": 0x00CF,
- "ETH": 0x00D0,
- "Ntilde": 0x00D1,
- "Ograve": 0x00D2,
- "Oacute": 0x00D3,
- "Ocirc": 0x00D4,
- "Otilde": 0x00D5,
- "Ouml": 0x00D6,
- "times": 0x00D7,
- "Oslash": 0x00D8,
- "Ugrave": 0x00D9,
- "Uacute": 0x00DA,
- "Ucirc": 0x00DB,
- "Uuml": 0x00DC,
- "Yacute": 0x00DD,
- "THORN": 0x00DE,
- "szlig": 0x00DF,
- "agrave": 0x00E0,
- "aacute": 0x00E1,
- "acirc": 0x00E2,
- "atilde": 0x00E3,
- "auml": 0x00E4,
- "aring": 0x00E5,
- "aelig": 0x00E6,
- "ccedil": 0x00E7,
- "egrave": 0x00E8,
- "eacute": 0x00E9,
- "ecirc": 0x00EA,
- "euml": 0x00EB,
- "igrave": 0x00EC,
- "iacute": 0x00ED,
- "icirc": 0x00EE,
- "iuml": 0x00EF,
- "eth": 0x00F0,
- "ntilde": 0x00F1,
- "ograve": 0x00F2,
- "oacute": 0x00F3,
- "ocirc": 0x00F4,
- "otilde": 0x00F5,
- "ouml": 0x00F6,
- "divide": 0x00F7,
- "oslash": 0x00F8,
- "ugrave": 0x00F9,
- "uacute": 0x00FA,
- "ucirc": 0x00FB,
- "uuml": 0x00FC,
- "yacute": 0x00FD,
- "thorn": 0x00FE,
- "yuml": 0x00FF,
- "OElig": 0x0152,
- "oelig": 0x0153,
- "Scaron": 0x0160,
- "scaron": 0x0161,
- "Yuml": 0x0178,
- "fnof": 0x0192,
- "circ": 0x02C6,
- "tilde": 0x02DC,
- "Alpha": 0x0391,
- "Beta": 0x0392,
- "Gamma": 0x0393,
- "Delta": 0x0394,
- "Epsilon": 0x0395,
- "Zeta": 0x0396,
- "Eta": 0x0397,
- "Theta": 0x0398,
- "Iota": 0x0399,
- "Kappa": 0x039A,
- "Lambda": 0x039B,
- "Mu": 0x039C,
- "Nu": 0x039D,
- "Xi": 0x039E,
- "Omicron": 0x039F,
- "Pi": 0x03A0,
- "Rho": 0x03A1,
- "Sigma": 0x03A3,
- "Tau": 0x03A4,
- "Upsilon": 0x03A5,
- "Phi": 0x03A6,
- "Chi": 0x03A7,
- "Psi": 0x03A8,
- "Omega": 0x03A9,
- "alpha": 0x03B1,
- "beta": 0x03B2,
- "gamma": 0x03B3,
- "delta": 0x03B4,
- "epsilon": 0x03B5,
- "zeta": 0x03B6,
- "eta": 0x03B7,
- "theta": 0x03B8,
- "iota": 0x03B9,
- "kappa": 0x03BA,
- "lambda": 0x03BB,
- "mu": 0x03BC,
- "nu": 0x03BD,
- "xi": 0x03BE,
- "omicron": 0x03BF,
- "pi": 0x03C0,
- "rho": 0x03C1,
- "sigmaf": 0x03C2,
- "sigma": 0x03C3,
- "tau": 0x03C4,
- "upsilon": 0x03C5,
- "phi": 0x03C6,
- "chi": 0x03C7,
- "psi": 0x03C8,
- "omega": 0x03C9,
- "thetasym": 0x03D1,
- "upsih": 0x03D2,
- "piv": 0x03D6,
- "ensp": 0x2002,
- "emsp": 0x2003,
- "thinsp": 0x2009,
- "zwnj": 0x200C,
- "zwj": 0x200D,
- "lrm": 0x200E,
- "rlm": 0x200F,
- "ndash": 0x2013,
- "mdash": 0x2014,
- "lsquo": 0x2018,
- "rsquo": 0x2019,
- "sbquo": 0x201A,
- "ldquo": 0x201C,
- "rdquo": 0x201D,
- "bdquo": 0x201E,
- "dagger": 0x2020,
- "Dagger": 0x2021,
- "bull": 0x2022,
- "hellip": 0x2026,
- "permil": 0x2030,
- "prime": 0x2032,
- "Prime": 0x2033,
- "lsaquo": 0x2039,
- "rsaquo": 0x203A,
- "oline": 0x203E,
- "frasl": 0x2044,
- "euro": 0x20AC,
- "image": 0x2111,
- "weierp": 0x2118,
- "real": 0x211C,
- "trade": 0x2122,
- "alefsym": 0x2135,
- "larr": 0x2190,
- "uarr": 0x2191,
- "rarr": 0x2192,
- "darr": 0x2193,
- "harr": 0x2194,
- "crarr": 0x21B5,
- "lArr": 0x21D0,
- "uArr": 0x21D1,
- "rArr": 0x21D2,
- "dArr": 0x21D3,
- "hArr": 0x21D4,
- "forall": 0x2200,
- "part": 0x2202,
- "exist": 0x2203,
- "empty": 0x2205,
- "nabla": 0x2207,
- "isin": 0x2208,
- "notin": 0x2209,
- "ni": 0x220B,
- "prod": 0x220F,
- "sum": 0x2211,
- "minus": 0x2212,
- "lowast": 0x2217,
- "radic": 0x221A,
- "prop": 0x221D,
- "infin": 0x221E,
- "ang": 0x2220,
- "and": 0x2227,
- "or": 0x2228,
- "cap": 0x2229,
- "cup": 0x222A,
- "int": 0x222B,
- "there4": 0x2234,
- "sim": 0x223C,
- "cong": 0x2245,
- "asymp": 0x2248,
- "ne": 0x2260,
- "equiv": 0x2261,
- "le": 0x2264,
- "ge": 0x2265,
- "sub": 0x2282,
- "sup": 0x2283,
- "nsub": 0x2284,
- "sube": 0x2286,
- "supe": 0x2287,
- "oplus": 0x2295,
- "otimes": 0x2297,
- "perp": 0x22A5,
- "sdot": 0x22C5,
- "lceil": 0x2308,
- "rceil": 0x2309,
- "lfloor": 0x230A,
- "rfloor": 0x230B,
- "lang": 0x2329,
- "rang": 0x232A,
- "loz": 0x25CA,
- "spades": 0x2660,
- "clubs": 0x2663,
- "hearts": 0x2665,
- "diams": 0x2666
- });
- }
-})(ts || (ts = {}));
-/// <reference path="../factory.ts" />
-/// <reference path="../visitor.ts" />
-/*@internal*/
-var ts;
-(function (ts) {
- function transformESNext(context) {
- var hoistVariableDeclaration = context.hoistVariableDeclaration;
- var currentSourceFile;
- return transformSourceFile;
- function transformSourceFile(node) {
- currentSourceFile = node;
- return ts.visitEachChild(node, visitor, context);
- }
- function visitor(node) {
- if (node.transformFlags & 16 /* ESNext */) {
- return visitorWorker(node);
- }
- else if (node.transformFlags & 32 /* ContainsESNext */) {
- return ts.visitEachChild(node, visitor, context);
- }
- else {
- return node;
- }
- }
- function visitorWorker(node) {
- switch (node.kind) {
- case 176 /* ObjectLiteralExpression */:
- return visitObjectLiteralExpression(node);
- case 192 /* BinaryExpression */:
- return visitBinaryExpression(node);
- case 223 /* VariableDeclaration */:
- return visitVariableDeclaration(node);
- case 213 /* ForOfStatement */:
- return visitForOfStatement(node);
- case 172 /* ObjectBindingPattern */:
- case 173 /* ArrayBindingPattern */:
- return node;
- case 225 /* FunctionDeclaration */:
- return visitFunctionDeclaration(node);
- case 184 /* FunctionExpression */:
- return visitFunctionExpression(node);
- case 185 /* ArrowFunction */:
- return visitArrowFunction(node);
- case 144 /* Parameter */:
- return visitParameter(node);
- default:
- ts.Debug.failBadSyntaxKind(node);
- return ts.visitEachChild(node, visitor, context);
- }
- }
- function chunkObjectLiteralElements(elements) {
- var chunkObject;
- var objects = [];
- for (var _i = 0, elements_3 = elements; _i < elements_3.length; _i++) {
- var e = elements_3[_i];
- if (e.kind === 259 /* SpreadAssignment */) {
- if (chunkObject) {
- objects.push(ts.createObjectLiteral(chunkObject));
- chunkObject = undefined;
- }
- var target = e.expression;
- objects.push(ts.visitNode(target, visitor, ts.isExpression));
- }
- else {
- if (!chunkObject) {
- chunkObject = [];
- }
- if (e.kind === 257 /* PropertyAssignment */) {
- var p = e;
- chunkObject.push(ts.createPropertyAssignment(p.name, ts.visitNode(p.initializer, visitor, ts.isExpression)));
- }
- else {
- chunkObject.push(e);
- }
- }
- }
- if (chunkObject) {
- objects.push(ts.createObjectLiteral(chunkObject));
- }
- return objects;
- }
- function visitObjectLiteralExpression(node) {
- // spread elements emit like so:
- // non-spread elements are chunked together into object literals, and then all are passed to __assign:
- // { a, ...o, b } => __assign({a}, o, {b});
- // If the first element is a spread element, then the first argument to __assign is {}:
- // { ...o, a, b, ...o2 } => __assign({}, o, {a, b}, o2)
- if (ts.forEach(node.properties, function (p) { return p.kind === 259 /* SpreadAssignment */; })) {
- var objects = chunkObjectLiteralElements(node.properties);
- if (objects.length && objects[0].kind !== 176 /* ObjectLiteralExpression */) {
- objects.unshift(ts.createObjectLiteral());
- }
- return ts.aggregateTransformFlags(ts.createCall(ts.createIdentifier("__assign"), undefined, objects));
- }
- return ts.visitEachChild(node, visitor, context);
- }
- /**
- * Visits a BinaryExpression that contains a destructuring assignment.
- *
- * @param node A BinaryExpression node.
- */
- function visitBinaryExpression(node) {
- if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 48 /* AssertESNext */) {
- return ts.flattenDestructuringAssignment(context, node, /*needsDestructuringValue*/ true, hoistVariableDeclaration, visitor, /*transformRest*/ true);
- }
- return ts.visitEachChild(node, visitor, context);
- }
- /**
- * Visits a VariableDeclaration node with a binding pattern.
- *
- * @param node A VariableDeclaration node.
- */
- function visitVariableDeclaration(node) {
- // If we are here it is because the name contains a binding pattern with a rest somewhere in it.
- if (ts.isBindingPattern(node.name) && node.name.transformFlags & 48 /* AssertESNext */) {
- var result = ts.flattenVariableDestructuring(node, /*value*/ undefined, visitor, /*recordTempVariable*/ undefined, /*transformRest*/ true);
- return result;
- }
- return ts.visitEachChild(node, visitor, context);
- }
- /**
- * Visits a ForOfStatement and converts it into a ES2015-compatible ForOfStatement.
- *
- * @param node A ForOfStatement.
- */
- function visitForOfStatement(node) {
- // The following ESNext code:
- //
- // for (let { x, y, ...rest } of expr) { }
- //
- // should be emitted as
- //
- // for (var _a of expr) {
- // let { x, y } = _a, rest = __rest(_a, ["x", "y"]);
- // }
- //
- // where _a is a temp emitted to capture the RHS.
- // When the left hand side is an expression instead of a let declaration,
- // the `let` before the `{ x, y }` is not emitted.
- // When the left hand side is a let/const, the v is renamed if there is
- // another v in scope.
- // Note that all assignments to the LHS are emitted in the body, including
- // all destructuring.
- // Note also that because an extra statement is needed to assign to the LHS,
- // for-of bodies are always emitted as blocks.
- // for (<init> of <expression>) <statement>
- // where <init> is [let] variabledeclarationlist | expression
- var initializer = node.initializer;
- if (!isRestBindingPattern(initializer) && !isRestAssignment(initializer)) {
- return ts.visitEachChild(node, visitor, context);
- }
- return ts.convertForOf(node, undefined, visitor, ts.noop, context, /*transformRest*/ true);
- }
- function isRestBindingPattern(initializer) {
- if (ts.isVariableDeclarationList(initializer)) {
- var declaration = ts.firstOrUndefined(initializer.declarations);
- return declaration && declaration.name &&
- declaration.name.kind === 172 /* ObjectBindingPattern */ &&
- !!(declaration.name.transformFlags & 8388608 /* ContainsSpreadExpression */);
- }
- return false;
- }
- function isRestAssignment(initializer) {
- return initializer.kind === 176 /* ObjectLiteralExpression */ &&
- initializer.transformFlags & 8388608 /* ContainsSpreadExpression */;
- }
- function visitParameter(node) {
- if (isObjectRestParameter(node)) {
- // Binding patterns are converted into a generated name and are
- // evaluated inside the function body.
- return ts.setOriginalNode(ts.createParameter(
- /*decorators*/ undefined,
- /*modifiers*/ undefined,
- /*dotDotDotToken*/ undefined, ts.getGeneratedNameForNode(node),
- /*questionToken*/ undefined,
- /*type*/ undefined, node.initializer,
- /*location*/ node),
- /*original*/ node);
- }
- else {
- return node;
- }
- }
- function isObjectRestParameter(node) {
- return node.name &&
- node.name.kind === 172 /* ObjectBindingPattern */ &&
- !!(node.name.transformFlags & 8388608 /* ContainsSpreadExpression */);
- }
- function visitFunctionDeclaration(node) {
- var hasRest = ts.forEach(node.parameters, isObjectRestParameter);
- var body = hasRest ?
- ts.transformFunctionBody(node, visitor, currentSourceFile, context, ts.noop, /*convertObjectRest*/ true) :
- ts.visitEachChild(node.body, visitor, context);
- return ts.setOriginalNode(ts.createFunctionDeclaration(
- /*decorators*/ undefined, node.modifiers, node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, body,
- /*location*/ node),
- /*original*/ node);
- }
- function visitArrowFunction(node) {
- var hasRest = ts.forEach(node.parameters, isObjectRestParameter);
- var body = hasRest ?
- ts.transformFunctionBody(node, visitor, currentSourceFile, context, ts.noop, /*convertObjectRest*/ true) :
- ts.visitEachChild(node.body, visitor, context);
- var func = ts.setOriginalNode(ts.createArrowFunction(node.modifiers,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, node.equalsGreaterThanToken, body,
- /*location*/ node),
- /*original*/ node);
- ts.setEmitFlags(func, 256 /* CapturesThis */);
- return func;
- }
- function visitFunctionExpression(node) {
- var hasRest = ts.forEach(node.parameters, isObjectRestParameter);
- var body = hasRest ?
- ts.transformFunctionBody(node, visitor, currentSourceFile, context, ts.noop, /*convertObjectRest*/ true) :
- ts.visitEachChild(node.body, visitor, context);
- return ts.setOriginalNode(ts.createFunctionExpression(node.modifiers, node.asteriskToken, name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, body,
- /*location*/ node),
- /*original*/ node);
- }
- }
- ts.transformESNext = transformESNext;
+ var entities = ts.createMap({
+ "quot": 0x0022,
+ "amp": 0x0026,
+ "apos": 0x0027,
+ "lt": 0x003C,
+ "gt": 0x003E,
+ "nbsp": 0x00A0,
+ "iexcl": 0x00A1,
+ "cent": 0x00A2,
+ "pound": 0x00A3,
+ "curren": 0x00A4,
+ "yen": 0x00A5,
+ "brvbar": 0x00A6,
+ "sect": 0x00A7,
+ "uml": 0x00A8,
+ "copy": 0x00A9,
+ "ordf": 0x00AA,
+ "laquo": 0x00AB,
+ "not": 0x00AC,
+ "shy": 0x00AD,
+ "reg": 0x00AE,
+ "macr": 0x00AF,
+ "deg": 0x00B0,
+ "plusmn": 0x00B1,
+ "sup2": 0x00B2,
+ "sup3": 0x00B3,
+ "acute": 0x00B4,
+ "micro": 0x00B5,
+ "para": 0x00B6,
+ "middot": 0x00B7,
+ "cedil": 0x00B8,
+ "sup1": 0x00B9,
+ "ordm": 0x00BA,
+ "raquo": 0x00BB,
+ "frac14": 0x00BC,
+ "frac12": 0x00BD,
+ "frac34": 0x00BE,
+ "iquest": 0x00BF,
+ "Agrave": 0x00C0,
+ "Aacute": 0x00C1,
+ "Acirc": 0x00C2,
+ "Atilde": 0x00C3,
+ "Auml": 0x00C4,
+ "Aring": 0x00C5,
+ "AElig": 0x00C6,
+ "Ccedil": 0x00C7,
+ "Egrave": 0x00C8,
+ "Eacute": 0x00C9,
+ "Ecirc": 0x00CA,
+ "Euml": 0x00CB,
+ "Igrave": 0x00CC,
+ "Iacute": 0x00CD,
+ "Icirc": 0x00CE,
+ "Iuml": 0x00CF,
+ "ETH": 0x00D0,
+ "Ntilde": 0x00D1,
+ "Ograve": 0x00D2,
+ "Oacute": 0x00D3,
+ "Ocirc": 0x00D4,
+ "Otilde": 0x00D5,
+ "Ouml": 0x00D6,
+ "times": 0x00D7,
+ "Oslash": 0x00D8,
+ "Ugrave": 0x00D9,
+ "Uacute": 0x00DA,
+ "Ucirc": 0x00DB,
+ "Uuml": 0x00DC,
+ "Yacute": 0x00DD,
+ "THORN": 0x00DE,
+ "szlig": 0x00DF,
+ "agrave": 0x00E0,
+ "aacute": 0x00E1,
+ "acirc": 0x00E2,
+ "atilde": 0x00E3,
+ "auml": 0x00E4,
+ "aring": 0x00E5,
+ "aelig": 0x00E6,
+ "ccedil": 0x00E7,
+ "egrave": 0x00E8,
+ "eacute": 0x00E9,
+ "ecirc": 0x00EA,
+ "euml": 0x00EB,
+ "igrave": 0x00EC,
+ "iacute": 0x00ED,
+ "icirc": 0x00EE,
+ "iuml": 0x00EF,
+ "eth": 0x00F0,
+ "ntilde": 0x00F1,
+ "ograve": 0x00F2,
+ "oacute": 0x00F3,
+ "ocirc": 0x00F4,
+ "otilde": 0x00F5,
+ "ouml": 0x00F6,
+ "divide": 0x00F7,
+ "oslash": 0x00F8,
+ "ugrave": 0x00F9,
+ "uacute": 0x00FA,
+ "ucirc": 0x00FB,
+ "uuml": 0x00FC,
+ "yacute": 0x00FD,
+ "thorn": 0x00FE,
+ "yuml": 0x00FF,
+ "OElig": 0x0152,
+ "oelig": 0x0153,
+ "Scaron": 0x0160,
+ "scaron": 0x0161,
+ "Yuml": 0x0178,
+ "fnof": 0x0192,
+ "circ": 0x02C6,
+ "tilde": 0x02DC,
+ "Alpha": 0x0391,
+ "Beta": 0x0392,
+ "Gamma": 0x0393,
+ "Delta": 0x0394,
+ "Epsilon": 0x0395,
+ "Zeta": 0x0396,
+ "Eta": 0x0397,
+ "Theta": 0x0398,
+ "Iota": 0x0399,
+ "Kappa": 0x039A,
+ "Lambda": 0x039B,
+ "Mu": 0x039C,
+ "Nu": 0x039D,
+ "Xi": 0x039E,
+ "Omicron": 0x039F,
+ "Pi": 0x03A0,
+ "Rho": 0x03A1,
+ "Sigma": 0x03A3,
+ "Tau": 0x03A4,
+ "Upsilon": 0x03A5,
+ "Phi": 0x03A6,
+ "Chi": 0x03A7,
+ "Psi": 0x03A8,
+ "Omega": 0x03A9,
+ "alpha": 0x03B1,
+ "beta": 0x03B2,
+ "gamma": 0x03B3,
+ "delta": 0x03B4,
+ "epsilon": 0x03B5,
+ "zeta": 0x03B6,
+ "eta": 0x03B7,
+ "theta": 0x03B8,
+ "iota": 0x03B9,
+ "kappa": 0x03BA,
+ "lambda": 0x03BB,
+ "mu": 0x03BC,
+ "nu": 0x03BD,
+ "xi": 0x03BE,
+ "omicron": 0x03BF,
+ "pi": 0x03C0,
+ "rho": 0x03C1,
+ "sigmaf": 0x03C2,
+ "sigma": 0x03C3,
+ "tau": 0x03C4,
+ "upsilon": 0x03C5,
+ "phi": 0x03C6,
+ "chi": 0x03C7,
+ "psi": 0x03C8,
+ "omega": 0x03C9,
+ "thetasym": 0x03D1,
+ "upsih": 0x03D2,
+ "piv": 0x03D6,
+ "ensp": 0x2002,
+ "emsp": 0x2003,
+ "thinsp": 0x2009,
+ "zwnj": 0x200C,
+ "zwj": 0x200D,
+ "lrm": 0x200E,
+ "rlm": 0x200F,
+ "ndash": 0x2013,
+ "mdash": 0x2014,
+ "lsquo": 0x2018,
+ "rsquo": 0x2019,
+ "sbquo": 0x201A,
+ "ldquo": 0x201C,
+ "rdquo": 0x201D,
+ "bdquo": 0x201E,
+ "dagger": 0x2020,
+ "Dagger": 0x2021,
+ "bull": 0x2022,
+ "hellip": 0x2026,
+ "permil": 0x2030,
+ "prime": 0x2032,
+ "Prime": 0x2033,
+ "lsaquo": 0x2039,
+ "rsaquo": 0x203A,
+ "oline": 0x203E,
+ "frasl": 0x2044,
+ "euro": 0x20AC,
+ "image": 0x2111,
+ "weierp": 0x2118,
+ "real": 0x211C,
+ "trade": 0x2122,
+ "alefsym": 0x2135,
+ "larr": 0x2190,
+ "uarr": 0x2191,
+ "rarr": 0x2192,
+ "darr": 0x2193,
+ "harr": 0x2194,
+ "crarr": 0x21B5,
+ "lArr": 0x21D0,
+ "uArr": 0x21D1,
+ "rArr": 0x21D2,
+ "dArr": 0x21D3,
+ "hArr": 0x21D4,
+ "forall": 0x2200,
+ "part": 0x2202,
+ "exist": 0x2203,
+ "empty": 0x2205,
+ "nabla": 0x2207,
+ "isin": 0x2208,
+ "notin": 0x2209,
+ "ni": 0x220B,
+ "prod": 0x220F,
+ "sum": 0x2211,
+ "minus": 0x2212,
+ "lowast": 0x2217,
+ "radic": 0x221A,
+ "prop": 0x221D,
+ "infin": 0x221E,
+ "ang": 0x2220,
+ "and": 0x2227,
+ "or": 0x2228,
+ "cap": 0x2229,
+ "cup": 0x222A,
+ "int": 0x222B,
+ "there4": 0x2234,
+ "sim": 0x223C,
+ "cong": 0x2245,
+ "asymp": 0x2248,
+ "ne": 0x2260,
+ "equiv": 0x2261,
+ "le": 0x2264,
+ "ge": 0x2265,
+ "sub": 0x2282,
+ "sup": 0x2283,
+ "nsub": 0x2284,
+ "sube": 0x2286,
+ "supe": 0x2287,
+ "oplus": 0x2295,
+ "otimes": 0x2297,
+ "perp": 0x22A5,
+ "sdot": 0x22C5,
+ "lceil": 0x2308,
+ "rceil": 0x2309,
+ "lfloor": 0x230A,
+ "rfloor": 0x230B,
+ "lang": 0x2329,
+ "rang": 0x232A,
+ "loz": 0x25CA,
+ "spades": 0x2660,
+ "clubs": 0x2663,
+ "hearts": 0x2665,
+ "diams": 0x2666
+ });
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
/// <reference path="../visitor.ts" />
/*@internal*/
var ts;
(function (ts) {
+ var ES2017SubstitutionFlags;
+ (function (ES2017SubstitutionFlags) {
+ /** Enables substitutions for async methods with `super` calls. */
+ ES2017SubstitutionFlags[ES2017SubstitutionFlags["AsyncMethodsWithSuper"] = 1] = "AsyncMethodsWithSuper";
+ })(ES2017SubstitutionFlags || (ES2017SubstitutionFlags = {}));
function transformES2017(context) {
- var ES2017SubstitutionFlags;
- (function (ES2017SubstitutionFlags) {
- /** Enables substitutions for async methods with `super` calls. */
- ES2017SubstitutionFlags[ES2017SubstitutionFlags["AsyncMethodsWithSuper"] = 1] = "AsyncMethodsWithSuper";
- })(ES2017SubstitutionFlags || (ES2017SubstitutionFlags = {}));
- var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment;
+ var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment;
var resolver = context.getEmitResolver();
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
// These variables contain state that changes as we descend into the tree.
- var currentSourceFileExternalHelpersModuleName;
+ var currentSourceFile;
/**
* Keeps track of whether expression substitution has been enabled for specific edge cases.
* They are persisted between each SourceFile transformation and should not be reset.
*/
var enabledSubstitutions;
/**
- * Keeps track of whether we are within any containing namespaces when performing
- * just-in-time substitution while printing an expression identifier.
- */
- var applicableSubstitutions;
- /**
* This keeps track of containers where `super` is valid, for use with
* just-in-time substitution for `super` expressions inside of async methods.
*/
@@ -48414,25 +48638,21 @@ var ts;
// Set new transformation hooks.
context.onEmitNode = onEmitNode;
context.onSubstituteNode = onSubstituteNode;
- var currentScope;
return transformSourceFile;
function transformSourceFile(node) {
if (ts.isDeclarationFile(node)) {
return node;
}
- currentSourceFileExternalHelpersModuleName = node.externalHelpersModuleName;
- return ts.visitEachChild(node, visitor, context);
+ currentSourceFile = node;
+ var visited = ts.visitEachChild(node, visitor, context);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
+ currentSourceFile = undefined;
+ return visited;
}
function visitor(node) {
- if (node.transformFlags & 64 /* ES2017 */) {
- return visitorWorker(node);
- }
- else if (node.transformFlags & 128 /* ContainsES2017 */) {
- return ts.visitEachChild(node, visitor, context);
+ if ((node.transformFlags & 16 /* ContainsES2017 */) === 0) {
+ return node;
}
- return node;
- }
- function visitorWorker(node) {
switch (node.kind) {
case 119 /* AsyncKeyword */:
// ES2017 async modifier should be elided for targets < ES2017
@@ -48453,16 +48673,15 @@ var ts;
// ES2017 arrow functions may be 'async'
return visitArrowFunction(node);
default:
- ts.Debug.failBadSyntaxKind(node);
- return node;
+ return ts.visitEachChild(node, visitor, context);
}
}
/**
- * Visits an await expression.
+ * Visits an AwaitExpression node.
*
* This function will be called any time a ES2017 await expression is encountered.
*
- * @param node The await expression node.
+ * @param node The node to visit.
*/
function visitAwaitExpression(node) {
return ts.setOriginalNode(ts.createYield(
@@ -48470,106 +48689,73 @@ var ts;
/*location*/ node), node);
}
/**
- * Visits a method declaration of a class.
+ * Visits a MethodDeclaration node.
*
* This function will be called when one of the following conditions are met:
* - The node is marked as async
*
- * @param node The method node.
+ * @param node The node to visit.
*/
function visitMethodDeclaration(node) {
- if (!ts.isAsyncFunctionLike(node)) {
- return node;
- }
- var method = ts.createMethod(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- // While we emit the source map for the node after skipping decorators and modifiers,
- // we need to emit the comments for the original range.
- ts.setCommentRange(method, node);
- ts.setSourceMapRange(method, ts.moveRangePastDecorators(node));
- ts.setOriginalNode(method, node);
- return method;
+ return ts.updateMethod(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.isAsyncFunctionLike(node)
+ ? transformAsyncFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
/**
- * Visits a function declaration.
+ * Visits a FunctionDeclaration node.
*
* This function will be called when one of the following conditions are met:
* - The node is marked async
*
- * @param node The function node.
+ * @param node The node to visit.
*/
function visitFunctionDeclaration(node) {
- if (!ts.isAsyncFunctionLike(node)) {
- return node;
- }
- var func = ts.createFunctionDeclaration(
- /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
- return func;
+ return ts.updateFunctionDeclaration(node,
+ /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.isAsyncFunctionLike(node)
+ ? transformAsyncFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
/**
- * Visits a function expression node.
+ * Visits a FunctionExpression node.
*
* This function will be called when one of the following conditions are met:
* - The node is marked async
*
- * @param node The function expression node.
+ * @param node The node to visit.
*/
function visitFunctionExpression(node) {
- if (!ts.isAsyncFunctionLike(node)) {
- return node;
- }
if (ts.nodeIsMissing(node.body)) {
return ts.createOmittedExpression();
}
- var func = ts.createFunctionExpression(
- /*modifiers*/ undefined, node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, transformFunctionBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
- return func;
+ return ts.updateFunctionExpression(node,
+ /*modifiers*/ undefined, node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.isAsyncFunctionLike(node)
+ ? transformAsyncFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
/**
- * @remarks
+ * Visits an ArrowFunction.
+ *
* This function will be called when one of the following conditions are met:
* - The node is marked async
+ *
+ * @param node The node to visit.
*/
function visitArrowFunction(node) {
- if (!ts.isAsyncFunctionLike(node)) {
- return node;
- }
- var func = ts.createArrowFunction(ts.visitNodes(node.modifiers, visitor, ts.isModifier),
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, node.equalsGreaterThanToken, transformConciseBody(node),
- /*location*/ node);
- ts.setOriginalNode(func, node);
- return func;
- }
- function transformFunctionBody(node) {
- return transformAsyncFunctionBody(node);
- }
- function transformConciseBody(node) {
- return transformAsyncFunctionBody(node);
- }
- function transformFunctionBodyWorker(body, start) {
- if (start === void 0) { start = 0; }
- var savedCurrentScope = currentScope;
- currentScope = body;
- startLexicalEnvironment();
- var statements = ts.visitNodes(body.statements, visitor, ts.isStatement, start);
- var visited = ts.updateBlock(body, statements);
- var declarations = endLexicalEnvironment();
- currentScope = savedCurrentScope;
- return ts.mergeFunctionBodyLexicalEnvironment(visited, declarations);
+ return ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier),
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, ts.isAsyncFunctionLike(node)
+ ? transformAsyncFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
function transformAsyncFunctionBody(node) {
+ resumeLexicalEnvironment();
var original = ts.getOriginalNode(node, ts.isFunctionLike);
var nodeType = original.type;
var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
@@ -48583,54 +48769,51 @@ var ts;
if (!isArrowFunction) {
var statements = [];
var statementOffset = ts.addPrologueDirectives(statements, node.body.statements, /*ensureUseStrict*/ false, visitor);
- statements.push(ts.createReturn(ts.createAwaiterHelper(currentSourceFileExternalHelpersModuleName, hasLexicalArguments, promiseConstructor, transformFunctionBodyWorker(node.body, statementOffset))));
+ statements.push(ts.createReturn(createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformFunctionBodyWorker(node.body, statementOffset))));
+ ts.addRange(statements, endLexicalEnvironment());
var block = ts.createBlock(statements, /*location*/ node.body, /*multiLine*/ true);
// Minor optimization, emit `_super` helper to capture `super` access in an arrow.
// This step isn't needed if we eventually transform this to ES5.
if (languageVersion >= 2 /* ES2015 */) {
if (resolver.getNodeCheckFlags(node) & 4096 /* AsyncMethodWithSuperBinding */) {
enableSubstitutionForAsyncMethodsWithSuper();
- ts.setEmitFlags(block, 8 /* EmitAdvancedSuperHelper */);
+ ts.addEmitHelper(block, advancedAsyncSuperHelper);
}
else if (resolver.getNodeCheckFlags(node) & 2048 /* AsyncMethodWithSuper */) {
enableSubstitutionForAsyncMethodsWithSuper();
- ts.setEmitFlags(block, 4 /* EmitSuperHelper */);
+ ts.addEmitHelper(block, asyncSuperHelper);
}
}
return block;
}
else {
- return ts.createAwaiterHelper(currentSourceFileExternalHelpersModuleName, hasLexicalArguments, promiseConstructor, transformConciseBodyWorker(node.body, /*forceBlockFunctionBody*/ true));
+ var expression = createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformFunctionBodyWorker(node.body));
+ var declarations = endLexicalEnvironment();
+ if (ts.some(declarations)) {
+ var block = ts.convertToFunctionBody(expression);
+ return ts.updateBlock(block, ts.createNodeArray(ts.concatenate(block.statements, declarations), block.statements));
+ }
+ return expression;
}
}
- function transformConciseBodyWorker(body, forceBlockFunctionBody) {
+ function transformFunctionBodyWorker(body, start) {
if (ts.isBlock(body)) {
- return transformFunctionBodyWorker(body);
+ return ts.updateBlock(body, ts.visitLexicalEnvironment(body.statements, visitor, context, start));
}
else {
startLexicalEnvironment();
- var visited = ts.visitNode(body, visitor, ts.isConciseBody);
+ var visited = ts.convertToFunctionBody(ts.visitNode(body, visitor, ts.isConciseBody));
var declarations = endLexicalEnvironment();
- var merged = ts.mergeFunctionBodyLexicalEnvironment(visited, declarations);
- if (forceBlockFunctionBody && !ts.isBlock(merged)) {
- return ts.createBlock([
- ts.createReturn(merged)
- ]);
- }
- else {
- return merged;
- }
+ return ts.updateBlock(visited, ts.createNodeArray(ts.concatenate(visited.statements, declarations), visited.statements));
}
}
function getPromiseConstructor(type) {
- if (type) {
- var typeName = ts.getEntityNameFromTypeNode(type);
- if (typeName && ts.isEntityName(typeName)) {
- var serializationKind = resolver.getTypeReferenceSerializationKind(typeName);
- if (serializationKind === ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue
- || serializationKind === ts.TypeReferenceSerializationKind.Unknown) {
- return typeName;
- }
+ var typeName = type && ts.getEntityNameFromTypeNode(type);
+ if (typeName && ts.isEntityName(typeName)) {
+ var serializationKind = resolver.getTypeReferenceSerializationKind(typeName);
+ if (serializationKind === ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue
+ || serializationKind === ts.TypeReferenceSerializationKind.Unknown) {
+ return typeName;
}
}
return undefined;
@@ -48714,16 +48897,17 @@ var ts;
* @param emit A callback used to emit the node in the printer.
*/
function onEmitNode(emitContext, node, emitCallback) {
- var savedApplicableSubstitutions = applicableSubstitutions;
- var savedCurrentSuperContainer = currentSuperContainer;
// If we need to support substitutions for `super` in an async method,
// we should track it here.
if (enabledSubstitutions & 1 /* AsyncMethodsWithSuper */ && isSuperContainer(node)) {
+ var savedCurrentSuperContainer = currentSuperContainer;
currentSuperContainer = node;
+ previousOnEmitNode(emitContext, node, emitCallback);
+ currentSuperContainer = savedCurrentSuperContainer;
+ }
+ else {
+ previousOnEmitNode(emitContext, node, emitCallback);
}
- previousOnEmitNode(emitContext, node, emitCallback);
- applicableSubstitutions = savedApplicableSubstitutions;
- currentSuperContainer = savedCurrentSuperContainer;
}
/**
* Hooks node substitutions.
@@ -48755,6 +48939,40 @@ var ts;
}
}
ts.transformES2017 = transformES2017;
+ function createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, body) {
+ context.requestEmitHelper(awaiterHelper);
+ var generatorFunc = ts.createFunctionExpression(
+ /*modifiers*/ undefined, ts.createToken(38 /* AsteriskToken */),
+ /*name*/ undefined,
+ /*typeParameters*/ undefined,
+ /*parameters*/ [],
+ /*type*/ undefined, body);
+ // Mark this node as originally an async function
+ (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 131072 /* AsyncFunctionBody */;
+ return ts.createCall(ts.getHelperName("__awaiter"),
+ /*typeArguments*/ undefined, [
+ ts.createThis(),
+ hasLexicalArguments ? ts.createIdentifier("arguments") : ts.createVoidZero(),
+ promiseConstructor ? ts.createExpressionFromEntityName(promiseConstructor) : ts.createVoidZero(),
+ generatorFunc
+ ]);
+ }
+ var awaiterHelper = {
+ name: "typescript:awaiter",
+ scoped: false,
+ priority: 5,
+ text: "\n var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments)).next());\n });\n };"
+ };
+ var asyncSuperHelper = {
+ name: "typescript:async-super",
+ scoped: true,
+ text: "\n const _super = name => super[name];"
+ };
+ var advancedAsyncSuperHelper = {
+ name: "typescript:advanced-async-super",
+ scoped: true,
+ text: "\n const _super = (function (geti, seti) {\n const cache = Object.create(null);\n return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n })(name => super[name], (name, value) => super[name] = value);"
+ };
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
/// <reference path="../visitor.ts" />
@@ -48771,64 +48989,60 @@ var ts;
return ts.visitEachChild(node, visitor, context);
}
function visitor(node) {
- if (node.transformFlags & 256 /* ES2016 */) {
- return visitorWorker(node);
- }
- else if (node.transformFlags & 512 /* ContainsES2016 */) {
- return ts.visitEachChild(node, visitor, context);
- }
- else {
+ if ((node.transformFlags & 32 /* ContainsES2016 */) === 0) {
return node;
}
- }
- function visitorWorker(node) {
switch (node.kind) {
case 192 /* BinaryExpression */:
return visitBinaryExpression(node);
default:
- ts.Debug.failBadSyntaxKind(node);
return ts.visitEachChild(node, visitor, context);
}
}
function visitBinaryExpression(node) {
- // We are here because ES2016 adds support for the exponentiation operator.
+ switch (node.operatorToken.kind) {
+ case 61 /* AsteriskAsteriskEqualsToken */:
+ return visitExponentiationAssignmentExpression(node);
+ case 39 /* AsteriskAsteriskToken */:
+ return visitExponentiationExpression(node);
+ default:
+ return ts.visitEachChild(node, visitor, context);
+ }
+ }
+ function visitExponentiationAssignmentExpression(node) {
+ var target;
+ var value;
var left = ts.visitNode(node.left, visitor, ts.isExpression);
var right = ts.visitNode(node.right, visitor, ts.isExpression);
- if (node.operatorToken.kind === 61 /* AsteriskAsteriskEqualsToken */) {
- var target = void 0;
- var value = void 0;
- if (ts.isElementAccessExpression(left)) {
- // Transforms `a[x] **= b` into `(_a = a)[_x = x] = Math.pow(_a[_x], b)`
- var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
- var argumentExpressionTemp = ts.createTempVariable(hoistVariableDeclaration);
- target = ts.createElementAccess(ts.createAssignment(expressionTemp, left.expression, /*location*/ left.expression), ts.createAssignment(argumentExpressionTemp, left.argumentExpression, /*location*/ left.argumentExpression),
- /*location*/ left);
- value = ts.createElementAccess(expressionTemp, argumentExpressionTemp,
- /*location*/ left);
- }
- else if (ts.isPropertyAccessExpression(left)) {
- // Transforms `a.x **= b` into `(_a = a).x = Math.pow(_a.x, b)`
- var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
- target = ts.createPropertyAccess(ts.createAssignment(expressionTemp, left.expression, /*location*/ left.expression), left.name,
- /*location*/ left);
- value = ts.createPropertyAccess(expressionTemp, left.name,
- /*location*/ left);
- }
- else {
- // Transforms `a **= b` into `a = Math.pow(a, b)`
- target = left;
- value = left;
- }
- return ts.createAssignment(target, ts.createMathPow(value, right, /*location*/ node), /*location*/ node);
- }
- else if (node.operatorToken.kind === 39 /* AsteriskAsteriskToken */) {
- // Transforms `a ** b` into `Math.pow(a, b)`
- return ts.createMathPow(left, right, /*location*/ node);
+ if (ts.isElementAccessExpression(left)) {
+ // Transforms `a[x] **= b` into `(_a = a)[_x = x] = Math.pow(_a[_x], b)`
+ var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
+ var argumentExpressionTemp = ts.createTempVariable(hoistVariableDeclaration);
+ target = ts.createElementAccess(ts.createAssignment(expressionTemp, left.expression, /*location*/ left.expression), ts.createAssignment(argumentExpressionTemp, left.argumentExpression, /*location*/ left.argumentExpression),
+ /*location*/ left);
+ value = ts.createElementAccess(expressionTemp, argumentExpressionTemp,
+ /*location*/ left);
+ }
+ else if (ts.isPropertyAccessExpression(left)) {
+ // Transforms `a.x **= b` into `(_a = a).x = Math.pow(_a.x, b)`
+ var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
+ target = ts.createPropertyAccess(ts.createAssignment(expressionTemp, left.expression, /*location*/ left.expression), left.name,
+ /*location*/ left);
+ value = ts.createPropertyAccess(expressionTemp, left.name,
+ /*location*/ left);
}
else {
- ts.Debug.failBadSyntaxKind(node);
- return ts.visitEachChild(node, visitor, context);
+ // Transforms `a **= b` into `a = Math.pow(a, b)`
+ target = left;
+ value = left;
}
+ return ts.createAssignment(target, ts.createMathPow(value, right, /*location*/ node), /*location*/ node);
+ }
+ function visitExponentiationExpression(node) {
+ // Transforms `a ** b` into `Math.pow(a, b)`
+ var left = ts.visitNode(node.left, visitor, ts.isExpression);
+ var right = ts.visitNode(node.right, visitor, ts.isExpression);
+ return ts.createMathPow(left, right, /*location*/ node);
}
}
ts.transformES2016 = transformES2016;
@@ -48881,7 +49095,7 @@ var ts;
SuperCaptureResult[SuperCaptureResult["ReplaceWithReturn"] = 2] = "ReplaceWithReturn";
})(SuperCaptureResult || (SuperCaptureResult = {}));
function transformES2015(context) {
- var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
+ var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var resolver = context.getEmitResolver();
var previousOnSubstituteNode = context.onSubstituteNode;
var previousOnEmitNode = context.onEmitNode;
@@ -48915,7 +49129,11 @@ var ts;
}
currentSourceFile = node;
currentText = node.text;
- return ts.visitNode(node, visitor, ts.isSourceFile);
+ var visited = saveStateAndInvoke(node, visitSourceFile);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
+ currentSourceFile = undefined;
+ currentText = undefined;
+ return visited;
}
function visitor(node) {
return saveStateAndInvoke(node, dispatcher);
@@ -48955,6 +49173,41 @@ var ts;
currentNode = savedCurrentNode;
return visited;
}
+ function onBeforeVisitNode(node) {
+ if (currentNode) {
+ if (ts.isBlockScope(currentNode, currentParent)) {
+ enclosingBlockScopeContainer = currentNode;
+ enclosingBlockScopeContainerParent = currentParent;
+ }
+ if (ts.isFunctionLike(currentNode)) {
+ enclosingFunction = currentNode;
+ if (currentNode.kind !== 185 /* ArrowFunction */) {
+ enclosingNonArrowFunction = currentNode;
+ if (!(ts.getEmitFlags(currentNode) & 131072 /* AsyncFunctionBody */)) {
+ enclosingNonAsyncFunctionBody = currentNode;
+ }
+ }
+ }
+ // keep track of the enclosing variable statement when in the context of
+ // variable statements, variable declarations, binding elements, and binding
+ // patterns.
+ switch (currentNode.kind) {
+ case 205 /* VariableStatement */:
+ enclosingVariableStatement = currentNode;
+ break;
+ case 224 /* VariableDeclarationList */:
+ case 223 /* VariableDeclaration */:
+ case 174 /* BindingElement */:
+ case 172 /* ObjectBindingPattern */:
+ case 173 /* ArrayBindingPattern */:
+ break;
+ default:
+ enclosingVariableStatement = undefined;
+ }
+ }
+ currentParent = currentNode;
+ currentNode = node;
+ }
function returnCapturedThis(node) {
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
}
@@ -48962,7 +49215,7 @@ var ts;
return isInConstructorWithCapturedSuper && node.kind === 216 /* ReturnStatement */ && !node.expression;
}
function shouldCheckNode(node) {
- return (node.transformFlags & 1024 /* ES2015 */) !== 0 ||
+ return (node.transformFlags & 64 /* ES2015 */) !== 0 ||
node.kind === 219 /* LabeledStatement */ ||
(ts.isIterationStatement(node, /*lookInLabeledStatements*/ false) && shouldConvertIterationStatementBody(node));
}
@@ -48973,7 +49226,7 @@ var ts;
else if (shouldCheckNode(node)) {
return visitJavaScript(node);
}
- else if (node.transformFlags & 2048 /* ContainsES2015 */ || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
+ else if (node.transformFlags & 128 /* ContainsES2015 */ || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
// we want to dive in this branch either if node has children with ES2015 specific syntax
// or we are inside constructor that captures result of the super call so all returns without expression should be
// rewritten. Note: we skip expressions since returns should never appear there
@@ -49076,6 +49329,8 @@ var ts;
return visitTemplateExpression(node);
case 195 /* YieldExpression */:
return visitYieldExpression(node);
+ case 196 /* SpreadElement */:
+ return visitSpreadElement(node);
case 96 /* SuperKeyword */:
return visitSuperKeyword();
case 195 /* YieldExpression */:
@@ -49083,8 +49338,6 @@ var ts;
return ts.visitEachChild(node, visitor, context);
case 149 /* MethodDeclaration */:
return visitMethodDeclaration(node);
- case 261 /* SourceFile */:
- return visitSourceFileNode(node);
case 205 /* VariableStatement */:
return visitVariableStatement(node);
default:
@@ -49092,40 +49345,14 @@ var ts;
return ts.visitEachChild(node, visitor, context);
}
}
- function onBeforeVisitNode(node) {
- if (currentNode) {
- if (ts.isBlockScope(currentNode, currentParent)) {
- enclosingBlockScopeContainer = currentNode;
- enclosingBlockScopeContainerParent = currentParent;
- }
- if (ts.isFunctionLike(currentNode)) {
- enclosingFunction = currentNode;
- if (currentNode.kind !== 185 /* ArrowFunction */) {
- enclosingNonArrowFunction = currentNode;
- if (!(ts.getEmitFlags(currentNode) & 2097152 /* AsyncFunctionBody */)) {
- enclosingNonAsyncFunctionBody = currentNode;
- }
- }
- }
- // keep track of the enclosing variable statement when in the context of
- // variable statements, variable declarations, binding elements, and binding
- // patterns.
- switch (currentNode.kind) {
- case 205 /* VariableStatement */:
- enclosingVariableStatement = currentNode;
- break;
- case 224 /* VariableDeclarationList */:
- case 223 /* VariableDeclaration */:
- case 174 /* BindingElement */:
- case 172 /* ObjectBindingPattern */:
- case 173 /* ArrayBindingPattern */:
- break;
- default:
- enclosingVariableStatement = undefined;
- }
- }
- currentParent = currentNode;
- currentNode = node;
+ function visitSourceFile(node) {
+ var statements = [];
+ startLexicalEnvironment();
+ var statementOffset = ts.addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ false, visitor);
+ addCaptureThisForNodeIfNeeded(statements, node);
+ ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
+ ts.addRange(statements, endLexicalEnvironment());
+ return ts.updateSourceFileNode(node, ts.createNodeArray(statements, node.statements));
}
function visitSwitchStatement(node) {
ts.Debug.assert(convertedLoopState !== undefined);
@@ -49250,10 +49477,10 @@ var ts;
statements.push(exportStatement);
}
var emitFlags = ts.getEmitFlags(node);
- if ((emitFlags & 33554432 /* HasEndOfDeclarationMarker */) === 0) {
+ if ((emitFlags & 2097152 /* HasEndOfDeclarationMarker */) === 0) {
// Add a DeclarationMarker as a marker for the end of the declaration
statements.push(ts.createEndOfDeclarationMarker(node));
- ts.setEmitFlags(statement, emitFlags | 33554432 /* HasEndOfDeclarationMarker */);
+ ts.setEmitFlags(statement, emitFlags | 2097152 /* HasEndOfDeclarationMarker */);
}
return ts.singleOrMany(statements);
}
@@ -49315,17 +49542,17 @@ var ts;
// To preserve the behavior of the old emitter, we explicitly indent
// the body of the function here if it was requested in an earlier
// transformation.
- if (ts.getEmitFlags(node) & 524288 /* Indented */) {
- ts.setEmitFlags(classFunction, 524288 /* Indented */);
+ if (ts.getEmitFlags(node) & 32768 /* Indented */) {
+ ts.setEmitFlags(classFunction, 32768 /* Indented */);
}
// "inner" and "outer" below are added purely to preserve source map locations from
// the old emitter
var inner = ts.createPartiallyEmittedExpression(classFunction);
inner.end = node.end;
- ts.setEmitFlags(inner, 49152 /* NoComments */);
+ ts.setEmitFlags(inner, 1536 /* NoComments */);
var outer = ts.createPartiallyEmittedExpression(inner);
outer.end = ts.skipTrivia(currentText, node.pos);
- ts.setEmitFlags(outer, 49152 /* NoComments */);
+ ts.setEmitFlags(outer, 1536 /* NoComments */);
return ts.createParen(ts.createCall(outer,
/*typeArguments*/ undefined, extendsClauseElement
? [ts.visitNode(extendsClauseElement.expression, visitor, ts.isExpression)]
@@ -49350,14 +49577,14 @@ var ts;
// emit with the original emitter.
var outer = ts.createPartiallyEmittedExpression(localName);
outer.end = closingBraceLocation.end;
- ts.setEmitFlags(outer, 49152 /* NoComments */);
+ ts.setEmitFlags(outer, 1536 /* NoComments */);
var statement = ts.createReturn(outer);
statement.pos = closingBraceLocation.pos;
- ts.setEmitFlags(statement, 49152 /* NoComments */ | 12288 /* NoTokenSourceMaps */);
+ ts.setEmitFlags(statement, 1536 /* NoComments */ | 384 /* NoTokenSourceMaps */);
statements.push(statement);
ts.addRange(statements, endLexicalEnvironment());
var block = ts.createBlock(ts.createNodeArray(statements, /*location*/ node.members), /*location*/ undefined, /*multiLine*/ true);
- ts.setEmitFlags(block, 49152 /* NoComments */);
+ ts.setEmitFlags(block, 1536 /* NoComments */);
return block;
}
/**
@@ -49369,7 +49596,7 @@ var ts;
*/
function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) {
if (extendsClauseElement) {
- statements.push(ts.createStatement(ts.createExtendsHelper(currentSourceFile.externalHelpersModuleName, ts.getLocalName(node)),
+ statements.push(ts.createStatement(createExtendsHelper(context, ts.getLocalName(node)),
/*location*/ extendsClauseElement));
}
}
@@ -49391,7 +49618,7 @@ var ts;
/*type*/ undefined, transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper),
/*location*/ constructor || node);
if (extendsClauseElement) {
- ts.setEmitFlags(constructorFunction, 256 /* CapturesThis */);
+ ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
}
statements.push(constructorFunction);
}
@@ -49408,10 +49635,8 @@ var ts;
// `super` call.
// If this is the case, we do not include the synthetic `...args` parameter and
// will instead use the `arguments` object in ES5/3.
- if (constructor && !hasSynthesizedSuper) {
- return ts.visitNodes(constructor.parameters, visitor, ts.isParameter);
- }
- return [];
+ return ts.visitParameterList(constructor && !hasSynthesizedSuper && constructor.parameters, visitor, context)
+ || [];
}
/**
* Transforms the body of a constructor declaration of a class.
@@ -49424,21 +49649,21 @@ var ts;
*/
function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
var statements = [];
- startLexicalEnvironment();
+ resumeLexicalEnvironment();
var statementOffset = -1;
if (hasSynthesizedSuper) {
// If a super call has already been synthesized,
// we're going to assume that we should just transform everything after that.
// The assumption is that no prior step in the pipeline has added any prologue directives.
- statementOffset = 1;
+ statementOffset = 0;
}
else if (constructor) {
// Otherwise, try to emit all potential prologue directives first.
statementOffset = ts.addPrologueDirectives(statements, constructor.body.statements, /*ensureUseStrict*/ false, visitor);
}
if (constructor) {
- ts.addDefaultValueAssignmentsIfNeeded(statements, constructor, visitor, /*convertObjectRest*/ false);
- ts.addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper);
+ addDefaultValueAssignmentsIfNeeded(statements, constructor);
+ addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper);
ts.Debug.assert(statementOffset >= 0, "statementOffset not initialized correctly!");
}
var superCaptureStatus = declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, constructor, !!extendsClauseElement, hasSynthesizedSuper, statementOffset);
@@ -49466,7 +49691,7 @@ var ts;
/*location*/ constructor ? constructor.body : node,
/*multiLine*/ true);
if (!constructor) {
- ts.setEmitFlags(block, 49152 /* NoComments */);
+ ts.setEmitFlags(block, 1536 /* NoComments */);
}
return block;
}
@@ -49504,7 +49729,7 @@ var ts;
// If this isn't a derived class, just capture 'this' for arrow functions if necessary.
if (!hasExtendsClause) {
if (ctor) {
- ts.addCaptureThisForNodeIfNeeded(statements, ctor, enableSubstitutionsForCapturedThis);
+ addCaptureThisForNodeIfNeeded(statements, ctor);
}
return 0 /* NoReplacement */;
}
@@ -49519,7 +49744,7 @@ var ts;
// for something like property initializers.
// Create a captured '_this' variable and assume it will subsequently be used.
if (hasSynthesizedSuper) {
- ts.captureThisForNode(statements, ctor, createDefaultSuperCallOrThis());
+ captureThisForNode(statements, ctor, createDefaultSuperCallOrThis());
enableSubstitutionsForCapturedThis();
return 1 /* ReplaceSuperCapture */;
}
@@ -49558,12 +49783,12 @@ var ts;
ts.Debug.fail("Assumed generated super call would have form 'super.call(...) || this'.");
}
// Shift comments from the original super call to the return statement.
- ts.setCommentRange(returnStatement, ts.getCommentRange(ts.setEmitFlags(superCallExpression.left, 49152 /* NoComments */)));
+ ts.setCommentRange(returnStatement, ts.getCommentRange(ts.setEmitFlags(superCallExpression.left, 1536 /* NoComments */)));
statements.push(returnStatement);
return 2 /* ReplaceWithReturn */;
}
// Perform the capture.
- ts.captureThisForNode(statements, ctor, superCallExpression, enableSubstitutionsForCapturedThis, firstStatement);
+ captureThisForNode(statements, ctor, superCallExpression, firstStatement);
// If we're actually replacing the original statement, we need to signal this to the caller.
if (superCallExpression) {
return 1 /* ReplaceSuperCapture */;
@@ -49572,7 +49797,7 @@ var ts;
}
function createDefaultSuperCallOrThis() {
var actualThis = ts.createThis();
- ts.setEmitFlags(actualThis, 128 /* NoSubstitution */);
+ ts.setEmitFlags(actualThis, 4 /* NoSubstitution */);
var superCall = ts.createFunctionApply(ts.createIdentifier("_super"), actualThis, ts.createIdentifier("arguments"));
return ts.createLogicalOr(superCall, actualThis);
}
@@ -49616,6 +49841,160 @@ var ts;
}
}
/**
+ * Gets a value indicating whether we need to add default value assignments for a
+ * function-like node.
+ *
+ * @param node A function-like node.
+ */
+ function shouldAddDefaultValueAssignments(node) {
+ return (node.transformFlags & 131072 /* ContainsDefaultValueAssignments */) !== 0;
+ }
+ /**
+ * Adds statements to the body of a function-like node if it contains parameters with
+ * binding patterns or initializers.
+ *
+ * @param statements The statements for the new function body.
+ * @param node A function-like node.
+ */
+ function addDefaultValueAssignmentsIfNeeded(statements, node) {
+ if (!shouldAddDefaultValueAssignments(node)) {
+ return;
+ }
+ for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
+ var parameter = _a[_i];
+ var name_35 = parameter.name, initializer = parameter.initializer, dotDotDotToken = parameter.dotDotDotToken;
+ // A rest parameter cannot have a binding pattern or an initializer,
+ // so let's just ignore it.
+ if (dotDotDotToken) {
+ continue;
+ }
+ if (ts.isBindingPattern(name_35)) {
+ addDefaultValueAssignmentForBindingPattern(statements, parameter, name_35, initializer);
+ }
+ else if (initializer) {
+ addDefaultValueAssignmentForInitializer(statements, parameter, name_35, initializer);
+ }
+ }
+ }
+ /**
+ * Adds statements to the body of a function-like node for parameters with binding patterns
+ *
+ * @param statements The statements for the new function body.
+ * @param parameter The parameter for the function.
+ * @param name The name of the parameter.
+ * @param initializer The initializer for the parameter.
+ */
+ function addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) {
+ var temp = ts.getGeneratedNameForNode(parameter);
+ // In cases where a binding pattern is simply '[]' or '{}',
+ // we usually don't want to emit a var declaration; however, in the presence
+ // of an initializer, we must emit that expression to preserve side effects.
+ if (name.elements.length > 0) {
+ statements.push(ts.setEmitFlags(ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, temp))), 524288 /* CustomPrologue */));
+ }
+ else if (initializer) {
+ statements.push(ts.setEmitFlags(ts.createStatement(ts.createAssignment(temp, ts.visitNode(initializer, visitor, ts.isExpression))), 524288 /* CustomPrologue */));
+ }
+ }
+ /**
+ * Adds statements to the body of a function-like node for parameters with initializers.
+ *
+ * @param statements The statements for the new function body.
+ * @param parameter The parameter for the function.
+ * @param name The name of the parameter.
+ * @param initializer The initializer for the parameter.
+ */
+ function addDefaultValueAssignmentForInitializer(statements, parameter, name, initializer) {
+ initializer = ts.visitNode(initializer, visitor, ts.isExpression);
+ var statement = ts.createIf(ts.createTypeCheck(ts.getSynthesizedClone(name), "undefined"), ts.setEmitFlags(ts.createBlock([
+ ts.createStatement(ts.createAssignment(ts.setEmitFlags(ts.getMutableClone(name), 48 /* NoSourceMap */), ts.setEmitFlags(initializer, 48 /* NoSourceMap */ | ts.getEmitFlags(initializer)),
+ /*location*/ parameter))
+ ], /*location*/ parameter), 1 /* SingleLine */ | 32 /* NoTrailingSourceMap */ | 384 /* NoTokenSourceMaps */),
+ /*elseStatement*/ undefined,
+ /*location*/ parameter);
+ statement.startsOnNewLine = true;
+ ts.setEmitFlags(statement, 384 /* NoTokenSourceMaps */ | 32 /* NoTrailingSourceMap */ | 524288 /* CustomPrologue */);
+ statements.push(statement);
+ }
+ /**
+ * Gets a value indicating whether we need to add statements to handle a rest parameter.
+ *
+ * @param node A ParameterDeclaration node.
+ * @param inConstructorWithSynthesizedSuper A value indicating whether the parameter is
+ * part of a constructor declaration with a
+ * synthesized call to `super`
+ */
+ function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) {
+ return node && node.dotDotDotToken && node.name.kind === 70 /* Identifier */ && !inConstructorWithSynthesizedSuper;
+ }
+ /**
+ * Adds statements to the body of a function-like node if it contains a rest parameter.
+ *
+ * @param statements The statements for the new function body.
+ * @param node A function-like node.
+ * @param inConstructorWithSynthesizedSuper A value indicating whether the parameter is
+ * part of a constructor declaration with a
+ * synthesized call to `super`
+ */
+ function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) {
+ var parameter = ts.lastOrUndefined(node.parameters);
+ if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) {
+ return;
+ }
+ // `declarationName` is the name of the local declaration for the parameter.
+ var declarationName = ts.getMutableClone(parameter.name);
+ ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
+ // `expressionName` is the name of the parameter used in expressions.
+ var expressionName = ts.getSynthesizedClone(parameter.name);
+ var restIndex = node.parameters.length - 1;
+ var temp = ts.createLoopVariable();
+ // var param = [];
+ statements.push(ts.setEmitFlags(ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.createVariableDeclarationList([
+ ts.createVariableDeclaration(declarationName,
+ /*type*/ undefined, ts.createArrayLiteral([]))
+ ]),
+ /*location*/ parameter), 524288 /* CustomPrologue */));
+ // for (var _i = restIndex; _i < arguments.length; _i++) {
+ // param[_i - restIndex] = arguments[_i];
+ // }
+ var forStatement = ts.createFor(ts.createVariableDeclarationList([
+ ts.createVariableDeclaration(temp, /*type*/ undefined, ts.createLiteral(restIndex))
+ ], /*location*/ parameter), ts.createLessThan(temp, ts.createPropertyAccess(ts.createIdentifier("arguments"), "length"),
+ /*location*/ parameter), ts.createPostfixIncrement(temp, /*location*/ parameter), ts.createBlock([
+ ts.startOnNewLine(ts.createStatement(ts.createAssignment(ts.createElementAccess(expressionName, restIndex === 0
+ ? temp
+ : ts.createSubtract(temp, ts.createLiteral(restIndex))), ts.createElementAccess(ts.createIdentifier("arguments"), temp)),
+ /*location*/ parameter))
+ ]));
+ ts.setEmitFlags(forStatement, 524288 /* CustomPrologue */);
+ ts.startOnNewLine(forStatement);
+ statements.push(forStatement);
+ }
+ /**
+ * Adds a statement to capture the `this` of a function declaration if it is needed.
+ *
+ * @param statements The statements for the new function body.
+ * @param node A node.
+ */
+ function addCaptureThisForNodeIfNeeded(statements, node) {
+ if (node.transformFlags & 32768 /* ContainsCapturedLexicalThis */ && node.kind !== 185 /* ArrowFunction */) {
+ captureThisForNode(statements, node, ts.createThis());
+ }
+ }
+ function captureThisForNode(statements, node, initializer, originalStatement) {
+ enableSubstitutionsForCapturedThis();
+ var captureThisStatement = ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.createVariableDeclarationList([
+ ts.createVariableDeclaration("_this",
+ /*type*/ undefined, initializer)
+ ]), originalStatement);
+ ts.setEmitFlags(captureThisStatement, 1536 /* NoComments */ | 524288 /* CustomPrologue */);
+ ts.setSourceMapRange(captureThisStatement, node);
+ statements.push(captureThisStatement);
+ }
+ /**
* Adds statements to the class body function for a class to define the members of the
* class.
*
@@ -49665,18 +50044,18 @@ var ts;
function transformClassMethodDeclarationToStatement(receiver, member) {
var commentRange = ts.getCommentRange(member);
var sourceMapRange = ts.getSourceMapRange(member);
- var func = transformFunctionLikeToExpression(member, /*location*/ member, /*name*/ undefined);
- ts.setEmitFlags(func, 49152 /* NoComments */);
- ts.setSourceMapRange(func, sourceMapRange);
- var statement = ts.createStatement(ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(member.name, visitor, ts.isPropertyName),
- /*location*/ member.name), func),
+ var memberName = ts.createMemberAccessForPropertyName(receiver, ts.visitNode(member.name, visitor, ts.isPropertyName), /*location*/ member.name);
+ var memberFunction = transformFunctionLikeToExpression(member, /*location*/ member, /*name*/ undefined);
+ ts.setEmitFlags(memberFunction, 1536 /* NoComments */);
+ ts.setSourceMapRange(memberFunction, sourceMapRange);
+ var statement = ts.createStatement(ts.createAssignment(memberName, memberFunction),
/*location*/ member);
ts.setOriginalNode(statement, member);
ts.setCommentRange(statement, commentRange);
// The location for the statement is used to emit comments only.
// No source map should be emitted for this statement to align with the
// old emitter.
- ts.setEmitFlags(statement, 1536 /* NoSourceMap */);
+ ts.setEmitFlags(statement, 48 /* NoSourceMap */);
return statement;
}
/**
@@ -49691,7 +50070,7 @@ var ts;
// The location for the statement is used to emit source maps only.
// No comments should be emitted for this statement to align with the
// old emitter.
- ts.setEmitFlags(statement, 49152 /* NoComments */);
+ ts.setEmitFlags(statement, 1536 /* NoComments */);
return statement;
}
/**
@@ -49705,16 +50084,16 @@ var ts;
// To align with source maps in the old emitter, the receiver and property name
// arguments are both mapped contiguously to the accessor name.
var target = ts.getMutableClone(receiver);
- ts.setEmitFlags(target, 49152 /* NoComments */ | 1024 /* NoTrailingSourceMap */);
+ ts.setEmitFlags(target, 1536 /* NoComments */ | 32 /* NoTrailingSourceMap */);
ts.setSourceMapRange(target, firstAccessor.name);
var propertyName = ts.createExpressionForPropertyName(ts.visitNode(firstAccessor.name, visitor, ts.isPropertyName));
- ts.setEmitFlags(propertyName, 49152 /* NoComments */ | 512 /* NoLeadingSourceMap */);
+ ts.setEmitFlags(propertyName, 1536 /* NoComments */ | 16 /* NoLeadingSourceMap */);
ts.setSourceMapRange(propertyName, firstAccessor.name);
var properties = [];
if (getAccessor) {
var getterFunction = transformFunctionLikeToExpression(getAccessor, /*location*/ undefined, /*name*/ undefined);
ts.setSourceMapRange(getterFunction, ts.getSourceMapRange(getAccessor));
- ts.setEmitFlags(getterFunction, 16384 /* NoLeadingComments */);
+ ts.setEmitFlags(getterFunction, 512 /* NoLeadingComments */);
var getter = ts.createPropertyAssignment("get", getterFunction);
ts.setCommentRange(getter, ts.getCommentRange(getAccessor));
properties.push(getter);
@@ -49722,7 +50101,7 @@ var ts;
if (setAccessor) {
var setterFunction = transformFunctionLikeToExpression(setAccessor, /*location*/ undefined, /*name*/ undefined);
ts.setSourceMapRange(setterFunction, ts.getSourceMapRange(setAccessor));
- ts.setEmitFlags(setterFunction, 16384 /* NoLeadingComments */);
+ ts.setEmitFlags(setterFunction, 512 /* NoLeadingComments */);
var setter = ts.createPropertyAssignment("set", setterFunction);
ts.setCommentRange(setter, ts.getCommentRange(setAccessor));
properties.push(setter);
@@ -49745,11 +50124,17 @@ var ts;
* @param node An ArrowFunction node.
*/
function visitArrowFunction(node) {
- if (node.transformFlags & 262144 /* ContainsLexicalThis */) {
+ if (node.transformFlags & 16384 /* ContainsLexicalThis */) {
enableSubstitutionsForCapturedThis();
}
- var func = transformFunctionLikeToExpression(node, /*location*/ node, /*name*/ undefined);
- ts.setEmitFlags(func, 256 /* CapturesThis */);
+ var func = ts.createFunctionExpression(
+ /*modifiers*/ undefined,
+ /*asteriskToken*/ undefined,
+ /*name*/ undefined,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, transformFunctionBody(node), node);
+ ts.setOriginalNode(func, node);
+ ts.setEmitFlags(func, 8 /* CapturesThis */);
return func;
}
/**
@@ -49758,7 +50143,12 @@ var ts;
* @param node a FunctionExpression node.
*/
function visitFunctionExpression(node) {
- return transformFunctionLikeToExpression(node, /*location*/ node, node.name);
+ return ts.updateFunctionExpression(node,
+ /*modifiers*/ undefined, node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, node.transformFlags & 64 /* ES2015 */
+ ? transformFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
/**
* Visits a FunctionDeclaration node.
@@ -49766,12 +50156,12 @@ var ts;
* @param node a FunctionDeclaration node.
*/
function visitFunctionDeclaration(node) {
- return ts.setOriginalNode(ts.createFunctionDeclaration(
- /*decorators*/ undefined, node.modifiers, node.asteriskToken, node.name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, ts.transformFunctionBody(node, visitor, currentSourceFile, context, enableSubstitutionsForCapturedThis),
- /*location*/ node),
- /*original*/ node);
+ return ts.updateFunctionDeclaration(node,
+ /*decorators*/ undefined, node.modifiers, node.name,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, node.transformFlags & 64 /* ES2015 */
+ ? transformFunctionBody(node)
+ : ts.visitFunctionBody(node.body, visitor, context));
}
/**
* Transforms a function-like node into a FunctionExpression.
@@ -49787,13 +50177,87 @@ var ts;
}
var expression = ts.setOriginalNode(ts.createFunctionExpression(
/*modifiers*/ undefined, node.asteriskToken, name,
- /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameter),
- /*type*/ undefined, saveStateAndInvoke(node, function (node) { return ts.transformFunctionBody(node, visitor, currentSourceFile, context, enableSubstitutionsForCapturedThis); }), location),
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
+ /*type*/ undefined, saveStateAndInvoke(node, transformFunctionBody), location),
/*original*/ node);
enclosingNonArrowFunction = savedContainingNonArrowFunction;
return expression;
}
/**
+ * Transforms the body of a function-like node.
+ *
+ * @param node A function-like node.
+ */
+ function transformFunctionBody(node) {
+ var multiLine = false; // indicates whether the block *must* be emitted as multiple lines
+ var singleLine = false; // indicates whether the block *may* be emitted as a single line
+ var statementsLocation;
+ var closeBraceLocation;
+ var statements = [];
+ var body = node.body;
+ var statementOffset;
+ resumeLexicalEnvironment();
+ if (ts.isBlock(body)) {
+ // ensureUseStrict is false because no new prologue-directive should be added.
+ // addPrologueDirectives will simply put already-existing directives at the beginning of the target statement-array
+ statementOffset = ts.addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor);
+ }
+ addCaptureThisForNodeIfNeeded(statements, node);
+ addDefaultValueAssignmentsIfNeeded(statements, node);
+ addRestParameterIfNeeded(statements, node, /*inConstructorWithSynthesizedSuper*/ false);
+ // If we added any generated statements, this must be a multi-line block.
+ if (!multiLine && statements.length > 0) {
+ multiLine = true;
+ }
+ if (ts.isBlock(body)) {
+ statementsLocation = body.statements;
+ ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, statementOffset));
+ // If the original body was a multi-line block, this must be a multi-line block.
+ if (!multiLine && body.multiLine) {
+ multiLine = true;
+ }
+ }
+ else {
+ ts.Debug.assert(node.kind === 185 /* ArrowFunction */);
+ // To align with the old emitter, we use a synthetic end position on the location
+ // for the statement list we synthesize when we down-level an arrow function with
+ // an expression function body. This prevents both comments and source maps from
+ // being emitted for the end position only.
+ statementsLocation = ts.moveRangeEnd(body, -1);
+ var equalsGreaterThanToken = node.equalsGreaterThanToken;
+ if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) {
+ if (ts.rangeEndIsOnSameLineAsRangeStart(equalsGreaterThanToken, body, currentSourceFile)) {
+ singleLine = true;
+ }
+ else {
+ multiLine = true;
+ }
+ }
+ var expression = ts.visitNode(body, visitor, ts.isExpression);
+ var returnStatement = ts.createReturn(expression, /*location*/ body);
+ ts.setEmitFlags(returnStatement, 384 /* NoTokenSourceMaps */ | 32 /* NoTrailingSourceMap */ | 1024 /* NoTrailingComments */);
+ statements.push(returnStatement);
+ // To align with the source map emit for the old emitter, we set a custom
+ // source map location for the close brace.
+ closeBraceLocation = body;
+ }
+ var lexicalEnvironment = context.endLexicalEnvironment();
+ ts.addRange(statements, lexicalEnvironment);
+ // If we added any final generated statements, this must be a multi-line block
+ if (!multiLine && lexicalEnvironment && lexicalEnvironment.length) {
+ multiLine = true;
+ }
+ var block = ts.createBlock(ts.createNodeArray(statements, statementsLocation), node.body, multiLine);
+ if (!multiLine && singleLine) {
+ ts.setEmitFlags(block, 1 /* SingleLine */);
+ }
+ if (closeBraceLocation) {
+ ts.setTokenSourceMapRange(block, 17 /* CloseBraceToken */, closeBraceLocation);
+ }
+ ts.setOriginalNode(block, node.body);
+ return block;
+ }
+ /**
* Visits an ExpressionStatement that contains a destructuring assignment.
*
* @param node An ExpressionStatement node.
@@ -49817,14 +50281,12 @@ var ts;
*/
function visitParenthesizedExpression(node, needsDestructuringValue) {
// If we are here it is most likely because our expression is a destructuring assignment.
- if (needsDestructuringValue) {
+ if (!needsDestructuringValue) {
switch (node.expression.kind) {
case 183 /* ParenthesizedExpression */:
- return ts.createParen(visitParenthesizedExpression(node.expression, /*needsDestructuringValue*/ true),
- /*location*/ node);
+ return ts.updateParen(node, visitParenthesizedExpression(node.expression, /*needsDestructuringValue*/ false));
case 192 /* BinaryExpression */:
- return ts.createParen(visitBinaryExpression(node.expression, /*needsDestructuringValue*/ true),
- /*location*/ node);
+ return ts.updateParen(node, visitBinaryExpression(node.expression, /*needsDestructuringValue*/ false));
}
}
return ts.visitEachChild(node, visitor, context);
@@ -49838,8 +50300,9 @@ var ts;
*/
function visitBinaryExpression(node, needsDestructuringValue) {
// If we are here it is because this is a destructuring assignment.
- ts.Debug.assert(ts.isDestructuringAssignment(node));
- return ts.flattenDestructuringAssignment(context, node, needsDestructuringValue, hoistVariableDeclaration, visitor);
+ if (ts.isDestructuringAssignment(node)) {
+ return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, needsDestructuringValue);
+ }
}
function visitVariableStatement(node) {
if (convertedLoopState && (ts.getCombinedNodeFlags(node.declarationList) & 3 /* BlockScoped */) == 0) {
@@ -49851,7 +50314,7 @@ var ts;
if (decl.initializer) {
var assignment = void 0;
if (ts.isBindingPattern(decl.name)) {
- assignment = ts.flattenVariableDestructuringToExpression(decl, hoistVariableDeclaration, /*createAssignmentCallback*/ undefined, visitor);
+ assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
}
else {
assignment = ts.createBinary(decl.name, 57 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
@@ -49884,7 +50347,7 @@ var ts;
var declarationList = ts.createVariableDeclarationList(declarations, /*location*/ node);
ts.setOriginalNode(declarationList, node);
ts.setCommentRange(declarationList, node);
- if (node.transformFlags & 67108864 /* ContainsBindingPattern */
+ if (node.transformFlags & 8388608 /* ContainsBindingPattern */
&& (ts.isBindingPattern(node.declarations[0].name)
|| ts.isBindingPattern(ts.lastOrUndefined(node.declarations).name))) {
// If the first or last declaration is a binding pattern, we need to modify
@@ -49972,9 +50435,9 @@ var ts;
return visitVariableDeclaration(node);
}
if (!node.initializer && shouldEmitExplicitInitializerForLetDeclaration(node)) {
- var clone_5 = ts.getMutableClone(node);
- clone_5.initializer = ts.createVoidZero();
- return clone_5;
+ var clone_3 = ts.getMutableClone(node);
+ clone_3.initializer = ts.createVoidZero();
+ return clone_3;
}
return ts.visitEachChild(node, visitor, context);
}
@@ -49986,9 +50449,10 @@ var ts;
function visitVariableDeclaration(node) {
// If we are here it is because the name contains a binding pattern.
if (ts.isBindingPattern(node.name)) {
- var recordTempVariablesInLine = !enclosingVariableStatement
- || !ts.hasModifier(enclosingVariableStatement, 1 /* Export */);
- return ts.flattenVariableDestructuring(node, /*value*/ undefined, visitor, recordTempVariablesInLine ? undefined : hoistVariableDeclaration);
+ var hoistTempVariables = enclosingVariableStatement
+ && ts.hasModifier(enclosingVariableStatement, 1 /* Export */);
+ return ts.flattenDestructuringBinding(node, visitor, context, 0 /* All */,
+ /*value*/ undefined, hoistTempVariables);
}
return ts.visitEachChild(node, visitor, context);
}
@@ -50032,7 +50496,118 @@ var ts;
return convertIterationStatementBodyIfNecessary(node, convertForOfToFor);
}
function convertForOfToFor(node, convertedLoopBodyStatements) {
- return ts.convertForOf(node, convertedLoopBodyStatements, visitor, enableSubstitutionsForBlockScopedBindings, context, /*transformRest*/ false);
+ // The following ES6 code:
+ //
+ // for (let v of expr) { }
+ //
+ // should be emitted as
+ //
+ // for (var _i = 0, _a = expr; _i < _a.length; _i++) {
+ // var v = _a[_i];
+ // }
+ //
+ // where _a and _i are temps emitted to capture the RHS and the counter,
+ // respectively.
+ // When the left hand side is an expression instead of a let declaration,
+ // the "let v" is not emitted.
+ // When the left hand side is a let/const, the v is renamed if there is
+ // another v in scope.
+ // Note that all assignments to the LHS are emitted in the body, including
+ // all destructuring.
+ // Note also that because an extra statement is needed to assign to the LHS,
+ // for-of bodies are always emitted as blocks.
+ var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+ var initializer = node.initializer;
+ var statements = [];
+ // In the case where the user wrote an identifier as the RHS, like this:
+ //
+ // for (let v of arr) { }
+ //
+ // we don't want to emit a temporary variable for the RHS, just use it directly.
+ var counter = ts.createLoopVariable();
+ var rhsReference = expression.kind === 70 /* Identifier */
+ ? ts.createUniqueName(expression.text)
+ : ts.createTempVariable(/*recordTempVariable*/ undefined);
+ var elementAccess = ts.createElementAccess(rhsReference, counter);
+ // Initialize LHS
+ // var v = _a[_i];
+ if (ts.isVariableDeclarationList(initializer)) {
+ if (initializer.flags & 3 /* BlockScoped */) {
+ enableSubstitutionsForBlockScopedBindings();
+ }
+ var firstOriginalDeclaration = ts.firstOrUndefined(initializer.declarations);
+ if (firstOriginalDeclaration && ts.isBindingPattern(firstOriginalDeclaration.name)) {
+ // This works whether the declaration is a var, let, or const.
+ // It will use rhsIterationValue _a[_i] as the initializer.
+ var declarations = ts.flattenDestructuringBinding(firstOriginalDeclaration, visitor, context, 0 /* All */, elementAccess);
+ var declarationList = ts.createVariableDeclarationList(declarations, /*location*/ initializer);
+ ts.setOriginalNode(declarationList, initializer);
+ // Adjust the source map range for the first declaration to align with the old
+ // emitter.
+ var firstDeclaration = declarations[0];
+ var lastDeclaration = ts.lastOrUndefined(declarations);
+ ts.setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, lastDeclaration.end));
+ statements.push(ts.createVariableStatement(
+ /*modifiers*/ undefined, declarationList));
+ }
+ else {
+ // The following call does not include the initializer, so we have
+ // to emit it separately.
+ statements.push(ts.createVariableStatement(
+ /*modifiers*/ undefined, ts.setOriginalNode(ts.createVariableDeclarationList([
+ ts.createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : ts.createTempVariable(/*recordTempVariable*/ undefined),
+ /*type*/ undefined, ts.createElementAccess(rhsReference, counter))
+ ], /*location*/ ts.moveRangePos(initializer, -1)), initializer),
+ /*location*/ ts.moveRangeEnd(initializer, -1)));
+ }
+ }
+ else {
+ // Initializer is an expression. Emit the expression in the body, so that it's
+ // evaluated on every iteration.
+ var assignment = ts.createAssignment(initializer, elementAccess);
+ if (ts.isDestructuringAssignment(assignment)) {
+ // This is a destructuring pattern, so we flatten the destructuring instead.
+ statements.push(ts.createStatement(ts.flattenDestructuringAssignment(assignment, visitor, context, 0 /* All */)));
+ }
+ else {
+ // Currently there is not way to check that assignment is binary expression of destructing assignment
+ // so we have to cast never type to binaryExpression
+ assignment.end = initializer.end;
+ statements.push(ts.createStatement(assignment, /*location*/ ts.moveRangeEnd(initializer, -1)));
+ }
+ }
+ var bodyLocation;
+ var statementsLocation;
+ if (convertedLoopBodyStatements) {
+ ts.addRange(statements, convertedLoopBodyStatements);
+ }
+ else {
+ var statement = ts.visitNode(node.statement, visitor, ts.isStatement);
+ if (ts.isBlock(statement)) {
+ ts.addRange(statements, statement.statements);
+ bodyLocation = statement;
+ statementsLocation = statement.statements;
+ }
+ else {
+ statements.push(statement);
+ }
+ }
+ // The old emitter does not emit source maps for the expression
+ ts.setEmitFlags(expression, 48 /* NoSourceMap */ | ts.getEmitFlags(expression));
+ // The old emitter does not emit source maps for the block.
+ // We add the location to preserve comments.
+ var body = ts.createBlock(ts.createNodeArray(statements, /*location*/ statementsLocation),
+ /*location*/ bodyLocation);
+ ts.setEmitFlags(body, 48 /* NoSourceMap */ | 384 /* NoTokenSourceMaps */);
+ var forStatement = ts.createFor(ts.setEmitFlags(ts.createVariableDeclarationList([
+ ts.createVariableDeclaration(counter, /*type*/ undefined, ts.createLiteral(0), /*location*/ ts.moveRangePos(node.expression, -1)),
+ ts.createVariableDeclaration(rhsReference, /*type*/ undefined, expression, /*location*/ node.expression)
+ ], /*location*/ node.expression), 1048576 /* NoHoisting */), ts.createLessThan(counter, ts.createPropertyAccess(rhsReference, "length"),
+ /*location*/ node.expression), ts.createPostfixIncrement(counter, /*location*/ node.expression), body,
+ /*location*/ node);
+ // Disable trailing source maps for the OpenParenToken to align source map emit with the old emitter.
+ ts.setEmitFlags(forStatement, 256 /* NoTokenTrailingSourceMaps */);
+ return forStatement;
}
/**
* Visits an ObjectLiteralExpression with computed propety names.
@@ -50048,7 +50623,7 @@ var ts;
var numInitialProperties = numProperties;
for (var i = 0; i < numProperties; i++) {
var property = properties[i];
- if (property.transformFlags & 134217728 /* ContainsYield */
+ if (property.transformFlags & 16777216 /* ContainsYield */
|| property.name.kind === 142 /* ComputedPropertyName */) {
numInitialProperties = i;
break;
@@ -50061,7 +50636,7 @@ var ts;
// Write out the first non-computed properties, then emit the rest through indexing on the temp variable.
var expressions = [];
var assignment = ts.createAssignment(temp, ts.setEmitFlags(ts.createObjectLiteral(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties),
- /*location*/ undefined, node.multiLine), 524288 /* Indented */));
+ /*location*/ undefined, node.multiLine), 32768 /* Indented */));
if (node.multiLine) {
assignment.startsOnNewLine = true;
}
@@ -50159,22 +50734,22 @@ var ts;
var currentState = convertedLoopState;
convertedLoopState = outerConvertedLoopState;
if (loopOutParameters.length) {
- var statements_3 = ts.isBlock(loopBody) ? loopBody.statements.slice() : [loopBody];
- copyOutParameters(loopOutParameters, 1 /* ToOutParameter */, statements_3);
- loopBody = ts.createBlock(statements_3, /*location*/ undefined, /*multiline*/ true);
+ var statements_4 = ts.isBlock(loopBody) ? loopBody.statements.slice() : [loopBody];
+ copyOutParameters(loopOutParameters, 1 /* ToOutParameter */, statements_4);
+ loopBody = ts.createBlock(statements_4, /*location*/ undefined, /*multiline*/ true);
}
if (!ts.isBlock(loopBody)) {
loopBody = ts.createBlock([loopBody], /*location*/ undefined, /*multiline*/ true);
}
var isAsyncBlockContainingAwait = enclosingNonArrowFunction
- && (ts.getEmitFlags(enclosingNonArrowFunction) & 2097152 /* AsyncFunctionBody */) !== 0
- && (node.statement.transformFlags & 134217728 /* ContainsYield */) !== 0;
+ && (ts.getEmitFlags(enclosingNonArrowFunction) & 131072 /* AsyncFunctionBody */) !== 0
+ && (node.statement.transformFlags & 16777216 /* ContainsYield */) !== 0;
var loopBodyFlags = 0;
if (currentState.containsLexicalThis) {
- loopBodyFlags |= 256 /* CapturesThis */;
+ loopBodyFlags |= 8 /* CapturesThis */;
}
if (isAsyncBlockContainingAwait) {
- loopBodyFlags |= 2097152 /* AsyncFunctionBody */;
+ loopBodyFlags |= 131072 /* AsyncFunctionBody */;
}
var convertedLoopVariable = ts.createVariableStatement(
/*modifiers*/ undefined, ts.setEmitFlags(ts.createVariableDeclarationList([
@@ -50184,7 +50759,7 @@ var ts;
/*name*/ undefined,
/*typeParameters*/ undefined, loopParameters,
/*type*/ undefined, loopBody), loopBodyFlags))
- ]), 16777216 /* NoHoisting */));
+ ]), 1048576 /* NoHoisting */));
var statements = [convertedLoopVariable];
var extraVariableDeclarations;
// propagate state from the inner loop to the outer loop if necessary
@@ -50465,7 +51040,7 @@ var ts;
ts.Debug.assert(ts.isBindingPattern(node.variableDeclaration.name));
var temp = ts.createTempVariable(undefined);
var newVariableDeclaration = ts.createVariableDeclaration(temp, undefined, undefined, node.variableDeclaration);
- var vars = ts.flattenVariableDestructuring(node.variableDeclaration, temp, visitor);
+ var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0 /* All */, temp);
var list = ts.createVariableDeclarationList(vars, /*location*/ node.variableDeclaration, /*flags*/ node.variableDeclaration.flags);
var destructure = ts.createVariableStatement(undefined, list);
return ts.updateCatchClause(node, newVariableDeclaration, addStatementToStartOfBlock(node.block, destructure));
@@ -50486,7 +51061,7 @@ var ts;
// Methods with computed property names are handled in visitObjectLiteralExpression.
ts.Debug.assert(!ts.isComputedPropertyName(node.name));
var functionExpression = transformFunctionLikeToExpression(node, /*location*/ ts.moveRangePos(node, -1), /*name*/ undefined);
- ts.setEmitFlags(functionExpression, 16384 /* NoLeadingComments */ | ts.getEmitFlags(functionExpression));
+ ts.setEmitFlags(functionExpression, 512 /* NoLeadingComments */ | ts.getEmitFlags(functionExpression));
return ts.createPropertyAssignment(node.name, functionExpression,
/*location*/ node);
}
@@ -50533,10 +51108,10 @@ var ts;
// because we contain a SpreadElementExpression.
var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
if (node.expression.kind === 96 /* SuperKeyword */) {
- ts.setEmitFlags(thisArg, 128 /* NoSubstitution */);
+ ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
}
var resultingCall;
- if (node.transformFlags & 8388608 /* ContainsSpreadExpression */) {
+ if (node.transformFlags & 524288 /* ContainsSpread */) {
// [source]
// f(...a, b)
// x.m(...a, b)
@@ -50567,7 +51142,7 @@ var ts;
}
if (node.expression.kind === 96 /* SuperKeyword */) {
var actualThis = ts.createThis();
- ts.setEmitFlags(actualThis, 128 /* NoSubstitution */);
+ ts.setEmitFlags(actualThis, 4 /* NoSubstitution */);
var initializer = ts.createLogicalOr(resultingCall, actualThis);
return assignToCapturedThis
? ts.createAssignment(ts.createIdentifier("_this"), initializer)
@@ -50582,7 +51157,7 @@ var ts;
*/
function visitNewExpression(node) {
// We are here because we contain a SpreadElementExpression.
- ts.Debug.assert((node.transformFlags & 8388608 /* ContainsSpreadExpression */) !== 0);
+ ts.Debug.assert((node.transformFlags & 524288 /* ContainsSpread */) !== 0);
// [source]
// new C(...a)
//
@@ -50632,6 +51207,9 @@ var ts;
return ts.createArrayLiteral(ts.visitNodes(ts.createNodeArray(chunk, /*location*/ undefined, hasTrailingComma), visitor, ts.isExpression),
/*location*/ undefined, multiLine);
}
+ function visitSpreadElement(node) {
+ return ts.visitNode(node.expression, visitor, ts.isExpression);
+ }
/**
* Transforms the expression of a SpreadExpression node.
*
@@ -50798,18 +51376,6 @@ var ts;
? ts.createPropertyAccess(ts.createIdentifier("_super"), "prototype")
: ts.createIdentifier("_super");
}
- function visitSourceFileNode(node) {
- var _a = ts.span(node.statements, ts.isPrologueDirective), prologue = _a[0], remaining = _a[1];
- var statements = [];
- startLexicalEnvironment();
- ts.addRange(statements, prologue);
- ts.addCaptureThisForNodeIfNeeded(statements, node, enableSubstitutionsForCapturedThis);
- ts.addRange(statements, ts.visitNodes(ts.createNodeArray(remaining), visitor, ts.isStatement));
- ts.addRange(statements, endLexicalEnvironment());
- var clone = ts.getMutableClone(node);
- clone.statements = ts.createNodeArray(statements, /*location*/ node.statements);
- return clone;
- }
/**
* Called by the printer just before a node is printed.
*
@@ -50935,7 +51501,7 @@ var ts;
function substituteThisKeyword(node) {
if (enabledSubstitutions & 1 /* CapturedThis */
&& enclosingFunction
- && ts.getEmitFlags(enclosingFunction) & 256 /* CapturesThis */) {
+ && ts.getEmitFlags(enclosingFunction) & 8 /* CapturesThis */) {
return ts.createIdentifier("_this", /*location*/ node);
}
return node;
@@ -50948,8 +51514,7 @@ var ts;
if (!constructor || !hasExtendsClause) {
return false;
}
- var parameter = ts.singleOrUndefined(constructor.parameters);
- if (!parameter || !ts.nodeIsSynthesized(parameter) || !parameter.dotDotDotToken) {
+ if (ts.some(constructor.parameters)) {
return false;
}
var statement = ts.firstOrUndefined(constructor.body.statements);
@@ -50969,10 +51534,24 @@ var ts;
return false;
}
var expression = callArgument.expression;
- return ts.isIdentifier(expression) && expression === parameter.name;
+ return ts.isIdentifier(expression) && expression.text === "arguments";
}
}
ts.transformES2015 = transformES2015;
+ function createExtendsHelper(context, name) {
+ context.requestEmitHelper(extendsHelper);
+ return ts.createCall(ts.getHelperName("__extends"),
+ /*typeArguments*/ undefined, [
+ name,
+ ts.createIdentifier("_super")
+ ]);
+ }
+ var extendsHelper = {
+ name: "typescript:extends",
+ scoped: false,
+ priority: 0,
+ text: "\n var __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };"
+ };
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
/// <reference path="../visitor.ts" />
@@ -51154,7 +51733,7 @@ var ts;
_a[7 /* Endfinally */] = "endfinally",
_a));
function transformGenerators(context) {
- var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistFunctionDeclaration = context.hoistFunctionDeclaration, hoistVariableDeclaration = context.hoistVariableDeclaration;
+ var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistFunctionDeclaration = context.hoistFunctionDeclaration, hoistVariableDeclaration = context.hoistVariableDeclaration;
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var resolver = context.getEmitResolver();
@@ -51204,15 +51783,15 @@ var ts;
var withBlockStack; // A stack containing `with` blocks.
return transformSourceFile;
function transformSourceFile(node) {
- if (ts.isDeclarationFile(node)) {
+ if (ts.isDeclarationFile(node)
+ || (node.transformFlags & 512 /* ContainsGenerator */) === 0) {
return node;
}
- if (node.transformFlags & 8192 /* ContainsGenerator */) {
- currentSourceFile = node;
- node = ts.visitEachChild(node, visitor, context);
- currentSourceFile = undefined;
- }
- return node;
+ currentSourceFile = node;
+ var visited = ts.visitEachChild(node, visitor, context);
+ ts.addEmitHelpers(visited, context.readEmitHelpers());
+ currentSourceFile = undefined;
+ return visited;
}
/**
* Visits a node.
@@ -51227,10 +51806,10 @@ var ts;
else if (inGeneratorFunctionBody) {
return visitJavaScriptInGeneratorFunctionBody(node);
}
- else if (transformFlags & 4096 /* Generator */) {
+ else if (transformFlags & 256 /* Generator */) {
return visitGenerator(node);
}
- else if (transformFlags & 8192 /* ContainsGenerator */) {
+ else if (transformFlags & 512 /* ContainsGenerator */) {
return ts.visitEachChild(node, visitor, context);
}
else {
@@ -51283,10 +51862,10 @@ var ts;
case 216 /* ReturnStatement */:
return visitReturnStatement(node);
default:
- if (node.transformFlags & 134217728 /* ContainsYield */) {
+ if (node.transformFlags & 16777216 /* ContainsYield */) {
return visitJavaScriptContainingYield(node);
}
- else if (node.transformFlags & (8192 /* ContainsGenerator */ | 268435456 /* ContainsHoistedDeclarationOrCompletion */)) {
+ else if (node.transformFlags & (512 /* ContainsGenerator */ | 33554432 /* ContainsHoistedDeclarationOrCompletion */)) {
return ts.visitEachChild(node, visitor, context);
}
else {
@@ -51348,12 +51927,11 @@ var ts;
*/
function visitFunctionDeclaration(node) {
// Currently, we only support generators that were originally async functions.
- if (node.asteriskToken && ts.getEmitFlags(node) & 2097152 /* AsyncFunctionBody */) {
+ if (node.asteriskToken && ts.getEmitFlags(node) & 131072 /* AsyncFunctionBody */) {
node = ts.setOriginalNode(ts.createFunctionDeclaration(
- /*decorators*/ undefined,
- /*modifiers*/ undefined,
+ /*decorators*/ undefined, node.modifiers,
/*asteriskToken*/ undefined, node.name,
- /*typeParameters*/ undefined, node.parameters,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
/*type*/ undefined, transformGeneratorFunctionBody(node.body),
/*location*/ node), node);
}
@@ -51387,11 +51965,11 @@ var ts;
*/
function visitFunctionExpression(node) {
// Currently, we only support generators that were originally async functions.
- if (node.asteriskToken && ts.getEmitFlags(node) & 2097152 /* AsyncFunctionBody */) {
+ if (node.asteriskToken && ts.getEmitFlags(node) & 131072 /* AsyncFunctionBody */) {
node = ts.setOriginalNode(ts.createFunctionExpression(
/*modifiers*/ undefined,
/*asteriskToken*/ undefined, node.name,
- /*typeParameters*/ undefined, node.parameters,
+ /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context),
/*type*/ undefined, transformGeneratorFunctionBody(node.body),
/*location*/ node), node);
}
@@ -51460,7 +52038,7 @@ var ts;
operationLocations = undefined;
state = ts.createTempVariable(/*recordTempVariable*/ undefined);
// Build the generator
- startLexicalEnvironment();
+ resumeLexicalEnvironment();
var statementOffset = ts.addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor);
transformAndEmitStatements(body.statements, statementOffset);
var buildResult = build();
@@ -51491,13 +52069,13 @@ var ts;
* @param node The node to visit.
*/
function visitVariableStatement(node) {
- if (node.transformFlags & 134217728 /* ContainsYield */) {
+ if (node.transformFlags & 16777216 /* ContainsYield */) {
transformAndEmitVariableDeclarationList(node.declarationList);
return undefined;
}
else {
// Do not hoist custom prologues.
- if (ts.getEmitFlags(node) & 8388608 /* CustomPrologue */) {
+ if (ts.getEmitFlags(node) & 524288 /* CustomPrologue */) {
return node;
}
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
@@ -51614,10 +52192,10 @@ var ts;
// _a = a();
// .yield resumeLabel
// _a + %sent% + c()
- var clone_6 = ts.getMutableClone(node);
- clone_6.left = cacheExpression(ts.visitNode(node.left, visitor, ts.isExpression));
- clone_6.right = ts.visitNode(node.right, visitor, ts.isExpression);
- return clone_6;
+ var clone_4 = ts.getMutableClone(node);
+ clone_4.left = cacheExpression(ts.visitNode(node.left, visitor, ts.isExpression));
+ clone_4.right = ts.visitNode(node.right, visitor, ts.isExpression);
+ return clone_4;
}
return ts.visitEachChild(node, visitor, context);
}
@@ -51770,7 +52348,7 @@ var ts;
* @param node The node to visit.
*/
function visitArrayLiteralExpression(node) {
- return visitElements(node.elements, node.multiLine);
+ return visitElements(node.elements, /*leadingElement*/ undefined, /*location*/ undefined, node.multiLine);
}
/**
* Visits an array of expressions containing one or more YieldExpression nodes
@@ -51779,7 +52357,7 @@ var ts;
* @param elements The elements to visit.
* @param multiLine Whether array literals created should be emitted on multiple lines.
*/
- function visitElements(elements, _multiLine) {
+ function visitElements(elements, leadingElement, location, multiLine) {
// [source]
// ar = [1, yield, 2];
//
@@ -51793,19 +52371,24 @@ var ts;
var temp = declareLocal();
var hasAssignedTemp = false;
if (numInitialElements > 0) {
- emitAssignment(temp, ts.createArrayLiteral(ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements)));
+ var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
+ emitAssignment(temp, ts.createArrayLiteral(leadingElement
+ ? [leadingElement].concat(initialElements) : initialElements));
+ leadingElement = undefined;
hasAssignedTemp = true;
}
var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
return hasAssignedTemp
- ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions)])
- : ts.createArrayLiteral(expressions);
+ ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, /*location*/ undefined, multiLine)])
+ : ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions, location, multiLine);
function reduceElement(expressions, element) {
if (containsYield(element) && expressions.length > 0) {
emitAssignment(temp, hasAssignedTemp
- ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions)])
- : ts.createArrayLiteral(expressions));
+ ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, /*location*/ undefined, multiLine)])
+ : ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions,
+ /*location*/ undefined, multiLine));
hasAssignedTemp = true;
+ leadingElement = undefined;
expressions = [];
}
expressions.push(ts.visitNode(element, visitor, ts.isExpression));
@@ -51871,10 +52454,10 @@ var ts;
// .yield resumeLabel
// .mark resumeLabel
// a = _a[%sent%]
- var clone_7 = ts.getMutableClone(node);
- clone_7.expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression));
- clone_7.argumentExpression = ts.visitNode(node.argumentExpression, visitor, ts.isExpression);
- return clone_7;
+ var clone_5 = ts.getMutableClone(node);
+ clone_5.expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression));
+ clone_5.argumentExpression = ts.visitNode(node.argumentExpression, visitor, ts.isExpression);
+ return clone_5;
}
return ts.visitEachChild(node, visitor, context);
}
@@ -51909,7 +52492,8 @@ var ts;
// .mark resumeLabel
// new (_b.apply(_a, _c.concat([%sent%, 2])));
var _a = ts.createCallBinding(ts.createPropertyAccess(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
- return ts.setOriginalNode(ts.createNew(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments)),
+ return ts.setOriginalNode(ts.createNew(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments,
+ /*leadingElement*/ ts.createVoidZero())),
/*typeArguments*/ undefined, [],
/*location*/ node), node);
}
@@ -52532,7 +53116,7 @@ var ts;
}
}
function containsYield(node) {
- return node && (node.transformFlags & 134217728 /* ContainsYield */) !== 0;
+ return node && (node.transformFlags & 16777216 /* ContainsYield */) !== 0;
}
function countInitialNodesWithoutYield(nodes) {
var numNodes = nodes.length;
@@ -52562,12 +53146,12 @@ var ts;
if (ts.isIdentifier(original) && original.parent) {
var declaration = resolver.getReferencedValueDeclaration(original);
if (declaration) {
- var name_35 = ts.getProperty(renamedCatchVariableDeclarations, String(ts.getOriginalNodeId(declaration)));
- if (name_35) {
- var clone_8 = ts.getMutableClone(name_35);
- ts.setSourceMapRange(clone_8, node);
- ts.setCommentRange(clone_8, node);
- return clone_8;
+ var name_36 = ts.getProperty(renamedCatchVariableDeclarations, String(ts.getOriginalNodeId(declaration)));
+ if (name_36) {
+ var clone_6 = ts.getMutableClone(name_36);
+ ts.setSourceMapRange(clone_6, node);
+ ts.setCommentRange(clone_6, node);
+ return clone_6;
}
}
}
@@ -53153,18 +53737,14 @@ var ts;
currentExceptionBlock = undefined;
withBlockStack = undefined;
var buildResult = buildStatements();
- return ts.createCall(ts.createHelperName(currentSourceFile.externalHelpersModuleName, "__generator"),
- /*typeArguments*/ undefined, [
- ts.createThis(),
- ts.setEmitFlags(ts.createFunctionExpression(
- /*modifiers*/ undefined,
- /*asteriskToken*/ undefined,
- /*name*/ undefined,
- /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, state)],
- /*type*/ undefined, ts.createBlock(buildResult,
- /*location*/ undefined,
- /*multiLine*/ buildResult.length > 0)), 4194304 /* ReuseTempVariableScope */)
- ]);
+ return createGeneratorHelper(context, ts.setEmitFlags(ts.createFunctionExpression(
+ /*modifiers*/ undefined,
+ /*asteriskToken*/ undefined,
+ /*name*/ undefined,
+ /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, state)],
+ /*type*/ undefined, ts.createBlock(buildResult,
+ /*location*/ undefined,
+ /*multiLine*/ buildResult.length > 0)), 262144 /* ReuseTempVariableScope */));
}
/**
* Builds the statements for the generator function body.
@@ -53535,6 +54115,76 @@ var ts;
}
}
ts.transformGenerators = transformGenerators;
+ function createGeneratorHelper(context, body) {
+ context.requestEmitHelper(generatorHelper);
+ return ts.createCall(ts.getHelperName("__generator"),
+ /*typeArguments*/ undefined, [ts.createThis(), body]);
+ }
+ // The __generator helper is used by down-level transformations to emulate the runtime
+ // semantics of an ES2015 generator function. When called, this helper returns an
+ // object that implements the Iterator protocol, in that it has `next`, `return`, and
+ // `throw` methods that step through the generator when invoked.
+ //
+ // parameters:
+ // thisArg The value to use as the `this` binding for the transformed generator body.
+ // body A function that acts as the transformed generator body.
+ //
+ // variables:
+ // _ Persistent state for the generator that is shared between the helper and the
+ // generator body. The state object has the following members:
+ // sent() - A method that returns or throws the current completion value.
+ // label - The next point at which to resume evaluation of the generator body.
+ // trys - A stack of protected regions (try/catch/finally blocks).
+ // ops - A stack of pending instructions when inside of a finally block.
+ // f A value indicating whether the generator is executing.
+ // y An iterator to delegate for a yield*.
+ // t A temporary variable that holds one of the following values (note that these
+ // cases do not overlap):
+ // - The completion value when resuming from a `yield` or `yield*`.
+ // - The error value for a catch block.
+ // - The current protected region (array of try/catch/finally/end labels).
+ // - The verb (`next`, `throw`, or `return` method) to delegate to the expression
+ // of a `yield*`.
+ // - The result of evaluating the verb delegated to the expression of a `yield*`.
+ //
+ // functions:
+ // verb(n) Creates a bound callback to the `step` function for opcode `n`.
+ // step(op) Evaluates opcodes in a generator body until execution is suspended or
+ // completed.
+ //
+ // The __generator helper understands a limited set of instructions:
+ // 0: next(value?) - Start or resume the generator with the specified value.
+ // 1: throw(error) - Resume the generator with an exception. If the generator is
+ // suspended inside of one or more protected regions, evaluates
+ // any intervening finally blocks between the current label and
+ // the nearest catch block or function boundary. If uncaught, the
+ // exception is thrown to the caller.
+ // 2: return(value?) - Resume the generator as if with a return. If the generator is
+ // suspended inside of one or more protected regions, evaluates any
+ // intervening finally blocks.
+ // 3: break(label) - Jump to the specified label. If the label is outside of the
+ // current protected region, evaluates any intervening finally
+ // blocks.
+ // 4: yield(value?) - Yield execution to the caller with an optional value. When
+ // resumed, the generator will continue at the next label.
+ // 5: yield*(value) - Delegates evaluation to the supplied iterator. When
+ // delegation completes, the generator will continue at the next
+ // label.
+ // 6: catch(error) - Handles an exception thrown from within the generator body. If
+ // the current label is inside of one or more protected regions,
+ // evaluates any intervening finally blocks between the current
+ // label and the nearest catch block or function boundary. If
+ // uncaught, the exception is thrown to the caller.
+ // 7: endfinally - Ends a finally block, resuming the last instruction prior to
+ // entering a finally block.
+ //
+ // For examples of how these are used, see the comments in ./transformers/generators.ts
+ var generatorHelper = {
+ name: "typescript:generator",
+ scoped: false,
+ priority: 6,
+ text: "\n var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t;\n return { next: verb(0), \"throw\": verb(1), \"return\": verb(2) };\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n };"
+ };
var _a;
})(ts || (ts = {}));
/// <reference path="../factory.ts" />
@@ -53623,13 +54273,32 @@ var ts;
(function (ts) {
function transformES2015Module(context) {
var compilerOptions = context.getCompilerOptions();
+ var previousOnEmitNode = context.onEmitNode;
+ var previousOnSubstituteNode = context.onSubstituteNode;
+ context.onEmitNode = onEmitNode;
+ context.onSubstituteNode = onSubstituteNode;
+ context.enableEmitNotification(261 /* SourceFile */);
+ context.enableSubstitution(70 /* Identifier */);
+ var currentSourceFile;
return transformSourceFile;
function transformSourceFile(node) {
if (ts.isDeclarationFile(node)) {
return node;
}
if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
- return ts.visitEachChild(node, visitor, context);
+ var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions);
+ if (externalHelpersModuleName) {
+ var statements = [];
+ var statementOffset = ts.addPrologueDirectives(statements, node.statements);
+ ts.append(statements, ts.createImportDeclaration(
+ /*decorators*/ undefined,
+ /*modifiers*/ undefined, ts.createImportClause(/*name*/ undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)));
+ ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
+ return ts.updateSourceFileNode(node, ts.createNodeArray(statements, node.statements));
+ }
+ else {
+ return ts.visitEachChild(node, visitor, context);
+ }
}
return node;
}
@@ -53647,6 +54316,51 @@ var ts;
// Elide `export=` as it is not legal with --module ES6
return node.isExportEquals ? undefined : node;
}
+ //
+ // Emit Notification
+ //
+ /**
+ * Hook for node emit.
+ *
+ * @param emitContext A context hint for the emitter.
+ * @param node The node to emit.
+ * @param emit A callback used to emit the node in the printer.
+ */
+ function onEmitNode(emitContext, node, emitCallback) {
+ if (ts.isSourceFile(node)) {
+ currentSourceFile = node;
+ previousOnEmitNode(emitContext, node, emitCallback);
+ currentSourceFile = undefined;
+ }
+ else {
+ previousOnEmitNode(emitContext, node, emitCallback);
+ }
+ }
+ //
+ // Substitutions
+ //
+ /**
+ * Hooks node substitutions.
+ *
+ * @param emitContext A context hint for the emitter.
+ * @param node The node to substitute.
+ */
+ function onSubstituteNode(emitContext, node) {
+ node = previousOnSubstituteNode(emitContext, node);
+ if (ts.isIdentifier(node) && emitContext === 1 /* Expression */) {
+ return substituteExpressionIdentifier(node);
+ }
+ return node;
+ }
+ function substituteExpressionIdentifier(node) {
+ if (ts.getEmitFlags(node) & 4096 /* HelperName */) {
+ var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
+ if (externalHelpersModuleName) {
+ return ts.createPropertyAccess(externalHelpersModuleName, node);
+ }
+ }
+ return node;
+ }
}
ts.transformES2015Module = transformES2015Module;
})(ts || (ts = {}));
@@ -53708,13 +54422,14 @@ var ts;
// The only exception in this rule is postfix unary operators,
// see comment to 'substitutePostfixUnaryExpression' for more details
// Collect information about the external module and dependency groups.
- moduleInfo = moduleInfoMap[id] = ts.collectExternalModuleInfo(node, resolver);
+ moduleInfo = moduleInfoMap[id] = ts.collectExternalModuleInfo(node, resolver, compilerOptions);
// Make sure that the name of the 'exports' function does not conflict with
// existing identifiers.
exportFunction = exportFunctionsMap[id] = ts.createUniqueName("exports");
contextObject = ts.createUniqueName("context");
// Add the body of the module.
var dependencyGroups = collectDependencyGroups(moduleInfo.externalImports);
+ var moduleBodyBlock = createSystemModuleBody(node, dependencyGroups);
var moduleBodyFunction = ts.createFunctionExpression(
/*modifiers*/ undefined,
/*asteriskToken*/ undefined,
@@ -53723,7 +54438,7 @@ var ts;
ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, exportFunction),
ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, contextObject)
],
- /*type*/ undefined, createSystemModuleBody(node, dependencyGroups));
+ /*type*/ undefined, moduleBodyBlock);
// Write the call to `System.register`
// Clear the emit-helpers flag for later passes since we'll have already used it in the module body
// So the helper will be emit at the correct position instead of at the top of the source-file
@@ -53735,7 +54450,9 @@ var ts;
? [moduleName, dependencies, moduleBodyFunction]
: [dependencies, moduleBodyFunction]))
], node.statements));
- ts.setEmitFlags(updated, ts.getEmitFlags(node) & ~1 /* EmitEmitHelpers */);
+ if (!(compilerOptions.outFile || compilerOptions.out)) {
+ ts.moveEmitHelpers(updated, moduleBodyBlock, function (helper) { return !helper.scoped; });
+ }
if (noSubstitution) {
noSubstitutionMap[id] = noSubstitution;
noSubstitution = undefined;
@@ -53835,6 +54552,8 @@ var ts;
ts.createVariableDeclaration("__moduleName",
/*type*/ undefined, ts.createLogicalAnd(contextObject, ts.createPropertyAccess(contextObject, "id")))
])));
+ // Visit the synthetic external helpers import declaration if present
+ ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement, /*optional*/ true);
// Visit the statements of the source file, emitting any transformations into
// the `executeStatements` array. We do this *before* we fill the `setters` array
// as we both emit transformations as well as aggregate some data used when creating
@@ -53861,9 +54580,7 @@ var ts;
/*multiLine*/ true)))
]),
/*multiLine*/ true)));
- var body = ts.createBlock(statements, /*location*/ undefined, /*multiLine*/ true);
- ts.setEmitFlags(body, 1 /* EmitEmitHelpers */);
- return body;
+ return ts.createBlock(statements, /*location*/ undefined, /*multiLine*/ true);
}
/**
* Adds an exportStar function to a statement list if it is needed for the file.
@@ -53948,7 +54665,8 @@ var ts;
var exports = ts.createIdentifier("exports");
var condition = ts.createStrictInequality(n, ts.createLiteral("default"));
if (localNames) {
- condition = ts.createLogicalAnd(condition, ts.createLogicalNot(ts.createHasOwnProperty(localNames, n)));
+ condition = ts.createLogicalAnd(condition, ts.createLogicalNot(ts.createCall(ts.createPropertyAccess(localNames, "hasOwnProperty"),
+ /*typeArguments*/ undefined, [n])));
}
return ts.createFunctionDeclaration(
/*decorators*/ undefined,
@@ -53964,7 +54682,7 @@ var ts;
ts.createForIn(ts.createVariableDeclarationList([
ts.createVariableDeclaration(n, /*type*/ undefined)
]), m, ts.createBlock([
- ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 32 /* SingleLine */)
+ ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 1 /* SingleLine */)
])),
ts.createStatement(ts.createCall(exportFunction,
/*typeArguments*/ undefined, [exports]))
@@ -54237,7 +54955,7 @@ var ts;
*/
function shouldHoistVariableDeclarationList(node) {
// hoist only non-block scoped declarations or block scoped declarations parented by source file
- return (ts.getEmitFlags(node) & 16777216 /* NoHoisting */) === 0
+ return (ts.getEmitFlags(node) & 1048576 /* NoHoisting */) === 0
&& (enclosingBlockScopedContainer.kind === 261 /* SourceFile */
|| (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
}
@@ -54250,7 +54968,8 @@ var ts;
function transformInitializedVariable(node, isExportedDeclaration) {
var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
return ts.isBindingPattern(node.name)
- ? ts.flattenVariableDestructuringToExpression(node, hoistVariableDeclaration, createAssignment, destructuringVisitor)
+ ? ts.flattenDestructuringAssignment(node, destructuringVisitor, context, 0 /* All */,
+ /*needsValue*/ false, createAssignment)
: createAssignment(node.name, ts.visitNode(node.initializer, destructuringVisitor, ts.isExpression));
}
/**
@@ -54314,7 +55033,7 @@ var ts;
* @param node The node to test.
*/
function hasAssociatedEndOfDeclarationMarker(node) {
- return (ts.getEmitFlags(node) & 33554432 /* HasEndOfDeclarationMarker */) !== 0;
+ return (ts.getEmitFlags(node) & 2097152 /* HasEndOfDeclarationMarker */) !== 0;
}
/**
* Visits a DeclarationMarker used as a placeholder for the end of a transformed
@@ -54515,7 +55234,7 @@ var ts;
var statement = ts.createStatement(createExportExpression(name, value));
ts.startOnNewLine(statement);
if (!allowComments) {
- ts.setEmitFlags(statement, 49152 /* NoComments */);
+ ts.setEmitFlags(statement, 1536 /* NoComments */);
}
return statement;
}
@@ -54573,9 +55292,9 @@ var ts;
return visitCatchClause(node);
case 204 /* Block */:
return visitBlock(node);
- case 294 /* MergeDeclarationMarker */:
+ case 295 /* MergeDeclarationMarker */:
return visitMergeDeclarationMarker(node);
- case 295 /* EndOfDeclarationMarker */:
+ case 296 /* EndOfDeclarationMarker */:
return visitEndOfDeclarationMarker(node);
default:
return destructuringVisitor(node);
@@ -54754,11 +55473,11 @@ var ts;
* @param node The node to visit.
*/
function destructuringVisitor(node) {
- if (node.transformFlags & 16384 /* DestructuringAssignment */
+ if (node.transformFlags & 1024 /* DestructuringAssignment */
&& node.kind === 192 /* BinaryExpression */) {
return visitDestructuringAssignment(node);
}
- else if (node.transformFlags & 32768 /* ContainsDestructuringAssignment */) {
+ else if (node.transformFlags & 2048 /* ContainsDestructuringAssignment */) {
return ts.visitEachChild(node, destructuringVisitor, context);
}
else {
@@ -54772,7 +55491,8 @@ var ts;
*/
function visitDestructuringAssignment(node) {
if (hasExportedReferenceInDestructuringTarget(node.left)) {
- return ts.flattenDestructuringAssignment(context, node, /*needsValue*/ true, hoistVariableDeclaration, destructuringVisitor);
+ return ts.flattenDestructuringAssignment(node, destructuringVisitor, context, 0 /* All */,
+ /*needsValue*/ true);
}
return ts.visitEachChild(node, destructuringVisitor, context);
}
@@ -54896,6 +55616,13 @@ var ts;
* @param node The node to substitute.
*/
function substituteExpressionIdentifier(node) {
+ if (ts.getEmitFlags(node) & 4096 /* HelperName */) {
+ var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
+ if (externalHelpersModuleName) {
+ return ts.createPropertyAccess(externalHelpersModuleName, node);
+ }
+ return node;
+ }
// When we see an identifier in an expression position that
// points to an imported symbol, we should substitute a qualified
// reference to the imported symbol if one is needed.
@@ -55043,7 +55770,7 @@ var ts;
_a[ts.ModuleKind.AMD] = transformAMDModule,
_a[ts.ModuleKind.UMD] = transformUMDModule,
_a));
- var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
+ var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment;
var compilerOptions = context.getCompilerOptions();
var resolver = context.getEmitResolver();
var host = context.getEmitHost();
@@ -55077,7 +55804,7 @@ var ts;
return node;
}
currentSourceFile = node;
- currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(node)] = ts.collectExternalModuleInfo(node, resolver);
+ currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(node)] = ts.collectExternalModuleInfo(node, resolver, compilerOptions);
// Perform the transformation.
var transformModule = transformModuleDelegates[moduleKind] || transformModuleDelegates[ts.ModuleKind.None];
var updated = transformModule(node);
@@ -55094,12 +55821,13 @@ var ts;
startLexicalEnvironment();
var statements = [];
var statementOffset = ts.addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+ ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement, /*optional*/ true));
ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
ts.addRange(statements, endLexicalEnvironment());
addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
var updated = ts.updateSourceFileNode(node, ts.createNodeArray(statements, node.statements));
if (currentModuleInfo.hasExportStarsToExportValues) {
- ts.setEmitFlags(updated, 2 /* EmitExportStar */ | ts.getEmitFlags(node));
+ ts.addEmitHelper(updated, exportStarHelper);
}
return updated;
}
@@ -55119,8 +55847,7 @@ var ts;
* @param node The SourceFile node.
*/
function transformUMDModule(node) {
- var define = ts.createIdentifier("define");
- ts.setEmitFlags(define, 16 /* UMDDefine */);
+ var define = ts.createRawExpression(umdHelper);
return transformAsynchronousModule(node, define, /*moduleName*/ undefined, /*includeNonAmdDependencies*/ false);
}
/**
@@ -55217,7 +55944,7 @@ var ts;
if (includeNonAmdDependencies && importAliasName) {
// Set emitFlags on the name of the classDeclaration
// This is so that when printer will not substitute the identifier
- ts.setEmitFlags(importAliasName, 128 /* NoSubstitution */);
+ ts.setEmitFlags(importAliasName, 4 /* NoSubstitution */);
aliasedModuleNames.push(externalModuleName);
importAliasNames.push(ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, importAliasName));
}
@@ -55237,6 +55964,7 @@ var ts;
var statements = [];
var statementOffset = ts.addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
// Visit each statement of the module body.
+ ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement, /*optional*/ true));
ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
// End the lexical environment for the module body
// and merge any new lexical declarations.
@@ -55247,7 +55975,7 @@ var ts;
if (currentModuleInfo.hasExportStarsToExportValues) {
// If we have any `export * from ...` declarations
// we need to inform the emitter to add the __export helper.
- ts.setEmitFlags(body, 2 /* EmitExportStar */);
+ ts.addEmitHelper(body, exportStarHelper);
}
return body;
}
@@ -55264,13 +55992,13 @@ var ts;
if (emitAsReturn) {
var statement = ts.createReturn(currentModuleInfo.exportEquals.expression,
/*location*/ currentModuleInfo.exportEquals);
- ts.setEmitFlags(statement, 12288 /* NoTokenSourceMaps */ | 49152 /* NoComments */);
+ ts.setEmitFlags(statement, 384 /* NoTokenSourceMaps */ | 1536 /* NoComments */);
statements.push(statement);
}
else {
var statement = ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), currentModuleInfo.exportEquals.expression),
/*location*/ currentModuleInfo.exportEquals);
- ts.setEmitFlags(statement, 49152 /* NoComments */);
+ ts.setEmitFlags(statement, 1536 /* NoComments */);
statements.push(statement);
}
}
@@ -55299,9 +56027,9 @@ var ts;
return visitFunctionDeclaration(node);
case 226 /* ClassDeclaration */:
return visitClassDeclaration(node);
- case 294 /* MergeDeclarationMarker */:
+ case 295 /* MergeDeclarationMarker */:
return visitMergeDeclarationMarker(node);
- case 295 /* EndOfDeclarationMarker */:
+ case 296 /* EndOfDeclarationMarker */:
return visitEndOfDeclarationMarker(node);
default:
// This visitor does not descend into the tree, as export/import statements
@@ -55590,7 +56318,9 @@ var ts;
*/
function transformInitializedVariable(node) {
if (ts.isBindingPattern(node.name)) {
- return ts.flattenVariableDestructuringToExpression(node, hoistVariableDeclaration, createExportExpression);
+ return ts.flattenDestructuringAssignment(node,
+ /*visitor*/ undefined, context, 0 /* All */,
+ /*needsValue*/ false, createExportExpression);
}
else {
return ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("exports"), node.name,
@@ -55623,7 +56353,7 @@ var ts;
* @param node The node to test.
*/
function hasAssociatedEndOfDeclarationMarker(node) {
- return (ts.getEmitFlags(node) & 33554432 /* HasEndOfDeclarationMarker */) !== 0;
+ return (ts.getEmitFlags(node) & 2097152 /* HasEndOfDeclarationMarker */) !== 0;
}
/**
* Visits a DeclarationMarker used as a placeholder for the end of a transformed
@@ -55826,7 +56556,7 @@ var ts;
var statement = ts.createStatement(createExportExpression(name, value), location);
ts.startOnNewLine(statement);
if (!allowComments) {
- ts.setEmitFlags(statement, 49152 /* NoComments */);
+ ts.setEmitFlags(statement, 1536 /* NoComments */);
}
return statement;
}
@@ -55947,6 +56677,13 @@ var ts;
* @param node The node to substitute.
*/
function substituteExpressionIdentifier(node) {
+ if (ts.getEmitFlags(node) & 4096 /* HelperName */) {
+ var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
+ if (externalHelpersModuleName) {
+ return ts.createPropertyAccess(externalHelpersModuleName, node);
+ }
+ return node;
+ }
if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
if (exportContainer && exportContainer.kind === 261 /* SourceFile */) {
@@ -55960,8 +56697,8 @@ var ts;
/*location*/ node);
}
else if (ts.isImportSpecifier(importDeclaration)) {
- var name_36 = importDeclaration.propertyName || importDeclaration.name;
- return ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(name_36),
+ var name_37 = importDeclaration.propertyName || importDeclaration.name;
+ return ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(name_37),
/*location*/ node);
}
}
@@ -56057,6 +56794,14 @@ var ts;
var _a;
}
ts.transformModule = transformModule;
+ // emit output for the __export helper function
+ var exportStarHelper = {
+ name: "typescript:export-star",
+ scoped: true,
+ text: "\n function __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n }"
+ };
+ // emit output for the UMD helper function.
+ var umdHelper = "\n (function (dependencies, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define(dependencies, factory);\n }\n })";
})(ts || (ts = {}));
/// <reference path="visitor.ts" />
/// <reference path="transformers/ts.ts" />
@@ -56126,23 +56871,29 @@ var ts;
* @param transforms An array of Transformers.
*/
function transformFiles(resolver, host, sourceFiles, transformers) {
+ var enabledSyntaxKindFeatures = new Array(298 /* Count */);
+ var lexicalEnvironmentDisabled = false;
+ var lexicalEnvironmentVariableDeclarations;
+ var lexicalEnvironmentFunctionDeclarations;
var lexicalEnvironmentVariableDeclarationsStack = [];
var lexicalEnvironmentFunctionDeclarationsStack = [];
- var enabledSyntaxKindFeatures = new Array(296 /* Count */);
var lexicalEnvironmentStackOffset = 0;
- var hoistedVariableDeclarations;
- var hoistedFunctionDeclarations;
- var lexicalEnvironmentDisabled;
+ var lexicalEnvironmentSuspended = false;
+ var emitHelpers;
// The transformation context is provided to each transformer as part of transformer
// initialization.
var context = {
getCompilerOptions: function () { return host.getCompilerOptions(); },
getEmitResolver: function () { return resolver; },
getEmitHost: function () { return host; },
- hoistVariableDeclaration: hoistVariableDeclaration,
- hoistFunctionDeclaration: hoistFunctionDeclaration,
startLexicalEnvironment: startLexicalEnvironment,
+ suspendLexicalEnvironment: suspendLexicalEnvironment,
+ resumeLexicalEnvironment: resumeLexicalEnvironment,
endLexicalEnvironment: endLexicalEnvironment,
+ hoistVariableDeclaration: hoistVariableDeclaration,
+ hoistFunctionDeclaration: hoistFunctionDeclaration,
+ requestEmitHelper: requestEmitHelper,
+ readEmitHelpers: readEmitHelpers,
onSubstituteNode: function (_emitContext, node) { return node; },
enableSubstitution: enableSubstitution,
isSubstitutionEnabled: isSubstitutionEnabled,
@@ -56183,7 +56934,7 @@ var ts;
*/
function isSubstitutionEnabled(node) {
return (enabledSyntaxKindFeatures[node.kind] & 1 /* Substitution */) !== 0
- && (ts.getEmitFlags(node) & 128 /* NoSubstitution */) === 0;
+ && (ts.getEmitFlags(node) & 4 /* NoSubstitution */) === 0;
}
/**
* Emits a node with possible substitution.
@@ -56216,7 +56967,7 @@ var ts;
*/
function isEmitNotificationEnabled(node) {
return (enabledSyntaxKindFeatures[node.kind] & 2 /* EmitNotifications */) !== 0
- || (ts.getEmitFlags(node) & 64 /* AdviseOnEmitNode */) !== 0;
+ || (ts.getEmitFlags(node) & 2 /* AdviseOnEmitNode */) !== 0;
}
/**
* Emits a node with possible emit notification.
@@ -56241,11 +56992,11 @@ var ts;
function hoistVariableDeclaration(name) {
ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot modify the lexical environment during the print phase.");
var decl = ts.createVariableDeclaration(name);
- if (!hoistedVariableDeclarations) {
- hoistedVariableDeclarations = [decl];
+ if (!lexicalEnvironmentVariableDeclarations) {
+ lexicalEnvironmentVariableDeclarations = [decl];
}
else {
- hoistedVariableDeclarations.push(decl);
+ lexicalEnvironmentVariableDeclarations.push(decl);
}
}
/**
@@ -56253,11 +57004,11 @@ var ts;
*/
function hoistFunctionDeclaration(func) {
ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot modify the lexical environment during the print phase.");
- if (!hoistedFunctionDeclarations) {
- hoistedFunctionDeclarations = [func];
+ if (!lexicalEnvironmentFunctionDeclarations) {
+ lexicalEnvironmentFunctionDeclarations = [func];
}
else {
- hoistedFunctionDeclarations.push(func);
+ lexicalEnvironmentFunctionDeclarations.push(func);
}
}
/**
@@ -56266,15 +57017,28 @@ var ts;
*/
function startLexicalEnvironment() {
ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot start a lexical environment during the print phase.");
+ ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended.");
// Save the current lexical environment. Rather than resizing the array we adjust the
// stack size variable. This allows us to reuse existing array slots we've
// already allocated between transformations to avoid allocation and GC overhead during
// transformation.
- lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset] = hoistedVariableDeclarations;
- lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = hoistedFunctionDeclarations;
+ lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentVariableDeclarations;
+ lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFunctionDeclarations;
lexicalEnvironmentStackOffset++;
- hoistedVariableDeclarations = undefined;
- hoistedFunctionDeclarations = undefined;
+ lexicalEnvironmentVariableDeclarations = undefined;
+ lexicalEnvironmentFunctionDeclarations = undefined;
+ }
+ /** Suspends the current lexical environment, usually after visiting a parameter list. */
+ function suspendLexicalEnvironment() {
+ ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot suspend a lexical environment during the print phase.");
+ ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is already suspended.");
+ lexicalEnvironmentSuspended = true;
+ }
+ /** Resumes a suspended lexical environment, usually before visiting a function body. */
+ function resumeLexicalEnvironment() {
+ ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot resume a lexical environment during the print phase.");
+ ts.Debug.assert(lexicalEnvironmentSuspended, "Lexical environment is not suspended.");
+ lexicalEnvironmentSuspended = false;
}
/**
* Ends a lexical environment. The previous set of hoisted declarations are restored and
@@ -56282,14 +57046,15 @@ var ts;
*/
function endLexicalEnvironment() {
ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot end a lexical environment during the print phase.");
+ ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended.");
var statements;
- if (hoistedVariableDeclarations || hoistedFunctionDeclarations) {
- if (hoistedFunctionDeclarations) {
- statements = hoistedFunctionDeclarations.slice();
+ if (lexicalEnvironmentVariableDeclarations || lexicalEnvironmentFunctionDeclarations) {
+ if (lexicalEnvironmentFunctionDeclarations) {
+ statements = lexicalEnvironmentFunctionDeclarations.slice();
}
- if (hoistedVariableDeclarations) {
+ if (lexicalEnvironmentVariableDeclarations) {
var statement = ts.createVariableStatement(
- /*modifiers*/ undefined, ts.createVariableDeclarationList(hoistedVariableDeclarations));
+ /*modifiers*/ undefined, ts.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations));
if (!statements) {
statements = [statement];
}
@@ -56300,10 +57065,25 @@ var ts;
}
// Restore the previous lexical environment.
lexicalEnvironmentStackOffset--;
- hoistedVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset];
- hoistedFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset];
+ lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset];
+ lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset];
+ if (lexicalEnvironmentStackOffset === 0) {
+ lexicalEnvironmentVariableDeclarationsStack = [];
+ lexicalEnvironmentFunctionDeclarationsStack = [];
+ }
return statements;
}
+ function requestEmitHelper(helper) {
+ ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot modify the lexical environment during the print phase.");
+ ts.Debug.assert(!helper.scoped, "Cannot request a scoped emit helper.");
+ emitHelpers = ts.append(emitHelpers, helper);
+ }
+ function readEmitHelpers() {
+ ts.Debug.assert(!lexicalEnvironmentDisabled, "Cannot modify the lexical environment during the print phase.");
+ var helpers = emitHelpers;
+ emitHelpers = undefined;
+ return helpers;
+ }
}
ts.transformFiles = transformFiles;
var _a;
@@ -56528,12 +57308,12 @@ var ts;
var emitNode = node.emitNode;
var emitFlags = emitNode && emitNode.flags;
var _a = emitNode && emitNode.sourceMapRange || node, pos = _a.pos, end = _a.end;
- if (node.kind !== 292 /* NotEmittedStatement */
- && (emitFlags & 512 /* NoLeadingSourceMap */) === 0
+ if (node.kind !== 293 /* NotEmittedStatement */
+ && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
&& pos >= 0) {
emitPos(ts.skipTrivia(currentSourceText, pos));
}
- if (emitFlags & 2048 /* NoNestedSourceMaps */) {
+ if (emitFlags & 64 /* NoNestedSourceMaps */) {
disabled = true;
emitCallback(emitContext, node);
disabled = false;
@@ -56541,8 +57321,8 @@ var ts;
else {
emitCallback(emitContext, node);
}
- if (node.kind !== 292 /* NotEmittedStatement */
- && (emitFlags & 1024 /* NoTrailingSourceMap */) === 0
+ if (node.kind !== 293 /* NotEmittedStatement */
+ && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
&& end >= 0) {
emitPos(end);
}
@@ -56564,13 +57344,13 @@ var ts;
var emitFlags = emitNode && emitNode.flags;
var range = emitNode && emitNode.tokenSourceMapRanges && emitNode.tokenSourceMapRanges[token];
tokenPos = ts.skipTrivia(currentSourceText, range ? range.pos : tokenPos);
- if ((emitFlags & 4096 /* NoTokenLeadingSourceMaps */) === 0 && tokenPos >= 0) {
+ if ((emitFlags & 128 /* NoTokenLeadingSourceMaps */) === 0 && tokenPos >= 0) {
emitPos(tokenPos);
}
tokenPos = emitCallback(token, tokenPos);
if (range)
tokenPos = range.end;
- if ((emitFlags & 8192 /* NoTokenTrailingSourceMaps */) === 0 && tokenPos >= 0) {
+ if ((emitFlags & 256 /* NoTokenTrailingSourceMaps */) === 0 && tokenPos >= 0) {
emitPos(tokenPos);
}
return tokenPos;
@@ -56707,7 +57487,7 @@ var ts;
var emitFlags = ts.getEmitFlags(node);
if ((pos < 0 && end < 0) || (pos === end)) {
// Both pos and end are synthesized, so just emit the node without comments.
- if (emitFlags & 65536 /* NoNestedComments */) {
+ if (emitFlags & 2048 /* NoNestedComments */) {
disabled = true;
emitCallback(emitContext, node);
disabled = false;
@@ -56720,9 +57500,9 @@ var ts;
if (extendedDiagnostics) {
ts.performance.mark("preEmitNodeWithComment");
}
- var isEmittedNode = node.kind !== 292 /* NotEmittedStatement */;
- var skipLeadingComments = pos < 0 || (emitFlags & 16384 /* NoLeadingComments */) !== 0;
- var skipTrailingComments = end < 0 || (emitFlags & 32768 /* NoTrailingComments */) !== 0;
+ var isEmittedNode = node.kind !== 293 /* NotEmittedStatement */;
+ var skipLeadingComments = pos < 0 || (emitFlags & 512 /* NoLeadingComments */) !== 0;
+ var skipTrailingComments = end < 0 || (emitFlags & 1024 /* NoTrailingComments */) !== 0;
// Emit leading comments if the position is not synthesized and the node
// has not opted out from emitting leading comments.
if (!skipLeadingComments) {
@@ -56746,7 +57526,7 @@ var ts;
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "preEmitNodeWithComment");
}
- if (emitFlags & 65536 /* NoNestedComments */) {
+ if (emitFlags & 2048 /* NoNestedComments */) {
disabled = true;
emitCallback(emitContext, node);
disabled = false;
@@ -56778,15 +57558,15 @@ var ts;
}
var pos = detachedRange.pos, end = detachedRange.end;
var emitFlags = ts.getEmitFlags(node);
- var skipLeadingComments = pos < 0 || (emitFlags & 16384 /* NoLeadingComments */) !== 0;
- var skipTrailingComments = disabled || end < 0 || (emitFlags & 32768 /* NoTrailingComments */) !== 0;
+ var skipLeadingComments = pos < 0 || (emitFlags & 512 /* NoLeadingComments */) !== 0;
+ var skipTrailingComments = disabled || end < 0 || (emitFlags & 1024 /* NoTrailingComments */) !== 0;
if (!skipLeadingComments) {
emitDetachedCommentsAndUpdateCommentsInfo(detachedRange);
}
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "preEmitBodyWithDetachedComments");
}
- if (emitFlags & 65536 /* NoNestedComments */ && !disabled) {
+ if (emitFlags & 2048 /* NoNestedComments */ && !disabled) {
disabled = true;
emitCallback(node);
disabled = false;
@@ -57241,15 +58021,15 @@ var ts;
}
}
function emitLines(nodes) {
- for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
- var node = nodes_2[_i];
+ for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) {
+ var node = nodes_4[_i];
emit(node);
}
}
function emitSeparatedList(nodes, separator, eachNodeEmitFn, canEmitFn) {
var currentWriterPos = writer.getTextPos();
- for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
- var node = nodes_3[_i];
+ for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) {
+ var node = nodes_5[_i];
if (!canEmitFn || canEmitFn(node)) {
if (currentWriterPos !== writer.getTextPos()) {
write(separator);
@@ -57264,7 +58044,7 @@ var ts;
}
function writeJsDocComments(declaration) {
if (declaration) {
- var jsDocComments = ts.getJsDocCommentsFromText(declaration, currentText);
+ var jsDocComments = ts.getJSDocCommentRanges(declaration, currentText);
ts.emitNewLineBeforeLeadingComments(currentLineMap, writer, declaration, jsDocComments);
// jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space
ts.emitComments(currentText, currentLineMap, writer, jsDocComments, /*leadingSeparator*/ false, /*trailingSeparator*/ true, newLine, ts.writeCommentRange);
@@ -57459,9 +58239,9 @@ var ts;
var count = 0;
while (true) {
count++;
- var name_37 = baseName + "_" + count;
- if (!(name_37 in currentIdentifiers)) {
- return name_37;
+ var name_38 = baseName + "_" + count;
+ if (!(name_38 in currentIdentifiers)) {
+ return name_38;
}
}
}
@@ -57872,6 +58652,9 @@ var ts;
case 225 /* FunctionDeclaration */:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
+ case 228 /* TypeAliasDeclaration */:
+ diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
+ break;
default:
ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
}
@@ -57968,7 +58751,10 @@ var ts;
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
- emitHeritageClause(ts.getInterfaceBaseTypeNodes(node), /*isImplementsList*/ false);
+ var interfaceExtendsTypes = ts.filter(ts.getInterfaceBaseTypeNodes(node), function (base) { return ts.isEntityNameExpression(base.expression); });
+ if (interfaceExtendsTypes && interfaceExtendsTypes.length) {
+ emitHeritageClause(interfaceExtendsTypes, /*isImplementsList*/ false);
+ }
write(" {");
writeLine();
increaseIndent();
@@ -58619,87 +59405,6 @@ var ts;
function emitFiles(resolver, host, targetSourceFile, emitOnlyDtsFiles) {
var delimiters = createDelimiterMap();
var brackets = createBracketsMap();
- // emit output for the __extends helper function
- var extendsHelper = "\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};";
- // Emit output for the __assign helper function.
- // This is typically used for JSX spread attributes,
- // and can be used for object literal spread properties.
- var assignHelper = "\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};";
- var restHelper = "\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && !e.indexOf(p))\n t[p] = s[p];\n return t;\n};";
- // emit output for the __decorate helper function
- var decorateHelper = "\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};";
- // emit output for the __metadata helper function
- var metadataHelper = "\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};";
- // emit output for the __param helper function
- var paramHelper = "\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};";
- // emit output for the __awaiter helper function
- var awaiterHelper = "\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments)).next());\n });\n};";
- // The __generator helper is used by down-level transformations to emulate the runtime
- // semantics of an ES2015 generator function. When called, this helper returns an
- // object that implements the Iterator protocol, in that it has `next`, `return`, and
- // `throw` methods that step through the generator when invoked.
- //
- // parameters:
- // thisArg The value to use as the `this` binding for the transformed generator body.
- // body A function that acts as the transformed generator body.
- //
- // variables:
- // _ Persistent state for the generator that is shared between the helper and the
- // generator body. The state object has the following members:
- // sent() - A method that returns or throws the current completion value.
- // label - The next point at which to resume evaluation of the generator body.
- // trys - A stack of protected regions (try/catch/finally blocks).
- // ops - A stack of pending instructions when inside of a finally block.
- // f A value indicating whether the generator is executing.
- // y An iterator to delegate for a yield*.
- // t A temporary variable that holds one of the following values (note that these
- // cases do not overlap):
- // - The completion value when resuming from a `yield` or `yield*`.
- // - The error value for a catch block.
- // - The current protected region (array of try/catch/finally/end labels).
- // - The verb (`next`, `throw`, or `return` method) to delegate to the expression
- // of a `yield*`.
- // - The result of evaluating the verb delegated to the expression of a `yield*`.
- //
- // functions:
- // verb(n) Creates a bound callback to the `step` function for opcode `n`.
- // step(op) Evaluates opcodes in a generator body until execution is suspended or
- // completed.
- //
- // The __generator helper understands a limited set of instructions:
- // 0: next(value?) - Start or resume the generator with the specified value.
- // 1: throw(error) - Resume the generator with an exception. If the generator is
- // suspended inside of one or more protected regions, evaluates
- // any intervening finally blocks between the current label and
- // the nearest catch block or function boundary. If uncaught, the
- // exception is thrown to the caller.
- // 2: return(value?) - Resume the generator as if with a return. If the generator is
- // suspended inside of one or more protected regions, evaluates any
- // intervening finally blocks.
- // 3: break(label) - Jump to the specified label. If the label is outside of the
- // current protected region, evaluates any intervening finally
- // blocks.
- // 4: yield(value?) - Yield execution to the caller with an optional value. When
- // resumed, the generator will continue at the next label.
- // 5: yield*(value) - Delegates evaluation to the supplied iterator. When
- // delegation completes, the generator will continue at the next
- // label.
- // 6: catch(error) - Handles an exception thrown from within the generator body. If
- // the current label is inside of one or more protected regions,
- // evaluates any intervening finally blocks between the current
- // label and the nearest catch block or function boundary. If
- // uncaught, the exception is thrown to the caller.
- // 7: endfinally - Ends a finally block, resuming the last instruction prior to
- // entering a finally block.
- //
- // For examples of how these are used, see the comments in ./transformers/generators.ts
- var generatorHelper = "\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t;\n return { next: verb(0), \"throw\": verb(1), \"return\": verb(2) };\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};";
- // emit output for the __export helper function
- var exportStarHelper = "\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}";
- // emit output for the UMD helper function.
- var umdHelper = "\n(function (dependencies, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define(dependencies, factory);\n }\n})";
- var superHelper = "\nconst _super = name => super[name];";
- var advancedSuperHelper = "\nconst _super = (function (geti, seti) {\n const cache = Object.create(null);\n return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n})(name => super[name], (name, value) => super[name] = value);";
var compilerOptions = host.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var moduleKind = ts.getEmitModuleKind(compilerOptions);
@@ -58721,12 +59426,7 @@ var ts;
var currentSourceFile;
var currentText;
var currentFileIdentifiers;
- var extendsEmitted;
- var assignEmitted;
- var restEmitted;
- var decorateEmitted;
- var paramEmitted;
- var awaiterEmitted;
+ var bundledHelpers;
var isOwnFileEmit;
var emitSkipped = false;
var sourceFiles = ts.getSourceFilesToEmit(host, targetSourceFile);
@@ -58779,12 +59479,13 @@ var ts;
nodeIdToGeneratedName = [];
autoGeneratedIdToGeneratedName = [];
generatedNameSet = ts.createMap();
+ bundledHelpers = isBundledEmit ? ts.createMap() : undefined;
isOwnFileEmit = !isBundledEmit;
// Emit helpers from all the files
if (isBundledEmit && moduleKind) {
for (var _a = 0, sourceFiles_5 = sourceFiles; _a < sourceFiles_5.length; _a++) {
var sourceFile = sourceFiles_5[_a];
- emitEmitHelpers(sourceFile);
+ emitHelpers(sourceFile, /*isBundle*/ true);
}
}
// Print each transformed source file.
@@ -58796,14 +59497,14 @@ var ts;
}
// Write the source map
if (compilerOptions.sourceMap && !compilerOptions.inlineSourceMap) {
- ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, sourceMap.getText(), /*writeByteOrderMark*/ false);
+ ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, sourceMap.getText(), /*writeByteOrderMark*/ false, sourceFiles);
}
// Record source map data for the test harness.
if (sourceMapDataList) {
sourceMapDataList.push(sourceMap.getSourceMapData());
}
// Write the output file
- ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), compilerOptions.emitBOM);
+ ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), compilerOptions.emitBOM, sourceFiles);
// Reset state
sourceMap.reset();
comments.reset();
@@ -58811,11 +59512,6 @@ var ts;
tempFlags = 0 /* Auto */;
currentSourceFile = undefined;
currentText = undefined;
- extendsEmitted = false;
- assignEmitted = false;
- decorateEmitted = false;
- paramEmitted = false;
- awaiterEmitted = false;
isOwnFileEmit = false;
}
function printSourceFile(node) {
@@ -59279,8 +59975,10 @@ var ts;
case 247 /* JsxSelfClosingElement */:
return emitJsxSelfClosingElement(node);
// Transformation nodes
- case 293 /* PartiallyEmittedExpression */:
+ case 294 /* PartiallyEmittedExpression */:
return emitPartiallyEmittedExpression(node);
+ case 297 /* RawExpression */:
+ return writeLines(node.text);
}
}
//
@@ -59313,12 +60011,7 @@ var ts;
// Identifiers
//
function emitIdentifier(node) {
- if (ts.getEmitFlags(node) & 16 /* UMDDefine */) {
- writeLines(umdHelper);
- }
- else {
- write(getTextOfNode(node, /*includeTrivia*/ false));
- }
+ write(getTextOfNode(node, /*includeTrivia*/ false));
}
//
// Names
@@ -59579,7 +60272,7 @@ var ts;
write("{}");
}
else {
- var indentedFlag = ts.getEmitFlags(node) & 524288 /* Indented */;
+ var indentedFlag = ts.getEmitFlags(node) & 32768 /* Indented */;
if (indentedFlag) {
increaseIndent();
}
@@ -59594,7 +60287,7 @@ var ts;
function emitPropertyAccessExpression(node) {
var indentBeforeDot = false;
var indentAfterDot = false;
- if (!(ts.getEmitFlags(node) & 1048576 /* NoIndentation */)) {
+ if (!(ts.getEmitFlags(node) & 65536 /* NoIndentation */)) {
var dotRangeStart = node.expression.end;
var dotRangeEnd = ts.skipTrivia(currentText, node.expression.end) + 1;
var dotToken = { kind: 22 /* DotToken */, pos: dotRangeStart, end: dotRangeEnd };
@@ -59801,7 +60494,7 @@ var ts;
}
}
function emitBlockStatements(node) {
- if (ts.getEmitFlags(node) & 32 /* SingleLine */) {
+ if (ts.getEmitFlags(node) & 1 /* SingleLine */) {
emitList(node, node.statements, 384 /* SingleLineBlockStatements */);
}
else {
@@ -59980,11 +60673,11 @@ var ts;
var body = node.body;
if (body) {
if (ts.isBlock(body)) {
- var indentedFlag = ts.getEmitFlags(node) & 524288 /* Indented */;
+ var indentedFlag = ts.getEmitFlags(node) & 32768 /* Indented */;
if (indentedFlag) {
increaseIndent();
}
- if (ts.getEmitFlags(node) & 4194304 /* ReuseTempVariableScope */) {
+ if (ts.getEmitFlags(node) & 262144 /* ReuseTempVariableScope */) {
emitSignatureHead(node);
emitBlockFunctionBody(body);
}
@@ -60022,7 +60715,7 @@ var ts;
// * The body is explicitly marked as multi-line.
// * A non-synthesized body's start and end position are on different lines.
// * Any statement in the body starts on a new line.
- if (ts.getEmitFlags(body) & 32 /* SingleLine */) {
+ if (ts.getEmitFlags(body) & 1 /* SingleLine */) {
return true;
}
if (body.multiLine) {
@@ -60078,7 +60771,7 @@ var ts;
emitModifiers(node, node.modifiers);
write("class");
emitNodeWithPrefix(" ", node.name, emitIdentifierName);
- var indentedFlag = ts.getEmitFlags(node) & 524288 /* Indented */;
+ var indentedFlag = ts.getEmitFlags(node) & 32768 /* Indented */;
if (indentedFlag) {
increaseIndent();
}
@@ -60358,7 +61051,7 @@ var ts;
// "comment1" is not considered to be leading comment for node.initializer
// but rather a trailing comment on the previous node.
var initializer = node.initializer;
- if ((ts.getEmitFlags(initializer) & 16384 /* NoLeadingComments */) === 0) {
+ if ((ts.getEmitFlags(initializer) & 512 /* NoLeadingComments */) === 0) {
var commentRange = ts.getCommentRange(initializer);
emitTrailingCommentsOfPosition(commentRange.pos);
}
@@ -60424,78 +61117,37 @@ var ts;
}
return statements.length;
}
- function emitHelpers(node) {
- var emitFlags = ts.getEmitFlags(node);
+ function emitHelpers(node, isBundle) {
+ var sourceFile = ts.isSourceFile(node) ? node : currentSourceFile;
+ var shouldSkip = compilerOptions.noEmitHelpers || (sourceFile && ts.getExternalHelpersModuleName(sourceFile) !== undefined);
+ var shouldBundle = ts.isSourceFile(node) && !isOwnFileEmit;
var helpersEmitted = false;
- if (emitFlags & 1 /* EmitEmitHelpers */) {
- helpersEmitted = emitEmitHelpers(currentSourceFile);
- }
- if (emitFlags & 2 /* EmitExportStar */) {
- writeLines(exportStarHelper);
- helpersEmitted = true;
- }
- if (emitFlags & 4 /* EmitSuperHelper */) {
- writeLines(superHelper);
- helpersEmitted = true;
- }
- if (emitFlags & 8 /* EmitAdvancedSuperHelper */) {
- writeLines(advancedSuperHelper);
- helpersEmitted = true;
- }
- return helpersEmitted;
- }
- function emitEmitHelpers(node) {
- // Only emit helpers if the user did not say otherwise.
- if (compilerOptions.noEmitHelpers) {
- return false;
- }
- // Don't emit helpers if we can import them.
- if (compilerOptions.importHelpers
- && (ts.isExternalModule(node) || compilerOptions.isolatedModules)) {
- return false;
- }
- var helpersEmitted = false;
- // Only Emit __extends function when target ES5.
- // For target ES6 and above, we can emit classDeclaration as is.
- if ((languageVersion < 2 /* ES2015 */) && (!extendsEmitted && node.flags & 1024 /* HasClassExtends */)) {
- writeLines(extendsHelper);
- extendsEmitted = true;
- helpersEmitted = true;
- }
- if ((languageVersion < 5 /* ESNext */ || currentSourceFile.scriptKind === 2 /* JSX */ || currentSourceFile.scriptKind === 4 /* TSX */) &&
- compilerOptions.jsx !== 1 /* Preserve */ &&
- !assignEmitted &&
- node.flags & 16384 /* HasSpreadAttribute */) {
- writeLines(assignHelper);
- assignEmitted = true;
- }
- if (languageVersion < 5 /* ESNext */ && !restEmitted && node.flags & 32768 /* HasRestAttribute */) {
- writeLines(restHelper);
- restEmitted = true;
- }
- if (!decorateEmitted && node.flags & 2048 /* HasDecorators */) {
- writeLines(decorateHelper);
- if (compilerOptions.emitDecoratorMetadata) {
- writeLines(metadataHelper);
- }
- decorateEmitted = true;
- helpersEmitted = true;
- }
- if (!paramEmitted && node.flags & 4096 /* HasParamDecorators */) {
- writeLines(paramHelper);
- paramEmitted = true;
- helpersEmitted = true;
- }
- // Only emit __awaiter function when target ES5/ES6.
- // Only emit __generator function when target ES5.
- // For target ES2017 and above, we can emit async/await as is.
- if ((languageVersion < 4 /* ES2017 */) && (!awaiterEmitted && node.flags & 8192 /* HasAsyncFunctions */)) {
- writeLines(awaiterHelper);
- if (languageVersion < 2 /* ES2015 */) {
- writeLines(generatorHelper);
+ var helpers = ts.getEmitHelpers(node);
+ if (helpers) {
+ for (var _a = 0, _b = ts.stableSort(helpers, ts.compareEmitHelpers); _a < _b.length; _a++) {
+ var helper = _b[_a];
+ if (!helper.scoped) {
+ // Skip the helper if it can be skipped and the noEmitHelpers compiler
+ // option is set, or if it can be imported and the importHelpers compiler
+ // option is set.
+ if (shouldSkip)
+ continue;
+ // Skip the helper if it can be bundled but hasn't already been emitted and we
+ // are emitting a bundled module.
+ if (shouldBundle) {
+ if (bundledHelpers[helper.name]) {
+ continue;
+ }
+ bundledHelpers[helper.name] = true;
+ }
+ }
+ else if (isBundle) {
+ // Skip the helper if it is scoped and we are emitting bundled helpers
+ continue;
+ }
+ writeLines(helper.text);
+ helpersEmitted = true;
}
- awaiterEmitted = true;
- helpersEmitted = true;
}
if (helpersEmitted) {
writeLine();
@@ -60503,9 +61155,10 @@ var ts;
return helpersEmitted;
}
function writeLines(text) {
- var lines = text.split(/\r\n|\r|\n/g);
+ var lines = text.split(/\r\n?|\n/g);
+ var indentation = guessIndentation(lines);
for (var i = 0; i < lines.length; i++) {
- var line = lines[i];
+ var line = indentation ? lines[i].slice(indentation) : lines[i];
if (line.length) {
if (i > 0) {
writeLine();
@@ -60514,6 +61167,21 @@ var ts;
}
}
}
+ function guessIndentation(lines) {
+ var indentation;
+ for (var _a = 0, lines_1 = lines; _a < lines_1.length; _a++) {
+ var line = lines_1[_a];
+ for (var i = 0; i < line.length && (indentation === undefined || i < indentation); i++) {
+ if (!ts.isWhiteSpace(line.charCodeAt(i))) {
+ if (indentation === undefined || i < indentation) {
+ indentation = i;
+ break;
+ }
+ }
+ }
+ }
+ return indentation;
+ }
//
// Helpers
//
@@ -60881,10 +61549,10 @@ var ts;
*/
function makeTempVariableName(flags) {
if (flags && !(tempFlags & flags)) {
- var name_38 = flags === 268435456 /* _i */ ? "_i" : "_n";
- if (isUniqueName(name_38)) {
+ var name_39 = flags === 268435456 /* _i */ ? "_i" : "_n";
+ if (isUniqueName(name_39)) {
tempFlags |= flags;
- return name_38;
+ return name_39;
}
}
while (true) {
@@ -60892,11 +61560,11 @@ var ts;
tempFlags++;
// Skip over 'i' and 'n'
if (count !== 8 && count !== 13) {
- var name_39 = count < 26
+ var name_40 = count < 26
? "_" + String.fromCharCode(97 /* a */ + count)
: "_" + (count - 26);
- if (isUniqueName(name_39)) {
- return name_39;
+ if (isUniqueName(name_40)) {
+ return name_40;
}
}
}
@@ -61121,8 +61789,6 @@ var ts;
/// <reference path="core.ts" />
var ts;
(function (ts) {
- /** The version of the TypeScript compiler release */
- ts.version = "2.2.0-dev.20161115";
var emptyArray = [];
function findConfigFile(searchPath, fileExists, configName) {
if (configName === void 0) { configName = "tsconfig.json"; }
@@ -61349,10 +62015,10 @@ var ts;
var resolutions = [];
var cache = ts.createMap();
for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {
- var name_40 = names_1[_i];
- var result = name_40 in cache
- ? cache[name_40]
- : cache[name_40] = loader(name_40, containingFile);
+ var name_41 = names_1[_i];
+ var result = name_41 in cache
+ ? cache[name_41]
+ : cache[name_41] = loader(name_41, containingFile);
resolutions.push(result);
}
return resolutions;
@@ -61422,7 +62088,8 @@ var ts;
var typeReferences = ts.getAutomaticTypeDirectiveNames(options, host);
if (typeReferences.length) {
// This containingFilename needs to match with the one used in managed-side
- var containingFilename = ts.combinePaths(host.getCurrentDirectory(), "__inferred type names__.ts");
+ var containingDirectory = options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : host.getCurrentDirectory();
+ var containingFilename = ts.combinePaths(containingDirectory, "__inferred type names__.ts");
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename);
for (var i = 0; i < typeReferences.length; i++) {
processTypeReferenceDirective(typeReferences[i], resolutions[i]);
@@ -62003,8 +62670,8 @@ var ts;
}
break;
}
- for (var _b = 0, nodes_4 = nodes; _b < nodes_4.length; _b++) {
- var node = nodes_4[_b];
+ for (var _b = 0, nodes_6 = nodes; _b < nodes_6.length; _b++) {
+ var node = nodes_6[_b];
walk(node);
}
}
@@ -63108,12 +63775,19 @@ var ts;
}
];
/* @internal */
- ts.typingOptionDeclarations = [
+ ts.typeAcquisitionDeclarations = [
{
+ /* @deprecated typingOptions.enableAutoDiscovery
+ * Use typeAcquisition.enable instead.
+ */
name: "enableAutoDiscovery",
type: "boolean",
},
{
+ name: "enable",
+ type: "boolean",
+ },
+ {
name: "include",
type: "list",
element: {
@@ -63139,6 +63813,20 @@ var ts;
};
var optionNameMapCache;
/* @internal */
+ function convertEnableAutoDiscoveryToEnable(typeAcquisition) {
+ // Convert deprecated typingOptions.enableAutoDiscovery to typeAcquisition.enable
+ if (typeAcquisition && typeAcquisition.enableAutoDiscovery !== undefined && typeAcquisition.enable === undefined) {
+ var result = {
+ enable: typeAcquisition.enableAutoDiscovery,
+ include: typeAcquisition.include || [],
+ exclude: typeAcquisition.exclude || []
+ };
+ return result;
+ }
+ return typeAcquisition;
+ }
+ ts.convertEnableAutoDiscoveryToEnable = convertEnableAutoDiscoveryToEnable;
+ /* @internal */
function getOptionNameMap() {
if (optionNameMapCache) {
return optionNameMapCache;
@@ -63379,11 +64067,11 @@ var ts;
function serializeCompilerOptions(options) {
var result = ts.createMap();
var optionsNameMap = getOptionNameMap().optionNameMap;
- for (var name_41 in options) {
- if (ts.hasProperty(options, name_41)) {
+ for (var name_42 in options) {
+ if (ts.hasProperty(options, name_42)) {
// tsconfig only options cannot be specified via command line,
// so we can assume that only types that can appear here string | number | boolean
- switch (name_41) {
+ switch (name_42) {
case "init":
case "watch":
case "version":
@@ -63391,14 +64079,14 @@ var ts;
case "project":
break;
default:
- var value = options[name_41];
- var optionDefinition = optionsNameMap[name_41.toLowerCase()];
+ var value = options[name_42];
+ var optionDefinition = optionsNameMap[name_42.toLowerCase()];
if (optionDefinition) {
var customTypeMap = getCustomTypeMapOfCommandLineOption(optionDefinition);
if (!customTypeMap) {
// There is no map associated with this compiler option then use the value as-is
// This is the case if the value is expect to be string, number, boolean or list of string
- result[name_41] = value;
+ result[name_42] = value;
}
else {
if (optionDefinition.type === "list") {
@@ -63407,11 +64095,11 @@ var ts;
var element = _a[_i];
convertedValue.push(getNameOfCompilerOptionValue(element, customTypeMap));
}
- result[name_41] = convertedValue;
+ result[name_42] = convertedValue;
}
else {
// There is a typeMap associated with this command-line option so use it to map value back to its name
- result[name_41] = getNameOfCompilerOptionValue(value, customTypeMap);
+ result[name_42] = getNameOfCompilerOptionValue(value, customTypeMap);
}
}
}
@@ -63464,14 +64152,17 @@ var ts;
return {
options: {},
fileNames: [],
- typingOptions: {},
+ typeAcquisition: {},
raw: json,
errors: [ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, resolutionStack.concat([resolvedPath]).join(" -> "))],
wildcardDirectories: {}
};
}
var options = convertCompilerOptionsFromJsonWorker(json["compilerOptions"], basePath, errors, configFileName);
- var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName);
+ // typingOptions has been deprecated and is only supported for backward compatibility purposes.
+ // It should be removed in future releases - use typeAcquisition instead.
+ var jsonOptions = json["typeAcquisition"] || json["typingOptions"];
+ var typeAcquisition = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName);
if (json["extends"]) {
var _a = [undefined, undefined, undefined, {}], include = _a[0], exclude = _a[1], files = _a[2], baseOptions = _a[3];
if (typeof json["extends"] === "string") {
@@ -63498,7 +64189,7 @@ var ts;
return {
options: options,
fileNames: fileNames,
- typingOptions: typingOptions,
+ typeAcquisition: typeAcquisition,
raw: json,
errors: errors,
wildcardDirectories: wildcardDirectories,
@@ -63507,7 +64198,7 @@ var ts;
function tryExtendsName(extendedConfig) {
// If the path isn't a rooted or relative path, don't try to resolve it (we reserve the right to special case module-id like paths in the future)
if (!(ts.isRootedDiskPath(extendedConfig) || ts.startsWith(ts.normalizeSlashes(extendedConfig), "./") || ts.startsWith(ts.normalizeSlashes(extendedConfig), "../"))) {
- errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.The_path_in_an_extends_options_must_be_relative_or_rooted));
+ errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extendedConfig));
return;
}
var extendedConfigPath = ts.toPath(extendedConfig, basePath, getCanonicalFileName);
@@ -63571,8 +64262,8 @@ var ts;
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
}
else {
- // By default, exclude common package folders and the outDir
- excludeSpecs = ["node_modules", "bower_components", "jspm_packages"];
+ // If no includes were specified, exclude common package folders and the outDir
+ excludeSpecs = includeSpecs ? [] : ["node_modules", "bower_components", "jspm_packages"];
var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"];
if (outDir) {
excludeSpecs.push(outDir);
@@ -63607,12 +64298,12 @@ var ts;
return { options: options, errors: errors };
}
ts.convertCompilerOptionsFromJson = convertCompilerOptionsFromJson;
- function convertTypingOptionsFromJson(jsonOptions, basePath, configFileName) {
+ function convertTypeAcquisitionFromJson(jsonOptions, basePath, configFileName) {
var errors = [];
- var options = convertTypingOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName);
+ var options = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName);
return { options: options, errors: errors };
}
- ts.convertTypingOptionsFromJson = convertTypingOptionsFromJson;
+ ts.convertTypeAcquisitionFromJson = convertTypeAcquisitionFromJson;
function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
var options = ts.getBaseFileName(configFileName) === "jsconfig.json"
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true }
@@ -63620,9 +64311,10 @@ var ts;
convertOptionsFromJson(ts.optionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_compiler_option_0, errors);
return options;
}
- function convertTypingOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
- var options = { enableAutoDiscovery: ts.getBaseFileName(configFileName) === "jsconfig.json", include: [], exclude: [] };
- convertOptionsFromJson(ts.typingOptionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_typing_option_0, errors);
+ function convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
+ var options = { enable: ts.getBaseFileName(configFileName) === "jsconfig.json", include: [], exclude: [] };
+ var typeAcquisition = convertEnableAutoDiscoveryToEnable(jsonOptions);
+ convertOptionsFromJson(ts.typeAcquisitionDeclarations, typeAcquisition, basePath, options, ts.Diagnostics.Unknown_type_acquisition_option_0, errors);
return options;
}
function convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, defaultOptions, diagnosticMessage, errors) {
@@ -64527,7 +65219,7 @@ var ts;
case 243 /* ExportSpecifier */:
case 237 /* NamespaceImport */:
return ts.ScriptElementKind.alias;
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
return ts.ScriptElementKind.typeElement;
default:
return ts.ScriptElementKind.unknown;
@@ -64763,7 +65455,7 @@ var ts;
// for the position of the relevant node (or comma).
var syntaxList = ts.forEach(node.parent.getChildren(), function (c) {
// find syntax list that covers the span of the node
- if (c.kind === 291 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) {
+ if (c.kind === 292 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) {
return c;
}
});
@@ -65073,11 +65765,11 @@ var ts;
}
}
if (node) {
- if (node.jsDocComments) {
- for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) {
- var jsDocComment = _a[_i];
- if (jsDocComment.tags) {
- for (var _b = 0, _c = jsDocComment.tags; _b < _c.length; _b++) {
+ if (node.jsDoc) {
+ for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
+ var jsDoc = _a[_i];
+ if (jsDoc.tags) {
+ for (var _b = 0, _c = jsDoc.tags; _b < _c.length; _b++) {
var tag = _c[_b];
if (tag.pos <= position && position <= tag.end) {
return tag;
@@ -65416,7 +66108,7 @@ var ts;
if (isImportOrExportSpecifierName(location)) {
return location.getText();
}
- else if (ts.isStringOrNumericLiteral(location.kind) &&
+ else if (ts.isStringOrNumericLiteral(location) &&
location.parent.kind === 142 /* ComputedPropertyName */) {
return location.text;
}
@@ -66153,16 +66845,16 @@ var ts;
pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18 /* docCommentTagName */);
pos = tag.tagName.end;
switch (tag.kind) {
- case 280 /* JSDocParameterTag */:
+ case 281 /* JSDocParameterTag */:
processJSDocParameterTag(tag);
break;
- case 283 /* JSDocTemplateTag */:
+ case 284 /* JSDocTemplateTag */:
processJSDocTemplateTag(tag);
break;
- case 282 /* JSDocTypeTag */:
+ case 283 /* JSDocTypeTag */:
processElement(tag.typeExpression);
break;
- case 281 /* JSDocReturnTag */:
+ case 282 /* JSDocReturnTag */:
processElement(tag.typeExpression);
break;
}
@@ -66440,14 +67132,14 @@ var ts;
function getJavaScriptCompletionEntries(sourceFile, position, uniqueNames) {
var entries = [];
var nameTable = ts.getNameTable(sourceFile);
- for (var name_42 in nameTable) {
+ for (var name_43 in nameTable) {
// Skip identifiers produced only from the current location
- if (nameTable[name_42] === position) {
+ if (nameTable[name_43] === position) {
continue;
}
- if (!uniqueNames[name_42]) {
- uniqueNames[name_42] = name_42;
- var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_42), compilerOptions.target, /*performCharacterChecks*/ true);
+ if (!uniqueNames[name_43]) {
+ uniqueNames[name_43] = name_43;
+ var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_43), compilerOptions.target, /*performCharacterChecks*/ true);
if (displayName) {
var entry = {
name: displayName,
@@ -66960,11 +67652,11 @@ var ts;
if (currentConfigPath) {
paths.push(currentConfigPath);
currentDir = ts.getDirectoryPath(currentConfigPath);
- var parent_14 = ts.getDirectoryPath(currentDir);
- if (currentDir === parent_14) {
+ var parent_13 = ts.getDirectoryPath(currentDir);
+ if (currentDir === parent_13) {
break;
}
- currentDir = parent_14;
+ currentDir = parent_13;
}
else {
break;
@@ -67045,14 +67737,14 @@ var ts;
// Compute all the completion symbols again.
var completionData = getCompletionData(typeChecker, log, sourceFile, position);
if (completionData) {
- var symbols = completionData.symbols, location_2 = completionData.location;
+ var symbols = completionData.symbols, location_3 = completionData.location;
// Find the symbol with the matching entry name.
// We don't need to perform character checks here because we're only comparing the
// name against 'entryName' (which is known to be good), not building a new
// completion entry.
- var symbol = ts.forEach(symbols, function (s) { return getCompletionEntryDisplayNameForSymbol(typeChecker, s, compilerOptions.target, /*performCharacterChecks*/ false, location_2) === entryName ? s : undefined; });
+ var symbol = ts.forEach(symbols, function (s) { return getCompletionEntryDisplayNameForSymbol(typeChecker, s, compilerOptions.target, /*performCharacterChecks*/ false, location_3) === entryName ? s : undefined; });
if (symbol) {
- var _a = ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, location_2, location_2, 7 /* All */), displayParts = _a.displayParts, documentation = _a.documentation, symbolKind = _a.symbolKind;
+ var _a = ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, location_3, location_3, 7 /* All */), displayParts = _a.displayParts, documentation = _a.documentation, symbolKind = _a.symbolKind;
return {
name: entryName,
kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol),
@@ -67080,12 +67772,12 @@ var ts;
// Compute all the completion symbols again.
var completionData = getCompletionData(typeChecker, log, sourceFile, position);
if (completionData) {
- var symbols = completionData.symbols, location_3 = completionData.location;
+ var symbols = completionData.symbols, location_4 = completionData.location;
// Find the symbol with the matching entry name.
// We don't need to perform character checks here because we're only comparing the
// name against 'entryName' (which is known to be good), not building a new
// completion entry.
- return ts.forEach(symbols, function (s) { return getCompletionEntryDisplayNameForSymbol(typeChecker, s, compilerOptions.target, /*performCharacterChecks*/ false, location_3) === entryName ? s : undefined; });
+ return ts.forEach(symbols, function (s) { return getCompletionEntryDisplayNameForSymbol(typeChecker, s, compilerOptions.target, /*performCharacterChecks*/ false, location_4) === entryName ? s : undefined; });
}
return undefined;
}
@@ -67116,9 +67808,9 @@ var ts;
isJsDocTagName = true;
}
switch (tag.kind) {
- case 282 /* JSDocTypeTag */:
- case 280 /* JSDocParameterTag */:
- case 281 /* JSDocReturnTag */:
+ case 283 /* JSDocTypeTag */:
+ case 281 /* JSDocParameterTag */:
+ case 282 /* JSDocReturnTag */:
var tagWithExpression = tag;
if (tagWithExpression.typeExpression) {
insideJsDocTagExpression = tagWithExpression.typeExpression.pos < position && position < tagWithExpression.typeExpression.end;
@@ -67163,13 +67855,13 @@ var ts;
log("Returning an empty list because completion was requested in an invalid position.");
return undefined;
}
- var parent_15 = contextToken.parent, kind = contextToken.kind;
+ var parent_14 = contextToken.parent, kind = contextToken.kind;
if (kind === 22 /* DotToken */) {
- if (parent_15.kind === 177 /* PropertyAccessExpression */) {
+ if (parent_14.kind === 177 /* PropertyAccessExpression */) {
node = contextToken.parent.expression;
isRightOfDot = true;
}
- else if (parent_15.kind === 141 /* QualifiedName */) {
+ else if (parent_14.kind === 141 /* QualifiedName */) {
node = contextToken.parent.left;
isRightOfDot = true;
}
@@ -67556,9 +68248,9 @@ var ts;
switch (contextToken.kind) {
case 16 /* OpenBraceToken */: // const x = { |
case 25 /* CommaToken */:
- var parent_16 = contextToken.parent;
- if (parent_16 && (parent_16.kind === 176 /* ObjectLiteralExpression */ || parent_16.kind === 172 /* ObjectBindingPattern */)) {
- return parent_16;
+ var parent_15 = contextToken.parent;
+ if (parent_15 && (parent_15.kind === 176 /* ObjectLiteralExpression */ || parent_15.kind === 172 /* ObjectBindingPattern */)) {
+ return parent_15;
}
break;
}
@@ -67585,37 +68277,37 @@ var ts;
}
function tryGetContainingJsxElement(contextToken) {
if (contextToken) {
- var parent_17 = contextToken.parent;
+ var parent_16 = contextToken.parent;
switch (contextToken.kind) {
case 27 /* LessThanSlashToken */:
case 40 /* SlashToken */:
case 70 /* Identifier */:
case 250 /* JsxAttribute */:
case 251 /* JsxSpreadAttribute */:
- if (parent_17 && (parent_17.kind === 247 /* JsxSelfClosingElement */ || parent_17.kind === 248 /* JsxOpeningElement */)) {
- return parent_17;
+ if (parent_16 && (parent_16.kind === 247 /* JsxSelfClosingElement */ || parent_16.kind === 248 /* JsxOpeningElement */)) {
+ return parent_16;
}
- else if (parent_17.kind === 250 /* JsxAttribute */) {
- return parent_17.parent;
+ else if (parent_16.kind === 250 /* JsxAttribute */) {
+ return parent_16.parent;
}
break;
// The context token is the closing } or " of an attribute, which means
// its parent is a JsxExpression, whose parent is a JsxAttribute,
// whose parent is a JsxOpeningLikeElement
case 9 /* StringLiteral */:
- if (parent_17 && ((parent_17.kind === 250 /* JsxAttribute */) || (parent_17.kind === 251 /* JsxSpreadAttribute */))) {
- return parent_17.parent;
+ if (parent_16 && ((parent_16.kind === 250 /* JsxAttribute */) || (parent_16.kind === 251 /* JsxSpreadAttribute */))) {
+ return parent_16.parent;
}
break;
case 17 /* CloseBraceToken */:
- if (parent_17 &&
- parent_17.kind === 252 /* JsxExpression */ &&
- parent_17.parent &&
- (parent_17.parent.kind === 250 /* JsxAttribute */)) {
- return parent_17.parent.parent;
+ if (parent_16 &&
+ parent_16.kind === 252 /* JsxExpression */ &&
+ parent_16.parent &&
+ (parent_16.parent.kind === 250 /* JsxAttribute */)) {
+ return parent_16.parent.parent;
}
- if (parent_17 && parent_17.kind === 251 /* JsxSpreadAttribute */) {
- return parent_17.parent;
+ if (parent_16 && parent_16.kind === 251 /* JsxSpreadAttribute */) {
+ return parent_16.parent;
}
break;
}
@@ -67752,8 +68444,8 @@ var ts;
if (element.getStart() <= position && position <= element.getEnd()) {
continue;
}
- var name_43 = element.propertyName || element.name;
- existingImportsOrExports[name_43.text] = true;
+ var name_44 = element.propertyName || element.name;
+ existingImportsOrExports[name_44.text] = true;
}
if (!ts.someProperties(existingImportsOrExports)) {
return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; });
@@ -68112,19 +68804,19 @@ var ts;
function getThrowStatementOwner(throwStatement) {
var child = throwStatement;
while (child.parent) {
- var parent_18 = child.parent;
- if (ts.isFunctionBlock(parent_18) || parent_18.kind === 261 /* SourceFile */) {
- return parent_18;
+ var parent_17 = child.parent;
+ if (ts.isFunctionBlock(parent_17) || parent_17.kind === 261 /* SourceFile */) {
+ return parent_17;
}
// A throw-statement is only owned by a try-statement if the try-statement has
// a catch clause, and if the throw-statement occurs within the try block.
- if (parent_18.kind === 221 /* TryStatement */) {
- var tryStatement = parent_18;
+ if (parent_17.kind === 221 /* TryStatement */) {
+ var tryStatement = parent_17;
if (tryStatement.tryBlock === child && tryStatement.catchClause) {
return child;
}
}
- child = parent_18;
+ child = parent_17;
}
return undefined;
}
@@ -69081,24 +69773,24 @@ var ts;
// If we got a type reference, try and see if the reference applies to any expressions that can implement an interface
var containingTypeReference = getContainingTypeReference(refNode);
if (containingTypeReference) {
- var parent_19 = containingTypeReference.parent;
- if (ts.isVariableLike(parent_19) && parent_19.type === containingTypeReference && parent_19.initializer && isImplementationExpression(parent_19.initializer)) {
- maybeAdd(getReferenceEntryFromNode(parent_19.initializer));
+ var parent_18 = containingTypeReference.parent;
+ if (ts.isVariableLike(parent_18) && parent_18.type === containingTypeReference && parent_18.initializer && isImplementationExpression(parent_18.initializer)) {
+ maybeAdd(getReferenceEntryFromNode(parent_18.initializer));
}
- else if (ts.isFunctionLike(parent_19) && parent_19.type === containingTypeReference && parent_19.body) {
- if (parent_19.body.kind === 204 /* Block */) {
- ts.forEachReturnStatement(parent_19.body, function (returnStatement) {
+ else if (ts.isFunctionLike(parent_18) && parent_18.type === containingTypeReference && parent_18.body) {
+ if (parent_18.body.kind === 204 /* Block */) {
+ ts.forEachReturnStatement(parent_18.body, function (returnStatement) {
if (returnStatement.expression && isImplementationExpression(returnStatement.expression)) {
maybeAdd(getReferenceEntryFromNode(returnStatement.expression));
}
});
}
- else if (isImplementationExpression(parent_19.body)) {
- maybeAdd(getReferenceEntryFromNode(parent_19.body));
+ else if (isImplementationExpression(parent_18.body)) {
+ maybeAdd(getReferenceEntryFromNode(parent_18.body));
}
}
- else if (ts.isAssertionExpression(parent_19) && isImplementationExpression(parent_19.expression)) {
- maybeAdd(getReferenceEntryFromNode(parent_19.expression));
+ else if (ts.isAssertionExpression(parent_18) && isImplementationExpression(parent_18.expression)) {
+ maybeAdd(getReferenceEntryFromNode(parent_18.expression));
}
}
}
@@ -69593,9 +70285,9 @@ var ts;
return undefined;
}
}
- var result_3 = [];
- getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result_3, /*previousIterationSymbolsCache*/ ts.createMap());
- return ts.forEach(result_3, function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; });
+ var result_4 = [];
+ getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result_4, /*previousIterationSymbolsCache*/ ts.createMap());
+ return ts.forEach(result_4, function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; });
}
return undefined;
});
@@ -69604,7 +70296,7 @@ var ts;
if (node.name.kind === 142 /* ComputedPropertyName */) {
var nameExpression = node.name.expression;
// treat computed property names where expression is string/numeric literal as just string/numeric literal
- if (ts.isStringOrNumericLiteral(nameExpression.kind)) {
+ if (ts.isStringOrNumericLiteral(nameExpression)) {
return nameExpression.text;
}
return undefined;
@@ -69616,20 +70308,20 @@ var ts;
var contextualType = typeChecker.getContextualType(objectLiteral);
var name = getNameFromObjectLiteralElement(node);
if (name && contextualType) {
- var result_4 = [];
+ var result_5 = [];
var symbol_2 = contextualType.getProperty(name);
if (symbol_2) {
- result_4.push(symbol_2);
+ result_5.push(symbol_2);
}
if (contextualType.flags & 65536 /* Union */) {
ts.forEach(contextualType.types, function (t) {
var symbol = t.getProperty(name);
if (symbol) {
- result_4.push(symbol);
+ result_5.push(symbol);
}
});
}
- return result_4;
+ return result_5;
}
return undefined;
}
@@ -69896,13 +70588,13 @@ var ts;
return undefined;
}
if (type.flags & 65536 /* Union */ && !(type.flags & 16 /* Enum */)) {
- var result_5 = [];
+ var result_6 = [];
ts.forEach(type.types, function (t) {
if (t.symbol) {
- ts.addRange(/*to*/ result_5, /*from*/ getDefinitionFromSymbol(typeChecker, t.symbol, node));
+ ts.addRange(/*to*/ result_6, /*from*/ getDefinitionFromSymbol(typeChecker, t.symbol, node));
}
});
- return result_5;
+ return result_6;
}
if (!type.symbol) {
return undefined;
@@ -70113,7 +70805,7 @@ var ts;
// from Array<T> - Array<string> and Array<number>
var documentationComment = [];
forEachUnique(declarations, function (declaration) {
- var comments = ts.getJSDocComments(declaration, /*checkParentVariableStatement*/ true);
+ var comments = ts.getCommentsFromJSDoc(declaration);
if (!comments) {
return;
}
@@ -70320,13 +71012,13 @@ var ts;
* @param projectRootPath is the path to the project root directory
* @param safeListPath is the path used to retrieve the safe list
* @param packageNameToTypingLocation is the map of package names to their cached typing locations
- * @param typingOptions are used to customize the typing inference process
+ * @param typeAcquisition is used to customize the typing acquisition process
* @param compilerOptions are used as a source for typing inference
*/
- function discoverTypings(host, fileNames, projectRootPath, safeListPath, packageNameToTypingLocation, typingOptions, unresolvedImports) {
+ function discoverTypings(host, fileNames, projectRootPath, safeListPath, packageNameToTypingLocation, typeAcquisition, unresolvedImports) {
// A typing name to typing file path mapping
var inferredTypings = ts.createMap();
- if (!typingOptions || !typingOptions.enableAutoDiscovery) {
+ if (!typeAcquisition || !typeAcquisition.enable) {
return { cachedTypingPaths: [], newTypingNames: [], filesToWatch: [] };
}
// Only infer typings for .js and .jsx files
@@ -70342,8 +71034,8 @@ var ts;
// Directories to search for package.json, bower.json and other typing information
var searchDirs = [];
var exclude = [];
- mergeTypings(typingOptions.include);
- exclude = typingOptions.exclude || [];
+ mergeTypings(typeAcquisition.include);
+ exclude = typeAcquisition.exclude || [];
var possibleSearchDirs = ts.map(fileNames, ts.getDirectoryPath);
if (projectRootPath) {
possibleSearchDirs.push(projectRootPath);
@@ -70370,9 +71062,9 @@ var ts;
}
}
// Add the cached typing locations for inferred typings that are already installed
- for (var name_44 in packageNameToTypingLocation) {
- if (name_44 in inferredTypings && !inferredTypings[name_44]) {
- inferredTypings[name_44] = packageNameToTypingLocation[name_44];
+ for (var name_45 in packageNameToTypingLocation) {
+ if (name_45 in inferredTypings && !inferredTypings[name_45]) {
+ inferredTypings[name_45] = packageNameToTypingLocation[name_45];
}
}
// Remove typings that the user has added to the exclude list
@@ -70510,12 +71202,12 @@ var ts;
return;
}
var nameToDeclarations = sourceFile.getNamedDeclarations();
- for (var name_45 in nameToDeclarations) {
- var declarations = nameToDeclarations[name_45];
+ for (var name_46 in nameToDeclarations) {
+ var declarations = nameToDeclarations[name_46];
if (declarations) {
// First do a quick check to see if the name of the declaration matches the
// last portion of the (possibly) dotted name they're searching for.
- var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_45);
+ var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_46);
if (!matches) {
continue;
}
@@ -70528,14 +71220,14 @@ var ts;
if (!containers) {
return undefined;
}
- matches = patternMatcher.getMatches(containers, name_45);
+ matches = patternMatcher.getMatches(containers, name_46);
if (!matches) {
continue;
}
}
var fileName = sourceFile.fileName;
var matchKind = bestMatchKind(matches);
- rawItems.push({ name: name_45, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration });
+ rawItems.push({ name: name_46, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration });
}
}
}
@@ -70824,9 +71516,9 @@ var ts;
case 174 /* BindingElement */:
case 223 /* VariableDeclaration */:
var decl = node;
- var name_46 = decl.name;
- if (ts.isBindingPattern(name_46)) {
- addChildrenRecursively(name_46);
+ var name_47 = decl.name;
+ if (ts.isBindingPattern(name_47)) {
+ addChildrenRecursively(name_47);
}
else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) {
// For `const x = function() {}`, just use the function node, not the const.
@@ -70873,9 +71565,9 @@ var ts;
addLeafNode(node);
break;
default:
- ts.forEach(node.jsDocComments, function (jsDocComment) {
- ts.forEach(jsDocComment.tags, function (tag) {
- if (tag.kind === 284 /* JSDocTypedefTag */) {
+ ts.forEach(node.jsDoc, function (jsDoc) {
+ ts.forEach(jsDoc.tags, function (tag) {
+ if (tag.kind === 285 /* JSDocTypedefTag */) {
addLeafNode(tag);
}
});
@@ -71005,7 +71697,7 @@ var ts;
case 185 /* ArrowFunction */:
case 197 /* ClassExpression */:
return getFunctionOrClassName(node);
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
return getJSDocTypedefTagName(node);
default:
return undefined;
@@ -71048,7 +71740,7 @@ var ts;
return "()";
case 155 /* IndexSignature */:
return "[]";
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
return getJSDocTypedefTagName(node);
default:
return "<unknown>";
@@ -71096,7 +71788,7 @@ var ts;
case 230 /* ModuleDeclaration */:
case 261 /* SourceFile */:
case 228 /* TypeAliasDeclaration */:
- case 284 /* JSDocTypedefTag */:
+ case 285 /* JSDocTypedefTag */:
return true;
case 150 /* Constructor */:
case 149 /* MethodDeclaration */:
@@ -71333,28 +72025,28 @@ var ts;
switch (n.kind) {
case 204 /* Block */:
if (!ts.isFunctionBlock(n)) {
- var parent_20 = n.parent;
+ var parent_19 = n.parent;
var openBrace = ts.findChildOfKind(n, 16 /* OpenBraceToken */, sourceFile);
var closeBrace = ts.findChildOfKind(n, 17 /* CloseBraceToken */, sourceFile);
// Check if the block is standalone, or 'attached' to some parent statement.
// If the latter, we want to collapse the block, but consider its hint span
// to be the entire span of the parent.
- if (parent_20.kind === 209 /* DoStatement */ ||
- parent_20.kind === 212 /* ForInStatement */ ||
- parent_20.kind === 213 /* ForOfStatement */ ||
- parent_20.kind === 211 /* ForStatement */ ||
- parent_20.kind === 208 /* IfStatement */ ||
- parent_20.kind === 210 /* WhileStatement */ ||
- parent_20.kind === 217 /* WithStatement */ ||
- parent_20.kind === 256 /* CatchClause */) {
- addOutliningSpan(parent_20, openBrace, closeBrace, autoCollapse(n));
+ if (parent_19.kind === 209 /* DoStatement */ ||
+ parent_19.kind === 212 /* ForInStatement */ ||
+ parent_19.kind === 213 /* ForOfStatement */ ||
+ parent_19.kind === 211 /* ForStatement */ ||
+ parent_19.kind === 208 /* IfStatement */ ||
+ parent_19.kind === 210 /* WhileStatement */ ||
+ parent_19.kind === 217 /* WithStatement */ ||
+ parent_19.kind === 256 /* CatchClause */) {
+ addOutliningSpan(parent_19, openBrace, closeBrace, autoCollapse(n));
break;
}
- if (parent_20.kind === 221 /* TryStatement */) {
+ if (parent_19.kind === 221 /* TryStatement */) {
// Could be the try-block, or the finally-block.
- var tryStatement = parent_20;
+ var tryStatement = parent_19;
if (tryStatement.tryBlock === n) {
- addOutliningSpan(parent_20, openBrace, closeBrace, autoCollapse(n));
+ addOutliningSpan(parent_19, openBrace, closeBrace, autoCollapse(n));
break;
}
else if (tryStatement.finallyBlock === n) {
@@ -73447,9 +74139,9 @@ var ts;
return false;
}
// If the parent is not sourceFile or module block it is local variable
- for (var parent_21 = declaration.parent; !ts.isFunctionBlock(parent_21); parent_21 = parent_21.parent) {
+ for (var parent_20 = declaration.parent; !ts.isFunctionBlock(parent_20); parent_20 = parent_20.parent) {
// Reached source file or module block
- if (parent_21.kind === 261 /* SourceFile */ || parent_21.kind === 231 /* ModuleBlock */) {
+ if (parent_20.kind === 261 /* SourceFile */ || parent_20.kind === 231 /* ModuleBlock */) {
return false;
}
}
@@ -74054,7 +74746,7 @@ var ts;
function RuleOperationContext() {
var funcs = [];
for (var _i = 0; _i < arguments.length; _i++) {
- funcs[_i - 0] = arguments[_i];
+ funcs[_i] = arguments[_i];
}
this.customContextChecks = funcs;
}
@@ -74325,9 +75017,9 @@ var ts;
}
Rules.prototype.getRuleName = function (rule) {
var o = this;
- for (var name_47 in o) {
- if (o[name_47] === rule) {
- return name_47;
+ for (var name_48 in o) {
+ if (o[name_48] === rule) {
+ return name_48;
}
}
throw new Error("Unknown rule");
@@ -75715,11 +76407,23 @@ var ts;
else {
var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos);
var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile);
- if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) {
+ if (indentation !== characterToColumn(startLinePosition, tokenStart.character) || indentationIsDifferent(indentationString, startLinePosition)) {
recordReplace(startLinePosition, tokenStart.character, indentationString);
}
}
}
+ function characterToColumn(startLinePosition, characterInLine) {
+ var column = 0;
+ for (var i = 0; i < characterInLine; i++) {
+ if (sourceFile.text.charCodeAt(startLinePosition + i) === 9 /* tab */) {
+ column += options.tabSize - column % options.tabSize;
+ }
+ else {
+ column++;
+ }
+ }
+ return column;
+ }
function indentationIsDifferent(indentationString, startLinePosition) {
return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length);
}
@@ -76508,7 +77212,666 @@ var ts;
});
})(codefix = ts.codefix || (ts.codefix = {}));
})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
+ var codefix;
+ (function (codefix) {
+ var ModuleSpecifierComparison;
+ (function (ModuleSpecifierComparison) {
+ ModuleSpecifierComparison[ModuleSpecifierComparison["Better"] = 0] = "Better";
+ ModuleSpecifierComparison[ModuleSpecifierComparison["Equal"] = 1] = "Equal";
+ ModuleSpecifierComparison[ModuleSpecifierComparison["Worse"] = 2] = "Worse";
+ })(ModuleSpecifierComparison || (ModuleSpecifierComparison = {}));
+ var ImportCodeActionMap = (function () {
+ function ImportCodeActionMap() {
+ this.symbolIdToActionMap = ts.createMap();
+ }
+ ImportCodeActionMap.prototype.addAction = function (symbolId, newAction) {
+ if (!newAction) {
+ return;
+ }
+ if (!this.symbolIdToActionMap[symbolId]) {
+ this.symbolIdToActionMap[symbolId] = [newAction];
+ return;
+ }
+ if (newAction.kind === "CodeChange") {
+ this.symbolIdToActionMap[symbolId].push(newAction);
+ return;
+ }
+ var updatedNewImports = [];
+ for (var _i = 0, _a = this.symbolIdToActionMap[symbolId]; _i < _a.length; _i++) {
+ var existingAction = _a[_i];
+ if (existingAction.kind === "CodeChange") {
+ // only import actions should compare
+ updatedNewImports.push(existingAction);
+ continue;
+ }
+ switch (this.compareModuleSpecifiers(existingAction.moduleSpecifier, newAction.moduleSpecifier)) {
+ case ModuleSpecifierComparison.Better:
+ // the new one is not worth considering if it is a new improt.
+ // However if it is instead a insertion into existing import, the user might want to use
+ // the module specifier even it is worse by our standards. So keep it.
+ if (newAction.kind === "NewImport") {
+ return;
+ }
+ case ModuleSpecifierComparison.Equal:
+ // the current one is safe. But it is still possible that the new one is worse
+ // than another existing one. For example, you may have new imports from "./foo/bar"
+ // and "bar", when the new one is "bar/bar2" and the current one is "./foo/bar". The new
+ // one and the current one are not comparable (one relative path and one absolute path),
+ // but the new one is worse than the other one, so should not add to the list.
+ updatedNewImports.push(existingAction);
+ break;
+ case ModuleSpecifierComparison.Worse:
+ // the existing one is worse, remove from the list.
+ continue;
+ }
+ }
+ // if we reach here, it means the new one is better or equal to all of the existing ones.
+ updatedNewImports.push(newAction);
+ this.symbolIdToActionMap[symbolId] = updatedNewImports;
+ };
+ ImportCodeActionMap.prototype.addActions = function (symbolId, newActions) {
+ for (var _i = 0, newActions_1 = newActions; _i < newActions_1.length; _i++) {
+ var newAction = newActions_1[_i];
+ this.addAction(symbolId, newAction);
+ }
+ };
+ ImportCodeActionMap.prototype.getAllActions = function () {
+ var result = [];
+ for (var symbolId in this.symbolIdToActionMap) {
+ result = ts.concatenate(result, this.symbolIdToActionMap[symbolId]);
+ }
+ return result;
+ };
+ ImportCodeActionMap.prototype.compareModuleSpecifiers = function (moduleSpecifier1, moduleSpecifier2) {
+ if (moduleSpecifier1 === moduleSpecifier2) {
+ return ModuleSpecifierComparison.Equal;
+ }
+ // if moduleSpecifier1 (ms1) is a substring of ms2, then it is better
+ if (moduleSpecifier2.indexOf(moduleSpecifier1) === 0) {
+ return ModuleSpecifierComparison.Better;
+ }
+ if (moduleSpecifier1.indexOf(moduleSpecifier2) === 0) {
+ return ModuleSpecifierComparison.Worse;
+ }
+ // if both are relative paths, and ms1 has fewer levels, then it is better
+ if (ts.isExternalModuleNameRelative(moduleSpecifier1) && ts.isExternalModuleNameRelative(moduleSpecifier2)) {
+ var regex = new RegExp(ts.directorySeparator, "g");
+ var moduleSpecifier1LevelCount = (moduleSpecifier1.match(regex) || []).length;
+ var moduleSpecifier2LevelCount = (moduleSpecifier2.match(regex) || []).length;
+ return moduleSpecifier1LevelCount < moduleSpecifier2LevelCount
+ ? ModuleSpecifierComparison.Better
+ : moduleSpecifier1LevelCount === moduleSpecifier2LevelCount
+ ? ModuleSpecifierComparison.Equal
+ : ModuleSpecifierComparison.Worse;
+ }
+ // the equal cases include when the two specifiers are not comparable.
+ return ModuleSpecifierComparison.Equal;
+ };
+ return ImportCodeActionMap;
+ }());
+ codefix.registerCodeFix({
+ errorCodes: [ts.Diagnostics.Cannot_find_name_0.code],
+ getCodeActions: function (context) {
+ var sourceFile = context.sourceFile;
+ var checker = context.program.getTypeChecker();
+ var allSourceFiles = context.program.getSourceFiles();
+ var useCaseSensitiveFileNames = context.host.useCaseSensitiveFileNames ? context.host.useCaseSensitiveFileNames() : false;
+ var token = ts.getTokenAtPosition(sourceFile, context.span.start);
+ var name = token.getText();
+ var symbolIdActionMap = new ImportCodeActionMap();
+ // this is a module id -> module import declaration map
+ var cachedImportDeclarations = ts.createMap();
+ var cachedNewImportInsertPosition;
+ var allPotentialModules = checker.getAmbientModules();
+ for (var _i = 0, allSourceFiles_1 = allSourceFiles; _i < allSourceFiles_1.length; _i++) {
+ var otherSourceFile = allSourceFiles_1[_i];
+ if (otherSourceFile !== sourceFile && ts.isExternalOrCommonJsModule(otherSourceFile)) {
+ allPotentialModules.push(otherSourceFile.symbol);
+ }
+ }
+ var currentTokenMeaning = ts.getMeaningFromLocation(token);
+ for (var _a = 0, allPotentialModules_1 = allPotentialModules; _a < allPotentialModules_1.length; _a++) {
+ var moduleSymbol = allPotentialModules_1[_a];
+ context.cancellationToken.throwIfCancellationRequested();
+ // check the default export
+ var defaultExport = checker.tryGetMemberInModuleExports("default", moduleSymbol);
+ if (defaultExport) {
+ var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
+ if (localSymbol && localSymbol.name === name && checkSymbolHasMeaning(localSymbol, currentTokenMeaning)) {
+ // check if this symbol is already used
+ var symbolId = getUniqueSymbolId(localSymbol);
+ symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol, /*isDefault*/ true));
+ }
+ }
+ // check exports with the same name
+ var exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExports(name, moduleSymbol);
+ if (exportSymbolWithIdenticalName && checkSymbolHasMeaning(exportSymbolWithIdenticalName, currentTokenMeaning)) {
+ var symbolId = getUniqueSymbolId(exportSymbolWithIdenticalName);
+ symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol));
+ }
+ }
+ return symbolIdActionMap.getAllActions();
+ function getImportDeclarations(moduleSymbol) {
+ var moduleSymbolId = getUniqueSymbolId(moduleSymbol);
+ if (cachedImportDeclarations[moduleSymbolId]) {
+ return cachedImportDeclarations[moduleSymbolId];
+ }
+ var existingDeclarations = [];
+ for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
+ var importModuleSpecifier = _a[_i];
+ var importSymbol = checker.getSymbolAtLocation(importModuleSpecifier);
+ if (importSymbol === moduleSymbol) {
+ existingDeclarations.push(getImportDeclaration(importModuleSpecifier));
+ }
+ }
+ cachedImportDeclarations[moduleSymbolId] = existingDeclarations;
+ return existingDeclarations;
+ function getImportDeclaration(moduleSpecifier) {
+ var node = moduleSpecifier;
+ while (node) {
+ if (node.kind === 235 /* ImportDeclaration */) {
+ return node;
+ }
+ if (node.kind === 234 /* ImportEqualsDeclaration */) {
+ return node;
+ }
+ node = node.parent;
+ }
+ return undefined;
+ }
+ }
+ function getUniqueSymbolId(symbol) {
+ if (symbol.flags & 8388608 /* Alias */) {
+ return ts.getSymbolId(checker.getAliasedSymbol(symbol));
+ }
+ return ts.getSymbolId(symbol);
+ }
+ function checkSymbolHasMeaning(symbol, meaning) {
+ var declarations = symbol.getDeclarations();
+ return declarations ? ts.some(symbol.declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); }) : false;
+ }
+ function getCodeActionForImport(moduleSymbol, isDefault) {
+ var existingDeclarations = getImportDeclarations(moduleSymbol);
+ if (existingDeclarations.length > 0) {
+ // With an existing import statement, there are more than one actions the user can do.
+ return getCodeActionsForExistingImport(existingDeclarations);
+ }
+ else {
+ return [getCodeActionForNewImport()];
+ }
+ function getCodeActionsForExistingImport(declarations) {
+ var actions = [];
+ // It is possible that multiple import statements with the same specifier exist in the file.
+ // e.g.
+ //
+ // import * as ns from "foo";
+ // import { member1, member2 } from "foo";
+ //
+ // member3/**/ <-- cusor here
+ //
+ // in this case we should provie 2 actions:
+ // 1. change "member3" to "ns.member3"
+ // 2. add "member3" to the second import statement's import list
+ // and it is up to the user to decide which one fits best.
+ var namespaceImportDeclaration;
+ var namedImportDeclaration;
+ var existingModuleSpecifier;
+ for (var _i = 0, declarations_11 = declarations; _i < declarations_11.length; _i++) {
+ var declaration = declarations_11[_i];
+ if (declaration.kind === 235 /* ImportDeclaration */) {
+ var namedBindings = declaration.importClause && declaration.importClause.namedBindings;
+ if (namedBindings && namedBindings.kind === 237 /* NamespaceImport */) {
+ // case:
+ // import * as ns from "foo"
+ namespaceImportDeclaration = declaration;
+ }
+ else {
+ // cases:
+ // import default from "foo"
+ // import { bar } from "foo" or combination with the first one
+ // import "foo"
+ namedImportDeclaration = declaration;
+ }
+ existingModuleSpecifier = declaration.moduleSpecifier.getText();
+ }
+ else {
+ // case:
+ // import foo = require("foo")
+ namespaceImportDeclaration = declaration;
+ existingModuleSpecifier = getModuleSpecifierFromImportEqualsDeclaration(declaration);
+ }
+ }
+ if (namespaceImportDeclaration) {
+ actions.push(getCodeActionForNamespaceImport(namespaceImportDeclaration));
+ }
+ if (namedImportDeclaration && namedImportDeclaration.importClause &&
+ (namedImportDeclaration.importClause.name || namedImportDeclaration.importClause.namedBindings)) {
+ /**
+ * If the existing import declaration already has a named import list, just
+ * insert the identifier into that list.
+ */
+ var textChange = getTextChangeForImportClause(namedImportDeclaration.importClause);
+ var moduleSpecifierWithoutQuotes = ts.stripQuotes(namedImportDeclaration.moduleSpecifier.getText());
+ actions.push(createCodeAction(ts.Diagnostics.Add_0_to_existing_import_declaration_from_1, [name, moduleSpecifierWithoutQuotes], textChange.newText, textChange.span, sourceFile.fileName, "InsertingIntoExistingImport", moduleSpecifierWithoutQuotes));
+ }
+ else {
+ // we need to create a new import statement, but the existing module specifier can be reused.
+ actions.push(getCodeActionForNewImport(existingModuleSpecifier));
+ }
+ return actions;
+ function getModuleSpecifierFromImportEqualsDeclaration(declaration) {
+ if (declaration.moduleReference && declaration.moduleReference.kind === 245 /* ExternalModuleReference */) {
+ return declaration.moduleReference.expression.getText();
+ }
+ return declaration.moduleReference.getText();
+ }
+ function getTextChangeForImportClause(importClause) {
+ var newImportText = isDefault ? "default as " + name : name;
+ var importList = importClause.namedBindings;
+ // case 1:
+ // original text: import default from "module"
+ // change to: import default, { name } from "module"
+ if (!importList && importClause.name) {
+ var start = importClause.name.getEnd();
+ return {
+ newText: ", { " + newImportText + " }",
+ span: { start: start, length: 0 }
+ };
+ }
+ // case 2:
+ // original text: import {} from "module"
+ // change to: import { name } from "module"
+ if (importList.elements.length === 0) {
+ var start = importList.getStart();
+ return {
+ newText: "{ " + newImportText + " }",
+ span: { start: start, length: importList.getEnd() - start }
+ };
+ }
+ // case 3:
+ // original text: import { foo, bar } from "module"
+ // change to: import { foo, bar, name } from "module"
+ var insertPoint = importList.elements[importList.elements.length - 1].getEnd();
+ /**
+ * If the import list has one import per line, preserve that. Otherwise, insert on same line as last element
+ * import {
+ * foo
+ * } from "./module";
+ */
+ var startLine = ts.getLineOfLocalPosition(sourceFile, importList.getStart());
+ var endLine = ts.getLineOfLocalPosition(sourceFile, importList.getEnd());
+ var oneImportPerLine = endLine - startLine > importList.elements.length;
+ return {
+ newText: "," + (oneImportPerLine ? context.newLineCharacter : " ") + newImportText,
+ span: { start: insertPoint, length: 0 }
+ };
+ }
+ function getCodeActionForNamespaceImport(declaration) {
+ var namespacePrefix;
+ if (declaration.kind === 235 /* ImportDeclaration */) {
+ namespacePrefix = declaration.importClause.namedBindings.name.getText();
+ }
+ else {
+ namespacePrefix = declaration.name.getText();
+ }
+ namespacePrefix = ts.stripQuotes(namespacePrefix);
+ /**
+ * Cases:
+ * import * as ns from "mod"
+ * import default, * as ns from "mod"
+ * import ns = require("mod")
+ *
+ * Because there is no import list, we alter the reference to include the
+ * namespace instead of altering the import declaration. For example, "foo" would
+ * become "ns.foo"
+ */
+ return createCodeAction(ts.Diagnostics.Change_0_to_1, [name, namespacePrefix + "." + name], namespacePrefix + ".", { start: token.getStart(), length: 0 }, sourceFile.fileName, "CodeChange");
+ }
+ }
+ function getCodeActionForNewImport(moduleSpecifier) {
+ if (!cachedNewImportInsertPosition) {
+ // insert after any existing imports
+ var lastModuleSpecifierEnd = -1;
+ for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
+ var moduleSpecifier_1 = _a[_i];
+ var end = moduleSpecifier_1.getEnd();
+ if (!lastModuleSpecifierEnd || end > lastModuleSpecifierEnd) {
+ lastModuleSpecifierEnd = end;
+ }
+ }
+ cachedNewImportInsertPosition = lastModuleSpecifierEnd > 0 ? sourceFile.getLineEndOfPosition(lastModuleSpecifierEnd) : sourceFile.getStart();
+ }
+ var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
+ var moduleSpecifierWithoutQuotes = ts.stripQuotes(moduleSpecifier || getModuleSpecifierForNewImport());
+ var importStatementText = isDefault
+ ? "import " + name + " from \"" + moduleSpecifierWithoutQuotes + "\""
+ : "import { " + name + " } from \"" + moduleSpecifierWithoutQuotes + "\"";
+ // if this file doesn't have any import statements, insert an import statement and then insert a new line
+ // between the only import statement and user code. Otherwise just insert the statement because chances
+ // are there are already a new line seperating code and import statements.
+ var newText = cachedNewImportInsertPosition === sourceFile.getStart()
+ ? importStatementText + ";" + context.newLineCharacter + context.newLineCharacter
+ : "" + context.newLineCharacter + importStatementText + ";";
+ return createCodeAction(ts.Diagnostics.Import_0_from_1, [name, "\"" + moduleSpecifierWithoutQuotes + "\""], newText, { start: cachedNewImportInsertPosition, length: 0 }, sourceFile.fileName, "NewImport", moduleSpecifierWithoutQuotes);
+ function getModuleSpecifierForNewImport() {
+ var fileName = sourceFile.path;
+ var moduleFileName = moduleSymbol.valueDeclaration.getSourceFile().path;
+ var sourceDirectory = ts.getDirectoryPath(fileName);
+ var options = context.program.getCompilerOptions();
+ return tryGetModuleNameFromAmbientModule() ||
+ tryGetModuleNameFromBaseUrl() ||
+ tryGetModuleNameFromRootDirs() ||
+ tryGetModuleNameFromTypeRoots() ||
+ tryGetModuleNameAsNodeModule() ||
+ ts.removeFileExtension(getRelativePath(moduleFileName, sourceDirectory));
+ function tryGetModuleNameFromAmbientModule() {
+ if (moduleSymbol.valueDeclaration.kind !== 261 /* SourceFile */) {
+ return moduleSymbol.name;
+ }
+ }
+ function tryGetModuleNameFromBaseUrl() {
+ if (!options.baseUrl) {
+ return undefined;
+ }
+ var normalizedBaseUrl = ts.toPath(options.baseUrl, ts.getDirectoryPath(options.baseUrl), getCanonicalFileName);
+ var relativeName = tryRemoveParentDirectoryName(moduleFileName, normalizedBaseUrl);
+ if (!relativeName) {
+ return undefined;
+ }
+ relativeName = removeExtensionAndIndexPostFix(relativeName);
+ if (options.paths) {
+ for (var key in options.paths) {
+ for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) {
+ var pattern = _a[_i];
+ var indexOfStar = pattern.indexOf("*");
+ if (indexOfStar === 0 && pattern.length === 1) {
+ continue;
+ }
+ else if (indexOfStar !== -1) {
+ var prefix = pattern.substr(0, indexOfStar);
+ var suffix = pattern.substr(indexOfStar + 1);
+ if (relativeName.length >= prefix.length + suffix.length &&
+ ts.startsWith(relativeName, prefix) &&
+ ts.endsWith(relativeName, suffix)) {
+ var matchedStar = relativeName.substr(prefix.length, relativeName.length - suffix.length);
+ return key.replace("\*", matchedStar);
+ }
+ }
+ else if (pattern === relativeName) {
+ return key;
+ }
+ }
+ }
+ }
+ return relativeName;
+ }
+ function tryGetModuleNameFromRootDirs() {
+ if (options.rootDirs) {
+ var normalizedRootDirs = ts.map(options.rootDirs, function (rootDir) { return ts.toPath(rootDir, /*basePath*/ undefined, getCanonicalFileName); });
+ var normalizedTargetPath = getPathRelativeToRootDirs(moduleFileName, normalizedRootDirs);
+ var normalizedSourcePath = getPathRelativeToRootDirs(sourceDirectory, normalizedRootDirs);
+ if (normalizedTargetPath !== undefined) {
+ var relativePath = normalizedSourcePath !== undefined ? getRelativePath(normalizedTargetPath, normalizedSourcePath) : normalizedTargetPath;
+ return ts.removeFileExtension(relativePath);
+ }
+ }
+ return undefined;
+ }
+ function tryGetModuleNameFromTypeRoots() {
+ var typeRoots = ts.getEffectiveTypeRoots(options, context.host);
+ if (typeRoots) {
+ var normalizedTypeRoots = ts.map(typeRoots, function (typeRoot) { return ts.toPath(typeRoot, /*basePath*/ undefined, getCanonicalFileName); });
+ for (var _i = 0, normalizedTypeRoots_1 = normalizedTypeRoots; _i < normalizedTypeRoots_1.length; _i++) {
+ var typeRoot = normalizedTypeRoots_1[_i];
+ if (ts.startsWith(moduleFileName, typeRoot)) {
+ var relativeFileName = moduleFileName.substring(typeRoot.length + 1);
+ return removeExtensionAndIndexPostFix(relativeFileName);
+ }
+ }
+ }
+ }
+ function tryGetModuleNameAsNodeModule() {
+ if (ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs) {
+ // nothing to do here
+ return undefined;
+ }
+ var indexOfNodeModules = moduleFileName.indexOf("node_modules");
+ if (indexOfNodeModules < 0) {
+ return undefined;
+ }
+ var relativeFileName;
+ if (sourceDirectory.indexOf(moduleFileName.substring(0, indexOfNodeModules - 1)) === 0) {
+ // if node_modules folder is in this folder or any of its parent folder, no need to keep it.
+ relativeFileName = moduleFileName.substring(indexOfNodeModules + 13 /* "node_modules\".length */);
+ }
+ else {
+ relativeFileName = getRelativePath(moduleFileName, sourceDirectory);
+ }
+ relativeFileName = ts.removeFileExtension(relativeFileName);
+ if (ts.endsWith(relativeFileName, "/index")) {
+ relativeFileName = ts.getDirectoryPath(relativeFileName);
+ }
+ else {
+ try {
+ var moduleDirectory = ts.getDirectoryPath(moduleFileName);
+ var packageJsonContent = JSON.parse(context.host.readFile(ts.combinePaths(moduleDirectory, "package.json")));
+ if (packageJsonContent) {
+ var mainFile = packageJsonContent.main || packageJsonContent.typings;
+ if (mainFile) {
+ var mainExportFile = ts.toPath(mainFile, moduleDirectory, getCanonicalFileName);
+ if (ts.removeFileExtension(mainExportFile) === ts.removeFileExtension(moduleFileName)) {
+ relativeFileName = ts.getDirectoryPath(relativeFileName);
+ }
+ }
+ }
+ }
+ catch (e) { }
+ }
+ return relativeFileName;
+ }
+ }
+ function getPathRelativeToRootDirs(path, rootDirs) {
+ for (var _i = 0, rootDirs_2 = rootDirs; _i < rootDirs_2.length; _i++) {
+ var rootDir = rootDirs_2[_i];
+ var relativeName = tryRemoveParentDirectoryName(path, rootDir);
+ if (relativeName !== undefined) {
+ return relativeName;
+ }
+ }
+ return undefined;
+ }
+ function removeExtensionAndIndexPostFix(fileName) {
+ fileName = ts.removeFileExtension(fileName);
+ if (ts.endsWith(fileName, "/index")) {
+ fileName = fileName.substr(0, fileName.length - 6 /* "/index".length */);
+ }
+ return fileName;
+ }
+ function getRelativePath(path, directoryPath) {
+ var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, false);
+ return ts.moduleHasNonRelativeName(relativePath) ? "./" + relativePath : relativePath;
+ }
+ function tryRemoveParentDirectoryName(path, parentDirectory) {
+ var index = path.indexOf(parentDirectory);
+ if (index === 0) {
+ return ts.endsWith(parentDirectory, ts.directorySeparator)
+ ? path.substring(parentDirectory.length)
+ : path.substring(parentDirectory.length + 1);
+ }
+ return undefined;
+ }
+ }
+ }
+ function createCodeAction(description, diagnosticArgs, newText, span, fileName, kind, moduleSpecifier) {
+ return {
+ description: ts.formatMessage.apply(undefined, [undefined, description].concat(diagnosticArgs)),
+ changes: [{ fileName: fileName, textChanges: [{ newText: newText, span: span }] }],
+ kind: kind,
+ moduleSpecifier: moduleSpecifier
+ };
+ }
+ }
+ });
+ })(codefix = ts.codefix || (ts.codefix = {}));
+})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
+ var codefix;
+ (function (codefix) {
+ codefix.registerCodeFix({
+ errorCodes: [
+ ts.Diagnostics._0_is_declared_but_never_used.code,
+ ts.Diagnostics.Property_0_is_declared_but_never_used.code
+ ],
+ getCodeActions: function (context) {
+ var sourceFile = context.sourceFile;
+ var start = context.span.start;
+ var token = ts.getTokenAtPosition(sourceFile, start);
+ // this handles var ["computed"] = 12;
+ if (token.kind === 20 /* OpenBracketToken */) {
+ token = ts.getTokenAtPosition(sourceFile, start + 1);
+ }
+ switch (token.kind) {
+ case 70 /* Identifier */:
+ switch (token.parent.kind) {
+ case 223 /* VariableDeclaration */:
+ switch (token.parent.parent.parent.kind) {
+ case 211 /* ForStatement */:
+ var forStatement = token.parent.parent.parent;
+ var forInitializer = forStatement.initializer;
+ if (forInitializer.declarations.length === 1) {
+ return createCodeFix("", forInitializer.pos, forInitializer.end - forInitializer.pos);
+ }
+ else {
+ return removeSingleItem(forInitializer.declarations, token);
+ }
+ case 213 /* ForOfStatement */:
+ var forOfStatement = token.parent.parent.parent;
+ if (forOfStatement.initializer.kind === 224 /* VariableDeclarationList */) {
+ var forOfInitializer = forOfStatement.initializer;
+ return createCodeFix("{}", forOfInitializer.declarations[0].pos, forOfInitializer.declarations[0].end - forOfInitializer.declarations[0].pos);
+ }
+ break;
+ case 212 /* ForInStatement */:
+ // There is no valid fix in the case of:
+ // for .. in
+ return undefined;
+ case 256 /* CatchClause */:
+ var catchClause = token.parent.parent;
+ var parameter = catchClause.variableDeclaration.getChildren()[0];
+ return createCodeFix("", parameter.pos, parameter.end - parameter.pos);
+ default:
+ var variableStatement = token.parent.parent.parent;
+ if (variableStatement.declarationList.declarations.length === 1) {
+ return createCodeFix("", variableStatement.pos, variableStatement.end - variableStatement.pos);
+ }
+ else {
+ var declarations = variableStatement.declarationList.declarations;
+ return removeSingleItem(declarations, token);
+ }
+ }
+ case 143 /* TypeParameter */:
+ var typeParameters = token.parent.parent.typeParameters;
+ if (typeParameters.length === 1) {
+ return createCodeFix("", token.parent.pos - 1, token.parent.end - token.parent.pos + 2);
+ }
+ else {
+ return removeSingleItem(typeParameters, token);
+ }
+ case 144 /* Parameter */:
+ var functionDeclaration = token.parent.parent;
+ if (functionDeclaration.parameters.length === 1) {
+ return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);
+ }
+ else {
+ return removeSingleItem(functionDeclaration.parameters, token);
+ }
+ // handle case where 'import a = A;'
+ case 234 /* ImportEqualsDeclaration */:
+ var importEquals = findImportDeclaration(token);
+ return createCodeFix("", importEquals.pos, importEquals.end - importEquals.pos);
+ case 239 /* ImportSpecifier */:
+ var namedImports = token.parent.parent;
+ if (namedImports.elements.length === 1) {
+ // Only 1 import and it is unused. So the entire declaration should be removed.
+ var importSpec = findImportDeclaration(token);
+ return createCodeFix("", importSpec.pos, importSpec.end - importSpec.pos);
+ }
+ else {
+ return removeSingleItem(namedImports.elements, token);
+ }
+ // handle case where "import d, * as ns from './file'"
+ // or "'import {a, b as ns} from './file'"
+ case 236 /* ImportClause */:
+ var importClause = token.parent;
+ if (!importClause.namedBindings) {
+ var importDecl = findImportDeclaration(importClause);
+ return createCodeFix("", importDecl.pos, importDecl.end - importDecl.pos);
+ }
+ else {
+ return createCodeFix("", importClause.name.pos, importClause.namedBindings.pos - importClause.name.pos);
+ }
+ case 237 /* NamespaceImport */:
+ var namespaceImport = token.parent;
+ if (namespaceImport.name == token && !namespaceImport.parent.name) {
+ var importDecl = findImportDeclaration(namespaceImport);
+ return createCodeFix("", importDecl.pos, importDecl.end - importDecl.pos);
+ }
+ else {
+ var start_4 = namespaceImport.parent.name.end;
+ return createCodeFix("", start_4, namespaceImport.parent.namedBindings.end - start_4);
+ }
+ }
+ break;
+ case 147 /* PropertyDeclaration */:
+ return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);
+ case 237 /* NamespaceImport */:
+ return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);
+ }
+ if (ts.isDeclarationName(token)) {
+ return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);
+ }
+ else if (ts.isLiteralComputedPropertyDeclarationName(token)) {
+ return createCodeFix("", token.parent.parent.pos, token.parent.parent.end - token.parent.parent.pos);
+ }
+ else {
+ return undefined;
+ }
+ function findImportDeclaration(token) {
+ var importDecl = token;
+ while (importDecl.kind != 235 /* ImportDeclaration */ && importDecl.parent) {
+ importDecl = importDecl.parent;
+ }
+ return importDecl;
+ }
+ function createCodeFix(newText, start, length) {
+ return [{
+ description: ts.getLocaleSpecificMessage(ts.Diagnostics.Remove_unused_identifiers),
+ changes: [{
+ fileName: sourceFile.fileName,
+ textChanges: [{ newText: newText, span: { start: start, length: length } }]
+ }]
+ }];
+ }
+ function removeSingleItem(elements, token) {
+ if (elements[0] === token.parent) {
+ return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos + 1);
+ }
+ else {
+ return createCodeFix("", token.parent.pos - 1, token.parent.end - token.parent.pos + 1);
+ }
+ }
+ }
+ });
+ })(codefix = ts.codefix || (ts.codefix = {}));
+})(ts || (ts = {}));
///<reference path='superFixes.ts' />
+///<reference path='importFixes.ts' />
+///<reference path='unusedIdentifierFixes.ts' />
/// <reference path="..\compiler\program.ts"/>
/// <reference path="..\compiler\commandLineParser.ts"/>
/// <reference path='types.ts' />
@@ -76599,11 +77962,11 @@ var ts;
return pos;
};
NodeObject.prototype.createSyntaxList = function (nodes) {
- var list = createNode(291 /* SyntaxList */, nodes.pos, nodes.end, this);
+ var list = createNode(292 /* SyntaxList */, nodes.pos, nodes.end, this);
list._children = [];
var pos = nodes.pos;
- for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) {
- var node = nodes_5[_i];
+ for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) {
+ var node = nodes_7[_i];
if (pos < node.pos) {
pos = this.addSyntheticNodes(list._children, pos, node.pos);
}
@@ -76622,7 +77985,7 @@ var ts;
ts.scanner.setText((sourceFile || this.getSourceFile()).text);
children = [];
var pos_3 = this.pos;
- var useJSDocScanner_1 = this.kind >= 278 /* FirstJSDocTagNode */ && this.kind <= 290 /* LastJSDocTagNode */;
+ var useJSDocScanner_1 = this.kind >= 278 /* FirstJSDocTagNode */ && this.kind <= 291 /* LastJSDocTagNode */;
var processNode = function (node) {
var isJSDocTagNode = ts.isJSDocTag(node);
if (!isJSDocTagNode && pos_3 < node.pos) {
@@ -76641,8 +78004,8 @@ var ts;
pos_3 = nodes.end;
};
// jsDocComments need to be the first children
- if (this.jsDocComments) {
- for (var _i = 0, _a = this.jsDocComments; _i < _a.length; _i++) {
+ if (this.jsDoc) {
+ for (var _i = 0, _a = this.jsDoc; _i < _a.length; _i++) {
var jsDocComment = _a[_i];
processNode(jsDocComment);
}
@@ -76866,6 +78229,20 @@ var ts;
SourceFileObject.prototype.getPositionOfLineAndCharacter = function (line, character) {
return ts.getPositionOfLineAndCharacter(this, line, character);
};
+ SourceFileObject.prototype.getLineEndOfPosition = function (pos) {
+ var line = this.getLineAndCharacterOfPosition(pos).line;
+ var lineStarts = this.getLineStarts();
+ var lastCharPos;
+ if (line + 1 >= lineStarts.length) {
+ lastCharPos = this.getEnd();
+ }
+ if (!lastCharPos) {
+ lastCharPos = lineStarts[line + 1] - 1;
+ }
+ var fullText = this.getFullText();
+ // if the new line is "\r\n", we should return the last non-new-line-character position
+ return fullText[lastCharPos] === "\n" && fullText[lastCharPos - 1] === "\r" ? lastCharPos - 1 : lastCharPos;
+ };
SourceFileObject.prototype.getNamedDeclarations = function () {
if (!this.namedDeclarations) {
this.namedDeclarations = this.computeNamedDeclarations();
@@ -76887,9 +78264,9 @@ var ts;
}
function getDeclarationName(declaration) {
if (declaration.name) {
- var result_6 = getTextOfIdentifierOrLiteral(declaration.name);
- if (result_6 !== undefined) {
- return result_6;
+ var result_7 = getTextOfIdentifierOrLiteral(declaration.name);
+ if (result_7 !== undefined) {
+ return result_7;
}
if (declaration.name.kind === 142 /* ComputedPropertyName */) {
var expr = declaration.name.expression;
@@ -77845,7 +79222,9 @@ var ts;
sourceFile: sourceFile,
span: span,
program: program,
- newLineCharacter: newLineChar
+ newLineCharacter: newLineChar,
+ host: host,
+ cancellationToken: cancellationToken
};
var fixes = ts.codefix.getFixes(context);
if (fixes) {
@@ -78087,10 +79466,10 @@ var ts;
break;
default:
ts.forEachChild(node, walk);
- if (node.jsDocComments) {
- for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) {
- var jsDocComment = _a[_i];
- ts.forEachChild(jsDocComment, walk);
+ if (node.jsDoc) {
+ for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
+ var jsDoc = _a[_i];
+ ts.forEachChild(jsDoc, walk);
}
}
}
@@ -79416,7 +80795,7 @@ var ts;
if (result.error) {
return {
options: {},
- typingOptions: {},
+ typeAcquisition: {},
files: [],
raw: {},
errors: [realizeDiagnostic(result.error, "\r\n")]
@@ -79426,7 +80805,7 @@ var ts;
var configFile = ts.parseJsonConfigFileContent(result.config, _this.host, ts.getDirectoryPath(normalizedFileName), /*existingOptions*/ {}, normalizedFileName);
return {
options: configFile.options,
- typingOptions: configFile.typingOptions,
+ typeAcquisition: configFile.typeAcquisition,
files: configFile.fileNames,
raw: configFile.raw,
errors: realizeDiagnostics(configFile.errors, "\r\n")
@@ -79441,7 +80820,7 @@ var ts;
var getCanonicalFileName = ts.createGetCanonicalFileName(/*useCaseSensitivefileNames:*/ false);
return this.forwardJSONCall("discoverTypings()", function () {
var info = JSON.parse(discoverTypingsJson);
- return ts.JsTyping.discoverTypings(_this.host, info.fileNames, ts.toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), ts.toPath(info.safeListPath, info.safeListPath, getCanonicalFileName), info.packageNameToTypingLocation, info.typingOptions, info.unresolvedImports);
+ return ts.JsTyping.discoverTypings(_this.host, info.fileNames, ts.toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), ts.toPath(info.safeListPath, info.safeListPath, getCanonicalFileName), info.packageNameToTypingLocation, info.typeAcquisition, info.unresolvedImports);
});
};
return CoreServicesShimObject;