diff --git a/Jakefile.js b/Jakefile.js index a111b40336c..309f5b94169 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -113,14 +113,14 @@ task(TaskNames.local, [ const RunTestsPrereqs = [TaskNames.lib, Paths.servicesDefinitionFile, Paths.tsserverLibraryDefinitionFile]; desc("Runs all the tests in parallel using the built run.js file. Optional arguments are: t[ests]=category1|category2|... d[ebug]=true."); task(TaskNames.runtestsParallel, RunTestsPrereqs, function () { - tsbuild([ConfigFileFor.runjs, ConfigFileFor.lint], true, () => { + tsbuild([ConfigFileFor.runjs], true, () => { runConsoleTests("min", /*parallel*/ true); }); }, { async: true }); desc("Runs all the tests in parallel using the built run.js file. Optional arguments are: t[ests]=category1|category2|... d[ebug]=true."); task(TaskNames.runtests, RunTestsPrereqs, function () { - tsbuild([ConfigFileFor.runjs, ConfigFileFor.lint], true, () => { + tsbuild([ConfigFileFor.runjs], true, () => { runConsoleTests('mocha-fivemat-progress-reporter', /*runInParallel*/ false); }); }, { async: true }); diff --git a/lib/tsc.js b/lib/tsc.js index 00c1db6c1b5..81404fac6fa 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -1,19 +1,3 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ - - "use strict";"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { @@ -29,34 +13,16 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook }; var ts; (function (ts) { - // WARNING: The script `configureNightly.ts` uses a regexp to parse out these values. - // If changing the text in this section, be sure to test `configureNightly` too. ts.versionMajorMinor = "3.0"; - /** The version of the TypeScript compiler release */ ts.version = ts.versionMajorMinor + ".0-dev"; })(ts || (ts = {})); (function (ts) { - /* @internal */ - var Comparison; - (function (Comparison) { - Comparison[Comparison["LessThan"] = -1] = "LessThan"; - Comparison[Comparison["EqualTo"] = 0] = "EqualTo"; - Comparison[Comparison["GreaterThan"] = 1] = "GreaterThan"; - })(Comparison = ts.Comparison || (ts.Comparison = {})); -})(ts || (ts = {})); -/* @internal */ -(function (ts) { - /** Create a MapLike with good performance. */ function createDictionaryObject() { - var map = Object.create(/*prototype*/ null); // tslint:disable-line:no-null-keyword - // Using 'delete' on an object causes V8 to put the object in dictionary mode. - // This disables creation of hidden classes, which are expensive when an object is - // constantly changing shape. + var map = Object.create(null); map.__ = undefined; delete map.__; return map; } - /** Create a new map. If a template object is provided, the map will copy entries from it. */ function createMap() { return new ts.MapCtr(); } @@ -72,8 +38,6 @@ var ts; ts.createMapFromEntries = createMapFromEntries; function createMapFromTemplate(template) { var map = new ts.MapCtr(); - // Copies keys/values from template. Note that for..in will not throw if - // template is undefined, and instead will just exit the loop. for (var key in template) { if (hasOwnProperty.call(template, key)) { map.set(key, template[key]); @@ -82,12 +46,9 @@ var ts; return map; } ts.createMapFromTemplate = createMapFromTemplate; - // Internet Explorer's Map doesn't support iteration, so don't use it. - // tslint:disable-next-line no-in-operator variable-name ts.MapCtr = typeof Map !== "undefined" && "entries" in Map.prototype ? Map : shimMap(); - // Keep the class inside a function so it doesn't get compiled if it's not used. function shimMap() { - var MapIterator = /** @class */ (function () { + var MapIterator = (function () { function MapIterator(data, selector) { this.index = 0; this.data = data; @@ -104,7 +65,7 @@ var ts; }; return MapIterator; }()); - return /** @class */ (function () { + return (function () { function class_1() { this.data = createDictionaryObject(); this.size = 0; @@ -120,7 +81,6 @@ var ts; return this; }; class_1.prototype.has = function (key) { - // tslint:disable-next-line:no-in-operator return key in this.data; }; class_1.prototype.delete = function (key) { @@ -156,11 +116,6 @@ var ts; return array ? array.length : 0; } ts.length = length; - /** - * Iterates through 'array' by index and performs the callback on each element of array until the callback - * returns a truthy value, then returns that value. - * If no such value is found, the callback is applied to each element of array and undefined is returned. - */ function forEach(array, callback) { if (array) { for (var i = 0; i < array.length; i++) { @@ -173,7 +128,6 @@ var ts; return undefined; } ts.forEach = forEach; - /** Like `forEach`, but suitable for use with numbers and strings (which may be falsy). */ function firstDefined(array, callback) { if (array === undefined) { return undefined; @@ -232,11 +186,6 @@ var ts; return map; } ts.zipToMap = zipToMap; - /** - * Iterates through `array` by index and performs the callback on each element of array until the callback - * returns a falsey value, then returns false. - * If no such value is found, the callback is applied to each element of array and `true` is returned. - */ function every(array, callback) { if (array) { for (var i = 0; i < array.length; i++) { @@ -268,7 +217,6 @@ var ts; return undefined; } ts.findLast = findLast; - /** Works like Array.prototype.findIndex, returning `-1` if no element satisfying the predicate is found. */ function findIndex(array, predicate, startIndex) { for (var i = startIndex || 0; i < array.length; i++) { if (predicate(array[i], i)) { @@ -287,10 +235,6 @@ var ts; return -1; } ts.findLastIndex = findLastIndex; - /** - * Returns the first truthy result of `callback`, or else fails. - * This is like `forEach`, but never returns undefined. - */ function findMap(array, callback) { for (var i = 0; i < array.length; i++) { var result = callback(array[i], i); @@ -621,7 +565,6 @@ var ts; return false; } ts.some = some; - /** Calls the callback with (start, afterEnd) index pairs for each range where 'pred' is true. */ function getRangesWhere(arr, pred, cb) { var start; for (var i = 0; i < arr.length; i++) { @@ -648,8 +591,6 @@ var ts; } ts.concatenate = concatenate; function deduplicateRelational(array, equalityComparer, comparer) { - // Perform a stable sort of the array. This ensures the first entry in a list of - // duplicates remains the first entry in the result. var indices = array.map(function (_, i) { return i; }); stableSortIndices(array, indices, comparer); var last = array[indices[0]]; @@ -662,7 +603,6 @@ var ts; last = item; } } - // restore original order deduplicated.sort(); return deduplicated.map(function (i) { return array[i]; }); } @@ -692,13 +632,10 @@ var ts; for (var i = 1; i < array.length; i++) { var next = array[i]; switch (comparer(next, last)) { - // equality comparison case true: - // relational comparison - case 0 /* EqualTo */: + case 0: continue; - case -1 /* LessThan */: - // If `array` is sorted, `next` should **never** be less than `last`. + case -1: return Debug.fail("Array is unsorted."); } deduplicated.push(last = next); @@ -754,41 +691,25 @@ var ts; return result || array; } ts.compact = compact; - /** - * Gets the relative complement of `arrayA` with respect to `arrayB`, returning the elements that - * are not present in `arrayA` but are present in `arrayB`. Assumes both arrays are sorted - * based on the provided comparer. - */ function relativeComplement(arrayA, arrayB, comparer) { if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0) return arrayB; var result = []; loopB: for (var offsetA = 0, offsetB = 0; offsetB < arrayB.length; offsetB++) { if (offsetB > 0) { - // Ensure `arrayB` is properly sorted. - Debug.assertGreaterThanOrEqual(comparer(arrayB[offsetB], arrayB[offsetB - 1]), 0 /* EqualTo */); + Debug.assertGreaterThanOrEqual(comparer(arrayB[offsetB], arrayB[offsetB - 1]), 0); } loopA: for (var startA = offsetA; offsetA < arrayA.length; offsetA++) { if (offsetA > startA) { - // Ensure `arrayA` is properly sorted. We only need to perform this check if - // `offsetA` has changed since we entered the loop. - Debug.assertGreaterThanOrEqual(comparer(arrayA[offsetA], arrayA[offsetA - 1]), 0 /* EqualTo */); + Debug.assertGreaterThanOrEqual(comparer(arrayA[offsetA], arrayA[offsetA - 1]), 0); } switch (comparer(arrayB[offsetB], arrayA[offsetA])) { - case -1 /* LessThan */: - // If B is less than A, B does not exist in arrayA. Add B to the result and - // move to the next element in arrayB without changing the current position - // in arrayA. + case -1: result.push(arrayB[offsetB]); continue loopB; - case 0 /* EqualTo */: - // If B is equal to A, B exists in arrayA. Move to the next element in - // arrayB without adding B to the result or changing the current position - // in arrayA. + case 0: continue loopB; - case 1 /* GreaterThan */: - // If B is greater than A, we need to keep looking for B in arrayA. Move to - // the next element in arrayA and recheck. + case 1: continue loopA; } } @@ -814,10 +735,6 @@ var ts; return to; } ts.append = append; - /** - * Gets the actual offset into an array for a relative offset. Negative offsets indicate a - * position offset from the end of the array. - */ function toOffset(array, offset) { return offset < 0 ? array.length + offset : offset; } @@ -836,9 +753,6 @@ var ts; return to; } ts.addRange = addRange; - /** - * @return Whether the value was added. - */ function pushIfUnique(array, toAdd, equalityComparer) { if (contains(array, toAdd, equalityComparer)) { return false; @@ -849,9 +763,6 @@ var ts; } } ts.pushIfUnique = pushIfUnique; - /** - * Unlike `pushIfUnique`, this can take `undefined` as an input, and returns a new array. - */ function appendIfUnique(array, toAdd, equalityComparer) { if (array) { pushIfUnique(array, toAdd, equalityComparer); @@ -863,12 +774,8 @@ var ts; } ts.appendIfUnique = appendIfUnique; function stableSortIndices(array, indices, comparer) { - // sort indices by value then position indices.sort(function (x, y) { return comparer(array[x], array[y]) || compareValues(x, y); }); } - /** - * Returns a new sorted array. - */ function sort(array, comparer) { return array.slice().sort(comparer); } @@ -903,9 +810,6 @@ var ts; } }; } ts.arrayIterator = arrayIterator; - /** - * Stable sort of an array. Elements equal to each other maintain their relative position in the array. - */ function stableSort(array, comparer) { var indices = array.map(function (_, i) { return i; }); stableSortIndices(array, indices, comparer); @@ -922,10 +826,6 @@ var ts; return true; } ts.rangeEquals = rangeEquals; - /** - * Returns the element at a specific offset in an array if non-empty, `undefined` otherwise. - * A negative offset indicates the element should be retrieved from the end of the array. - */ function elementAt(array, offset) { if (array) { offset = toOffset(array, offset); @@ -936,9 +836,6 @@ var ts; return undefined; } ts.elementAt = elementAt; - /** - * Returns the first element of an array if non-empty, `undefined` otherwise. - */ function firstOrUndefined(array) { return array.length === 0 ? undefined : array[0]; } @@ -948,9 +845,6 @@ var ts; return array[0]; } ts.first = first; - /** - * Returns the last element of an array if non-empty, `undefined` otherwise. - */ function lastOrUndefined(array) { return array.length === 0 ? undefined : array[array.length - 1]; } @@ -960,9 +854,6 @@ var ts; return array[array.length - 1]; } ts.last = last; - /** - * Returns the only element of an array if it contains only one element, `undefined` otherwise. - */ function singleOrUndefined(array) { return array && array.length === 1 ? array[0] @@ -981,17 +872,6 @@ var ts; return result; } ts.replaceElement = replaceElement; - /** - * Performs a binary search, finding the index at which `value` occurs in `array`. - * If no such index is found, returns the 2's-complement of first index at which - * `array[index]` exceeds `value`. - * @param array A sorted array whose first element must be no larger than number - * @param value The value to be searched for in the array. - * @param keySelector A callback used to select the search key from `value` and each element of - * `array`. - * @param keyComparer A callback used to compare two keys in a sorted array. - * @param offset An offset into `array` at which to start the search. - */ function binarySearch(array, value, keySelector, keyComparer, offset) { if (!array || array.length === 0) { return -1; @@ -1003,12 +883,12 @@ var ts; var middle = low + ((high - low) >> 1); var midKey = keySelector(array[middle]); switch (keyComparer(midKey, key)) { - case -1 /* LessThan */: + case -1: low = middle + 1; break; - case 0 /* EqualTo */: + case 0: return middle; - case 1 /* GreaterThan */: + case 1: high = middle - 1; break; } @@ -1041,29 +921,14 @@ var ts; } ts.reduceLeft = reduceLeft; var hasOwnProperty = Object.prototype.hasOwnProperty; - /** - * Indicates whether a map-like contains an own property with the specified key. - * - * @param map A map-like. - * @param key A property key. - */ function hasProperty(map, key) { return hasOwnProperty.call(map, key); } ts.hasProperty = hasProperty; - /** - * Gets the value of an owned property in a map-like. - * - * @param map A map-like. - * @param key A property key. - */ function getProperty(map, key) { return hasOwnProperty.call(map, key) ? map[key] : undefined; } ts.getProperty = getProperty; - /** - * Gets the owned, enumerable property keys of a map-like. - */ function getOwnKeys(map) { var keys = []; for (var key in map) { @@ -1102,19 +967,13 @@ var ts; var arg = args_1[_a]; for (var p in arg) { if (hasProperty(arg, p)) { - t[p] = arg[p]; // TODO: GH#23368 + t[p] = arg[p]; } } } return t; } ts.assign = assign; - /** - * Performs a shallow equality comparison of the contents of two map-likes. - * - * @param left A map-like whose properties should be compared. - * @param right A map-like whose properties should be compared. - */ function equalOwnProperties(left, right, equalityComparer) { if (equalityComparer === void 0) { equalityComparer = equateValues; } if (left === right) @@ -1225,9 +1084,6 @@ var ts; } } } - /** - * Tests whether a value is an array. - */ function isArray(value) { return Array.isArray ? Array.isArray(value) : value instanceof Array; } @@ -1236,9 +1092,6 @@ var ts; return isArray(value) ? value : [value]; } ts.toArray = toArray; - /** - * Tests whether a value is string - */ function isString(text) { return typeof text === "string"; } @@ -1253,22 +1106,16 @@ var ts; return Debug.fail("Invalid cast. The supplied value " + value + " did not pass the test '" + Debug.getFunctionName(test) + "'."); } ts.cast = cast; - /** Does nothing. */ - function noop(_) { } // tslint:disable-line no-empty + function noop(_) { } ts.noop = noop; - /** Do nothing and return false */ function returnFalse() { return false; } ts.returnFalse = returnFalse; - /** Do nothing and return true */ function returnTrue() { return true; } ts.returnTrue = returnTrue; - /** Returns its argument. */ function identity(x) { return x; } ts.identity = identity; - /** Returns lower case string */ function toLowerCase(x) { return x.toLowerCase(); } ts.toLowerCase = toLowerCase; - /** Throws an error because a function is not implemented. */ function notImplemented() { throw new Error("Not implemented"); } @@ -1334,16 +1181,9 @@ var ts; } } ts.compose = compose; - var AssertionLevel; - (function (AssertionLevel) { - AssertionLevel[AssertionLevel["None"] = 0] = "None"; - AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; - AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; - AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; - })(AssertionLevel = ts.AssertionLevel || (ts.AssertionLevel = {})); var Debug; (function (Debug) { - Debug.currentAssertionLevel = 0 /* None */; + Debug.currentAssertionLevel = 0; Debug.isDebugging = false; function shouldAssert(level) { return Debug.currentAssertionLevel >= level; @@ -1429,14 +1269,6 @@ var ts; return a === b; } ts.equateValues = equateValues; - /** - * Compare the equality of two strings using a case-sensitive ordinal comparison. - * - * Case-sensitive comparisons compare both strings one code-point at a time using the integer - * value of each code-point after applying `toUpperCase` to each string. We always map both - * strings to their upper-case form as some unicode characters do not properly round-trip to - * lowercase (such as `ẞ` (German sharp capital s)). - */ function equateStringsCaseInsensitive(a, b) { return a === b || a !== undefined @@ -1444,69 +1276,37 @@ var ts; && a.toUpperCase() === b.toUpperCase(); } ts.equateStringsCaseInsensitive = equateStringsCaseInsensitive; - /** - * Compare the equality of two strings using a case-sensitive ordinal comparison. - * - * Case-sensitive comparisons compare both strings one code-point at a time using the - * integer value of each code-point. - */ function equateStringsCaseSensitive(a, b) { return equateValues(a, b); } ts.equateStringsCaseSensitive = equateStringsCaseSensitive; function compareComparableValues(a, b) { - return a === b ? 0 /* EqualTo */ : - a === undefined ? -1 /* LessThan */ : - b === undefined ? 1 /* GreaterThan */ : - a < b ? -1 /* LessThan */ : - 1 /* GreaterThan */; + return a === b ? 0 : + a === undefined ? -1 : + b === undefined ? 1 : + a < b ? -1 : + 1; } - /** - * Compare two numeric values for their order relative to each other. - * To compare strings, use any of the `compareStrings` functions. - */ function compareValues(a, b) { return compareComparableValues(a, b); } ts.compareValues = compareValues; function min(a, b, compare) { - return compare(a, b) === -1 /* LessThan */ ? a : b; + return compare(a, b) === -1 ? a : b; } ts.min = min; - /** - * Compare two strings using a case-insensitive ordinal comparison. - * - * Ordinal comparisons are based on the difference between the unicode code points of both - * strings. Characters with multiple unicode representations are considered unequal. Ordinal - * comparisons provide predictable ordering, but place "a" after "B". - * - * Case-insensitive comparisons compare both strings one code-point at a time using the integer - * value of each code-point after applying `toUpperCase` to each string. We always map both - * strings to their upper-case form as some unicode characters do not properly round-trip to - * lowercase (such as `ẞ` (German sharp capital s)). - */ function compareStringsCaseInsensitive(a, b) { if (a === b) - return 0 /* EqualTo */; + return 0; if (a === undefined) - return -1 /* LessThan */; + return -1; if (b === undefined) - return 1 /* GreaterThan */; + return 1; a = a.toUpperCase(); b = b.toUpperCase(); - return a < b ? -1 /* LessThan */ : a > b ? 1 /* GreaterThan */ : 0 /* EqualTo */; + return a < b ? -1 : a > b ? 1 : 0; } ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; - /** - * Compare two strings using a case-sensitive ordinal comparison. - * - * Ordinal comparisons are based on the difference between the unicode code points of both - * strings. Characters with multiple unicode representations are considered unequal. Ordinal - * comparisons provide predictable ordering, but place "a" after "B". - * - * Case-sensitive comparisons compare both strings one code-point at a time using the integer - * value of each code-point. - */ function compareStringsCaseSensitive(a, b) { return compareComparableValues(a, b); } @@ -1515,9 +1315,6 @@ var ts; return ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive; } ts.getStringComparer = getStringComparer; - /** - * Creates a string comparer for use with string collation in the UI. - */ var createUIStringComparer = (function () { var defaultComparer; var enUSComparer; @@ -1525,22 +1322,19 @@ var ts; return createStringComparer; function compareWithCallback(a, b, comparer) { if (a === b) - return 0 /* EqualTo */; + return 0; if (a === undefined) - return -1 /* LessThan */; + return -1; if (b === undefined) - return 1 /* GreaterThan */; + return 1; var value = comparer(a, b); - return value < 0 ? -1 /* LessThan */ : value > 0 ? 1 /* GreaterThan */ : 0 /* EqualTo */; + return value < 0 ? -1 : value > 0 ? 1 : 0; } function createIntlCollatorStringComparer(locale) { - // Intl.Collator.prototype.compare is bound to the collator. See NOTE in - // http://www.ecma-international.org/ecma-402/2.0/#sec-Intl.Collator.prototype.compare var comparer = new Intl.Collator(locale, { usage: "sort", sensitivity: "variant" }).compare; return function (a, b) { return compareWithCallback(a, b, comparer); }; } function createLocaleCompareStringComparer(locale) { - // if the locale is not the default locale (`undefined`), use the fallback comparer. if (locale !== undefined) return createFallbackStringComparer(); return function (a, b) { return compareWithCallback(a, b, compareStrings); }; @@ -1549,39 +1343,26 @@ var ts; } } function createFallbackStringComparer() { - // An ordinal comparison puts "A" after "b", but for the UI we want "A" before "b". - // We first sort case insensitively. So "Aaa" will come before "baa". - // Then we sort case sensitively, so "aaa" will come before "Aaa". - // - // For case insensitive comparisons we always map both strings to their - // upper-case form as some unicode characters do not properly round-trip to - // lowercase (such as `ẞ` (German sharp capital s)). return function (a, b) { return compareWithCallback(a, b, compareDictionaryOrder); }; function compareDictionaryOrder(a, b) { return compareStrings(a.toUpperCase(), b.toUpperCase()) || compareStrings(a, b); } function compareStrings(a, b) { - return a < b ? -1 /* LessThan */ : a > b ? 1 /* GreaterThan */ : 0 /* EqualTo */; + return a < b ? -1 : a > b ? 1 : 0; } } function getStringComparerFactory() { - // If the host supports Intl, we use it for comparisons using the default locale. if (typeof Intl === "object" && typeof Intl.Collator === "function") { return createIntlCollatorStringComparer; } - // If the host does not support Intl, we fall back to localeCompare. - // localeCompare in Node v0.10 is just an ordinal comparison, so don't use it. if (typeof String.prototype.localeCompare === "function" && typeof String.prototype.toLocaleUpperCase === "function" && "a".localeCompare("B") < 0) { return createLocaleCompareStringComparer; } - // Otherwise, fall back to ordinal comparison: return createFallbackStringComparer; } function createStringComparer(locale) { - // Hold onto common string comparers. This avoids constantly reallocating comparers during - // tests. if (locale === undefined) { return defaultComparer || (defaultComparer = stringComparerFactory(locale)); } @@ -1606,50 +1387,25 @@ var ts; } } ts.setUILocale = setUILocale; - /** - * Compare two strings in a using the case-sensitive sort behavior of the UI locale. - * - * Ordering is not predictable between different host locales, but is best for displaying - * ordered data for UI presentation. Characters with multiple unicode representations may - * be considered equal. - * - * Case-sensitive comparisons compare strings that differ in base characters, or - * accents/diacritic marks, or case as unequal. - */ function compareStringsCaseSensitiveUI(a, b) { var comparer = uiComparerCaseSensitive || (uiComparerCaseSensitive = createUIStringComparer(uiLocale)); return comparer(a, b); } ts.compareStringsCaseSensitiveUI = compareStringsCaseSensitiveUI; function compareProperties(a, b, key, comparer) { - return a === b ? 0 /* EqualTo */ : - a === undefined ? -1 /* LessThan */ : - b === undefined ? 1 /* GreaterThan */ : + return a === b ? 0 : + a === undefined ? -1 : + b === undefined ? 1 : comparer(a[key], b[key]); } ts.compareProperties = compareProperties; - /** True is greater than false. */ function compareBooleans(a, b) { return compareValues(a ? 1 : 0, b ? 1 : 0); } ts.compareBooleans = compareBooleans; - /** - * Given a name and a list of names that are *not* equal to the name, return a spelling suggestion if there is one that is close enough. - * Names less than length 3 only check for case-insensitive equality, not Levenshtein distance. - * - * If there is a candidate that's the same except for case, return that. - * If there is a candidate that's within one edit of the name, return that. - * Otherwise, return the candidate with the smallest Levenshtein distance, - * except for candidates: - * * With no name - * * Whose length differs from the target name by more than 0.34 of the length of the name. - * * Whose levenshtein distance is more than 0.4 of the length of the name - * (0.4 allows 1 substitution/transposition for every 5 characters, - * and 1 insertion/deletion at 3 characters) - */ function getSpellingSuggestion(name, candidates, getName) { var maximumLengthDifference = Math.min(2, Math.floor(name.length * 0.34)); - var bestDistance = Math.floor(name.length * 0.4) + 1; // If the best result isn't better than this, don't bother. + var bestDistance = Math.floor(name.length * 0.4) + 1; var bestCandidate; var justCheckExactMatches = false; var nameLowerCase = name.toLowerCase(); @@ -1665,10 +1421,8 @@ var ts; continue; } if (candidateName.length < 3) { - // Don't bother, user would have noticed a 2-character name having an extra character continue; } - // Only care about a result better than the best so far. var distance = levenshteinWithMax(nameLowerCase, candidateNameLowerCase, bestDistance - 1); if (distance === undefined) { continue; @@ -1678,7 +1432,7 @@ var ts; bestCandidate = candidate; } else { - Debug.assert(distance < bestDistance); // Else `levenshteinWithMax` should return undefined + Debug.assert(distance < bestDistance); bestDistance = distance; bestCandidate = candidate; } @@ -1690,7 +1444,6 @@ var ts; function levenshteinWithMax(s1, s2, max) { var previous = new Array(s2.length + 1); var current = new Array(s2.length + 1); - /** Represents any value > max. We don't care about the particular value. */ var big = max + 1; for (var i = 0; i <= s2.length; i++) { previous[i] = i; @@ -1700,7 +1453,6 @@ var ts; var minJ = i > max ? i - max : 1; var maxJ = s2.length > max + i ? max + i : s2.length; current[0] = i; - /** Smallest value of the matrix in the ith column. */ var colMin = i; for (var j = 1; j < minJ; j++) { current[j] = big; @@ -1708,7 +1460,7 @@ var ts; for (var j = minJ; j <= maxJ; j++) { var dist = c1 === s2.charCodeAt(j - 1) ? previous[j - 1] - : Math.min(/*delete*/ previous[j] + 1, /*insert*/ current[j - 1] + 1, /*substitute*/ previous[j - 1] + 2); + : Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + 2); current[j] = dist; colMin = Math.min(colMin, dist); } @@ -1716,7 +1468,6 @@ var ts; current[j] = big; } if (colMin > max) { - // Give up -- everything in this column is > max and it can't get better in future columns. return undefined; } var temp = previous; @@ -1757,17 +1508,11 @@ var ts; return false; } ts.fileExtensionIsOneOf = fileExtensionIsOneOf; - /** - * Takes a string like "jquery-min.4.2.3" and returns "jquery" - */ function removeMinAndVersionNumbers(fileName) { - // Match a "." or "-" followed by a version number or 'min' at the end of the name var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/; - // The "min" or version may both be present, in either order, so try applying the above twice. return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, ""); } ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers; - /** 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) { @@ -1778,9 +1523,7 @@ var ts; 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++) { array[i] = array[i + 1]; } @@ -1788,17 +1531,14 @@ var ts; } ts.orderedRemoveItemAt = orderedRemoveItemAt; function unorderedRemoveItemAt(array, index) { - // Fill in the "hole" left at `index`. array[index] = array[array.length - 1]; array.pop(); } ts.unorderedRemoveItemAt = unorderedRemoveItemAt; - /** Remove the *first* occurrence of `item` from the array. */ function unorderedRemoveItem(array, item) { return unorderedRemoveFirstItemWhere(array, function (element) { return element === item; }); } ts.unorderedRemoveItem = unorderedRemoveItem; - /** Remove the *first* element satisfying `predicate`. */ function unorderedRemoveFirstItemWhere(array, predicate) { for (var i = 0; i < array.length; i++) { if (predicate(array[i])) { @@ -1817,19 +1557,13 @@ var ts; return prefix + "*" + suffix; } ts.patternText = patternText; - /** - * Given that candidate matches pattern, returns the text matching the '*'. - * E.g.: matchedText(tryParsePattern("foo*baz"), "foobarbaz") === "bar" - */ function matchedText(pattern, candidate) { Debug.assert(isPatternMatch(pattern, candidate)); return candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length); } ts.matchedText = matchedText; - /** Return the object corresponding to the best pattern to match `candidate`. */ function findBestPatternMatch(values, getPattern, candidate) { var matchedValue; - // use length of prefix as betterness criteria var longestMatchPrefixLength = -1; for (var _i = 0, values_2 = values; _i < values_2.length; _i++) { var v = values_2[_i]; @@ -1868,7 +1602,7 @@ var ts; return function (arg) { return f(arg) || g(arg); }; } ts.or = or; - function assertTypeIsNever(_) { } // tslint:disable-line no-empty + function assertTypeIsNever(_) { } ts.assertTypeIsNever = assertTypeIsNever; function singleElementArray(t) { return t === undefined ? undefined : [t]; @@ -1884,11 +1618,11 @@ var ts; var newItem = newItems[newIndex]; var oldItem = oldItems[oldIndex]; var compareResult = comparer(newItem, oldItem); - if (compareResult === -1 /* LessThan */) { + if (compareResult === -1) { inserted(newItem); newIndex++; } - else if (compareResult === 1 /* GreaterThan */) { + else if (compareResult === 1) { deleted(oldItem); oldIndex++; } @@ -1907,29 +1641,19 @@ var ts; } ts.enumerateInsertsAndDeletes = enumerateInsertsAndDeletes; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { - /** Gets a timestamp with (at least) ms resolution */ ts.timestamp = typeof performance !== "undefined" && performance.now ? function () { return performance.now(); } : Date.now ? Date.now : function () { return +(new Date()); }; })(ts || (ts = {})); -/*@internal*/ -/** Performance measurements for the compiler. */ (function (ts) { var performance; (function (performance) { - // NOTE: cannot use ts.noop as core.ts loads after this var profilerEvent = typeof onProfilerEvent === "function" && onProfilerEvent.profiler === true ? onProfilerEvent : function () { }; var enabled = false; var profilerStart = 0; var counts; var marks; var measures; - /** - * Marks a performance event. - * - * @param markName The name of the mark. - */ function mark(markName) { if (enabled) { marks.set(markName, ts.timestamp()); @@ -1938,15 +1662,6 @@ var ts; } } performance.mark = mark; - /** - * Adds a performance measurement with the specified name. - * - * @param measureName The name of the performance measurement. - * @param startMarkName The name of the starting mark. If not supplied, the point at which the - * profiler was enabled is used. - * @param endMarkName The name of the ending mark. If not supplied, the current timestamp is - * used. - */ function measure(measureName, startMarkName, endMarkName) { if (enabled) { var end = endMarkName && marks.get(endMarkName) || ts.timestamp(); @@ -1955,36 +1670,20 @@ var ts; } } performance.measure = measure; - /** - * Gets the number of times a marker was encountered. - * - * @param markName The name of the mark. - */ function getCount(markName) { return counts && counts.get(markName) || 0; } performance.getCount = getCount; - /** - * Gets the total duration of all measurements with the supplied name. - * - * @param measureName The name of the measure whose durations should be accumulated. - */ function getDuration(measureName) { return measures && measures.get(measureName) || 0; } performance.getDuration = getDuration; - /** - * Iterate over each measure, performing some action - * - * @param cb The action to perform for each measure - */ function forEachMeasure(cb) { measures.forEach(function (measure, key) { cb(key, measure); }); } performance.forEachMeasure = forEachMeasure; - /** Enables (and resets) performance measurements for the compiler. */ function enable() { counts = ts.createMap(); marks = ts.createMap(); @@ -1993,7 +1692,6 @@ var ts; profilerStart = ts.timestamp(); } performance.enable = enable; - /** Disables performance measurements for the compiler. */ function disable() { enabled = false; } @@ -2002,663 +1700,22 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - // token > SyntaxKind.Identifier => token is a keyword - // Also, If you add a new SyntaxKind be sure to keep the `Markers` section at the bottom in sync - var SyntaxKind; - (function (SyntaxKind) { - SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; - SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken"; - SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 2] = "SingleLineCommentTrivia"; - SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 3] = "MultiLineCommentTrivia"; - SyntaxKind[SyntaxKind["NewLineTrivia"] = 4] = "NewLineTrivia"; - SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 5] = "WhitespaceTrivia"; - // We detect and preserve #! on the first line - SyntaxKind[SyntaxKind["ShebangTrivia"] = 6] = "ShebangTrivia"; - // We detect and provide better error recovery when we encounter a git merge marker. This - // allows us to edit files with git-conflict markers in them in a much more pleasant manner. - SyntaxKind[SyntaxKind["ConflictMarkerTrivia"] = 7] = "ConflictMarkerTrivia"; - // Literals - SyntaxKind[SyntaxKind["NumericLiteral"] = 8] = "NumericLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 9] = "StringLiteral"; - SyntaxKind[SyntaxKind["JsxText"] = 10] = "JsxText"; - SyntaxKind[SyntaxKind["JsxTextAllWhiteSpaces"] = 11] = "JsxTextAllWhiteSpaces"; - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["NoSubstitutionTemplateLiteral"] = 13] = "NoSubstitutionTemplateLiteral"; - // Pseudo-literals - SyntaxKind[SyntaxKind["TemplateHead"] = 14] = "TemplateHead"; - SyntaxKind[SyntaxKind["TemplateMiddle"] = 15] = "TemplateMiddle"; - SyntaxKind[SyntaxKind["TemplateTail"] = 16] = "TemplateTail"; - // Punctuation - SyntaxKind[SyntaxKind["OpenBraceToken"] = 17] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 18] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 19] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 20] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 21] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 22] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 23] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 24] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 25] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 26] = "CommaToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 27] = "LessThanToken"; - SyntaxKind[SyntaxKind["LessThanSlashToken"] = 28] = "LessThanSlashToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 29] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 30] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 31] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 32] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 33] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 34] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 35] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 36] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 37] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 38] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 39] = "AsteriskToken"; - SyntaxKind[SyntaxKind["AsteriskAsteriskToken"] = 40] = "AsteriskAsteriskToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 41] = "SlashToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 42] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 43] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 44] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 45] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 46] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 47] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 48] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 49] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 50] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 51] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 52] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 53] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 54] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 55] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 56] = "ColonToken"; - SyntaxKind[SyntaxKind["AtToken"] = 57] = "AtToken"; - // Assignments - SyntaxKind[SyntaxKind["EqualsToken"] = 58] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 59] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 60] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 61] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 62] = "AsteriskAsteriskEqualsToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 63] = "SlashEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 64] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 65] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 66] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 67] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 68] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 69] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 70] = "CaretEqualsToken"; - // Identifiers - SyntaxKind[SyntaxKind["Identifier"] = 71] = "Identifier"; - // Reserved words - SyntaxKind[SyntaxKind["BreakKeyword"] = 72] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 73] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 74] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ClassKeyword"] = 75] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 76] = "ConstKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 77] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 78] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 79] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 80] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 81] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 82] = "ElseKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 83] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 84] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 85] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 86] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 87] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 88] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 89] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 90] = "IfKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 91] = "ImportKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 92] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 93] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 94] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 95] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 96] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 97] = "SuperKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 98] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 99] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 100] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 101] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 102] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 103] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 104] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 105] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 106] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 107] = "WithKeyword"; - // Strict mode reserved words - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 108] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 109] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 110] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 111] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 112] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 113] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 114] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 115] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 116] = "YieldKeyword"; - // Contextual keywords - SyntaxKind[SyntaxKind["AbstractKeyword"] = 117] = "AbstractKeyword"; - SyntaxKind[SyntaxKind["AsKeyword"] = 118] = "AsKeyword"; - SyntaxKind[SyntaxKind["AnyKeyword"] = 119] = "AnyKeyword"; - SyntaxKind[SyntaxKind["AsyncKeyword"] = 120] = "AsyncKeyword"; - SyntaxKind[SyntaxKind["AwaitKeyword"] = 121] = "AwaitKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 122] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 123] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 124] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 125] = "GetKeyword"; - SyntaxKind[SyntaxKind["InferKeyword"] = 126] = "InferKeyword"; - SyntaxKind[SyntaxKind["IsKeyword"] = 127] = "IsKeyword"; - SyntaxKind[SyntaxKind["KeyOfKeyword"] = 128] = "KeyOfKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 129] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["NamespaceKeyword"] = 130] = "NamespaceKeyword"; - SyntaxKind[SyntaxKind["NeverKeyword"] = 131] = "NeverKeyword"; - SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 132] = "ReadonlyKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 133] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 134] = "NumberKeyword"; - SyntaxKind[SyntaxKind["ObjectKeyword"] = 135] = "ObjectKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 136] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 137] = "StringKeyword"; - SyntaxKind[SyntaxKind["SymbolKeyword"] = 138] = "SymbolKeyword"; - SyntaxKind[SyntaxKind["TypeKeyword"] = 139] = "TypeKeyword"; - SyntaxKind[SyntaxKind["UndefinedKeyword"] = 140] = "UndefinedKeyword"; - SyntaxKind[SyntaxKind["UniqueKeyword"] = 141] = "UniqueKeyword"; - SyntaxKind[SyntaxKind["UnknownKeyword"] = 142] = "UnknownKeyword"; - SyntaxKind[SyntaxKind["FromKeyword"] = 143] = "FromKeyword"; - SyntaxKind[SyntaxKind["GlobalKeyword"] = 144] = "GlobalKeyword"; - SyntaxKind[SyntaxKind["OfKeyword"] = 145] = "OfKeyword"; - // Parse tree nodes - // Names - SyntaxKind[SyntaxKind["QualifiedName"] = 146] = "QualifiedName"; - SyntaxKind[SyntaxKind["ComputedPropertyName"] = 147] = "ComputedPropertyName"; - // Signature elements - SyntaxKind[SyntaxKind["TypeParameter"] = 148] = "TypeParameter"; - SyntaxKind[SyntaxKind["Parameter"] = 149] = "Parameter"; - SyntaxKind[SyntaxKind["Decorator"] = 150] = "Decorator"; - // TypeMember - SyntaxKind[SyntaxKind["PropertySignature"] = 151] = "PropertySignature"; - SyntaxKind[SyntaxKind["PropertyDeclaration"] = 152] = "PropertyDeclaration"; - SyntaxKind[SyntaxKind["MethodSignature"] = 153] = "MethodSignature"; - SyntaxKind[SyntaxKind["MethodDeclaration"] = 154] = "MethodDeclaration"; - SyntaxKind[SyntaxKind["Constructor"] = 155] = "Constructor"; - SyntaxKind[SyntaxKind["GetAccessor"] = 156] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 157] = "SetAccessor"; - SyntaxKind[SyntaxKind["CallSignature"] = 158] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 159] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 160] = "IndexSignature"; - // Type - SyntaxKind[SyntaxKind["TypePredicate"] = 161] = "TypePredicate"; - SyntaxKind[SyntaxKind["TypeReference"] = 162] = "TypeReference"; - SyntaxKind[SyntaxKind["FunctionType"] = 163] = "FunctionType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 164] = "ConstructorType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 165] = "TypeQuery"; - SyntaxKind[SyntaxKind["TypeLiteral"] = 166] = "TypeLiteral"; - SyntaxKind[SyntaxKind["ArrayType"] = 167] = "ArrayType"; - SyntaxKind[SyntaxKind["TupleType"] = 168] = "TupleType"; - SyntaxKind[SyntaxKind["UnionType"] = 169] = "UnionType"; - SyntaxKind[SyntaxKind["IntersectionType"] = 170] = "IntersectionType"; - SyntaxKind[SyntaxKind["ConditionalType"] = 171] = "ConditionalType"; - SyntaxKind[SyntaxKind["InferType"] = 172] = "InferType"; - SyntaxKind[SyntaxKind["ParenthesizedType"] = 173] = "ParenthesizedType"; - SyntaxKind[SyntaxKind["ThisType"] = 174] = "ThisType"; - SyntaxKind[SyntaxKind["TypeOperator"] = 175] = "TypeOperator"; - SyntaxKind[SyntaxKind["IndexedAccessType"] = 176] = "IndexedAccessType"; - SyntaxKind[SyntaxKind["MappedType"] = 177] = "MappedType"; - SyntaxKind[SyntaxKind["LiteralType"] = 178] = "LiteralType"; - SyntaxKind[SyntaxKind["ImportType"] = 179] = "ImportType"; - // Binding patterns - SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 180] = "ObjectBindingPattern"; - SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 181] = "ArrayBindingPattern"; - SyntaxKind[SyntaxKind["BindingElement"] = 182] = "BindingElement"; - // Expression - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 183] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 184] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 185] = "PropertyAccessExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 186] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["CallExpression"] = 187] = "CallExpression"; - SyntaxKind[SyntaxKind["NewExpression"] = 188] = "NewExpression"; - SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 189] = "TaggedTemplateExpression"; - SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 190] = "TypeAssertionExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 191] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 192] = "FunctionExpression"; - SyntaxKind[SyntaxKind["ArrowFunction"] = 193] = "ArrowFunction"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 194] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 195] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 196] = "VoidExpression"; - SyntaxKind[SyntaxKind["AwaitExpression"] = 197] = "AwaitExpression"; - SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 198] = "PrefixUnaryExpression"; - SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 199] = "PostfixUnaryExpression"; - SyntaxKind[SyntaxKind["BinaryExpression"] = 200] = "BinaryExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 201] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["TemplateExpression"] = 202] = "TemplateExpression"; - SyntaxKind[SyntaxKind["YieldExpression"] = 203] = "YieldExpression"; - SyntaxKind[SyntaxKind["SpreadElement"] = 204] = "SpreadElement"; - SyntaxKind[SyntaxKind["ClassExpression"] = 205] = "ClassExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 206] = "OmittedExpression"; - SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 207] = "ExpressionWithTypeArguments"; - SyntaxKind[SyntaxKind["AsExpression"] = 208] = "AsExpression"; - SyntaxKind[SyntaxKind["NonNullExpression"] = 209] = "NonNullExpression"; - SyntaxKind[SyntaxKind["MetaProperty"] = 210] = "MetaProperty"; - // Misc - SyntaxKind[SyntaxKind["TemplateSpan"] = 211] = "TemplateSpan"; - SyntaxKind[SyntaxKind["SemicolonClassElement"] = 212] = "SemicolonClassElement"; - // Element - SyntaxKind[SyntaxKind["Block"] = 213] = "Block"; - SyntaxKind[SyntaxKind["VariableStatement"] = 214] = "VariableStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 215] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 216] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["IfStatement"] = 217] = "IfStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 218] = "DoStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 219] = "WhileStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 220] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 221] = "ForInStatement"; - SyntaxKind[SyntaxKind["ForOfStatement"] = 222] = "ForOfStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 223] = "ContinueStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 224] = "BreakStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 225] = "ReturnStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 226] = "WithStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 227] = "SwitchStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 228] = "LabeledStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 229] = "ThrowStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 230] = "TryStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 231] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["VariableDeclaration"] = 232] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarationList"] = 233] = "VariableDeclarationList"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 234] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 235] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 236] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 237] = "TypeAliasDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 238] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 239] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ModuleBlock"] = 240] = "ModuleBlock"; - SyntaxKind[SyntaxKind["CaseBlock"] = 241] = "CaseBlock"; - SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 242] = "NamespaceExportDeclaration"; - SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 243] = "ImportEqualsDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 244] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ImportClause"] = 245] = "ImportClause"; - SyntaxKind[SyntaxKind["NamespaceImport"] = 246] = "NamespaceImport"; - SyntaxKind[SyntaxKind["NamedImports"] = 247] = "NamedImports"; - SyntaxKind[SyntaxKind["ImportSpecifier"] = 248] = "ImportSpecifier"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 249] = "ExportAssignment"; - SyntaxKind[SyntaxKind["ExportDeclaration"] = 250] = "ExportDeclaration"; - SyntaxKind[SyntaxKind["NamedExports"] = 251] = "NamedExports"; - SyntaxKind[SyntaxKind["ExportSpecifier"] = 252] = "ExportSpecifier"; - SyntaxKind[SyntaxKind["MissingDeclaration"] = 253] = "MissingDeclaration"; - // Module references - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 254] = "ExternalModuleReference"; - // JSX - SyntaxKind[SyntaxKind["JsxElement"] = 255] = "JsxElement"; - SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 256] = "JsxSelfClosingElement"; - SyntaxKind[SyntaxKind["JsxOpeningElement"] = 257] = "JsxOpeningElement"; - SyntaxKind[SyntaxKind["JsxClosingElement"] = 258] = "JsxClosingElement"; - SyntaxKind[SyntaxKind["JsxFragment"] = 259] = "JsxFragment"; - SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 260] = "JsxOpeningFragment"; - SyntaxKind[SyntaxKind["JsxClosingFragment"] = 261] = "JsxClosingFragment"; - SyntaxKind[SyntaxKind["JsxAttribute"] = 262] = "JsxAttribute"; - SyntaxKind[SyntaxKind["JsxAttributes"] = 263] = "JsxAttributes"; - SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 264] = "JsxSpreadAttribute"; - SyntaxKind[SyntaxKind["JsxExpression"] = 265] = "JsxExpression"; - // Clauses - SyntaxKind[SyntaxKind["CaseClause"] = 266] = "CaseClause"; - SyntaxKind[SyntaxKind["DefaultClause"] = 267] = "DefaultClause"; - SyntaxKind[SyntaxKind["HeritageClause"] = 268] = "HeritageClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 269] = "CatchClause"; - // Property assignments - SyntaxKind[SyntaxKind["PropertyAssignment"] = 270] = "PropertyAssignment"; - SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 271] = "ShorthandPropertyAssignment"; - SyntaxKind[SyntaxKind["SpreadAssignment"] = 272] = "SpreadAssignment"; - // Enum - SyntaxKind[SyntaxKind["EnumMember"] = 273] = "EnumMember"; - // Top-level nodes - SyntaxKind[SyntaxKind["SourceFile"] = 274] = "SourceFile"; - SyntaxKind[SyntaxKind["Bundle"] = 275] = "Bundle"; - SyntaxKind[SyntaxKind["UnparsedSource"] = 276] = "UnparsedSource"; - SyntaxKind[SyntaxKind["InputFiles"] = 277] = "InputFiles"; - // JSDoc nodes - SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 278] = "JSDocTypeExpression"; - // The * type - SyntaxKind[SyntaxKind["JSDocAllType"] = 279] = "JSDocAllType"; - // The ? type - SyntaxKind[SyntaxKind["JSDocUnknownType"] = 280] = "JSDocUnknownType"; - SyntaxKind[SyntaxKind["JSDocNullableType"] = 281] = "JSDocNullableType"; - SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 282] = "JSDocNonNullableType"; - SyntaxKind[SyntaxKind["JSDocOptionalType"] = 283] = "JSDocOptionalType"; - SyntaxKind[SyntaxKind["JSDocFunctionType"] = 284] = "JSDocFunctionType"; - SyntaxKind[SyntaxKind["JSDocVariadicType"] = 285] = "JSDocVariadicType"; - SyntaxKind[SyntaxKind["JSDocComment"] = 286] = "JSDocComment"; - SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 287] = "JSDocTypeLiteral"; - SyntaxKind[SyntaxKind["JSDocSignature"] = 288] = "JSDocSignature"; - SyntaxKind[SyntaxKind["JSDocTag"] = 289] = "JSDocTag"; - SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 290] = "JSDocAugmentsTag"; - SyntaxKind[SyntaxKind["JSDocClassTag"] = 291] = "JSDocClassTag"; - SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 292] = "JSDocCallbackTag"; - SyntaxKind[SyntaxKind["JSDocParameterTag"] = 293] = "JSDocParameterTag"; - SyntaxKind[SyntaxKind["JSDocReturnTag"] = 294] = "JSDocReturnTag"; - SyntaxKind[SyntaxKind["JSDocTypeTag"] = 295] = "JSDocTypeTag"; - SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 296] = "JSDocTemplateTag"; - SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 297] = "JSDocTypedefTag"; - SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 298] = "JSDocPropertyTag"; - // Synthesized list - SyntaxKind[SyntaxKind["SyntaxList"] = 299] = "SyntaxList"; - // Transformation nodes - SyntaxKind[SyntaxKind["NotEmittedStatement"] = 300] = "NotEmittedStatement"; - SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 301] = "PartiallyEmittedExpression"; - SyntaxKind[SyntaxKind["CommaListExpression"] = 302] = "CommaListExpression"; - SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 303] = "MergeDeclarationMarker"; - SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 304] = "EndOfDeclarationMarker"; - // Enum value count - SyntaxKind[SyntaxKind["Count"] = 305] = "Count"; - // Markers - SyntaxKind[SyntaxKind["FirstAssignment"] = 58] = "FirstAssignment"; - SyntaxKind[SyntaxKind["LastAssignment"] = 70] = "LastAssignment"; - SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 59] = "FirstCompoundAssignment"; - SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 70] = "LastCompoundAssignment"; - SyntaxKind[SyntaxKind["FirstReservedWord"] = 72] = "FirstReservedWord"; - SyntaxKind[SyntaxKind["LastReservedWord"] = 107] = "LastReservedWord"; - SyntaxKind[SyntaxKind["FirstKeyword"] = 72] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = 145] = "LastKeyword"; - SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 108] = "FirstFutureReservedWord"; - SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 116] = "LastFutureReservedWord"; - SyntaxKind[SyntaxKind["FirstTypeNode"] = 161] = "FirstTypeNode"; - SyntaxKind[SyntaxKind["LastTypeNode"] = 179] = "LastTypeNode"; - SyntaxKind[SyntaxKind["FirstPunctuation"] = 17] = "FirstPunctuation"; - SyntaxKind[SyntaxKind["LastPunctuation"] = 70] = "LastPunctuation"; - SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = 145] = "LastToken"; - SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken"; - SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken"; - SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken"; - SyntaxKind[SyntaxKind["LastLiteralToken"] = 13] = "LastLiteralToken"; - SyntaxKind[SyntaxKind["FirstTemplateToken"] = 13] = "FirstTemplateToken"; - SyntaxKind[SyntaxKind["LastTemplateToken"] = 16] = "LastTemplateToken"; - SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 27] = "FirstBinaryOperator"; - SyntaxKind[SyntaxKind["LastBinaryOperator"] = 70] = "LastBinaryOperator"; - SyntaxKind[SyntaxKind["FirstNode"] = 146] = "FirstNode"; - SyntaxKind[SyntaxKind["FirstJSDocNode"] = 278] = "FirstJSDocNode"; - SyntaxKind[SyntaxKind["LastJSDocNode"] = 298] = "LastJSDocNode"; - SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 289] = "FirstJSDocTagNode"; - SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 298] = "LastJSDocTagNode"; - /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 117] = "FirstContextualKeyword"; - /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 145] = "LastContextualKeyword"; - })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {})); - var NodeFlags; - (function (NodeFlags) { - NodeFlags[NodeFlags["None"] = 0] = "None"; - NodeFlags[NodeFlags["Let"] = 1] = "Let"; - NodeFlags[NodeFlags["Const"] = 2] = "Const"; - NodeFlags[NodeFlags["NestedNamespace"] = 4] = "NestedNamespace"; - NodeFlags[NodeFlags["Synthesized"] = 8] = "Synthesized"; - NodeFlags[NodeFlags["Namespace"] = 16] = "Namespace"; - NodeFlags[NodeFlags["ExportContext"] = 32] = "ExportContext"; - NodeFlags[NodeFlags["ContainsThis"] = 64] = "ContainsThis"; - NodeFlags[NodeFlags["HasImplicitReturn"] = 128] = "HasImplicitReturn"; - NodeFlags[NodeFlags["HasExplicitReturn"] = 256] = "HasExplicitReturn"; - NodeFlags[NodeFlags["GlobalAugmentation"] = 512] = "GlobalAugmentation"; - NodeFlags[NodeFlags["HasAsyncFunctions"] = 1024] = "HasAsyncFunctions"; - NodeFlags[NodeFlags["DisallowInContext"] = 2048] = "DisallowInContext"; - NodeFlags[NodeFlags["YieldContext"] = 4096] = "YieldContext"; - NodeFlags[NodeFlags["DecoratorContext"] = 8192] = "DecoratorContext"; - NodeFlags[NodeFlags["AwaitContext"] = 16384] = "AwaitContext"; - NodeFlags[NodeFlags["ThisNodeHasError"] = 32768] = "ThisNodeHasError"; - NodeFlags[NodeFlags["JavaScriptFile"] = 65536] = "JavaScriptFile"; - NodeFlags[NodeFlags["ThisNodeOrAnySubNodesHasError"] = 131072] = "ThisNodeOrAnySubNodesHasError"; - NodeFlags[NodeFlags["HasAggregatedChildData"] = 262144] = "HasAggregatedChildData"; - // These flags will be set when the parser encounters a dynamic import expression or 'import.meta' to avoid - // walking the tree if the flags are not set. However, these flags are just a approximation - // (hence why it's named "PossiblyContainsDynamicImport") because once set, the flags never get cleared. - // During editing, if a dynamic import is removed, incremental parsing will *NOT* clear this flag. - // This means that the tree will always be traversed during module resolution, or when looking for external module indicators. - // However, the removal operation should not occur often and in the case of the - // removal, it is likely that users will add the import anyway. - // The advantage of this approach is its simplicity. For the case of batch compilation, - // we guarantee that users won't have to pay the price of walking the tree if a dynamic import isn't used. - /* @internal */ NodeFlags[NodeFlags["PossiblyContainsDynamicImport"] = 524288] = "PossiblyContainsDynamicImport"; - /* @internal */ NodeFlags[NodeFlags["PossiblyContainsImportMeta"] = 1048576] = "PossiblyContainsImportMeta"; - NodeFlags[NodeFlags["JSDoc"] = 2097152] = "JSDoc"; - /* @internal */ NodeFlags[NodeFlags["Ambient"] = 4194304] = "Ambient"; - /* @internal */ NodeFlags[NodeFlags["InWithStatement"] = 8388608] = "InWithStatement"; - NodeFlags[NodeFlags["JsonFile"] = 16777216] = "JsonFile"; - NodeFlags[NodeFlags["BlockScoped"] = 3] = "BlockScoped"; - NodeFlags[NodeFlags["ReachabilityCheckFlags"] = 384] = "ReachabilityCheckFlags"; - NodeFlags[NodeFlags["ReachabilityAndEmitFlags"] = 1408] = "ReachabilityAndEmitFlags"; - // Parsing context flags - NodeFlags[NodeFlags["ContextFlags"] = 12679168] = "ContextFlags"; - // Exclude these flags when parsing a Type - NodeFlags[NodeFlags["TypeExcludesFlags"] = 20480] = "TypeExcludesFlags"; - // Represents all flags that are potentially set once and - // never cleared on SourceFiles which get re-used in between incremental parses. - // See the comment above on `PossiblyContainsDynamicImport` and `PossiblyContainsImportMeta`. - /* @internal */ NodeFlags[NodeFlags["PermanentlySetIncrementalFlags"] = 1572864] = "PermanentlySetIncrementalFlags"; - })(NodeFlags = ts.NodeFlags || (ts.NodeFlags = {})); - var ModifierFlags; - (function (ModifierFlags) { - ModifierFlags[ModifierFlags["None"] = 0] = "None"; - ModifierFlags[ModifierFlags["Export"] = 1] = "Export"; - ModifierFlags[ModifierFlags["Ambient"] = 2] = "Ambient"; - ModifierFlags[ModifierFlags["Public"] = 4] = "Public"; - ModifierFlags[ModifierFlags["Private"] = 8] = "Private"; - ModifierFlags[ModifierFlags["Protected"] = 16] = "Protected"; - ModifierFlags[ModifierFlags["Static"] = 32] = "Static"; - ModifierFlags[ModifierFlags["Readonly"] = 64] = "Readonly"; - ModifierFlags[ModifierFlags["Abstract"] = 128] = "Abstract"; - ModifierFlags[ModifierFlags["Async"] = 256] = "Async"; - ModifierFlags[ModifierFlags["Default"] = 512] = "Default"; - ModifierFlags[ModifierFlags["Const"] = 2048] = "Const"; - ModifierFlags[ModifierFlags["HasComputedFlags"] = 536870912] = "HasComputedFlags"; - ModifierFlags[ModifierFlags["AccessibilityModifier"] = 28] = "AccessibilityModifier"; - // Accessibility modifiers and 'readonly' can be attached to a parameter in a constructor to make it a property. - ModifierFlags[ModifierFlags["ParameterPropertyModifier"] = 92] = "ParameterPropertyModifier"; - ModifierFlags[ModifierFlags["NonPublicAccessibilityModifier"] = 24] = "NonPublicAccessibilityModifier"; - ModifierFlags[ModifierFlags["TypeScriptModifier"] = 2270] = "TypeScriptModifier"; - ModifierFlags[ModifierFlags["ExportDefault"] = 513] = "ExportDefault"; - ModifierFlags[ModifierFlags["All"] = 3071] = "All"; - })(ModifierFlags = ts.ModifierFlags || (ts.ModifierFlags = {})); - var JsxFlags; - (function (JsxFlags) { - JsxFlags[JsxFlags["None"] = 0] = "None"; - /** An element from a named property of the JSX.IntrinsicElements interface */ - JsxFlags[JsxFlags["IntrinsicNamedElement"] = 1] = "IntrinsicNamedElement"; - /** An element inferred from the string index signature of the JSX.IntrinsicElements interface */ - JsxFlags[JsxFlags["IntrinsicIndexedElement"] = 2] = "IntrinsicIndexedElement"; - JsxFlags[JsxFlags["IntrinsicElement"] = 3] = "IntrinsicElement"; - })(JsxFlags = ts.JsxFlags || (ts.JsxFlags = {})); - /* @internal */ - var RelationComparisonResult; - (function (RelationComparisonResult) { - RelationComparisonResult[RelationComparisonResult["Succeeded"] = 1] = "Succeeded"; - RelationComparisonResult[RelationComparisonResult["Failed"] = 2] = "Failed"; - RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported"; - })(RelationComparisonResult = ts.RelationComparisonResult || (ts.RelationComparisonResult = {})); - /*@internal*/ - var GeneratedIdentifierFlags; - (function (GeneratedIdentifierFlags) { - // Kinds - GeneratedIdentifierFlags[GeneratedIdentifierFlags["None"] = 0] = "None"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["Auto"] = 1] = "Auto"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["Loop"] = 2] = "Loop"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["Unique"] = 3] = "Unique"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["Node"] = 4] = "Node"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["KindMask"] = 7] = "KindMask"; - // Flags - GeneratedIdentifierFlags[GeneratedIdentifierFlags["ReservedInNestedScopes"] = 8] = "ReservedInNestedScopes"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["Optimistic"] = 16] = "Optimistic"; - GeneratedIdentifierFlags[GeneratedIdentifierFlags["FileLevel"] = 32] = "FileLevel"; - })(GeneratedIdentifierFlags = ts.GeneratedIdentifierFlags || (ts.GeneratedIdentifierFlags = {})); - /* @internal */ - var TokenFlags; - (function (TokenFlags) { - TokenFlags[TokenFlags["None"] = 0] = "None"; - TokenFlags[TokenFlags["PrecedingLineBreak"] = 1] = "PrecedingLineBreak"; - TokenFlags[TokenFlags["PrecedingJSDocComment"] = 2] = "PrecedingJSDocComment"; - TokenFlags[TokenFlags["Unterminated"] = 4] = "Unterminated"; - TokenFlags[TokenFlags["ExtendedUnicodeEscape"] = 8] = "ExtendedUnicodeEscape"; - TokenFlags[TokenFlags["Scientific"] = 16] = "Scientific"; - TokenFlags[TokenFlags["Octal"] = 32] = "Octal"; - TokenFlags[TokenFlags["HexSpecifier"] = 64] = "HexSpecifier"; - TokenFlags[TokenFlags["BinarySpecifier"] = 128] = "BinarySpecifier"; - TokenFlags[TokenFlags["OctalSpecifier"] = 256] = "OctalSpecifier"; - TokenFlags[TokenFlags["ContainsSeparator"] = 512] = "ContainsSeparator"; - TokenFlags[TokenFlags["BinaryOrOctalSpecifier"] = 384] = "BinaryOrOctalSpecifier"; - TokenFlags[TokenFlags["NumericLiteralFlags"] = 1008] = "NumericLiteralFlags"; - })(TokenFlags = ts.TokenFlags || (ts.TokenFlags = {})); - var FlowFlags; - (function (FlowFlags) { - FlowFlags[FlowFlags["Unreachable"] = 1] = "Unreachable"; - FlowFlags[FlowFlags["Start"] = 2] = "Start"; - FlowFlags[FlowFlags["BranchLabel"] = 4] = "BranchLabel"; - FlowFlags[FlowFlags["LoopLabel"] = 8] = "LoopLabel"; - FlowFlags[FlowFlags["Assignment"] = 16] = "Assignment"; - FlowFlags[FlowFlags["TrueCondition"] = 32] = "TrueCondition"; - FlowFlags[FlowFlags["FalseCondition"] = 64] = "FalseCondition"; - FlowFlags[FlowFlags["SwitchClause"] = 128] = "SwitchClause"; - FlowFlags[FlowFlags["ArrayMutation"] = 256] = "ArrayMutation"; - FlowFlags[FlowFlags["Referenced"] = 512] = "Referenced"; - FlowFlags[FlowFlags["Shared"] = 1024] = "Shared"; - FlowFlags[FlowFlags["PreFinally"] = 2048] = "PreFinally"; - FlowFlags[FlowFlags["AfterFinally"] = 4096] = "AfterFinally"; - FlowFlags[FlowFlags["Label"] = 12] = "Label"; - FlowFlags[FlowFlags["Condition"] = 96] = "Condition"; - })(FlowFlags = ts.FlowFlags || (ts.FlowFlags = {})); - var OperationCanceledException = /** @class */ (function () { + var OperationCanceledException = (function () { function OperationCanceledException() { } return OperationCanceledException; }()); ts.OperationCanceledException = OperationCanceledException; - /* @internal */ - var StructureIsReused; - (function (StructureIsReused) { - StructureIsReused[StructureIsReused["Not"] = 0] = "Not"; - StructureIsReused[StructureIsReused["SafeModules"] = 1] = "SafeModules"; - StructureIsReused[StructureIsReused["Completely"] = 2] = "Completely"; - })(StructureIsReused = ts.StructureIsReused || (ts.StructureIsReused = {})); - /** Return code used by getEmitOutput function to indicate status of the function */ var ExitStatus; (function (ExitStatus) { - // Compiler ran successfully. Either this was a simple do-nothing compilation (for example, - // when -version or -help was provided, or this was a normal compilation, no diagnostics - // were produced, and all outputs were generated successfully. ExitStatus[ExitStatus["Success"] = 0] = "Success"; - // Diagnostics were produced and because of them no code was generated. ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; - // Diagnostics were produced and outputs were generated in spite of them. ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; })(ExitStatus = ts.ExitStatus || (ts.ExitStatus = {})); - /* @internal */ - var UnionReduction; - (function (UnionReduction) { - UnionReduction[UnionReduction["None"] = 0] = "None"; - UnionReduction[UnionReduction["Literal"] = 1] = "Literal"; - UnionReduction[UnionReduction["Subtype"] = 2] = "Subtype"; - })(UnionReduction = ts.UnionReduction || (ts.UnionReduction = {})); - var NodeBuilderFlags; - (function (NodeBuilderFlags) { - NodeBuilderFlags[NodeBuilderFlags["None"] = 0] = "None"; - // Options - NodeBuilderFlags[NodeBuilderFlags["NoTruncation"] = 1] = "NoTruncation"; - NodeBuilderFlags[NodeBuilderFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; - NodeBuilderFlags[NodeBuilderFlags["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; - NodeBuilderFlags[NodeBuilderFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; - NodeBuilderFlags[NodeBuilderFlags["ForbidIndexedAccessSymbolReferences"] = 16] = "ForbidIndexedAccessSymbolReferences"; - NodeBuilderFlags[NodeBuilderFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; - NodeBuilderFlags[NodeBuilderFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; - NodeBuilderFlags[NodeBuilderFlags["UseOnlyExternalAliasing"] = 128] = "UseOnlyExternalAliasing"; - NodeBuilderFlags[NodeBuilderFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; - NodeBuilderFlags[NodeBuilderFlags["WriteTypeParametersInQualifiedName"] = 512] = "WriteTypeParametersInQualifiedName"; - NodeBuilderFlags[NodeBuilderFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; - NodeBuilderFlags[NodeBuilderFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; - NodeBuilderFlags[NodeBuilderFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; - NodeBuilderFlags[NodeBuilderFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; - NodeBuilderFlags[NodeBuilderFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; - // Error handling - NodeBuilderFlags[NodeBuilderFlags["AllowThisInObjectLiteral"] = 32768] = "AllowThisInObjectLiteral"; - NodeBuilderFlags[NodeBuilderFlags["AllowQualifedNameInPlaceOfIdentifier"] = 65536] = "AllowQualifedNameInPlaceOfIdentifier"; - NodeBuilderFlags[NodeBuilderFlags["AllowAnonymousIdentifier"] = 131072] = "AllowAnonymousIdentifier"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyUnionOrIntersection"] = 262144] = "AllowEmptyUnionOrIntersection"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyTuple"] = 524288] = "AllowEmptyTuple"; - NodeBuilderFlags[NodeBuilderFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyIndexInfoType"] = 2097152] = "AllowEmptyIndexInfoType"; - NodeBuilderFlags[NodeBuilderFlags["IgnoreErrors"] = 3112960] = "IgnoreErrors"; - // State - NodeBuilderFlags[NodeBuilderFlags["InObjectTypeLiteral"] = 4194304] = "InObjectTypeLiteral"; - NodeBuilderFlags[NodeBuilderFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; - NodeBuilderFlags[NodeBuilderFlags["InInitialEntityName"] = 16777216] = "InInitialEntityName"; - NodeBuilderFlags[NodeBuilderFlags["InReverseMappedType"] = 33554432] = "InReverseMappedType"; - })(NodeBuilderFlags = ts.NodeBuilderFlags || (ts.NodeBuilderFlags = {})); - // Ensure the shared flags between this and `NodeBuilderFlags` stay in alignment - var TypeFormatFlags; - (function (TypeFormatFlags) { - TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None"; - TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 1] = "NoTruncation"; - TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; - // hole because there's a hole in node builder flags - TypeFormatFlags[TypeFormatFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; - // hole because there's a hole in node builder flags - TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; - TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; - // hole because `UseOnlyExternalAliasing` is here in node builder flags, but functions which take old flags use `SymbolFormatFlags` instead - TypeFormatFlags[TypeFormatFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; - // hole because `WriteTypeParametersInQualifiedName` is here in node builder flags, but functions which take old flags use `SymbolFormatFlags` for this instead - TypeFormatFlags[TypeFormatFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; - TypeFormatFlags[TypeFormatFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; - TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; - TypeFormatFlags[TypeFormatFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; - TypeFormatFlags[TypeFormatFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; - // even though `T` can't be accessed in the current scope. - // Error Handling - TypeFormatFlags[TypeFormatFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; - // TypeFormatFlags exclusive - TypeFormatFlags[TypeFormatFlags["AddUndefined"] = 131072] = "AddUndefined"; - TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 262144] = "WriteArrowStyleSignature"; - // State - TypeFormatFlags[TypeFormatFlags["InArrayType"] = 524288] = "InArrayType"; - TypeFormatFlags[TypeFormatFlags["InElementType"] = 2097152] = "InElementType"; - TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 4194304] = "InFirstTypeArgument"; - TypeFormatFlags[TypeFormatFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; - /** @deprecated */ TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 0] = "WriteOwnNameForAnyLike"; - TypeFormatFlags[TypeFormatFlags["NodeBuilderFlagsMask"] = 9469291] = "NodeBuilderFlagsMask"; - })(TypeFormatFlags = ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); - var SymbolFormatFlags; - (function (SymbolFormatFlags) { - SymbolFormatFlags[SymbolFormatFlags["None"] = 0] = "None"; - // Write symbols's type argument if it is instantiated symbol - // eg. class C { p: T } <-- Show p as C.p here - // var a: C; - // var p = a.p; <--- Here p is property of C so show it as C.p instead of just C.p - SymbolFormatFlags[SymbolFormatFlags["WriteTypeParametersOrArguments"] = 1] = "WriteTypeParametersOrArguments"; - // Use only external alias information to get the symbol name in the given context - // eg. module m { export class c { } } import x = m.c; - // When this flag is specified m.c will be used to refer to the class instead of alias symbol x - SymbolFormatFlags[SymbolFormatFlags["UseOnlyExternalAliasing"] = 2] = "UseOnlyExternalAliasing"; - // Build symbol name using any nodes needed, instead of just components of an entity name - SymbolFormatFlags[SymbolFormatFlags["AllowAnyNodeKind"] = 4] = "AllowAnyNodeKind"; - // Prefer aliases which are not directly visible - SymbolFormatFlags[SymbolFormatFlags["UseAliasDefinedOutsideCurrentScope"] = 8] = "UseAliasDefinedOutsideCurrentScope"; - })(SymbolFormatFlags = ts.SymbolFormatFlags || (ts.SymbolFormatFlags = {})); - /* @internal */ - var SymbolAccessibility; - (function (SymbolAccessibility) { - SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible"; - SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible"; - SymbolAccessibility[SymbolAccessibility["CannotBeNamed"] = 2] = "CannotBeNamed"; - })(SymbolAccessibility = ts.SymbolAccessibility || (ts.SymbolAccessibility = {})); - /* @internal */ - var SyntheticSymbolKind; - (function (SyntheticSymbolKind) { - SyntheticSymbolKind[SyntheticSymbolKind["UnionOrIntersection"] = 0] = "UnionOrIntersection"; - SyntheticSymbolKind[SyntheticSymbolKind["Spread"] = 1] = "Spread"; - })(SyntheticSymbolKind = ts.SyntheticSymbolKind || (ts.SyntheticSymbolKind = {})); - var TypePredicateKind; - (function (TypePredicateKind) { - TypePredicateKind[TypePredicateKind["This"] = 0] = "This"; - TypePredicateKind[TypePredicateKind["Identifier"] = 1] = "Identifier"; - })(TypePredicateKind = ts.TypePredicateKind || (ts.TypePredicateKind = {})); - /** Indicates how to serialize the name for a TypeReferenceNode when emitting decorator metadata */ - /* @internal */ var TypeReferenceSerializationKind; (function (TypeReferenceSerializationKind) { TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown"; - // should be emitted using a safe fallback. TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue"; - // function that can be reached at runtime (e.g. a `class` - // declaration or a `var` declaration for the static side - // of a type, such as the global `Promise` type in lib.d.ts). TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidNullableOrNeverType"] = 2] = "VoidNullableOrNeverType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType"; @@ -2667,331 +1724,8 @@ var ts; TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["Promise"] = 8] = "Promise"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 9] = "TypeWithCallSignature"; - // with call signatures. TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 10] = "ObjectType"; })(TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {})); - var SymbolFlags; - (function (SymbolFlags) { - SymbolFlags[SymbolFlags["None"] = 0] = "None"; - SymbolFlags[SymbolFlags["FunctionScopedVariable"] = 1] = "FunctionScopedVariable"; - SymbolFlags[SymbolFlags["BlockScopedVariable"] = 2] = "BlockScopedVariable"; - SymbolFlags[SymbolFlags["Property"] = 4] = "Property"; - SymbolFlags[SymbolFlags["EnumMember"] = 8] = "EnumMember"; - SymbolFlags[SymbolFlags["Function"] = 16] = "Function"; - SymbolFlags[SymbolFlags["Class"] = 32] = "Class"; - SymbolFlags[SymbolFlags["Interface"] = 64] = "Interface"; - SymbolFlags[SymbolFlags["ConstEnum"] = 128] = "ConstEnum"; - SymbolFlags[SymbolFlags["RegularEnum"] = 256] = "RegularEnum"; - SymbolFlags[SymbolFlags["ValueModule"] = 512] = "ValueModule"; - SymbolFlags[SymbolFlags["NamespaceModule"] = 1024] = "NamespaceModule"; - SymbolFlags[SymbolFlags["TypeLiteral"] = 2048] = "TypeLiteral"; - SymbolFlags[SymbolFlags["ObjectLiteral"] = 4096] = "ObjectLiteral"; - SymbolFlags[SymbolFlags["Method"] = 8192] = "Method"; - SymbolFlags[SymbolFlags["Constructor"] = 16384] = "Constructor"; - SymbolFlags[SymbolFlags["GetAccessor"] = 32768] = "GetAccessor"; - SymbolFlags[SymbolFlags["SetAccessor"] = 65536] = "SetAccessor"; - SymbolFlags[SymbolFlags["Signature"] = 131072] = "Signature"; - SymbolFlags[SymbolFlags["TypeParameter"] = 262144] = "TypeParameter"; - SymbolFlags[SymbolFlags["TypeAlias"] = 524288] = "TypeAlias"; - SymbolFlags[SymbolFlags["ExportValue"] = 1048576] = "ExportValue"; - SymbolFlags[SymbolFlags["Alias"] = 2097152] = "Alias"; - SymbolFlags[SymbolFlags["Prototype"] = 4194304] = "Prototype"; - SymbolFlags[SymbolFlags["ExportStar"] = 8388608] = "ExportStar"; - SymbolFlags[SymbolFlags["Optional"] = 16777216] = "Optional"; - SymbolFlags[SymbolFlags["Transient"] = 33554432] = "Transient"; - SymbolFlags[SymbolFlags["JSContainer"] = 67108864] = "JSContainer"; - /* @internal */ - SymbolFlags[SymbolFlags["All"] = 67108863] = "All"; - SymbolFlags[SymbolFlags["Enum"] = 384] = "Enum"; - SymbolFlags[SymbolFlags["Variable"] = 3] = "Variable"; - SymbolFlags[SymbolFlags["Value"] = 67216319] = "Value"; - SymbolFlags[SymbolFlags["Type"] = 67901928] = "Type"; - SymbolFlags[SymbolFlags["Namespace"] = 1920] = "Namespace"; - SymbolFlags[SymbolFlags["Module"] = 1536] = "Module"; - SymbolFlags[SymbolFlags["Accessor"] = 98304] = "Accessor"; - // Variables can be redeclared, but can not redeclare a block-scoped declaration with the - // same name, or any other value that is not a variable, e.g. ValueModule or Class - SymbolFlags[SymbolFlags["FunctionScopedVariableExcludes"] = 67216318] = "FunctionScopedVariableExcludes"; - // Block-scoped declarations are not allowed to be re-declared - // they can not merge with anything in the value space - SymbolFlags[SymbolFlags["BlockScopedVariableExcludes"] = 67216319] = "BlockScopedVariableExcludes"; - SymbolFlags[SymbolFlags["ParameterExcludes"] = 67216319] = "ParameterExcludes"; - SymbolFlags[SymbolFlags["PropertyExcludes"] = 0] = "PropertyExcludes"; - SymbolFlags[SymbolFlags["EnumMemberExcludes"] = 68008959] = "EnumMemberExcludes"; - SymbolFlags[SymbolFlags["FunctionExcludes"] = 67215791] = "FunctionExcludes"; - SymbolFlags[SymbolFlags["ClassExcludes"] = 68008383] = "ClassExcludes"; - SymbolFlags[SymbolFlags["InterfaceExcludes"] = 67901832] = "InterfaceExcludes"; - SymbolFlags[SymbolFlags["RegularEnumExcludes"] = 68008191] = "RegularEnumExcludes"; - SymbolFlags[SymbolFlags["ConstEnumExcludes"] = 68008831] = "ConstEnumExcludes"; - SymbolFlags[SymbolFlags["ValueModuleExcludes"] = 67215503] = "ValueModuleExcludes"; - SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; - SymbolFlags[SymbolFlags["MethodExcludes"] = 67208127] = "MethodExcludes"; - SymbolFlags[SymbolFlags["GetAccessorExcludes"] = 67150783] = "GetAccessorExcludes"; - SymbolFlags[SymbolFlags["SetAccessorExcludes"] = 67183551] = "SetAccessorExcludes"; - SymbolFlags[SymbolFlags["TypeParameterExcludes"] = 67639784] = "TypeParameterExcludes"; - SymbolFlags[SymbolFlags["TypeAliasExcludes"] = 67901928] = "TypeAliasExcludes"; - SymbolFlags[SymbolFlags["AliasExcludes"] = 2097152] = "AliasExcludes"; - SymbolFlags[SymbolFlags["ModuleMember"] = 2623475] = "ModuleMember"; - SymbolFlags[SymbolFlags["ExportHasLocal"] = 944] = "ExportHasLocal"; - SymbolFlags[SymbolFlags["HasExports"] = 1955] = "HasExports"; - SymbolFlags[SymbolFlags["HasMembers"] = 6240] = "HasMembers"; - SymbolFlags[SymbolFlags["BlockScoped"] = 418] = "BlockScoped"; - SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; - SymbolFlags[SymbolFlags["ClassMember"] = 106500] = "ClassMember"; - /* @internal */ - // The set of things we consider semantically classifiable. Used to speed up the LS during - // classification. - SymbolFlags[SymbolFlags["Classifiable"] = 2885600] = "Classifiable"; - /* @internal */ - SymbolFlags[SymbolFlags["LateBindingContainer"] = 6240] = "LateBindingContainer"; - })(SymbolFlags = ts.SymbolFlags || (ts.SymbolFlags = {})); - /* @internal */ - var EnumKind; - (function (EnumKind) { - EnumKind[EnumKind["Numeric"] = 0] = "Numeric"; - EnumKind[EnumKind["Literal"] = 1] = "Literal"; // Literal enum (each member has a TypeFlags.EnumLiteral type) - })(EnumKind = ts.EnumKind || (ts.EnumKind = {})); - /* @internal */ - var CheckFlags; - (function (CheckFlags) { - CheckFlags[CheckFlags["Instantiated"] = 1] = "Instantiated"; - CheckFlags[CheckFlags["SyntheticProperty"] = 2] = "SyntheticProperty"; - CheckFlags[CheckFlags["SyntheticMethod"] = 4] = "SyntheticMethod"; - CheckFlags[CheckFlags["Readonly"] = 8] = "Readonly"; - CheckFlags[CheckFlags["Partial"] = 16] = "Partial"; - CheckFlags[CheckFlags["HasNonUniformType"] = 32] = "HasNonUniformType"; - CheckFlags[CheckFlags["ContainsPublic"] = 64] = "ContainsPublic"; - CheckFlags[CheckFlags["ContainsProtected"] = 128] = "ContainsProtected"; - CheckFlags[CheckFlags["ContainsPrivate"] = 256] = "ContainsPrivate"; - CheckFlags[CheckFlags["ContainsStatic"] = 512] = "ContainsStatic"; - CheckFlags[CheckFlags["Late"] = 1024] = "Late"; - CheckFlags[CheckFlags["ReverseMapped"] = 2048] = "ReverseMapped"; - CheckFlags[CheckFlags["Synthetic"] = 6] = "Synthetic"; - })(CheckFlags = ts.CheckFlags || (ts.CheckFlags = {})); - var InternalSymbolName; - (function (InternalSymbolName) { - InternalSymbolName["Call"] = "__call"; - InternalSymbolName["Constructor"] = "__constructor"; - InternalSymbolName["New"] = "__new"; - InternalSymbolName["Index"] = "__index"; - InternalSymbolName["ExportStar"] = "__export"; - InternalSymbolName["Global"] = "__global"; - InternalSymbolName["Missing"] = "__missing"; - InternalSymbolName["Type"] = "__type"; - InternalSymbolName["Object"] = "__object"; - InternalSymbolName["JSXAttributes"] = "__jsxAttributes"; - InternalSymbolName["Class"] = "__class"; - InternalSymbolName["Function"] = "__function"; - InternalSymbolName["Computed"] = "__computed"; - InternalSymbolName["Resolving"] = "__resolving__"; - InternalSymbolName["ExportEquals"] = "export="; - InternalSymbolName["Default"] = "default"; - })(InternalSymbolName = ts.InternalSymbolName || (ts.InternalSymbolName = {})); - /* @internal */ - var NodeCheckFlags; - (function (NodeCheckFlags) { - NodeCheckFlags[NodeCheckFlags["TypeChecked"] = 1] = "TypeChecked"; - NodeCheckFlags[NodeCheckFlags["LexicalThis"] = 2] = "LexicalThis"; - NodeCheckFlags[NodeCheckFlags["CaptureThis"] = 4] = "CaptureThis"; - NodeCheckFlags[NodeCheckFlags["CaptureNewTarget"] = 8] = "CaptureNewTarget"; - NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 256] = "SuperInstance"; - NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 512] = "SuperStatic"; - NodeCheckFlags[NodeCheckFlags["ContextChecked"] = 1024] = "ContextChecked"; - NodeCheckFlags[NodeCheckFlags["AsyncMethodWithSuper"] = 2048] = "AsyncMethodWithSuper"; - NodeCheckFlags[NodeCheckFlags["AsyncMethodWithSuperBinding"] = 4096] = "AsyncMethodWithSuperBinding"; - NodeCheckFlags[NodeCheckFlags["CaptureArguments"] = 8192] = "CaptureArguments"; - NodeCheckFlags[NodeCheckFlags["EnumValuesComputed"] = 16384] = "EnumValuesComputed"; - NodeCheckFlags[NodeCheckFlags["LexicalModuleMergesWithClass"] = 32768] = "LexicalModuleMergesWithClass"; - NodeCheckFlags[NodeCheckFlags["LoopWithCapturedBlockScopedBinding"] = 65536] = "LoopWithCapturedBlockScopedBinding"; - NodeCheckFlags[NodeCheckFlags["CapturedBlockScopedBinding"] = 131072] = "CapturedBlockScopedBinding"; - NodeCheckFlags[NodeCheckFlags["BlockScopedBindingInLoop"] = 262144] = "BlockScopedBindingInLoop"; - NodeCheckFlags[NodeCheckFlags["ClassWithBodyScopedClassBinding"] = 524288] = "ClassWithBodyScopedClassBinding"; - NodeCheckFlags[NodeCheckFlags["BodyScopedClassBinding"] = 1048576] = "BodyScopedClassBinding"; - NodeCheckFlags[NodeCheckFlags["NeedsLoopOutParameter"] = 2097152] = "NeedsLoopOutParameter"; - NodeCheckFlags[NodeCheckFlags["AssignmentsMarked"] = 4194304] = "AssignmentsMarked"; - NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 8388608] = "ClassWithConstructorReference"; - NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 16777216] = "ConstructorReferenceInClass"; - })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); - var TypeFlags; - (function (TypeFlags) { - TypeFlags[TypeFlags["Any"] = 1] = "Any"; - TypeFlags[TypeFlags["Unknown"] = 2] = "Unknown"; - TypeFlags[TypeFlags["String"] = 4] = "String"; - TypeFlags[TypeFlags["Number"] = 8] = "Number"; - TypeFlags[TypeFlags["Boolean"] = 16] = "Boolean"; - TypeFlags[TypeFlags["Enum"] = 32] = "Enum"; - TypeFlags[TypeFlags["StringLiteral"] = 64] = "StringLiteral"; - TypeFlags[TypeFlags["NumberLiteral"] = 128] = "NumberLiteral"; - TypeFlags[TypeFlags["BooleanLiteral"] = 256] = "BooleanLiteral"; - TypeFlags[TypeFlags["EnumLiteral"] = 512] = "EnumLiteral"; - TypeFlags[TypeFlags["ESSymbol"] = 1024] = "ESSymbol"; - TypeFlags[TypeFlags["UniqueESSymbol"] = 2048] = "UniqueESSymbol"; - TypeFlags[TypeFlags["Void"] = 4096] = "Void"; - TypeFlags[TypeFlags["Undefined"] = 8192] = "Undefined"; - TypeFlags[TypeFlags["Null"] = 16384] = "Null"; - TypeFlags[TypeFlags["Never"] = 32768] = "Never"; - TypeFlags[TypeFlags["TypeParameter"] = 65536] = "TypeParameter"; - TypeFlags[TypeFlags["Object"] = 131072] = "Object"; - TypeFlags[TypeFlags["Union"] = 262144] = "Union"; - TypeFlags[TypeFlags["Intersection"] = 524288] = "Intersection"; - TypeFlags[TypeFlags["Index"] = 1048576] = "Index"; - TypeFlags[TypeFlags["IndexedAccess"] = 2097152] = "IndexedAccess"; - TypeFlags[TypeFlags["Conditional"] = 4194304] = "Conditional"; - TypeFlags[TypeFlags["Substitution"] = 8388608] = "Substitution"; - TypeFlags[TypeFlags["NonPrimitive"] = 16777216] = "NonPrimitive"; - /* @internal */ - TypeFlags[TypeFlags["FreshLiteral"] = 33554432] = "FreshLiteral"; - /* @internal */ - TypeFlags[TypeFlags["UnionOfUnitTypes"] = 67108864] = "UnionOfUnitTypes"; - /* @internal */ - TypeFlags[TypeFlags["ContainsWideningType"] = 134217728] = "ContainsWideningType"; - /* @internal */ - TypeFlags[TypeFlags["ContainsObjectLiteral"] = 268435456] = "ContainsObjectLiteral"; - /* @internal */ - TypeFlags[TypeFlags["ContainsAnyFunctionType"] = 536870912] = "ContainsAnyFunctionType"; - /* @internal */ - TypeFlags[TypeFlags["AnyOrUnknown"] = 3] = "AnyOrUnknown"; - /* @internal */ - TypeFlags[TypeFlags["Nullable"] = 24576] = "Nullable"; - TypeFlags[TypeFlags["Literal"] = 448] = "Literal"; - TypeFlags[TypeFlags["Unit"] = 27072] = "Unit"; - TypeFlags[TypeFlags["StringOrNumberLiteral"] = 192] = "StringOrNumberLiteral"; - /* @internal */ - TypeFlags[TypeFlags["StringOrNumberLiteralOrUnique"] = 2240] = "StringOrNumberLiteralOrUnique"; - /* @internal */ - TypeFlags[TypeFlags["DefinitelyFalsy"] = 29120] = "DefinitelyFalsy"; - TypeFlags[TypeFlags["PossiblyFalsy"] = 29148] = "PossiblyFalsy"; - /* @internal */ - TypeFlags[TypeFlags["Intrinsic"] = 16839967] = "Intrinsic"; - /* @internal */ - TypeFlags[TypeFlags["Primitive"] = 32764] = "Primitive"; - TypeFlags[TypeFlags["StringLike"] = 68] = "StringLike"; - TypeFlags[TypeFlags["NumberLike"] = 168] = "NumberLike"; - TypeFlags[TypeFlags["BooleanLike"] = 272] = "BooleanLike"; - TypeFlags[TypeFlags["EnumLike"] = 544] = "EnumLike"; - TypeFlags[TypeFlags["ESSymbolLike"] = 3072] = "ESSymbolLike"; - TypeFlags[TypeFlags["VoidLike"] = 12288] = "VoidLike"; - /* @internal */ - TypeFlags[TypeFlags["DisjointDomains"] = 16809468] = "DisjointDomains"; - TypeFlags[TypeFlags["UnionOrIntersection"] = 786432] = "UnionOrIntersection"; - TypeFlags[TypeFlags["StructuredType"] = 917504] = "StructuredType"; - TypeFlags[TypeFlags["TypeVariable"] = 2162688] = "TypeVariable"; - TypeFlags[TypeFlags["InstantiableNonPrimitive"] = 14745600] = "InstantiableNonPrimitive"; - TypeFlags[TypeFlags["InstantiablePrimitive"] = 1048576] = "InstantiablePrimitive"; - TypeFlags[TypeFlags["Instantiable"] = 15794176] = "Instantiable"; - TypeFlags[TypeFlags["StructuredOrInstantiable"] = 16711680] = "StructuredOrInstantiable"; - // 'Narrowable' types are types where narrowing actually narrows. - // This *should* be every type other than null, undefined, void, and never - TypeFlags[TypeFlags["Narrowable"] = 33492479] = "Narrowable"; - TypeFlags[TypeFlags["NotUnionOrUnit"] = 16909315] = "NotUnionOrUnit"; - /* @internal */ - TypeFlags[TypeFlags["NotUnit"] = 16749629] = "NotUnit"; - /* @internal */ - TypeFlags[TypeFlags["RequiresWidening"] = 402653184] = "RequiresWidening"; - /* @internal */ - TypeFlags[TypeFlags["PropagatingFlags"] = 939524096] = "PropagatingFlags"; - // The following flags are used for different purposes during union and intersection type construction - /* @internal */ - TypeFlags[TypeFlags["NonWideningType"] = 134217728] = "NonWideningType"; - /* @internal */ - TypeFlags[TypeFlags["Wildcard"] = 268435456] = "Wildcard"; - /* @internal */ - TypeFlags[TypeFlags["EmptyObject"] = 536870912] = "EmptyObject"; - /* @internal */ - TypeFlags[TypeFlags["ConstructionFlags"] = 939524096] = "ConstructionFlags"; - // The following flag is used for different purposes by maybeTypeOfKind - /* @internal */ - TypeFlags[TypeFlags["GenericMappedType"] = 134217728] = "GenericMappedType"; - })(TypeFlags = ts.TypeFlags || (ts.TypeFlags = {})); - var ObjectFlags; - (function (ObjectFlags) { - ObjectFlags[ObjectFlags["Class"] = 1] = "Class"; - ObjectFlags[ObjectFlags["Interface"] = 2] = "Interface"; - ObjectFlags[ObjectFlags["Reference"] = 4] = "Reference"; - ObjectFlags[ObjectFlags["Tuple"] = 8] = "Tuple"; - ObjectFlags[ObjectFlags["Anonymous"] = 16] = "Anonymous"; - ObjectFlags[ObjectFlags["Mapped"] = 32] = "Mapped"; - ObjectFlags[ObjectFlags["Instantiated"] = 64] = "Instantiated"; - ObjectFlags[ObjectFlags["ObjectLiteral"] = 128] = "ObjectLiteral"; - ObjectFlags[ObjectFlags["EvolvingArray"] = 256] = "EvolvingArray"; - ObjectFlags[ObjectFlags["ObjectLiteralPatternWithComputedProperties"] = 512] = "ObjectLiteralPatternWithComputedProperties"; - ObjectFlags[ObjectFlags["ContainsSpread"] = 1024] = "ContainsSpread"; - ObjectFlags[ObjectFlags["ReverseMapped"] = 2048] = "ReverseMapped"; - ObjectFlags[ObjectFlags["JsxAttributes"] = 4096] = "JsxAttributes"; - ObjectFlags[ObjectFlags["MarkerType"] = 8192] = "MarkerType"; - ObjectFlags[ObjectFlags["ClassOrInterface"] = 3] = "ClassOrInterface"; - })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {})); - /* @internal */ - var Variance; - (function (Variance) { - Variance[Variance["Invariant"] = 0] = "Invariant"; - Variance[Variance["Covariant"] = 1] = "Covariant"; - Variance[Variance["Contravariant"] = 2] = "Contravariant"; - Variance[Variance["Bivariant"] = 3] = "Bivariant"; - Variance[Variance["Independent"] = 4] = "Independent"; - })(Variance = ts.Variance || (ts.Variance = {})); - var SignatureKind; - (function (SignatureKind) { - SignatureKind[SignatureKind["Call"] = 0] = "Call"; - SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; - })(SignatureKind = ts.SignatureKind || (ts.SignatureKind = {})); - var IndexKind; - (function (IndexKind) { - IndexKind[IndexKind["String"] = 0] = "String"; - IndexKind[IndexKind["Number"] = 1] = "Number"; - })(IndexKind = ts.IndexKind || (ts.IndexKind = {})); - var InferencePriority; - (function (InferencePriority) { - InferencePriority[InferencePriority["NakedTypeVariable"] = 1] = "NakedTypeVariable"; - InferencePriority[InferencePriority["HomomorphicMappedType"] = 2] = "HomomorphicMappedType"; - InferencePriority[InferencePriority["MappedTypeConstraint"] = 4] = "MappedTypeConstraint"; - InferencePriority[InferencePriority["ReturnType"] = 8] = "ReturnType"; - InferencePriority[InferencePriority["LiteralKeyof"] = 16] = "LiteralKeyof"; - InferencePriority[InferencePriority["NoConstraints"] = 32] = "NoConstraints"; - InferencePriority[InferencePriority["AlwaysStrict"] = 64] = "AlwaysStrict"; - InferencePriority[InferencePriority["PriorityImpliesCombination"] = 28] = "PriorityImpliesCombination"; - })(InferencePriority = ts.InferencePriority || (ts.InferencePriority = {})); - /* @internal */ - var InferenceFlags; - (function (InferenceFlags) { - InferenceFlags[InferenceFlags["None"] = 0] = "None"; - InferenceFlags[InferenceFlags["InferUnionTypes"] = 1] = "InferUnionTypes"; - InferenceFlags[InferenceFlags["NoDefault"] = 2] = "NoDefault"; - InferenceFlags[InferenceFlags["AnyDefault"] = 4] = "AnyDefault"; - })(InferenceFlags = ts.InferenceFlags || (ts.InferenceFlags = {})); - /** - * Ternary values are defined such that - * x & y is False if either x or y is False. - * x & y is Maybe if either x or y is Maybe, but neither x or y is False. - * x & y is True if both x and y are True. - * x | y is False if both x and y are False. - * x | y is Maybe if either x or y is Maybe, but neither x or y is True. - * x | y is True if either x or y is True. - */ - /* @internal */ - var Ternary; - (function (Ternary) { - Ternary[Ternary["False"] = 0] = "False"; - Ternary[Ternary["Maybe"] = 1] = "Maybe"; - Ternary[Ternary["True"] = -1] = "True"; - })(Ternary = ts.Ternary || (ts.Ternary = {})); - /* @internal */ - var SpecialPropertyAssignmentKind; - (function (SpecialPropertyAssignmentKind) { - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["None"] = 0] = "None"; - /// exports.name = expr - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ExportsProperty"] = 1] = "ExportsProperty"; - /// module.exports = expr - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ModuleExports"] = 2] = "ModuleExports"; - /// className.prototype.name = expr - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["PrototypeProperty"] = 3] = "PrototypeProperty"; - /// this.name = expr - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ThisProperty"] = 4] = "ThisProperty"; - // F.name = expr - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["Property"] = 5] = "Property"; - // F.prototype = { ... } - SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["Prototype"] = 6] = "Prototype"; - })(SpecialPropertyAssignmentKind = ts.SpecialPropertyAssignmentKind || (ts.SpecialPropertyAssignmentKind = {})); var DiagnosticCategory; (function (DiagnosticCategory) { DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; @@ -2999,7 +1733,6 @@ var ts; DiagnosticCategory[DiagnosticCategory["Suggestion"] = 2] = "Suggestion"; DiagnosticCategory[DiagnosticCategory["Message"] = 3] = "Message"; })(DiagnosticCategory = ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); - /* @internal */ function diagnosticCategoryName(d, lowerCase) { if (lowerCase === void 0) { lowerCase = true; } var name = DiagnosticCategory[d.category]; @@ -3021,455 +1754,9 @@ var ts; ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015"; ModuleKind[ModuleKind["ESNext"] = 6] = "ESNext"; })(ModuleKind = ts.ModuleKind || (ts.ModuleKind = {})); - var JsxEmit; - (function (JsxEmit) { - JsxEmit[JsxEmit["None"] = 0] = "None"; - JsxEmit[JsxEmit["Preserve"] = 1] = "Preserve"; - JsxEmit[JsxEmit["React"] = 2] = "React"; - JsxEmit[JsxEmit["ReactNative"] = 3] = "ReactNative"; - })(JsxEmit = ts.JsxEmit || (ts.JsxEmit = {})); - var NewLineKind; - (function (NewLineKind) { - NewLineKind[NewLineKind["CarriageReturnLineFeed"] = 0] = "CarriageReturnLineFeed"; - NewLineKind[NewLineKind["LineFeed"] = 1] = "LineFeed"; - })(NewLineKind = ts.NewLineKind || (ts.NewLineKind = {})); - var ScriptKind; - (function (ScriptKind) { - ScriptKind[ScriptKind["Unknown"] = 0] = "Unknown"; - ScriptKind[ScriptKind["JS"] = 1] = "JS"; - ScriptKind[ScriptKind["JSX"] = 2] = "JSX"; - ScriptKind[ScriptKind["TS"] = 3] = "TS"; - ScriptKind[ScriptKind["TSX"] = 4] = "TSX"; - ScriptKind[ScriptKind["External"] = 5] = "External"; - ScriptKind[ScriptKind["JSON"] = 6] = "JSON"; - /** - * Used on extensions that doesn't define the ScriptKind but the content defines it. - * Deferred extensions are going to be included in all project contexts. - */ - ScriptKind[ScriptKind["Deferred"] = 7] = "Deferred"; - })(ScriptKind = ts.ScriptKind || (ts.ScriptKind = {})); - var ScriptTarget; - (function (ScriptTarget) { - ScriptTarget[ScriptTarget["ES3"] = 0] = "ES3"; - ScriptTarget[ScriptTarget["ES5"] = 1] = "ES5"; - ScriptTarget[ScriptTarget["ES2015"] = 2] = "ES2015"; - ScriptTarget[ScriptTarget["ES2016"] = 3] = "ES2016"; - ScriptTarget[ScriptTarget["ES2017"] = 4] = "ES2017"; - ScriptTarget[ScriptTarget["ES2018"] = 5] = "ES2018"; - ScriptTarget[ScriptTarget["ESNext"] = 6] = "ESNext"; - ScriptTarget[ScriptTarget["JSON"] = 100] = "JSON"; - ScriptTarget[ScriptTarget["Latest"] = 6] = "Latest"; - })(ScriptTarget = ts.ScriptTarget || (ts.ScriptTarget = {})); - var LanguageVariant; - (function (LanguageVariant) { - LanguageVariant[LanguageVariant["Standard"] = 0] = "Standard"; - LanguageVariant[LanguageVariant["JSX"] = 1] = "JSX"; - })(LanguageVariant = ts.LanguageVariant || (ts.LanguageVariant = {})); - var WatchDirectoryFlags; - (function (WatchDirectoryFlags) { - WatchDirectoryFlags[WatchDirectoryFlags["None"] = 0] = "None"; - WatchDirectoryFlags[WatchDirectoryFlags["Recursive"] = 1] = "Recursive"; - })(WatchDirectoryFlags = ts.WatchDirectoryFlags || (ts.WatchDirectoryFlags = {})); - /* @internal */ - var CharacterCodes; - (function (CharacterCodes) { - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; - CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 8232] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 8233] = "paragraphSeparator"; - CharacterCodes[CharacterCodes["nextLine"] = 133] = "nextLine"; - // Unicode 3.0 space characters - CharacterCodes[CharacterCodes["space"] = 32] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 160] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 8192] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 8193] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 8194] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 8195] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 8196] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 8197] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 8198] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 8199] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 8200] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 8201] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 8202] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 8203] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 8239] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 12288] = "ideographicSpace"; - CharacterCodes[CharacterCodes["mathematicalSpace"] = 8287] = "mathematicalSpace"; - CharacterCodes[CharacterCodes["ogham"] = 5760] = "ogham"; - CharacterCodes[CharacterCodes["_"] = 95] = "_"; - CharacterCodes[CharacterCodes["$"] = 36] = "$"; - CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; - CharacterCodes[CharacterCodes["_1"] = 49] = "_1"; - CharacterCodes[CharacterCodes["_2"] = 50] = "_2"; - CharacterCodes[CharacterCodes["_3"] = 51] = "_3"; - CharacterCodes[CharacterCodes["_4"] = 52] = "_4"; - CharacterCodes[CharacterCodes["_5"] = 53] = "_5"; - CharacterCodes[CharacterCodes["_6"] = 54] = "_6"; - CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; - CharacterCodes[CharacterCodes["_8"] = 56] = "_8"; - CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; - CharacterCodes[CharacterCodes["a"] = 97] = "a"; - CharacterCodes[CharacterCodes["b"] = 98] = "b"; - CharacterCodes[CharacterCodes["c"] = 99] = "c"; - CharacterCodes[CharacterCodes["d"] = 100] = "d"; - CharacterCodes[CharacterCodes["e"] = 101] = "e"; - CharacterCodes[CharacterCodes["f"] = 102] = "f"; - CharacterCodes[CharacterCodes["g"] = 103] = "g"; - CharacterCodes[CharacterCodes["h"] = 104] = "h"; - CharacterCodes[CharacterCodes["i"] = 105] = "i"; - CharacterCodes[CharacterCodes["j"] = 106] = "j"; - CharacterCodes[CharacterCodes["k"] = 107] = "k"; - CharacterCodes[CharacterCodes["l"] = 108] = "l"; - CharacterCodes[CharacterCodes["m"] = 109] = "m"; - CharacterCodes[CharacterCodes["n"] = 110] = "n"; - CharacterCodes[CharacterCodes["o"] = 111] = "o"; - CharacterCodes[CharacterCodes["p"] = 112] = "p"; - CharacterCodes[CharacterCodes["q"] = 113] = "q"; - CharacterCodes[CharacterCodes["r"] = 114] = "r"; - CharacterCodes[CharacterCodes["s"] = 115] = "s"; - CharacterCodes[CharacterCodes["t"] = 116] = "t"; - CharacterCodes[CharacterCodes["u"] = 117] = "u"; - CharacterCodes[CharacterCodes["v"] = 118] = "v"; - CharacterCodes[CharacterCodes["w"] = 119] = "w"; - CharacterCodes[CharacterCodes["x"] = 120] = "x"; - CharacterCodes[CharacterCodes["y"] = 121] = "y"; - CharacterCodes[CharacterCodes["z"] = 122] = "z"; - CharacterCodes[CharacterCodes["A"] = 65] = "A"; - CharacterCodes[CharacterCodes["B"] = 66] = "B"; - CharacterCodes[CharacterCodes["C"] = 67] = "C"; - CharacterCodes[CharacterCodes["D"] = 68] = "D"; - CharacterCodes[CharacterCodes["E"] = 69] = "E"; - CharacterCodes[CharacterCodes["F"] = 70] = "F"; - CharacterCodes[CharacterCodes["G"] = 71] = "G"; - CharacterCodes[CharacterCodes["H"] = 72] = "H"; - CharacterCodes[CharacterCodes["I"] = 73] = "I"; - CharacterCodes[CharacterCodes["J"] = 74] = "J"; - CharacterCodes[CharacterCodes["K"] = 75] = "K"; - CharacterCodes[CharacterCodes["L"] = 76] = "L"; - CharacterCodes[CharacterCodes["M"] = 77] = "M"; - CharacterCodes[CharacterCodes["N"] = 78] = "N"; - CharacterCodes[CharacterCodes["O"] = 79] = "O"; - CharacterCodes[CharacterCodes["P"] = 80] = "P"; - CharacterCodes[CharacterCodes["Q"] = 81] = "Q"; - CharacterCodes[CharacterCodes["R"] = 82] = "R"; - CharacterCodes[CharacterCodes["S"] = 83] = "S"; - CharacterCodes[CharacterCodes["T"] = 84] = "T"; - CharacterCodes[CharacterCodes["U"] = 85] = "U"; - CharacterCodes[CharacterCodes["V"] = 86] = "V"; - CharacterCodes[CharacterCodes["W"] = 87] = "W"; - CharacterCodes[CharacterCodes["X"] = 88] = "X"; - CharacterCodes[CharacterCodes["Y"] = 89] = "Y"; - CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; - CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 64] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; - CharacterCodes[CharacterCodes["backtick"] = 96] = "backtick"; - CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; - CharacterCodes[CharacterCodes["hash"] = 35] = "hash"; - CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; - CharacterCodes[CharacterCodes["question"] = 63] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; - CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 65279] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; - })(CharacterCodes = ts.CharacterCodes || (ts.CharacterCodes = {})); - var Extension; - (function (Extension) { - Extension["Ts"] = ".ts"; - Extension["Tsx"] = ".tsx"; - Extension["Dts"] = ".d.ts"; - Extension["Js"] = ".js"; - Extension["Jsx"] = ".jsx"; - Extension["Json"] = ".json"; - })(Extension = ts.Extension || (ts.Extension = {})); - /* @internal */ - var TransformFlags; - (function (TransformFlags) { - TransformFlags[TransformFlags["None"] = 0] = "None"; - // Facts - // - 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["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"] = 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["ContainsDynamicImport"] = 67108864] = "ContainsDynamicImport"; - TransformFlags[TransformFlags["Super"] = 134217728] = "Super"; - TransformFlags[TransformFlags["ContainsSuper"] = 268435456] = "ContainsSuper"; - // Please leave this as 1 << 29. - // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system. - // It is a good reminder of how much room we have left - 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"] = 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["OuterExpressionExcludes"] = 536872257] = "OuterExpressionExcludes"; - TransformFlags[TransformFlags["PropertyAccessExcludes"] = 671089985] = "PropertyAccessExcludes"; - TransformFlags[TransformFlags["NodeExcludes"] = 939525441] = "NodeExcludes"; - TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 1003902273] = "ArrowFunctionExcludes"; - TransformFlags[TransformFlags["FunctionExcludes"] = 1003935041] = "FunctionExcludes"; - TransformFlags[TransformFlags["ConstructorExcludes"] = 1003668801] = "ConstructorExcludes"; - TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 1003668801] = "MethodOrAccessorExcludes"; - TransformFlags[TransformFlags["ClassExcludes"] = 942011713] = "ClassExcludes"; - TransformFlags[TransformFlags["ModuleExcludes"] = 977327425] = "ModuleExcludes"; - TransformFlags[TransformFlags["TypeExcludes"] = -3] = "TypeExcludes"; - TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 942740801] = "ObjectLiteralExcludes"; - TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 940049729] = "ArrayLiteralOrCallOrNewExcludes"; - TransformFlags[TransformFlags["VariableDeclarationListExcludes"] = 948962625] = "VariableDeclarationListExcludes"; - TransformFlags[TransformFlags["ParameterExcludes"] = 939525441] = "ParameterExcludes"; - TransformFlags[TransformFlags["CatchClauseExcludes"] = 940574017] = "CatchClauseExcludes"; - TransformFlags[TransformFlags["BindingPatternExcludes"] = 940049729] = "BindingPatternExcludes"; - // Masks - // - Additional bitmasks - TransformFlags[TransformFlags["TypeScriptClassSyntaxMask"] = 274432] = "TypeScriptClassSyntaxMask"; - TransformFlags[TransformFlags["ES2015FunctionSyntaxMask"] = 163840] = "ES2015FunctionSyntaxMask"; - })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {})); - var EmitFlags; - (function (EmitFlags) { - EmitFlags[EmitFlags["None"] = 0] = "None"; - 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["InternalName"] = 32768] = "InternalName"; - EmitFlags[EmitFlags["Indented"] = 65536] = "Indented"; - EmitFlags[EmitFlags["NoIndentation"] = 131072] = "NoIndentation"; - EmitFlags[EmitFlags["AsyncFunctionBody"] = 262144] = "AsyncFunctionBody"; - EmitFlags[EmitFlags["ReuseTempVariableScope"] = 524288] = "ReuseTempVariableScope"; - EmitFlags[EmitFlags["CustomPrologue"] = 1048576] = "CustomPrologue"; - EmitFlags[EmitFlags["NoHoisting"] = 2097152] = "NoHoisting"; - EmitFlags[EmitFlags["HasEndOfDeclarationMarker"] = 4194304] = "HasEndOfDeclarationMarker"; - EmitFlags[EmitFlags["Iterator"] = 8388608] = "Iterator"; - EmitFlags[EmitFlags["NoAsciiEscaping"] = 16777216] = "NoAsciiEscaping"; - /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper"; - /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper"; - })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {})); - /** - * Used by the checker, this enum keeps track of external emit helpers that should be type - * checked. - */ - /* @internal */ - var ExternalEmitHelpers; - (function (ExternalEmitHelpers) { - ExternalEmitHelpers[ExternalEmitHelpers["Extends"] = 1] = "Extends"; - ExternalEmitHelpers[ExternalEmitHelpers["Assign"] = 2] = "Assign"; - ExternalEmitHelpers[ExternalEmitHelpers["Rest"] = 4] = "Rest"; - ExternalEmitHelpers[ExternalEmitHelpers["Decorate"] = 8] = "Decorate"; - ExternalEmitHelpers[ExternalEmitHelpers["Metadata"] = 16] = "Metadata"; - ExternalEmitHelpers[ExternalEmitHelpers["Param"] = 32] = "Param"; - ExternalEmitHelpers[ExternalEmitHelpers["Awaiter"] = 64] = "Awaiter"; - ExternalEmitHelpers[ExternalEmitHelpers["Generator"] = 128] = "Generator"; - ExternalEmitHelpers[ExternalEmitHelpers["Values"] = 256] = "Values"; - ExternalEmitHelpers[ExternalEmitHelpers["Read"] = 512] = "Read"; - ExternalEmitHelpers[ExternalEmitHelpers["Spread"] = 1024] = "Spread"; - ExternalEmitHelpers[ExternalEmitHelpers["Await"] = 2048] = "Await"; - ExternalEmitHelpers[ExternalEmitHelpers["AsyncGenerator"] = 4096] = "AsyncGenerator"; - ExternalEmitHelpers[ExternalEmitHelpers["AsyncDelegator"] = 8192] = "AsyncDelegator"; - ExternalEmitHelpers[ExternalEmitHelpers["AsyncValues"] = 16384] = "AsyncValues"; - ExternalEmitHelpers[ExternalEmitHelpers["ExportStar"] = 32768] = "ExportStar"; - ExternalEmitHelpers[ExternalEmitHelpers["MakeTemplateObject"] = 65536] = "MakeTemplateObject"; - ExternalEmitHelpers[ExternalEmitHelpers["FirstEmitHelper"] = 1] = "FirstEmitHelper"; - ExternalEmitHelpers[ExternalEmitHelpers["LastEmitHelper"] = 65536] = "LastEmitHelper"; - // Helpers included by ES2015 for..of - ExternalEmitHelpers[ExternalEmitHelpers["ForOfIncludes"] = 256] = "ForOfIncludes"; - // Helpers included by ES2017 for..await..of - ExternalEmitHelpers[ExternalEmitHelpers["ForAwaitOfIncludes"] = 16384] = "ForAwaitOfIncludes"; - // Helpers included by ES2017 async generators - ExternalEmitHelpers[ExternalEmitHelpers["AsyncGeneratorIncludes"] = 6144] = "AsyncGeneratorIncludes"; - // Helpers included by yield* in ES2017 async generators - ExternalEmitHelpers[ExternalEmitHelpers["AsyncDelegatorIncludes"] = 26624] = "AsyncDelegatorIncludes"; - // Helpers included by ES2015 spread - ExternalEmitHelpers[ExternalEmitHelpers["SpreadIncludes"] = 1536] = "SpreadIncludes"; - })(ExternalEmitHelpers = ts.ExternalEmitHelpers || (ts.ExternalEmitHelpers = {})); - var EmitHint; - (function (EmitHint) { - EmitHint[EmitHint["SourceFile"] = 0] = "SourceFile"; - EmitHint[EmitHint["Expression"] = 1] = "Expression"; - EmitHint[EmitHint["IdentifierName"] = 2] = "IdentifierName"; - EmitHint[EmitHint["MappedTypeParameter"] = 3] = "MappedTypeParameter"; - EmitHint[EmitHint["Unspecified"] = 4] = "Unspecified"; - })(EmitHint = ts.EmitHint || (ts.EmitHint = {})); - var ListFormat; - (function (ListFormat) { - ListFormat[ListFormat["None"] = 0] = "None"; - // Line separators - ListFormat[ListFormat["SingleLine"] = 0] = "SingleLine"; - ListFormat[ListFormat["MultiLine"] = 1] = "MultiLine"; - ListFormat[ListFormat["PreserveLines"] = 2] = "PreserveLines"; - ListFormat[ListFormat["LinesMask"] = 3] = "LinesMask"; - // Delimiters - ListFormat[ListFormat["NotDelimited"] = 0] = "NotDelimited"; - ListFormat[ListFormat["BarDelimited"] = 4] = "BarDelimited"; - ListFormat[ListFormat["AmpersandDelimited"] = 8] = "AmpersandDelimited"; - ListFormat[ListFormat["CommaDelimited"] = 16] = "CommaDelimited"; - ListFormat[ListFormat["DelimitersMask"] = 28] = "DelimitersMask"; - ListFormat[ListFormat["AllowTrailingComma"] = 32] = "AllowTrailingComma"; - // Whitespace - ListFormat[ListFormat["Indented"] = 64] = "Indented"; - ListFormat[ListFormat["SpaceBetweenBraces"] = 128] = "SpaceBetweenBraces"; - ListFormat[ListFormat["SpaceBetweenSiblings"] = 256] = "SpaceBetweenSiblings"; - // Brackets/Braces - ListFormat[ListFormat["Braces"] = 512] = "Braces"; - ListFormat[ListFormat["Parenthesis"] = 1024] = "Parenthesis"; - ListFormat[ListFormat["AngleBrackets"] = 2048] = "AngleBrackets"; - ListFormat[ListFormat["SquareBrackets"] = 4096] = "SquareBrackets"; - ListFormat[ListFormat["BracketsMask"] = 7680] = "BracketsMask"; - ListFormat[ListFormat["OptionalIfUndefined"] = 8192] = "OptionalIfUndefined"; - ListFormat[ListFormat["OptionalIfEmpty"] = 16384] = "OptionalIfEmpty"; - ListFormat[ListFormat["Optional"] = 24576] = "Optional"; - // Other - ListFormat[ListFormat["PreferNewLine"] = 32768] = "PreferNewLine"; - ListFormat[ListFormat["NoTrailingNewLine"] = 65536] = "NoTrailingNewLine"; - ListFormat[ListFormat["NoInterveningComments"] = 131072] = "NoInterveningComments"; - ListFormat[ListFormat["NoSpaceIfEmpty"] = 262144] = "NoSpaceIfEmpty"; - ListFormat[ListFormat["SingleElement"] = 524288] = "SingleElement"; - // Precomputed Formats - ListFormat[ListFormat["Modifiers"] = 131328] = "Modifiers"; - ListFormat[ListFormat["HeritageClauses"] = 256] = "HeritageClauses"; - ListFormat[ListFormat["SingleLineTypeLiteralMembers"] = 384] = "SingleLineTypeLiteralMembers"; - ListFormat[ListFormat["MultiLineTypeLiteralMembers"] = 16449] = "MultiLineTypeLiteralMembers"; - ListFormat[ListFormat["TupleTypeElements"] = 272] = "TupleTypeElements"; - ListFormat[ListFormat["UnionTypeConstituents"] = 260] = "UnionTypeConstituents"; - ListFormat[ListFormat["IntersectionTypeConstituents"] = 264] = "IntersectionTypeConstituents"; - ListFormat[ListFormat["ObjectBindingPatternElements"] = 262576] = "ObjectBindingPatternElements"; - ListFormat[ListFormat["ArrayBindingPatternElements"] = 262448] = "ArrayBindingPatternElements"; - ListFormat[ListFormat["ObjectLiteralExpressionProperties"] = 263122] = "ObjectLiteralExpressionProperties"; - ListFormat[ListFormat["ArrayLiteralExpressionElements"] = 4466] = "ArrayLiteralExpressionElements"; - ListFormat[ListFormat["CommaListElements"] = 272] = "CommaListElements"; - ListFormat[ListFormat["CallExpressionArguments"] = 1296] = "CallExpressionArguments"; - ListFormat[ListFormat["NewExpressionArguments"] = 9488] = "NewExpressionArguments"; - ListFormat[ListFormat["TemplateExpressionSpans"] = 131072] = "TemplateExpressionSpans"; - ListFormat[ListFormat["SingleLineBlockStatements"] = 384] = "SingleLineBlockStatements"; - ListFormat[ListFormat["MultiLineBlockStatements"] = 65] = "MultiLineBlockStatements"; - ListFormat[ListFormat["VariableDeclarationList"] = 272] = "VariableDeclarationList"; - ListFormat[ListFormat["SingleLineFunctionBodyStatements"] = 384] = "SingleLineFunctionBodyStatements"; - ListFormat[ListFormat["MultiLineFunctionBodyStatements"] = 1] = "MultiLineFunctionBodyStatements"; - ListFormat[ListFormat["ClassHeritageClauses"] = 0] = "ClassHeritageClauses"; - ListFormat[ListFormat["ClassMembers"] = 65] = "ClassMembers"; - ListFormat[ListFormat["InterfaceMembers"] = 65] = "InterfaceMembers"; - ListFormat[ListFormat["EnumMembers"] = 81] = "EnumMembers"; - ListFormat[ListFormat["CaseBlockClauses"] = 65] = "CaseBlockClauses"; - ListFormat[ListFormat["NamedImportsOrExportsElements"] = 262576] = "NamedImportsOrExportsElements"; - ListFormat[ListFormat["JsxElementOrFragmentChildren"] = 131072] = "JsxElementOrFragmentChildren"; - ListFormat[ListFormat["JsxElementAttributes"] = 131328] = "JsxElementAttributes"; - ListFormat[ListFormat["CaseOrDefaultClauseStatements"] = 81985] = "CaseOrDefaultClauseStatements"; - ListFormat[ListFormat["HeritageClauseTypes"] = 272] = "HeritageClauseTypes"; - ListFormat[ListFormat["SourceFileStatements"] = 65537] = "SourceFileStatements"; - ListFormat[ListFormat["Decorators"] = 24577] = "Decorators"; - ListFormat[ListFormat["TypeArguments"] = 26896] = "TypeArguments"; - ListFormat[ListFormat["TypeParameters"] = 26896] = "TypeParameters"; - ListFormat[ListFormat["Parameters"] = 1296] = "Parameters"; - ListFormat[ListFormat["IndexSignatureParameters"] = 4432] = "IndexSignatureParameters"; - })(ListFormat = ts.ListFormat || (ts.ListFormat = {})); - /* @internal */ - var PragmaKindFlags; - (function (PragmaKindFlags) { - PragmaKindFlags[PragmaKindFlags["None"] = 0] = "None"; - /** - * Triple slash comment of the form - * /// - */ - PragmaKindFlags[PragmaKindFlags["TripleSlashXML"] = 1] = "TripleSlashXML"; - /** - * Single line comment of the form - * // @pragma-name argval1 argval2 - * or - * /// @pragma-name argval1 argval2 - */ - PragmaKindFlags[PragmaKindFlags["SingleLine"] = 2] = "SingleLine"; - /** - * Multiline non-jsdoc pragma of the form - * /* @pragma-name argval1 argval2 * / - */ - PragmaKindFlags[PragmaKindFlags["MultiLine"] = 4] = "MultiLine"; - PragmaKindFlags[PragmaKindFlags["All"] = 7] = "All"; - PragmaKindFlags[PragmaKindFlags["Default"] = 7] = "Default"; - })(PragmaKindFlags = ts.PragmaKindFlags || (ts.PragmaKindFlags = {})); - /** - * This function only exists to cause exact types to be inferred for all the literals within `commentPragmas` - */ - /* @internal */ function _contextuallyTypePragmas(args) { return args; } - // While not strictly a type, this is here because `PragmaMap` needs to be here to be used with `SourceFile`, and we don't - // fancy effectively defining it twice, once in value-space and once in type-space - /* @internal */ ts.commentPragmas = _contextuallyTypePragmas({ "reference": { args: [ @@ -3478,38 +1765,32 @@ var ts; { name: "path", optional: true, captureSpan: true }, { name: "no-default-lib", optional: true } ], - kind: 1 /* TripleSlashXML */ + kind: 1 }, "amd-dependency": { args: [{ name: "path" }, { name: "name", optional: true }], - kind: 1 /* TripleSlashXML */ + kind: 1 }, "amd-module": { args: [{ name: "name" }], - kind: 1 /* TripleSlashXML */ + kind: 1 }, "ts-check": { - kind: 2 /* SingleLine */ + kind: 2 }, "ts-nocheck": { - kind: 2 /* SingleLine */ + kind: 2 }, "jsx": { args: [{ name: "factory" }], - kind: 4 /* MultiLine */ + kind: 4 }, }); })(ts || (ts = {})); var ts; (function (ts) { - /** - * Set a high stack trace limit to provide more information in case of an error. - * Called for command-line and server use cases. - * Not called if TypeScript is used as a library. - */ - /* @internal */ function setStackTraceLimit() { - if (Error.stackTraceLimit < 100) { // Also tests that we won't set the property if it doesn't exist. + if (Error.stackTraceLimit < 100) { Error.stackTraceLimit = 100; } } @@ -3520,7 +1801,6 @@ var ts; FileWatcherEventKind[FileWatcherEventKind["Changed"] = 1] = "Changed"; FileWatcherEventKind[FileWatcherEventKind["Deleted"] = 2] = "Deleted"; })(FileWatcherEventKind = ts.FileWatcherEventKind || (ts.FileWatcherEventKind = {})); - /* @internal */ var PollingInterval; (function (PollingInterval) { PollingInterval[PollingInterval["High"] = 2000] = "High"; @@ -3536,13 +1816,11 @@ var ts; return pollingIntervalsForPriority[watchPriority]; } var pollingIntervalsForPriority = getPriorityValues(250); - /* @internal */ function watchFileUsingPriorityPollingInterval(host, fileName, callback, watchPriority) { return host.watchFile(fileName, callback, pollingInterval(watchPriority)); } ts.watchFileUsingPriorityPollingInterval = watchFileUsingPriorityPollingInterval; - /* @internal */ - ts.missingFileModifiedTime = new Date(0); // Any subsequent modification will occur after this time + ts.missingFileModifiedTime = new Date(0); function createPollingIntervalBasedLevels(levels) { var _a; return _a = {}, @@ -3553,9 +1831,7 @@ var ts; } var defaultChunkLevels = { Low: 32, Medium: 64, High: 256 }; var pollingChunkSize = createPollingIntervalBasedLevels(defaultChunkLevels); - /* @internal */ ts.unchangedPollThresholds = createPollingIntervalBasedLevels(defaultChunkLevels); - /* @internal */ function setCustomPollingValues(system) { if (!system.getEnvironmentVariable) { return; @@ -3599,7 +1875,6 @@ var ts; } } ts.setCustomPollingValues = setCustomPollingValues; - /* @internal */ function createDynamicPriorityPollingWatchFile(host) { var watchedFiles = []; var changedFilesInLastPoll = []; @@ -3619,9 +1894,7 @@ var ts; return { close: function () { file.isClosed = true; - // Remove from watchedFiles ts.unorderedRemoveItem(watchedFiles, file); - // Do not update polling interval queue since that will happen as part of polling } }; } @@ -3634,7 +1907,6 @@ var ts; } function pollPollingIntervalQueue(queue) { queue.pollIndex = pollQueue(queue, queue.pollingInterval, queue.pollIndex, pollingChunkSize[queue.pollingInterval]); - // Set the next polling index and timeout if (queue.length) { scheduleNextPoll(queue.pollingInterval); } @@ -3644,18 +1916,13 @@ var ts; } } function pollLowPollingIntervalQueue(queue) { - // Always poll complete list of changedFilesInLastPoll - pollQueue(changedFilesInLastPoll, PollingInterval.Low, /*pollIndex*/ 0, changedFilesInLastPoll.length); - // Finally do the actual polling of the queue + pollQueue(changedFilesInLastPoll, PollingInterval.Low, 0, changedFilesInLastPoll.length); pollPollingIntervalQueue(queue); - // Schedule poll if there are files in changedFilesInLastPoll but no files in the actual queue - // as pollPollingIntervalQueue wont schedule for next poll if (!queue.pollScheduled && changedFilesInLastPoll.length) { scheduleNextPoll(PollingInterval.Low); } } function pollQueue(queue, pollingInterval, pollIndex, chunkSize) { - // Max visit would be all elements of the queue var needsVisit = queue.length; var definedValueCopyToIndex = pollIndex; for (var polled = 0; polled < chunkSize && needsVisit > 0; nextPollIndex(), needsVisit--) { @@ -3670,12 +1937,10 @@ var ts; polled++; var fileChanged = onWatchedFileStat(watchedFile, getModifiedTime(watchedFile.fileName)); if (watchedFile.isClosed) { - // Closed watcher as part of callback queue[pollIndex] = undefined; } else if (fileChanged) { watchedFile.unchangedPolls = 0; - // Changed files go to changedFilesInLastPoll queue if (queue !== changedFilesInLastPoll) { queue[pollIndex] = undefined; addChangedFileToLowPollingIntervalQueue(watchedFile); @@ -3685,7 +1950,6 @@ var ts; watchedFile.unchangedPolls++; } else if (queue === changedFilesInLastPoll) { - // Restart unchangedPollCount for unchanged file and move to low polling interval queue watchedFile.unchangedPolls = 1; queue[pollIndex] = undefined; addToPollingIntervalQueue(watchedFile, PollingInterval.Low); @@ -3696,7 +1960,6 @@ var ts; addToPollingIntervalQueue(watchedFile, pollingInterval === PollingInterval.Low ? PollingInterval.Medium : PollingInterval.High); } if (queue[pollIndex]) { - // Copy this file to the non hole location if (definedValueCopyToIndex < pollIndex) { queue[definedValueCopyToIndex] = watchedFile; queue[pollIndex] = undefined; @@ -3704,13 +1967,11 @@ var ts; definedValueCopyToIndex++; } } - // Return next poll index return pollIndex; function nextPollIndex() { pollIndex++; if (pollIndex === queue.length) { if (definedValueCopyToIndex < pollIndex) { - // There are holes from nextDefinedValueIndex to end of queue, change queue size queue.length = definedValueCopyToIndex; } pollIndex = 0; @@ -3749,10 +2010,6 @@ var ts; } } ts.createDynamicPriorityPollingWatchFile = createDynamicPriorityPollingWatchFile; - /** - * Returns true if file status changed - */ - /*@internal*/ function onWatchedFileStat(watchedFile, modifiedTime) { var oldTime = watchedFile.mtime.getTime(); var newTime = modifiedTime.getTime(); @@ -3769,22 +2026,11 @@ var ts; return false; } ts.onWatchedFileStat = onWatchedFileStat; - /** - * Watch the directory recursively using host provided method to watch child directories - * that means if this is recursive watcher, watch the children directories as well - * (eg on OS that dont support recursive watch using fs.watch use fs.watchFile) - */ - /*@internal*/ function createRecursiveDirectoryWatcher(host) { return createDirectoryWatcher; - /** - * Create the directory watcher for the dirPath. - */ function createDirectoryWatcher(dirName, callback) { var watcher = host.watchDirectory(dirName, function (fileName) { - // Call the actual callback callback(fileName); - // Iterate through existing children and update the watches if needed updateChildWatches(result, callback); }); var result = { @@ -3800,33 +2046,21 @@ var ts; return result; } function updateChildWatches(watcher, callback) { - // Iterate through existing children and update the watches if needed if (watcher) { watcher.childWatches = watchChildDirectories(watcher.dirName, watcher.childWatches, callback); } } - /** - * Watch the directories in the parentDir - */ function watchChildDirectories(parentDir, existingChildWatches, callback) { var newChildWatches; ts.enumerateInsertsAndDeletes(host.directoryExists(parentDir) ? ts.mapDefined(host.getAccessibleSortedChildDirectories(parentDir), function (child) { var childFullName = ts.getNormalizedAbsolutePath(child, parentDir); - // Filter our the symbolic link directories since those arent included in recursive watch - // which is same behaviour when recursive: true is passed to fs.watch - return host.filePathComparer(childFullName, host.realpath(childFullName)) === 0 /* EqualTo */ ? childFullName : undefined; + return host.filePathComparer(childFullName, host.realpath(childFullName)) === 0 ? childFullName : undefined; }) : ts.emptyArray, existingChildWatches, function (child, childWatcher) { return host.filePathComparer(child, childWatcher.dirName); }, createAndAddChildDirectoryWatcher, ts.closeFileWatcher, addChildDirectoryWatcher); return newChildWatches || ts.emptyArray; - /** - * Create new childDirectoryWatcher and add it to the new ChildDirectoryWatcher list - */ function createAndAddChildDirectoryWatcher(childName) { var result = createDirectoryWatcher(childName, callback); addChildDirectoryWatcher(result); } - /** - * Add child directory watcher to the new ChildDirectoryWatcher list - */ function addChildDirectoryWatcher(childWatcher) { (newChildWatches || (newChildWatches = [])).push(childWatcher); } @@ -3848,17 +2082,12 @@ var ts; return parseInt(version.substring(1, dot)); } ts.getNodeMajorVersion = getNodeMajorVersion; - // TODO: this is used as if it's certainly defined in many places. ts.sys = (function () { - // NodeJS detects "\uFEFF" at the start of the string and *replaces* it with the actual - // byte order mark from the specified encoding. Using any other byte order mark does - // not actually work. var byteOrderMarkIndicator = "\uFEFF"; function getNodeSystem() { var _fs = require("fs"); var _path = require("path"); var _os = require("os"); - // crypto can be absent on reduced node installations var _crypto; try { _crypto = require("crypto"); @@ -3871,11 +2100,6 @@ var ts; var isNode4OrLater = nodeVersion >= 4; var platform = _os.platform(); var useCaseSensitiveFileNames = isFileSystemCaseSensitive(); - var FileSystemEntryKind; - (function (FileSystemEntryKind) { - FileSystemEntryKind[FileSystemEntryKind["File"] = 0] = "File"; - FileSystemEntryKind[FileSystemEntryKind["Directory"] = 1] = "Directory"; - })(FileSystemEntryKind || (FileSystemEntryKind = {})); var useNonPollingWatchers = process.env.TSC_NONPOLLING_WATCHER; var tscWatchFile = process.env.TSC_WATCHFILE; var tscWatchDirectory = process.env.TSC_WATCHDIRECTORY; @@ -3931,7 +2155,7 @@ var ts; return stat.size; } } - catch ( /*ignore*/_a) { /*ignore*/ } + catch (_a) { } return 0; }, exit: function (exitCode) { @@ -3944,7 +2168,6 @@ var ts; require("source-map-support").install(); } catch (_a) { - // Could not enable source maps. } }, setTimeout: setTimeout, @@ -3970,14 +2193,11 @@ var ts; }; return nodeSystem; function isFileSystemCaseSensitive() { - // win32\win64 are case insensitive platforms if (platform === "win32" || platform === "win64") { return false; } - // If this file exists under a different case, we must be case-insensitve. return !fileExists(swapCase(__filename)); } - /** Convert all lowercase chars to uppercase, and vice-versa */ function swapCase(s) { return s.replace(/\w/g, function (ch) { var up = ch.toUpperCase(); @@ -3987,30 +2207,22 @@ var ts; function getWatchFile() { switch (tscWatchFile) { case "PriorityPollingInterval": - // Use polling interval based on priority when create watch using host.watchFile return fsWatchFile; case "DynamicPriorityPolling": - // Use polling interval but change the interval depending on file changes and their default polling interval return createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }); case "UseFsEvents": - // Use notifications from FS to watch with falling back to fs.watchFile return watchFileUsingFsWatch; case "UseFsEventsWithFallbackDynamicPolling": - // Use notifications from FS to watch with falling back to dynamic watch file dynamicPollingWatchFile = createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }); return createWatchFileUsingDynamicWatchFile(dynamicPollingWatchFile); case "UseFsEventsOnParentDirectory": - // Use notifications from FS to watch with falling back to fs.watchFile return createNonPollingWatchFile(); } return useNonPollingWatchers ? createNonPollingWatchFile() : - // Default to do not use polling interval as it is before this experiment branch function (fileName, callback) { return fsWatchFile(fileName, callback); }; } function getWatchDirectory() { - // Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows - // (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643) var fsSupportsRecursive = isNode4OrLater && (process.platform === "win32" || process.platform === "darwin"); if (fsSupportsRecursive) { return watchDirectoryUsingFsWatch; @@ -4032,11 +2244,10 @@ var ts; return watchDirectoryRecursively(directoryName, callback); } watchDirectory(directoryName, callback); - return undefined; // TODO: GH#18217 + return undefined; }; } function createNonPollingWatchFile() { - // One file can have multiple watchers var fileWatcherCallbacks = ts.createMultiMap(); var dirWatchers = ts.createMap(); var toCanonicalName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); @@ -4062,11 +2273,9 @@ var ts; } function createDirectoryWatcher(dirName, dirPath) { var watcher = fsWatchDirectory(dirName, function (_eventName, relativeFileName) { - // When files are deleted from disk, the triggered "rename" event would have a relativefileName of "undefined" var fileName = !ts.isString(relativeFileName) - ? undefined // TODO: GH#18217 + ? undefined : ts.getNormalizedAbsolutePath(relativeFileName, dirName); - // Some applications save a working file via rename operations var callbacks = fileWatcherCallbacks.get(toCanonicalName(fileName)); if (callbacks) { for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) { @@ -4087,12 +2296,9 @@ var ts; close: function () { return _fs.unwatchFile(fileName, fileChanged); } }; function fileChanged(curr, prev) { - // previous event kind check is to ensure we recongnize the file as previously also missing when it is restored or renamed twice (that is it disappears and reappears) - // In such case, prevTime returned is same as prev time of event when file was deleted as per node documentation var isPreviouslyDeleted = +prev.mtime === 0 || eventKind === FileWatcherEventKind.Deleted; if (+curr.mtime === 0) { if (isPreviouslyDeleted) { - // Already deleted file, no need to callback again return; } eventKind = FileWatcherEventKind.Deleted; @@ -4100,12 +2306,10 @@ var ts; else if (isPreviouslyDeleted) { eventKind = FileWatcherEventKind.Created; } - // If there is no change in modified time, ignore the event else if (+curr.mtime === +prev.mtime) { return; } else { - // File changed eventKind = FileWatcherEventKind.Changed; } callback(fileName, eventKind); @@ -4120,55 +2324,36 @@ var ts; callback(fileName, fileExists(fileName) ? FileWatcherEventKind.Created : FileWatcherEventKind.Deleted); } else { - // Change callback(fileName, FileWatcherEventKind.Changed); } }; } function createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback) { return function (eventName, relativeFileName) { - // In watchDirectory we only care about adding and removing files (when event name is - // "rename"); changes made within files are handled by corresponding fileWatchers (when - // event name is "change") if (eventName === "rename") { - // When deleting a file, the passed baseFileName is null callback(!relativeFileName ? directoryName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName))); } }; } function fsWatch(fileOrDirectory, entryKind, callback, recursive, fallbackPollingWatchFile, pollingInterval) { var options; - /** Watcher for the file system entry depending on whether it is missing or present */ var watcher = !fileSystemEntryExists(fileOrDirectory, entryKind) ? watchMissingFileSystemEntry() : watchPresentFileSystemEntry(); return { close: function () { - // Close the watcher (either existing file system entry watcher or missing file system entry watcher) watcher.close(); watcher = undefined; } }; - /** - * Invoke the callback with rename and update the watcher if not closed - * @param createWatcher - */ function invokeCallbackAndUpdateWatcher(createWatcher) { - // Call the callback for current directory callback("rename", ""); - // If watcher is not closed, update it if (watcher) { watcher.close(); watcher = createWatcher(); } } - /** - * Watch the file or directory that is currently present - * and when the watched file or directory is deleted, switch to missing file system entry watcher - */ function watchPresentFileSystemEntry() { - // Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows - // (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643) if (options === undefined) { if (isNode4OrLater && (process.platform === "win32" || process.platform === "darwin")) { options = { persistent: true, recursive: !!recursive }; @@ -4179,47 +2364,32 @@ var ts; } try { var presentWatcher = _fs.watch(fileOrDirectory, options, callback); - // Watch the missing file or directory or error presentWatcher.on("error", function () { return invokeCallbackAndUpdateWatcher(watchMissingFileSystemEntry); }); return presentWatcher; } catch (e) { - // Catch the exception and use polling instead - // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point - // so instead of throwing error, use fs.watchFile return watchPresentFileSystemEntryWithFsWatchFile(); } } - /** - * Watch the file or directory using fs.watchFile since fs.watch threw exception - * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point - */ function watchPresentFileSystemEntryWithFsWatchFile() { return fallbackPollingWatchFile(fileOrDirectory, createFileWatcherCallback(callback), pollingInterval); } - /** - * Watch the file or directory that is missing - * and switch to existing file or directory when the missing filesystem entry is created - */ function watchMissingFileSystemEntry() { return fallbackPollingWatchFile(fileOrDirectory, function (_fileName, eventKind) { if (eventKind === FileWatcherEventKind.Created && fileSystemEntryExists(fileOrDirectory, entryKind)) { - // Call the callback for current file or directory - // For now it could be callback for the inner directory creation, - // but just return current directory, better than current no-op invokeCallbackAndUpdateWatcher(watchPresentFileSystemEntry); } }, pollingInterval); } } function watchFileUsingFsWatch(fileName, callback, pollingInterval) { - return fsWatch(fileName, 0 /* File */, createFsWatchCallbackForFileWatcherCallback(fileName, callback), /*recursive*/ false, fsWatchFile, pollingInterval); + return fsWatch(fileName, 0, createFsWatchCallbackForFileWatcherCallback(fileName, callback), false, fsWatchFile, pollingInterval); } function createWatchFileUsingDynamicWatchFile(watchFile) { - return function (fileName, callback, pollingInterval) { return fsWatch(fileName, 0 /* File */, createFsWatchCallbackForFileWatcherCallback(fileName, callback), /*recursive*/ false, watchFile, pollingInterval); }; + return function (fileName, callback, pollingInterval) { return fsWatch(fileName, 0, createFsWatchCallbackForFileWatcherCallback(fileName, callback), false, watchFile, pollingInterval); }; } function fsWatchDirectory(directoryName, callback, recursive) { - return fsWatch(directoryName, 1 /* Directory */, callback, !!recursive, fsWatchFile); + return fsWatch(directoryName, 1, callback, !!recursive, fsWatchFile); } function watchDirectoryUsingFsWatch(directoryName, callback, recursive) { return fsWatchDirectory(directoryName, createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback), recursive); @@ -4234,9 +2404,7 @@ var ts; var buffer = _fs.readFileSync(fileName); var len = buffer.length; if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { - // Big endian UTF-16 byte order mark detected. Since big endian is not supported by node.js, - // flip all byte pairs and treat as little endian. - len &= ~1; // Round down to a multiple of 2 + len &= ~1; for (var i = 0; i < len; i += 2) { var temp = buffer[i]; buffer[i] = buffer[i + 1]; @@ -4245,25 +2413,21 @@ var ts; return buffer.toString("utf16le", 2); } if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { - // Little endian UTF-16 byte order mark detected return buffer.toString("utf16le", 2); } if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { - // UTF-8 byte order mark detected return buffer.toString("utf8", 3); } - // Default is UTF-8 with no byte order mark return buffer.toString("utf8"); } function writeFile(fileName, data, writeByteOrderMark) { - // If a BOM is required, emit one if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } var fd; try { fd = _fs.openSync(fileName, "w"); - _fs.writeSync(fd, data, /*position*/ undefined, "utf8"); + _fs.writeSync(fd, data, undefined, "utf8"); } finally { if (fd !== undefined) { @@ -4278,8 +2442,6 @@ var ts; var directories = []; for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) { var entry = entries_2[_i]; - // This is necessary because on some file system node fails to exclude - // "." and "..". See https://github.com/nodejs/node/issues/4002 if (entry === "." || entry === "..") { continue; } @@ -4311,8 +2473,8 @@ var ts; try { var stat = _fs.statSync(path); switch (entryKind) { - case 0 /* File */: return stat.isFile(); - case 1 /* Directory */: return stat.isDirectory(); + case 0: return stat.isFile(); + case 1: return stat.isDirectory(); default: return false; } } @@ -4321,13 +2483,13 @@ var ts; } } function fileExists(path) { - return fileSystemEntryExists(path, 0 /* File */); + return fileSystemEntryExists(path, 0); } function directoryExists(path) { - return fileSystemEntryExists(path, 1 /* Directory */); + return fileSystemEntryExists(path, 1); } function getDirectories(path) { - return ts.filter(_fs.readdirSync(path), function (dir) { return fileSystemEntryExists(ts.combinePaths(path, dir), 1 /* Directory */); }); + return ts.filter(_fs.readdirSync(path), function (dir) { return fileSystemEntryExists(ts.combinePaths(path, dir), 1); }); } function realpath(path) { try { @@ -4361,10 +2523,6 @@ var ts; return; } } - /** - * djb2 hashing algorithm - * http://www.cse.yorku.ca/~oz/hash.html - */ function generateDjb2Hash(data) { var chars = data.split("").map(function (str) { return str.charCodeAt(0); }); return "" + chars.reduce(function (prev, curr) { return ((prev << 5) + prev) + curr; }, 5381); @@ -4388,11 +2546,9 @@ var ts; useCaseSensitiveFileNames: !!ChakraHost.useCaseSensitiveFileNames, write: ChakraHost.echo, readFile: function (path, _encoding) { - // encoding is automatically handled by the implementation in ChakraHost return ChakraHost.readFile(path); }, writeFile: function (path, data, writeByteOrderMark) { - // If a BOM is required, emit one if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } @@ -4429,12 +2585,9 @@ var ts; sys = getChakraSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { - // process and process.nextTick checks if current environment is node-like - // process.browser check excludes webpack and browserify sys = getNodeSystem(); } if (sys) { - // patch writefile to create folder before writing the file var originalWriteFile_1 = sys.writeFile; sys.writeFile = function (path, data, writeBom) { var directoryPath = ts.getDirectoryPath(ts.normalizeSlashes(path)); @@ -4449,22 +2602,18 @@ var ts; if (ts.sys && ts.sys.getEnvironmentVariable) { setCustomPollingValues(ts.sys); ts.Debug.currentAssertionLevel = /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV")) - ? 1 /* Normal */ - : 0 /* None */; + ? 1 + : 0; } if (ts.sys && ts.sys.debugMode) { ts.Debug.isDebugging = true; } })(ts || (ts = {})); -// -// generated from './diagnosticInformationMap.generated.ts' by 'src\compiler' -/* @internal */ var ts; (function (ts) { function diag(code, category, key, message, reportsUnnecessary) { return { code: code, category: category, key: key, message: message, reportsUnnecessary: reportsUnnecessary }; } - // tslint:disable-next-line variable-name ts.Diagnostics = { Unterminated_string_literal: diag(1002, ts.DiagnosticCategory.Error, "Unterminated_string_literal_1002", "Unterminated string literal."), Identifier_expected: diag(1003, ts.DiagnosticCategory.Error, "Identifier_expected_1003", "Identifier expected."), @@ -5027,7 +3176,7 @@ var ts; _0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible: diag(2692, ts.DiagnosticCategory.Error, "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692", "'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible."), _0_only_refers_to_a_type_but_is_being_used_as_a_value_here: diag(2693, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693", "'{0}' only refers to a type, but is being used as a value here."), Namespace_0_has_no_exported_member_1: diag(2694, ts.DiagnosticCategory.Error, "Namespace_0_has_no_exported_member_1_2694", "Namespace '{0}' has no exported member '{1}'."), - Left_side_of_comma_operator_is_unused_and_has_no_side_effects: diag(2695, ts.DiagnosticCategory.Error, "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695", "Left side of comma operator is unused and has no side effects.", /*reportsUnnecessary*/ true), + Left_side_of_comma_operator_is_unused_and_has_no_side_effects: diag(2695, ts.DiagnosticCategory.Error, "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695", "Left side of comma operator is unused and has no side effects.", true), The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead: diag(2696, ts.DiagnosticCategory.Error, "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696", "The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?"), An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2697, ts.DiagnosticCategory.Error, "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697", "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: diag(2698, ts.DiagnosticCategory.Error, "Spread_types_may_only_be_created_from_object_types_2698", "Spread types may only be created from object types."), @@ -5293,12 +3442,12 @@ var ts; Resolving_real_path_for_0_result_1: diag(6130, ts.DiagnosticCategory.Message, "Resolving_real_path_for_0_result_1_6130", "Resolving real path for '{0}', result '{1}'."), Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: diag(6131, ts.DiagnosticCategory.Error, "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'."), File_name_0_has_a_1_extension_stripping_it: diag(6132, ts.DiagnosticCategory.Message, "File_name_0_has_a_1_extension_stripping_it_6132", "File name '{0}' has a '{1}' extension - stripping it."), - _0_is_declared_but_its_value_is_never_read: diag(6133, ts.DiagnosticCategory.Error, "_0_is_declared_but_its_value_is_never_read_6133", "'{0}' is declared but its value is never read.", /*reportsUnnecessary*/ true), + _0_is_declared_but_its_value_is_never_read: diag(6133, ts.DiagnosticCategory.Error, "_0_is_declared_but_its_value_is_never_read_6133", "'{0}' is declared but its value is never read.", true), Report_errors_on_unused_locals: diag(6134, ts.DiagnosticCategory.Message, "Report_errors_on_unused_locals_6134", "Report errors on unused locals."), Report_errors_on_unused_parameters: diag(6135, ts.DiagnosticCategory.Message, "Report_errors_on_unused_parameters_6135", "Report errors on unused parameters."), The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: diag(6136, ts.DiagnosticCategory.Message, "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", "The maximum dependency depth to search under node_modules and load JavaScript files."), Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1: diag(6137, ts.DiagnosticCategory.Error, "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137", "Cannot import type declaration files. Consider importing '{0}' instead of '{1}'."), - Property_0_is_declared_but_its_value_is_never_read: diag(6138, ts.DiagnosticCategory.Error, "Property_0_is_declared_but_its_value_is_never_read_6138", "Property '{0}' is declared but its value is never read.", /*reportsUnnecessary*/ true), + Property_0_is_declared_but_its_value_is_never_read: diag(6138, ts.DiagnosticCategory.Error, "Property_0_is_declared_but_its_value_is_never_read_6138", "Property '{0}' is declared but its value is never read.", true), Import_emit_helpers_from_tslib: diag(6139, ts.DiagnosticCategory.Message, "Import_emit_helpers_from_tslib_6139", "Import emit helpers from 'tslib'."), Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2: diag(6140, ts.DiagnosticCategory.Error, "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140", "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'."), Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: diag(6141, ts.DiagnosticCategory.Message, "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", "Parse in strict mode and emit \"use strict\" for each source file."), @@ -5351,14 +3500,14 @@ var ts; Multiple_consecutive_numeric_separators_are_not_permitted: diag(6189, ts.DiagnosticCategory.Error, "Multiple_consecutive_numeric_separators_are_not_permitted_6189", "Multiple consecutive numeric separators are not permitted."), Found_package_json_at_0_Package_ID_is_1: diag(6190, ts.DiagnosticCategory.Message, "Found_package_json_at_0_Package_ID_is_1_6190", "Found 'package.json' at '{0}'. Package ID is '{1}'."), Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen: diag(6191, ts.DiagnosticCategory.Message, "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191", "Whether to keep outdated console output in watch mode instead of clearing the screen."), - All_imports_in_import_declaration_are_unused: diag(6192, ts.DiagnosticCategory.Error, "All_imports_in_import_declaration_are_unused_6192", "All imports in import declaration are unused.", /*reportsUnnecessary*/ true), + All_imports_in_import_declaration_are_unused: diag(6192, ts.DiagnosticCategory.Error, "All_imports_in_import_declaration_are_unused_6192", "All imports in import declaration are unused.", true), Found_1_error_Watching_for_file_changes: diag(6193, ts.DiagnosticCategory.Message, "Found_1_error_Watching_for_file_changes_6193", "Found 1 error. Watching for file changes."), Found_0_errors_Watching_for_file_changes: diag(6194, ts.DiagnosticCategory.Message, "Found_0_errors_Watching_for_file_changes_6194", "Found {0} errors. Watching for file changes."), Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols: diag(6195, ts.DiagnosticCategory.Message, "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195", "Resolve 'keyof' to string valued property names only (no numbers or symbols)."), - _0_is_declared_but_never_used: diag(6196, ts.DiagnosticCategory.Error, "_0_is_declared_but_never_used_6196", "'{0}' is declared but never used.", /*reportsUnnecessary*/ true), + _0_is_declared_but_never_used: diag(6196, ts.DiagnosticCategory.Error, "_0_is_declared_but_never_used_6196", "'{0}' is declared but never used.", true), Include_modules_imported_with_json_extension: diag(6197, ts.DiagnosticCategory.Message, "Include_modules_imported_with_json_extension_6197", "Include modules imported with '.json' extension"), - All_destructured_elements_are_unused: diag(6198, ts.DiagnosticCategory.Error, "All_destructured_elements_are_unused_6198", "All destructured elements are unused.", /*reportsUnnecessary*/ true), - All_variables_are_unused: diag(6199, ts.DiagnosticCategory.Error, "All_variables_are_unused_6199", "All variables are unused.", /*reportsUnnecessary*/ true), + All_destructured_elements_are_unused: diag(6198, ts.DiagnosticCategory.Error, "All_destructured_elements_are_unused_6198", "All destructured elements are unused.", true), + All_variables_are_unused: diag(6199, ts.DiagnosticCategory.Error, "All_variables_are_unused_6199", "All variables are unused.", true), Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"), Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"), Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0: diag(6202, ts.DiagnosticCategory.Error, "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202", "Project references may not form a circular graph. Cycle detected: {0}"), @@ -5408,8 +3557,8 @@ var ts; Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: diag(7024, ts.DiagnosticCategory.Error, "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024", "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."), Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: diag(7025, ts.DiagnosticCategory.Error, "Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_typ_7025", "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type."), JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: diag(7026, ts.DiagnosticCategory.Error, "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026", "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists."), - Unreachable_code_detected: diag(7027, ts.DiagnosticCategory.Error, "Unreachable_code_detected_7027", "Unreachable code detected.", /*reportsUnnecessary*/ true), - Unused_label: diag(7028, ts.DiagnosticCategory.Error, "Unused_label_7028", "Unused label.", /*reportsUnnecessary*/ true), + Unreachable_code_detected: diag(7027, ts.DiagnosticCategory.Error, "Unreachable_code_detected_7027", "Unreachable code detected.", true), + Unused_label: diag(7028, ts.DiagnosticCategory.Error, "Unused_label_7028", "Unused label.", true), Fallthrough_case_in_switch: diag(7029, ts.DiagnosticCategory.Error, "Fallthrough_case_in_switch_7029", "Fallthrough case in switch."), Not_all_code_paths_return_a_value: diag(7030, ts.DiagnosticCategory.Error, "Not_all_code_paths_return_a_value_7030", "Not all code paths return a value."), Binding_element_0_implicitly_has_an_1_type: diag(7031, ts.DiagnosticCategory.Error, "Binding_element_0_implicitly_has_an_1_type_7031", "Binding element '{0}' implicitly has an '{1}' type."), @@ -5569,204 +3718,157 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - /* @internal */ function tokenIsIdentifierOrKeyword(token) { - return token >= 71 /* Identifier */; + return token >= 71; } ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword; - /* @internal */ function tokenIsIdentifierOrKeywordOrGreaterThan(token) { - return token === 29 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token); + return token === 29 || tokenIsIdentifierOrKeyword(token); } ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan; var textToToken = ts.createMapFromTemplate({ - "abstract": 117 /* AbstractKeyword */, - "any": 119 /* AnyKeyword */, - "as": 118 /* AsKeyword */, - "boolean": 122 /* BooleanKeyword */, - "break": 72 /* BreakKeyword */, - "case": 73 /* CaseKeyword */, - "catch": 74 /* CatchKeyword */, - "class": 75 /* ClassKeyword */, - "continue": 77 /* ContinueKeyword */, - "const": 76 /* ConstKeyword */, - "constructor": 123 /* ConstructorKeyword */, - "debugger": 78 /* DebuggerKeyword */, - "declare": 124 /* DeclareKeyword */, - "default": 79 /* DefaultKeyword */, - "delete": 80 /* DeleteKeyword */, - "do": 81 /* DoKeyword */, - "else": 82 /* ElseKeyword */, - "enum": 83 /* EnumKeyword */, - "export": 84 /* ExportKeyword */, - "extends": 85 /* ExtendsKeyword */, - "false": 86 /* FalseKeyword */, - "finally": 87 /* FinallyKeyword */, - "for": 88 /* ForKeyword */, - "from": 143 /* FromKeyword */, - "function": 89 /* FunctionKeyword */, - "get": 125 /* GetKeyword */, - "if": 90 /* IfKeyword */, - "implements": 108 /* ImplementsKeyword */, - "import": 91 /* ImportKeyword */, - "in": 92 /* InKeyword */, - "infer": 126 /* InferKeyword */, - "instanceof": 93 /* InstanceOfKeyword */, - "interface": 109 /* InterfaceKeyword */, - "is": 127 /* IsKeyword */, - "keyof": 128 /* KeyOfKeyword */, - "let": 110 /* LetKeyword */, - "module": 129 /* ModuleKeyword */, - "namespace": 130 /* NamespaceKeyword */, - "never": 131 /* NeverKeyword */, - "new": 94 /* NewKeyword */, - "null": 95 /* NullKeyword */, - "number": 134 /* NumberKeyword */, - "object": 135 /* ObjectKeyword */, - "package": 111 /* PackageKeyword */, - "private": 112 /* PrivateKeyword */, - "protected": 113 /* ProtectedKeyword */, - "public": 114 /* PublicKeyword */, - "readonly": 132 /* ReadonlyKeyword */, - "require": 133 /* RequireKeyword */, - "global": 144 /* GlobalKeyword */, - "return": 96 /* ReturnKeyword */, - "set": 136 /* SetKeyword */, - "static": 115 /* StaticKeyword */, - "string": 137 /* StringKeyword */, - "super": 97 /* SuperKeyword */, - "switch": 98 /* SwitchKeyword */, - "symbol": 138 /* SymbolKeyword */, - "this": 99 /* ThisKeyword */, - "throw": 100 /* ThrowKeyword */, - "true": 101 /* TrueKeyword */, - "try": 102 /* TryKeyword */, - "type": 139 /* TypeKeyword */, - "typeof": 103 /* TypeOfKeyword */, - "undefined": 140 /* UndefinedKeyword */, - "unique": 141 /* UniqueKeyword */, - "unknown": 142 /* UnknownKeyword */, - "var": 104 /* VarKeyword */, - "void": 105 /* VoidKeyword */, - "while": 106 /* WhileKeyword */, - "with": 107 /* WithKeyword */, - "yield": 116 /* YieldKeyword */, - "async": 120 /* AsyncKeyword */, - "await": 121 /* AwaitKeyword */, - "of": 145 /* OfKeyword */, - "{": 17 /* OpenBraceToken */, - "}": 18 /* CloseBraceToken */, - "(": 19 /* OpenParenToken */, - ")": 20 /* CloseParenToken */, - "[": 21 /* OpenBracketToken */, - "]": 22 /* CloseBracketToken */, - ".": 23 /* DotToken */, - "...": 24 /* DotDotDotToken */, - ";": 25 /* SemicolonToken */, - ",": 26 /* CommaToken */, - "<": 27 /* LessThanToken */, - ">": 29 /* GreaterThanToken */, - "<=": 30 /* LessThanEqualsToken */, - ">=": 31 /* GreaterThanEqualsToken */, - "==": 32 /* EqualsEqualsToken */, - "!=": 33 /* ExclamationEqualsToken */, - "===": 34 /* EqualsEqualsEqualsToken */, - "!==": 35 /* ExclamationEqualsEqualsToken */, - "=>": 36 /* EqualsGreaterThanToken */, - "+": 37 /* PlusToken */, - "-": 38 /* MinusToken */, - "**": 40 /* AsteriskAsteriskToken */, - "*": 39 /* AsteriskToken */, - "/": 41 /* SlashToken */, - "%": 42 /* PercentToken */, - "++": 43 /* PlusPlusToken */, - "--": 44 /* MinusMinusToken */, - "<<": 45 /* LessThanLessThanToken */, - ">": 46 /* GreaterThanGreaterThanToken */, - ">>>": 47 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 48 /* AmpersandToken */, - "|": 49 /* BarToken */, - "^": 50 /* CaretToken */, - "!": 51 /* ExclamationToken */, - "~": 52 /* TildeToken */, - "&&": 53 /* AmpersandAmpersandToken */, - "||": 54 /* BarBarToken */, - "?": 55 /* QuestionToken */, - ":": 56 /* ColonToken */, - "=": 58 /* EqualsToken */, - "+=": 59 /* PlusEqualsToken */, - "-=": 60 /* MinusEqualsToken */, - "*=": 61 /* AsteriskEqualsToken */, - "**=": 62 /* AsteriskAsteriskEqualsToken */, - "/=": 63 /* SlashEqualsToken */, - "%=": 64 /* PercentEqualsToken */, - "<<=": 65 /* LessThanLessThanEqualsToken */, - ">>=": 66 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 68 /* AmpersandEqualsToken */, - "|=": 69 /* BarEqualsToken */, - "^=": 70 /* CaretEqualsToken */, - "@": 57 /* AtToken */, + "abstract": 117, + "any": 119, + "as": 118, + "boolean": 122, + "break": 72, + "case": 73, + "catch": 74, + "class": 75, + "continue": 77, + "const": 76, + "constructor": 123, + "debugger": 78, + "declare": 124, + "default": 79, + "delete": 80, + "do": 81, + "else": 82, + "enum": 83, + "export": 84, + "extends": 85, + "false": 86, + "finally": 87, + "for": 88, + "from": 143, + "function": 89, + "get": 125, + "if": 90, + "implements": 108, + "import": 91, + "in": 92, + "infer": 126, + "instanceof": 93, + "interface": 109, + "is": 127, + "keyof": 128, + "let": 110, + "module": 129, + "namespace": 130, + "never": 131, + "new": 94, + "null": 95, + "number": 134, + "object": 135, + "package": 111, + "private": 112, + "protected": 113, + "public": 114, + "readonly": 132, + "require": 133, + "global": 144, + "return": 96, + "set": 136, + "static": 115, + "string": 137, + "super": 97, + "switch": 98, + "symbol": 138, + "this": 99, + "throw": 100, + "true": 101, + "try": 102, + "type": 139, + "typeof": 103, + "undefined": 140, + "unique": 141, + "unknown": 142, + "var": 104, + "void": 105, + "while": 106, + "with": 107, + "yield": 116, + "async": 120, + "await": 121, + "of": 145, + "{": 17, + "}": 18, + "(": 19, + ")": 20, + "[": 21, + "]": 22, + ".": 23, + "...": 24, + ";": 25, + ",": 26, + "<": 27, + ">": 29, + "<=": 30, + ">=": 31, + "==": 32, + "!=": 33, + "===": 34, + "!==": 35, + "=>": 36, + "+": 37, + "-": 38, + "**": 40, + "*": 39, + "/": 41, + "%": 42, + "++": 43, + "--": 44, + "<<": 45, + ">": 46, + ">>>": 47, + "&": 48, + "|": 49, + "^": 50, + "!": 51, + "~": 52, + "&&": 53, + "||": 54, + "?": 55, + ":": 56, + "=": 58, + "+=": 59, + "-=": 60, + "*=": 61, + "**=": 62, + "/=": 63, + "%=": 64, + "<<=": 65, + ">>=": 66, + ">>>=": 67, + "&=": 68, + "|=": 69, + "^=": 70, + "@": 57, }); - /* - As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers - IdentifierStart :: - Can contain Unicode 3.0.0 categories: - Uppercase letter (Lu), - Lowercase letter (Ll), - Titlecase letter (Lt), - Modifier letter (Lm), - Other letter (Lo), or - Letter number (Nl). - IdentifierPart :: = - Can contain IdentifierStart + Unicode 3.0.0 categories: - Non-spacing mark (Mn), - Combining spacing mark (Mc), - Decimal number (Nd), or - Connector punctuation (Pc). - - Codepoint ranges for ES3 Identifiers are extracted from the Unicode 3.0.0 specification at: - http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt - */ var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; - /* - As per ECMAScript Language Specification 5th Edition, Section 7.6: ISyntaxToken Names and Identifiers - IdentifierStart :: - Can contain Unicode 6.2 categories: - Uppercase letter (Lu), - Lowercase letter (Ll), - Titlecase letter (Lt), - Modifier letter (Lm), - Other letter (Lo), or - Letter number (Nl). - IdentifierPart :: - Can contain IdentifierStart + Unicode 6.2 categories: - Non-spacing mark (Mn), - Combining spacing mark (Mc), - Decimal number (Nd), - Connector punctuation (Pc), - , or - . - - Codepoint ranges for ES5 Identifiers are extracted from the Unicode 6.2 specification at: - http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt - */ var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; function lookupInUnicodeMap(code, map) { - // Bail out quickly if it couldn't possibly be in the map. if (code < map[0]) { return false; } - // Perform binary search in one of the Unicode range maps var lo = 0; var hi = map.length; var mid; while (lo + 1 < hi) { mid = lo + (hi - lo) / 2; - // mid has to be even to catch a range's beginning mid -= mid % 2; if (map[mid] <= code && code <= map[mid + 1]) { return true; @@ -5780,14 +3882,14 @@ var ts; } return false; } - /* @internal */ function isUnicodeIdentifierStart(code, languageVersion) { - return languageVersion >= 1 /* ES5 */ ? + function isUnicodeIdentifierStart(code, languageVersion) { + return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) : lookupInUnicodeMap(code, unicodeES3IdentifierStart); } ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart; function isUnicodeIdentifierPart(code, languageVersion) { - return languageVersion >= 1 /* ES5 */ ? + return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierPart) : lookupInUnicodeMap(code, unicodeES3IdentifierPart); } @@ -5803,12 +3905,10 @@ var ts; return tokenStrings[t]; } ts.tokenToString = tokenToString; - /* @internal */ function stringToToken(s) { return textToToken.get(s); } ts.stringToToken = stringToToken; - /* @internal */ function computeLineStarts(text) { var result = new Array(); var pos = 0; @@ -5817,17 +3917,16 @@ var ts; var ch = text.charCodeAt(pos); pos++; switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos) === 10 /* lineFeed */) { + case 13: + if (text.charCodeAt(pos) === 10) { pos++; } - // falls through - case 10 /* lineFeed */: + case 10: result.push(lineStart); lineStart = pos; break; default: - if (ch > 127 /* maxAsciiCharacter */ && isLineBreak(ch)) { + if (ch > 127 && isLineBreak(ch)) { result.push(lineStart); lineStart = pos; } @@ -5842,7 +3941,6 @@ var ts; return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text); } ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter; - /* @internal */ function computePositionOfLineAndCharacter(lineStarts, line, character, debugText) { if (line < 0 || line >= lineStarts.length) { ts.Debug.fail("Bad line number. Line: " + line + ", lineStarts.length: " + lineStarts.length + " , line map is correct? " + (debugText !== undefined ? ts.arraysEqual(lineStarts, computeLineStarts(debugText)) : "unknown")); @@ -5852,30 +3950,18 @@ var ts; ts.Debug.assert(res < lineStarts[line + 1]); } else if (debugText !== undefined) { - ts.Debug.assert(res <= debugText.length); // Allow single character overflow for trailing newline + ts.Debug.assert(res <= debugText.length); } return res; } ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter; - /* @internal */ function getLineStarts(sourceFile) { return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); } ts.getLineStarts = getLineStarts; - /* @internal */ - /** - * We assume the first line starts at position 0 and 'position' is non-negative. - */ function computeLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position, ts.identity, ts.compareValues); if (lineNumber < 0) { - // If the actual position was not found, - // the binary search returns the 2's-complement of the next line start - // e.g. if the line starts at [5, 10, 23, 80] and the position requested was 20 - // then the search will return -2. - // - // We want the index of the previous line start, so we subtract 1. - // Review 2's-complement if this is confusing. lineNumber = ~lineNumber - 1; ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file"); } @@ -5893,107 +3979,86 @@ var ts; return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); } ts.isWhiteSpaceLike = isWhiteSpaceLike; - /** Does not include line breaks. For that, see isWhiteSpaceLike. */ function isWhiteSpaceSingleLine(ch) { - // Note: nextLine is in the Zs space, and should be considered to be a whitespace. - // It is explicitly not a line-break as it isn't in the exact set specified by EcmaScript. - return ch === 32 /* space */ || - ch === 9 /* tab */ || - ch === 11 /* verticalTab */ || - ch === 12 /* formFeed */ || - ch === 160 /* nonBreakingSpace */ || - ch === 133 /* nextLine */ || - ch === 5760 /* ogham */ || - ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || - ch === 8239 /* narrowNoBreakSpace */ || - ch === 8287 /* mathematicalSpace */ || - ch === 12288 /* ideographicSpace */ || - ch === 65279 /* byteOrderMark */; + return ch === 32 || + ch === 9 || + ch === 11 || + ch === 12 || + ch === 160 || + ch === 133 || + ch === 5760 || + ch >= 8192 && ch <= 8203 || + ch === 8239 || + ch === 8287 || + ch === 12288 || + ch === 65279; } ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { - // ES5 7.3: - // The ECMAScript line terminator characters are listed in Table 3. - // Table 3: Line Terminator Characters - // Code Unit Value Name Formal Name - // \u000A Line Feed - // \u000D Carriage Return - // \u2028 Line separator - // \u2029 Paragraph separator - // Only the characters in Table 3 are treated as line terminators. Other new line or line - // breaking characters are treated as white space but not as line terminators. - return ch === 10 /* lineFeed */ || - ch === 13 /* carriageReturn */ || - ch === 8232 /* lineSeparator */ || - ch === 8233 /* paragraphSeparator */; + return ch === 10 || + ch === 13 || + ch === 8232 || + ch === 8233; } ts.isLineBreak = isLineBreak; function isDigit(ch) { - return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; + return ch >= 48 && ch <= 57; } - /* @internal */ function isOctalDigit(ch) { - return ch >= 48 /* _0 */ && ch <= 55 /* _7 */; + return ch >= 48 && ch <= 55; } ts.isOctalDigit = isOctalDigit; function couldStartTrivia(text, pos) { - // Keep in sync with skipTrivia var ch = text.charCodeAt(pos); switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: - case 47 /* slash */: - // starts of normal trivia - case 60 /* lessThan */: - case 124 /* bar */: - case 61 /* equals */: - case 62 /* greaterThan */: - // Starts of conflict marker trivia + case 13: + case 10: + case 9: + case 11: + case 12: + case 32: + case 47: + case 60: + case 124: + case 61: + case 62: return true; - case 35 /* hash */: - // Only if its the beginning can we have #! trivia + case 35: return pos === 0; default: - return ch > 127 /* maxAsciiCharacter */; + return ch > 127; } } ts.couldStartTrivia = couldStartTrivia; - /* @internal */ function skipTrivia(text, pos, stopAfterLineBreak, stopAtComments) { if (stopAtComments === void 0) { stopAtComments = false; } if (ts.positionIsSynthesized(pos)) { return pos; } - // Keep in sync with couldStartTrivia while (true) { var ch = text.charCodeAt(pos); switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + case 13: + if (text.charCodeAt(pos + 1) === 10) { pos++; } - // falls through - case 10 /* lineFeed */: + case 10: pos++; if (stopAfterLineBreak) { return pos; } continue; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: pos++; continue; - case 47 /* slash */: + case 47: if (stopAtComments) { break; } - if (text.charCodeAt(pos + 1) === 47 /* slash */) { + if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { @@ -6003,10 +4068,10 @@ var ts; } continue; } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + if (text.charCodeAt(pos + 1) === 42) { pos += 2; while (pos < text.length) { - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } @@ -6015,23 +4080,23 @@ var ts; continue; } break; - case 60 /* lessThan */: - case 124 /* bar */: - case 61 /* equals */: - case 62 /* greaterThan */: + case 60: + case 124: + case 61: + case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos); continue; } break; - case 35 /* hash */: + case 35: if (pos === 0 && isShebangTrivia(text, pos)) { pos = scanShebangTrivia(text, pos); continue; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpaceLike(ch))) { + if (ch > 127 && (isWhiteSpaceLike(ch))) { pos++; continue; } @@ -6041,12 +4106,9 @@ var ts; } } ts.skipTrivia = skipTrivia; - // All conflict markers consist of the same character repeated seven times. If it is - // a <<<<<<< or >>>>>>> marker then it is also followed by a space. var mergeConflictMarkerLength = "<<<<<<<".length; function isConflictMarkerTrivia(text, pos) { ts.Debug.assert(pos >= 0); - // Conflict markers must be at the start of a line. if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { var ch = text.charCodeAt(pos); if ((pos + mergeConflictMarkerLength) < text.length) { @@ -6055,8 +4117,8 @@ var ts; return false; } } - return ch === 61 /* equals */ || - text.charCodeAt(pos + mergeConflictMarkerLength) === 32 /* space */; + return ch === 61 || + text.charCodeAt(pos + mergeConflictMarkerLength) === 32; } } return false; @@ -6067,18 +4129,16 @@ var ts; } var ch = text.charCodeAt(pos); var len = text.length; - if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) { + if (ch === 60 || ch === 62) { while (pos < len && !isLineBreak(text.charCodeAt(pos))) { pos++; } } else { - ts.Debug.assert(ch === 124 /* bar */ || ch === 61 /* equals */); - // Consume everything from the start of a ||||||| or ======= marker to the start - // of the next ======= or >>>>>>> marker. + ts.Debug.assert(ch === 124 || ch === 61); while (pos < len) { var currentChar = text.charCodeAt(pos); - if ((currentChar === 61 /* equals */ || currentChar === 62 /* greaterThan */) && currentChar !== ch && isConflictMarkerTrivia(text, pos)) { + if ((currentChar === 61 || currentChar === 62) && currentChar !== ch && isConflictMarkerTrivia(text, pos)) { break; } pos++; @@ -6088,7 +4148,6 @@ var ts; } var shebangTriviaRegex = /^#!.*/; function isShebangTrivia(text, pos) { - // Shebangs check must only be done at the start of the file ts.Debug.assert(pos === 0); return shebangTriviaRegex.test(text); } @@ -6097,26 +4156,6 @@ var ts; pos = pos + shebang.length; return pos; } - /** - * Invokes a callback for each comment range following the provided position. - * - * Single-line comment ranges include the leading double-slash characters but not the ending - * line break. Multi-line comment ranges include the leading slash-asterisk and trailing - * asterisk-slash characters. - * - * @param reduce If true, accumulates the result of calling the callback in a fashion similar - * to reduceLeft. If false, iteration stops when the callback returns a truthy value. - * @param text The source text to scan. - * @param pos The position at which to start scanning. - * @param trailing If false, whitespace is skipped until the first line break and comments - * between that location and the next token are returned. If true, comments occurring - * between the given position and the next line break are returned. - * @param cb The callback to execute as each comment range is encountered. - * @param state A state value to pass to each iteration of the callback. - * @param initial An initial value to pass when accumulating results (when "reduce" is true). - * @returns If "reduce" is true, the accumulated value. If "reduce" is false, the first truthy - * return value of the callback. - */ function iterateCommentRanges(reduce, text, pos, trailing, cb, state, initial) { var pendingPos; var pendingEnd; @@ -6128,12 +4167,11 @@ var ts; scan: while (pos >= 0 && pos < text.length) { var ch = text.charCodeAt(pos); switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + case 13: + if (text.charCodeAt(pos + 1) === 10) { pos++; } - // falls through - case 10 /* lineFeed */: + case 10: pos++; if (trailing) { break scan; @@ -6143,20 +4181,20 @@ var ts; pendingHasTrailingNewLine = true; } continue; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: pos++; continue; - case 47 /* slash */: + case 47: var nextChar = text.charCodeAt(pos + 1); var hasTrailingNewLine = false; - if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { - var kind = nextChar === 47 /* slash */ ? 2 /* SingleLineCommentTrivia */ : 3 /* MultiLineCommentTrivia */; + if (nextChar === 47 || nextChar === 42) { + var kind = nextChar === 47 ? 2 : 3; var startPos = pos; pos += 2; - if (nextChar === 47 /* slash */) { + if (nextChar === 47) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { hasTrailingNewLine = true; @@ -6167,7 +4205,7 @@ var ts; } else { while (pos < text.length) { - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } @@ -6178,7 +4216,6 @@ var ts; if (hasPendingCommentRange) { accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); if (!reduce && accumulator) { - // If we are not reducing and we have a truthy result, return it. return accumulator; } } @@ -6192,7 +4229,7 @@ var ts; } break scan; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpaceLike(ch))) { + if (ch > 127 && (isWhiteSpaceLike(ch))) { if (hasPendingCommentRange && isLineBreak(ch)) { pendingHasTrailingNewLine = true; } @@ -6208,19 +4245,19 @@ var ts; return accumulator; } function forEachLeadingCommentRange(text, pos, cb, state) { - return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ false, cb, state); + return iterateCommentRanges(false, text, pos, false, cb, state); } ts.forEachLeadingCommentRange = forEachLeadingCommentRange; function forEachTrailingCommentRange(text, pos, cb, state) { - return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ true, cb, state); + return iterateCommentRanges(false, text, pos, true, cb, state); } ts.forEachTrailingCommentRange = forEachTrailingCommentRange; function reduceEachLeadingCommentRange(text, pos, cb, state, initial) { - return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ false, cb, state, initial); + return iterateCommentRanges(true, text, pos, false, cb, state, initial); } ts.reduceEachLeadingCommentRange = reduceEachLeadingCommentRange; function reduceEachTrailingCommentRange(text, pos, cb, state, initial) { - return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ true, cb, state, initial); + return iterateCommentRanges(true, text, pos, true, cb, state, initial); } ts.reduceEachTrailingCommentRange = reduceEachTrailingCommentRange; function appendCommentRange(pos, end, kind, hasTrailingNewLine, _state, comments) { @@ -6231,14 +4268,13 @@ var ts; return comments; } function getLeadingCommentRanges(text, pos) { - return reduceEachLeadingCommentRange(text, pos, appendCommentRange, /*state*/ undefined, /*initial*/ undefined); + return reduceEachLeadingCommentRange(text, pos, appendCommentRange, undefined, undefined); } ts.getLeadingCommentRanges = getLeadingCommentRanges; function getTrailingCommentRanges(text, pos) { - return reduceEachTrailingCommentRange(text, pos, appendCommentRange, /*state*/ undefined, /*initial*/ undefined); + return reduceEachTrailingCommentRange(text, pos, appendCommentRange, undefined, undefined); } ts.getTrailingCommentRanges = getTrailingCommentRanges; - /** Optionally, get the shebang */ function getShebang(text) { var match = shebangTriviaRegex.exec(text); if (match) { @@ -6247,18 +4283,17 @@ var ts; } ts.getShebang = getShebang; function isIdentifierStart(ch, languageVersion) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || - ch === 36 /* $ */ || ch === 95 /* _ */ || - ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || + ch === 36 || ch === 95 || + ch > 127 && isUnicodeIdentifierStart(ch, languageVersion); } ts.isIdentifierStart = isIdentifierStart; function isIdentifierPart(ch, languageVersion) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || - ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || - ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || + ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || + ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); } ts.isIdentifierPart = isIdentifierPart; - /* @internal */ function isIdentifierText(name, languageVersion) { if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) { return false; @@ -6271,17 +4306,12 @@ var ts; return true; } ts.isIdentifierText = isIdentifierText; - // Creates a scanner over a (possibly unspecified) range of a piece of text. function createScanner(languageVersion, skipTrivia, languageVariant, textInitial, onError, start, length) { - if (languageVariant === void 0) { languageVariant = 0 /* Standard */; } + if (languageVariant === void 0) { languageVariant = 0; } var text = textInitial; - // Current position (end position of text of current token) var pos; - // end of text var end; - // Start position of whitespace before current token var startPos; - // Start position of text of current token var tokenPos; var token; var tokenValue; @@ -6294,11 +4324,11 @@ var ts; getTokenPos: function () { return tokenPos; }, getTokenText: function () { return text.substring(tokenPos, pos); }, getTokenValue: function () { return tokenValue; }, - hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; }, - hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; }, - isIdentifier: function () { return token === 71 /* Identifier */ || token > 107 /* LastReservedWord */; }, - isReservedWord: function () { return token >= 72 /* FirstReservedWord */ && token <= 107 /* LastReservedWord */; }, - isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; }, + hasExtendedUnicodeEscape: function () { return (tokenFlags & 8) !== 0; }, + hasPrecedingLineBreak: function () { return (tokenFlags & 1) !== 0; }, + isIdentifier: function () { return token === 71 || token > 107; }, + isReservedWord: function () { return token >= 72 && token <= 107; }, + isUnterminated: function () { return (tokenFlags & 4) !== 0; }, getTokenFlags: function () { return tokenFlags; }, reScanGreaterToken: reScanGreaterToken, reScanSlashToken: reScanSlashToken, @@ -6335,8 +4365,8 @@ var ts; var result = ""; while (true) { var ch = text.charCodeAt(pos); - if (ch === 95 /* _ */) { - tokenFlags |= 512 /* ContainsSeparator */; + if (ch === 95) { + tokenFlags |= 512; if (allowSeparator) { allowSeparator = false; isPreviousTokenSeparator = true; @@ -6360,7 +4390,7 @@ var ts; } break; } - if (text.charCodeAt(pos - 1) === 95 /* _ */) { + if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); } return result + text.substring(start, pos); @@ -6370,15 +4400,15 @@ var ts; var mainFragment = scanNumberFragment(); var decimalFragment; var scientificFragment; - if (text.charCodeAt(pos) === 46 /* dot */) { + if (text.charCodeAt(pos) === 46) { pos++; decimalFragment = scanNumberFragment(); } var end = pos; - if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) { + if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) { pos++; - tokenFlags |= 16 /* Scientific */; - if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) + tokenFlags |= 16; + if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) pos++; var preNumericPart = pos; var finalFragment = scanNumberFragment(); @@ -6390,7 +4420,7 @@ var ts; end = pos; } } - if (tokenFlags & 512 /* ContainsSeparator */) { + if (tokenFlags & 512) { var result = mainFragment; if (decimalFragment) { result += "." + decimalFragment; @@ -6401,7 +4431,7 @@ var ts; return "" + +result; } else { - return "" + +(text.substring(start, end)); // No need to use all the fragments; no _ removal needed + return "" + +(text.substring(start, end)); } } function scanOctalDigits() { @@ -6411,19 +4441,11 @@ var ts; } return +(text.substring(start, pos)); } - /** - * Scans the given number of hexadecimal digits in the text, - * returning -1 if the given number is unavailable. - */ function scanExactNumberOfHexDigits(count, canHaveSeparators) { - return scanHexDigits(/*minCount*/ count, /*scanAsManyAsPossible*/ false, canHaveSeparators); + return scanHexDigits(count, false, canHaveSeparators); } - /** - * Scans as many hexadecimal digits as are available in the text, - * returning -1 if the given number of digits was unavailable. - */ function scanMinimumNumberOfHexDigits(count, canHaveSeparators) { - return scanHexDigits(/*minCount*/ count, /*scanAsManyAsPossible*/ true, canHaveSeparators); + return scanHexDigits(count, true, canHaveSeparators); } function scanHexDigits(minCount, scanAsManyAsPossible, canHaveSeparators) { var digits = 0; @@ -6432,8 +4454,8 @@ var ts; var isPreviousTokenSeparator = false; while (digits < minCount || scanAsManyAsPossible) { var ch = text.charCodeAt(pos); - if (canHaveSeparators && ch === 95 /* _ */) { - tokenFlags |= 512 /* ContainsSeparator */; + if (canHaveSeparators && ch === 95) { + tokenFlags |= 512; if (allowSeparator) { allowSeparator = false; isPreviousTokenSeparator = true; @@ -6448,14 +4470,14 @@ var ts; continue; } allowSeparator = canHaveSeparators; - if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { - value = value * 16 + ch - 48 /* _0 */; + if (ch >= 48 && ch <= 57) { + value = value * 16 + ch - 48; } - else if (ch >= 65 /* A */ && ch <= 70 /* F */) { - value = value * 16 + ch - 65 /* A */ + 10; + else if (ch >= 65 && ch <= 70) { + value = value * 16 + ch - 65 + 10; } - else if (ch >= 97 /* a */ && ch <= 102 /* f */) { - value = value * 16 + ch - 97 /* a */ + 10; + else if (ch >= 97 && ch <= 102) { + value = value * 16 + ch - 97 + 10; } else { break; @@ -6467,7 +4489,7 @@ var ts; if (digits < minCount) { value = -1; } - if (text.charCodeAt(pos - 1) === 95 /* _ */) { + if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); } return value; @@ -6481,7 +4503,7 @@ var ts; while (true) { if (pos >= end) { result += text.substring(start, pos); - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; error(ts.Diagnostics.Unterminated_string_literal); break; } @@ -6491,7 +4513,7 @@ var ts; pos++; break; } - if (ch === 92 /* backslash */ && !jsxAttributeString) { + if (ch === 92 && !jsxAttributeString) { result += text.substring(start, pos); result += scanEscapeSequence(); start = pos; @@ -6499,7 +4521,7 @@ var ts; } if (isLineBreak(ch) && !jsxAttributeString) { result += text.substring(start, pos); - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; error(ts.Diagnostics.Unterminated_string_literal); break; } @@ -6507,12 +4529,8 @@ var ts; } return result; } - /** - * Sets the current 'tokenValue' and returns a NoSubstitutionTemplateLiteral or - * a literal component of a TemplateExpression. - */ function scanTemplateAndSetTokenValue() { - var startedWithBacktick = text.charCodeAt(pos) === 96 /* backtick */; + var startedWithBacktick = text.charCodeAt(pos) === 96; pos++; var start = pos; var contents = ""; @@ -6520,39 +4538,34 @@ var ts; while (true) { if (pos >= end) { contents += text.substring(start, pos); - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; error(ts.Diagnostics.Unterminated_template_literal); - resultingToken = startedWithBacktick ? 13 /* NoSubstitutionTemplateLiteral */ : 16 /* TemplateTail */; + resultingToken = startedWithBacktick ? 13 : 16; break; } var currChar = text.charCodeAt(pos); - // '`' - if (currChar === 96 /* backtick */) { + if (currChar === 96) { contents += text.substring(start, pos); pos++; - resultingToken = startedWithBacktick ? 13 /* NoSubstitutionTemplateLiteral */ : 16 /* TemplateTail */; + resultingToken = startedWithBacktick ? 13 : 16; break; } - // '${' - if (currChar === 36 /* $ */ && pos + 1 < end && text.charCodeAt(pos + 1) === 123 /* openBrace */) { + if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) { contents += text.substring(start, pos); pos += 2; - resultingToken = startedWithBacktick ? 14 /* TemplateHead */ : 15 /* TemplateMiddle */; + resultingToken = startedWithBacktick ? 14 : 15; break; } - // Escape character - if (currChar === 92 /* backslash */) { + if (currChar === 92) { contents += text.substring(start, pos); contents += scanEscapeSequence(); start = pos; continue; } - // Speculated ECMAScript 6 Spec 11.8.6.1: - // and LineTerminatorSequences are normalized to for Template Values - if (currChar === 13 /* carriageReturn */) { + if (currChar === 13) { contents += text.substring(start, pos); pos++; - if (pos < end && text.charCodeAt(pos) === 10 /* lineFeed */) { + if (pos < end && text.charCodeAt(pos) === 10) { pos++; } contents += "\n"; @@ -6574,53 +4587,47 @@ var ts; var ch = text.charCodeAt(pos); pos++; switch (ch) { - case 48 /* _0 */: + case 48: return "\0"; - case 98 /* b */: + case 98: return "\b"; - case 116 /* t */: + case 116: return "\t"; - case 110 /* n */: + case 110: return "\n"; - case 118 /* v */: + case 118: return "\v"; - case 102 /* f */: + case 102: return "\f"; - case 114 /* r */: + case 114: return "\r"; - case 39 /* singleQuote */: + case 39: return "\'"; - case 34 /* doubleQuote */: + case 34: return "\""; - case 117 /* u */: - // '\u{DDDDDDDD}' - if (pos < end && text.charCodeAt(pos) === 123 /* openBrace */) { - tokenFlags |= 8 /* ExtendedUnicodeEscape */; + case 117: + if (pos < end && text.charCodeAt(pos) === 123) { + tokenFlags |= 8; pos++; return scanExtendedUnicodeEscape(); } - // '\uDDDD' - return scanHexadecimalEscape(/*numDigits*/ 4); - case 120 /* x */: - // '\xDD' - return scanHexadecimalEscape(/*numDigits*/ 2); - // when encountering a LineContinuation (i.e. a backslash and a line terminator sequence), - // the line terminator is interpreted to be "the empty code unit sequence". - case 13 /* carriageReturn */: - if (pos < end && text.charCodeAt(pos) === 10 /* lineFeed */) { + return scanHexadecimalEscape(4); + case 120: + return scanHexadecimalEscape(2); + case 13: + if (pos < end && text.charCodeAt(pos) === 10) { pos++; } - // falls through - case 10 /* lineFeed */: - case 8232 /* lineSeparator */: - case 8233 /* paragraphSeparator */: + case 10: + case 8232: + case 8233: return ""; default: return String.fromCharCode(ch); } } function scanHexadecimalEscape(numDigits) { - var escapedValue = scanExactNumberOfHexDigits(numDigits, /*canHaveSeparators*/ false); + var escapedValue = scanExactNumberOfHexDigits(numDigits, false); if (escapedValue >= 0) { return String.fromCharCode(escapedValue); } @@ -6630,9 +4637,8 @@ var ts; } } function scanExtendedUnicodeEscape() { - var escapedValue = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false); + var escapedValue = scanMinimumNumberOfHexDigits(1, false); var isInvalidExtendedEscape = false; - // Validate the value of the digit if (escapedValue < 0) { error(ts.Diagnostics.Hexadecimal_digit_expected); isInvalidExtendedEscape = true; @@ -6645,8 +4651,7 @@ var ts; error(ts.Diagnostics.Unexpected_end_of_text); isInvalidExtendedEscape = true; } - else if (text.charCodeAt(pos) === 125 /* closeBrace */) { - // Only swallow the following character up if it's a '}'. + else if (text.charCodeAt(pos) === 125) { pos++; } else { @@ -6658,7 +4663,6 @@ var ts; } return utf16EncodeAsString(escapedValue); } - // Derived from the 10.1.1 UTF16Encoding of the ES6 Spec. function utf16EncodeAsString(codePoint) { ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF); if (codePoint <= 65535) { @@ -6668,13 +4672,11 @@ var ts; var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00; return String.fromCharCode(codeUnit1, codeUnit2); } - // Current character is known to be a backslash. Check for Unicode escape of the form '\uXXXX' - // and return code point value if valid Unicode escape is found. Otherwise return -1. function peekUnicodeEscape() { - if (pos + 5 < end && text.charCodeAt(pos + 1) === 117 /* u */) { + if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) { var start_1 = pos; pos += 2; - var value = scanExactNumberOfHexDigits(4, /*canHaveSeparators*/ false); + var value = scanExactNumberOfHexDigits(4, false); pos = start_1; return value; } @@ -6688,14 +4690,13 @@ var ts; if (isIdentifierPart(ch, languageVersion)) { pos++; } - else if (ch === 92 /* backslash */) { + else if (ch === 92) { ch = peekUnicodeEscape(); if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { break; } result += text.substring(start, pos); result += String.fromCharCode(ch); - // Valid Unicode escape is always six characters pos += 6; start = pos; } @@ -6707,32 +4708,28 @@ var ts; return result; } function getIdentifierToken() { - // Reserved words are between 2 and 11 characters long and start with a lowercase letter var len = tokenValue.length; if (len >= 2 && len <= 11) { var ch = tokenValue.charCodeAt(0); - if (ch >= 97 /* a */ && ch <= 122 /* z */) { + if (ch >= 97 && ch <= 122) { token = textToToken.get(tokenValue); if (token !== undefined) { return token; } } } - return token = 71 /* Identifier */; + return token = 71; } function scanBinaryOrOctalDigits(base) { ts.Debug.assert(base === 2 || base === 8, "Expected either base 2 or base 8"); var value = 0; - // For counting number of digits; Valid binaryIntegerLiteral must have at least one binary digit following B or b. - // Similarly valid octalIntegerLiteral must have at least one octal digit following o or O. var numberOfDigits = 0; var separatorAllowed = false; var isPreviousTokenSeparator = false; while (true) { var ch = text.charCodeAt(pos); - // Numeric separators are allowed anywhere within a numeric literal, except not at the beginning, or following another separator - if (ch === 95 /* _ */) { - tokenFlags |= 512 /* ContainsSeparator */; + if (ch === 95) { + tokenFlags |= 512; if (separatorAllowed) { separatorAllowed = false; isPreviousTokenSeparator = true; @@ -6747,7 +4744,7 @@ var ts; continue; } separatorAllowed = true; - var valueOfCh = ch - 48 /* _0 */; + var valueOfCh = ch - 48; if (!isDigit(ch) || valueOfCh >= base) { break; } @@ -6756,12 +4753,10 @@ var ts; numberOfDigits++; isPreviousTokenSeparator = false; } - // Invalid binaryIntegerLiteral or octalIntegerLiteral if (numberOfDigits === 0) { return -1; } - if (text.charCodeAt(pos - 1) === 95 /* _ */) { - // Literal ends with underscore - not allowed + if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); return value; } @@ -6773,41 +4768,39 @@ var ts; while (true) { tokenPos = pos; if (pos >= end) { - return token = 1 /* EndOfFileToken */; + return token = 1; } var ch = text.charCodeAt(pos); - // Special handling for shebang - if (ch === 35 /* hash */ && pos === 0 && isShebangTrivia(text, pos)) { + if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) { pos = scanShebangTrivia(text, pos); if (skipTrivia) { continue; } else { - return token = 6 /* ShebangTrivia */; + return token = 6; } } switch (ch) { - case 10 /* lineFeed */: - case 13 /* carriageReturn */: - tokenFlags |= 1 /* PrecedingLineBreak */; + case 10: + case 13: + tokenFlags |= 1; if (skipTrivia) { pos++; continue; } else { - if (ch === 13 /* carriageReturn */ && pos + 1 < end && text.charCodeAt(pos + 1) === 10 /* lineFeed */) { - // consume both CR and LF + if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) { pos += 2; } else { pos++; } - return token = 4 /* NewLineTrivia */; + return token = 4; } - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: if (skipTrivia) { pos++; continue; @@ -6816,90 +4809,89 @@ var ts; while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } - return token = 5 /* WhitespaceTrivia */; + return token = 5; } - case 33 /* exclamation */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 35 /* ExclamationEqualsEqualsToken */; + case 33: + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 35; } - return pos += 2, token = 33 /* ExclamationEqualsToken */; + return pos += 2, token = 33; } pos++; - return token = 51 /* ExclamationToken */; - case 34 /* doubleQuote */: - case 39 /* singleQuote */: + return token = 51; + case 34: + case 39: tokenValue = scanString(); - return token = 9 /* StringLiteral */; - case 96 /* backtick */: + return token = 9; + case 96: return token = scanTemplateAndSetTokenValue(); - case 37 /* percent */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 64 /* PercentEqualsToken */; + case 37: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 64; } pos++; - return token = 42 /* PercentToken */; - case 38 /* ampersand */: - if (text.charCodeAt(pos + 1) === 38 /* ampersand */) { - return pos += 2, token = 53 /* AmpersandAmpersandToken */; + return token = 42; + case 38: + if (text.charCodeAt(pos + 1) === 38) { + return pos += 2, token = 53; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 68 /* AmpersandEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 68; } pos++; - return token = 48 /* AmpersandToken */; - case 40 /* openParen */: + return token = 48; + case 40: pos++; - return token = 19 /* OpenParenToken */; - case 41 /* closeParen */: + return token = 19; + case 41: pos++; - return token = 20 /* CloseParenToken */; - case 42 /* asterisk */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 61 /* AsteriskEqualsToken */; + return token = 20; + case 42: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 61; } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 62 /* AsteriskAsteriskEqualsToken */; + if (text.charCodeAt(pos + 1) === 42) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 62; } - return pos += 2, token = 40 /* AsteriskAsteriskToken */; + return pos += 2, token = 40; } pos++; - return token = 39 /* AsteriskToken */; - case 43 /* plus */: - if (text.charCodeAt(pos + 1) === 43 /* plus */) { - return pos += 2, token = 43 /* PlusPlusToken */; + return token = 39; + case 43: + if (text.charCodeAt(pos + 1) === 43) { + return pos += 2, token = 43; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 59 /* PlusEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 59; } pos++; - return token = 37 /* PlusToken */; - case 44 /* comma */: + return token = 37; + case 44: pos++; - return token = 26 /* CommaToken */; - case 45 /* minus */: - if (text.charCodeAt(pos + 1) === 45 /* minus */) { - return pos += 2, token = 44 /* MinusMinusToken */; + return token = 26; + case 45: + if (text.charCodeAt(pos + 1) === 45) { + return pos += 2, token = 44; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 60 /* MinusEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 60; } pos++; - return token = 38 /* MinusToken */; - case 46 /* dot */: + return token = 38; + case 46: if (isDigit(text.charCodeAt(pos + 1))) { tokenValue = scanNumber(); - return token = 8 /* NumericLiteral */; + return token = 8; } - if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) { - return pos += 3, token = 24 /* DotDotDotToken */; + if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) { + return pos += 3, token = 24; } pos++; - return token = 23 /* DotToken */; - case 47 /* slash */: - // Single-line comment - if (text.charCodeAt(pos + 1) === 47 /* slash */) { + return token = 23; + case 47: + if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < end) { if (isLineBreak(text.charCodeAt(pos))) { @@ -6911,25 +4903,24 @@ var ts; continue; } else { - return token = 2 /* SingleLineCommentTrivia */; + return token = 2; } } - // Multi-line comment - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + if (text.charCodeAt(pos + 1) === 42) { pos += 2; - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) !== 47 /* slash */) { - tokenFlags |= 2 /* PrecedingJSDocComment */; + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) !== 47) { + tokenFlags |= 2; } var commentClosed = false; while (pos < end) { var ch_1 = text.charCodeAt(pos); - if (ch_1 === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (ch_1 === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; commentClosed = true; break; } if (isLineBreak(ch_1)) { - tokenFlags |= 1 /* PrecedingLineBreak */; + tokenFlags |= 1; } pos++; } @@ -6941,182 +4932,177 @@ var ts; } else { if (!commentClosed) { - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; } - return token = 3 /* MultiLineCommentTrivia */; + return token = 3; } } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 63 /* SlashEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 63; } pos++; - return token = 41 /* SlashToken */; - case 48 /* _0 */: - if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) { + return token = 41; + case 48: + if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) { pos += 2; - var value = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ true); + var value = scanMinimumNumberOfHexDigits(1, true); if (value < 0) { error(ts.Diagnostics.Hexadecimal_digit_expected); value = 0; } tokenValue = "" + value; - tokenFlags |= 64 /* HexSpecifier */; - return token = 8 /* NumericLiteral */; + tokenFlags |= 64; + return token = 8; } - else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 /* B */ || text.charCodeAt(pos + 1) === 98 /* b */)) { + else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) { pos += 2; - var value = scanBinaryOrOctalDigits(/* base */ 2); + var value = scanBinaryOrOctalDigits(2); if (value < 0) { error(ts.Diagnostics.Binary_digit_expected); value = 0; } tokenValue = "" + value; - tokenFlags |= 128 /* BinarySpecifier */; - return token = 8 /* NumericLiteral */; + tokenFlags |= 128; + return token = 8; } - else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 /* O */ || text.charCodeAt(pos + 1) === 111 /* o */)) { + else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) { pos += 2; - var value = scanBinaryOrOctalDigits(/* base */ 8); + var value = scanBinaryOrOctalDigits(8); if (value < 0) { error(ts.Diagnostics.Octal_digit_expected); value = 0; } tokenValue = "" + value; - tokenFlags |= 256 /* OctalSpecifier */; - return token = 8 /* NumericLiteral */; + tokenFlags |= 256; + return token = 8; } - // Try to parse as an octal if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); - tokenFlags |= 32 /* Octal */; - return token = 8 /* NumericLiteral */; + tokenFlags |= 32; + return token = 8; } - // This fall-through is a deviation from the EcmaScript grammar. The grammar says that a leading zero - // can only be followed by an octal digit, a dot, or the end of the number literal. However, we are being - // permissive and allowing decimal digits of the form 08* and 09* (which many browsers also do). - // falls through - case 49 /* _1 */: - case 50 /* _2 */: - case 51 /* _3 */: - case 52 /* _4 */: - case 53 /* _5 */: - case 54 /* _6 */: - case 55 /* _7 */: - case 56 /* _8 */: - case 57 /* _9 */: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: tokenValue = scanNumber(); - return token = 8 /* NumericLiteral */; - case 58 /* colon */: + return token = 8; + case 58: pos++; - return token = 56 /* ColonToken */; - case 59 /* semicolon */: + return token = 56; + case 59: pos++; - return token = 25 /* SemicolonToken */; - case 60 /* lessThan */: + return token = 25; + case 60: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 7 /* ConflictMarkerTrivia */; + return token = 7; } } - if (text.charCodeAt(pos + 1) === 60 /* lessThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 65 /* LessThanLessThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 60) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 65; } - return pos += 2, token = 45 /* LessThanLessThanToken */; + return pos += 2, token = 45; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 30 /* LessThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 30; } - if (languageVariant === 1 /* JSX */ && - text.charCodeAt(pos + 1) === 47 /* slash */ && - text.charCodeAt(pos + 2) !== 42 /* asterisk */) { - return pos += 2, token = 28 /* LessThanSlashToken */; + if (languageVariant === 1 && + text.charCodeAt(pos + 1) === 47 && + text.charCodeAt(pos + 2) !== 42) { + return pos += 2, token = 28; } pos++; - return token = 27 /* LessThanToken */; - case 61 /* equals */: + return token = 27; + case 61: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 7 /* ConflictMarkerTrivia */; + return token = 7; } } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 34 /* EqualsEqualsEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 34; } - return pos += 2, token = 32 /* EqualsEqualsToken */; + return pos += 2, token = 32; } - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - return pos += 2, token = 36 /* EqualsGreaterThanToken */; + if (text.charCodeAt(pos + 1) === 62) { + return pos += 2, token = 36; } pos++; - return token = 58 /* EqualsToken */; - case 62 /* greaterThan */: + return token = 58; + case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 7 /* ConflictMarkerTrivia */; + return token = 7; } } pos++; - return token = 29 /* GreaterThanToken */; - case 63 /* question */: + return token = 29; + case 63: pos++; - return token = 55 /* QuestionToken */; - case 91 /* openBracket */: + return token = 55; + case 91: pos++; - return token = 21 /* OpenBracketToken */; - case 93 /* closeBracket */: + return token = 21; + case 93: pos++; - return token = 22 /* CloseBracketToken */; - case 94 /* caret */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 70 /* CaretEqualsToken */; + return token = 22; + case 94: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 70; } pos++; - return token = 50 /* CaretToken */; - case 123 /* openBrace */: + return token = 50; + case 123: pos++; - return token = 17 /* OpenBraceToken */; - case 124 /* bar */: + return token = 17; + case 124: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 7 /* ConflictMarkerTrivia */; + return token = 7; } } - if (text.charCodeAt(pos + 1) === 124 /* bar */) { - return pos += 2, token = 54 /* BarBarToken */; + if (text.charCodeAt(pos + 1) === 124) { + return pos += 2, token = 54; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 69 /* BarEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 69; } pos++; - return token = 49 /* BarToken */; - case 125 /* closeBrace */: + return token = 49; + case 125: pos++; - return token = 18 /* CloseBraceToken */; - case 126 /* tilde */: + return token = 18; + case 126: pos++; - return token = 52 /* TildeToken */; - case 64 /* at */: + return token = 52; + case 64: pos++; - return token = 57 /* AtToken */; - case 92 /* backslash */: + return token = 57; + case 92: var cookedChar = peekUnicodeEscape(); if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { pos += 6; @@ -7125,14 +5111,14 @@ var ts; } error(ts.Diagnostics.Invalid_character); pos++; - return token = 0 /* Unknown */; + return token = 0; default: if (isIdentifierStart(ch, languageVersion)) { pos++; while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion)) pos++; tokenValue = text.substring(tokenPos, pos); - if (ch === 92 /* backslash */) { + if (ch === 92) { tokenValue += scanIdentifierParts(); } return token = getIdentifierToken(); @@ -7142,75 +5128,69 @@ var ts; continue; } else if (isLineBreak(ch)) { - tokenFlags |= 1 /* PrecedingLineBreak */; + tokenFlags |= 1; pos++; continue; } error(ts.Diagnostics.Invalid_character); pos++; - return token = 0 /* Unknown */; + return token = 0; } } } function reScanGreaterToken() { - if (token === 29 /* GreaterThanToken */) { - if (text.charCodeAt(pos) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + if (token === 29) { + if (text.charCodeAt(pos) === 62) { + if (text.charCodeAt(pos + 1) === 62) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 67; } - return pos += 2, token = 47 /* GreaterThanGreaterThanGreaterThanToken */; + return pos += 2, token = 47; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 66 /* GreaterThanGreaterThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 66; } pos++; - return token = 46 /* GreaterThanGreaterThanToken */; + return token = 46; } - if (text.charCodeAt(pos) === 61 /* equals */) { + if (text.charCodeAt(pos) === 61) { pos++; - return token = 31 /* GreaterThanEqualsToken */; + return token = 31; } } return token; } function reScanSlashToken() { - if (token === 41 /* SlashToken */ || token === 63 /* SlashEqualsToken */) { + if (token === 41 || token === 63) { var p = tokenPos + 1; var inEscape = false; var inCharacterClass = false; while (true) { - // If we reach the end of a file, or hit a newline, then this is an unterminated - // regex. Report error and return what we have so far. if (p >= end) { - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; error(ts.Diagnostics.Unterminated_regular_expression_literal); break; } var ch = text.charCodeAt(p); if (isLineBreak(ch)) { - tokenFlags |= 4 /* Unterminated */; + tokenFlags |= 4; error(ts.Diagnostics.Unterminated_regular_expression_literal); break; } if (inEscape) { - // Parsing an escape character; - // reset the flag and just advance to the next char. inEscape = false; } - else if (ch === 47 /* slash */ && !inCharacterClass) { - // A slash within a character class is permissible, - // but in general it signals the end of the regexp literal. + else if (ch === 47 && !inCharacterClass) { p++; break; } - else if (ch === 91 /* openBracket */) { + else if (ch === 91) { inCharacterClass = true; } - else if (ch === 92 /* backslash */) { + else if (ch === 92) { inEscape = true; } - else if (ch === 93 /* closeBracket */) { + else if (ch === 93) { inCharacterClass = false; } p++; @@ -7220,15 +5200,12 @@ var ts; } pos = p; tokenValue = text.substring(tokenPos, pos); - token = 12 /* RegularExpressionLiteral */; + token = 12; } return token; } - /** - * Unconditionally back up and scan a template expression portion. - */ function reScanTemplateToken() { - ts.Debug.assert(token === 18 /* CloseBraceToken */, "'reScanTemplateToken' should only be called on a '}'"); + ts.Debug.assert(token === 18, "'reScanTemplateToken' should only be called on a '}'"); pos = tokenPos; return token = scanTemplateAndSetTokenValue(); } @@ -7239,43 +5216,34 @@ var ts; function scanJsxToken() { startPos = tokenPos = pos; if (pos >= end) { - return token = 1 /* EndOfFileToken */; + return token = 1; } var char = text.charCodeAt(pos); - if (char === 60 /* lessThan */) { - if (text.charCodeAt(pos + 1) === 47 /* slash */) { + if (char === 60) { + if (text.charCodeAt(pos + 1) === 47) { pos += 2; - return token = 28 /* LessThanSlashToken */; + return token = 28; } pos++; - return token = 27 /* LessThanToken */; + return token = 27; } - if (char === 123 /* openBrace */) { + if (char === 123) { pos++; - return token = 17 /* OpenBraceToken */; + return token = 17; } - // First non-whitespace character on this line. var firstNonWhitespace = 0; - // These initial values are special because the first line is: - // firstNonWhitespace = 0 to indicate that we want leading whitspace, while (pos < end) { char = text.charCodeAt(pos); - if (char === 123 /* openBrace */) { + if (char === 123) { break; } - if (char === 60 /* lessThan */) { + if (char === 60) { if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); - return token = 7 /* ConflictMarkerTrivia */; + return token = 7; } break; } - // FirstNonWhitespace is 0, then we only see whitespaces so far. If we see a linebreak, we want to ignore that whitespaces. - // i.e (- : whitespace) - //
---- - //
becomes
- // - //
----
becomes
----
if (isLineBreak(char) && firstNonWhitespace === 0) { firstNonWhitespace = -1; } @@ -7284,16 +5252,14 @@ var ts; } pos++; } - return firstNonWhitespace === -1 ? 11 /* JsxTextAllWhiteSpaces */ : 10 /* JsxText */; + return firstNonWhitespace === -1 ? 11 : 10; } - // Scans a JSX identifier; these differ from normal identifiers in that - // they allow dashes function scanJsxIdentifier() { if (tokenIsIdentifierOrKeyword(token)) { var firstCharPosition = pos; while (pos < end) { var ch = text.charCodeAt(pos); - if (ch === 45 /* minus */ || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { + if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { pos++; } else { @@ -7307,71 +5273,70 @@ var ts; function scanJsxAttributeValue() { startPos = pos; switch (text.charCodeAt(pos)) { - case 34 /* doubleQuote */: - case 39 /* singleQuote */: - tokenValue = scanString(/*jsxAttributeString*/ true); - return token = 9 /* StringLiteral */; + case 34: + case 39: + tokenValue = scanString(true); + return token = 9; default: - // If this scans anything other than `{`, it's a parse error. return scan(); } } function scanJSDocToken() { startPos = tokenPos = pos; if (pos >= end) { - return token = 1 /* EndOfFileToken */; + return token = 1; } var ch = text.charCodeAt(pos); pos++; switch (ch) { - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } - return token = 5 /* WhitespaceTrivia */; - case 64 /* at */: - return token = 57 /* AtToken */; - case 10 /* lineFeed */: - case 13 /* carriageReturn */: - return token = 4 /* NewLineTrivia */; - case 42 /* asterisk */: - return token = 39 /* AsteriskToken */; - case 123 /* openBrace */: - return token = 17 /* OpenBraceToken */; - case 125 /* closeBrace */: - return token = 18 /* CloseBraceToken */; - case 91 /* openBracket */: - return token = 21 /* OpenBracketToken */; - case 93 /* closeBracket */: - return token = 22 /* CloseBracketToken */; - case 60 /* lessThan */: - return token = 27 /* LessThanToken */; - case 61 /* equals */: - return token = 58 /* EqualsToken */; - case 44 /* comma */: - return token = 26 /* CommaToken */; - case 46 /* dot */: - return token = 23 /* DotToken */; - case 96 /* backtick */: - while (pos < end && text.charCodeAt(pos) !== 96 /* backtick */) { + return token = 5; + case 64: + return token = 57; + case 10: + case 13: + return token = 4; + case 42: + return token = 39; + case 123: + return token = 17; + case 125: + return token = 18; + case 91: + return token = 21; + case 93: + return token = 22; + case 60: + return token = 27; + case 61: + return token = 58; + case 44: + return token = 26; + case 46: + return token = 23; + case 96: + while (pos < end && text.charCodeAt(pos) !== 96) { pos++; } tokenValue = text.substring(tokenPos + 1, pos); pos++; - return token = 13 /* NoSubstitutionTemplateLiteral */; + return token = 13; } - if (isIdentifierStart(ch, 6 /* Latest */)) { - while (isIdentifierPart(text.charCodeAt(pos), 6 /* Latest */) && pos < end) { + if (isIdentifierStart(ch, 6)) { + while (isIdentifierPart(text.charCodeAt(pos), 6) && pos < end) { pos++; } tokenValue = text.substring(tokenPos, pos); - return token = 71 /* Identifier */; + return token = 71; } else { - return token = 0 /* Unknown */; + return token = 0; } } function speculationHelper(callback, isLookahead) { @@ -7382,8 +5347,6 @@ var ts; var saveTokenValue = tokenValue; var saveTokenFlags = tokenFlags; var result = callback(); - // If our callback returned something 'falsy' or we're just looking ahead, - // then unconditionally restore us to where we were. if (!result || isLookahead) { pos = savePos; startPos = saveStartPos; @@ -7414,10 +5377,10 @@ var ts; return result; } function lookAhead(callback) { - return speculationHelper(callback, /*isLookahead*/ true); + return speculationHelper(callback, true); } function tryScan(callback) { - return speculationHelper(callback, /*isLookahead*/ false); + return speculationHelper(callback, false); } function getText() { return text; @@ -7441,20 +5404,16 @@ var ts; pos = textPos; startPos = textPos; tokenPos = textPos; - token = 0 /* Unknown */; + token = 0; tokenValue = undefined; tokenFlags = 0; } } ts.createScanner = createScanner; })(ts || (ts = {})); -/** Non-internal stuff goes here */ var ts; (function (ts) { function isExternalModuleNameRelative(moduleName) { - // TypeScript 1.0 spec (April 2014): 11.2.1 - // An external module name is "relative" if the first term is "." or "..". - // Update: We also consider a path like `C:\foo.ts` "relative" because we do not search for it in `node_modules` or treat it as an ambient module. return ts.pathIsRelative(moduleName) || ts.isRootedDiskPath(moduleName); } ts.isExternalModuleNameRelative = isExternalModuleNameRelative; @@ -7463,7 +5422,6 @@ var ts; } ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; })(ts || (ts = {})); -/* @internal */ (function (ts) { ts.emptyArray = []; ts.resolvingEmptyArray = []; @@ -7483,7 +5441,6 @@ var ts; return undefined; } ts.getDeclarationOfKind = getDeclarationOfKind; - /** Create a new escaped identifier map. */ function createUnderscoreEscapedMap() { return new ts.MapCtr(); } @@ -7526,8 +5483,6 @@ var ts; getColumn: function () { return 0; }, getIndent: function () { return 0; }, isAtStartOfLine: function () { return false; }, - // Completely ignore indentation for string writers. And map newlines to - // a single space. writeLine: function () { return str += " "; }, increaseIndent: ts.noop, decreaseIndent: ts.noop, @@ -7689,31 +5644,23 @@ var ts; return false; } ts.hasChangesInResolutions = hasChangesInResolutions; - // Returns true if this node contains a parse error anywhere underneath it. function containsParseError(node) { aggregateChildData(node); - return (node.flags & 131072 /* ThisNodeOrAnySubNodesHasError */) !== 0; + return (node.flags & 131072) !== 0; } ts.containsParseError = containsParseError; function aggregateChildData(node) { - if (!(node.flags & 262144 /* HasAggregatedChildData */)) { - // A node is considered to contain a parse error if: - // a) the parser explicitly marked that it had an error - // b) any of it's children reported that it had an error. - var thisNodeOrAnySubNodesHasError = ((node.flags & 32768 /* ThisNodeHasError */) !== 0) || + if (!(node.flags & 262144)) { + var thisNodeOrAnySubNodesHasError = ((node.flags & 32768) !== 0) || ts.forEachChild(node, containsParseError); - // If so, mark ourselves accordingly. if (thisNodeOrAnySubNodesHasError) { - node.flags |= 131072 /* ThisNodeOrAnySubNodesHasError */; + node.flags |= 131072; } - // Also mark that we've propagated the child information to this node. This way we can - // always consult the bit directly on this node without needing to check its children - // again. - node.flags |= 262144 /* HasAggregatedChildData */; + node.flags |= 262144; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 274 /* SourceFile */) { + while (node && node.kind !== 274) { node = node.parent; } return node; @@ -7721,11 +5668,11 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { - case 213 /* Block */: - case 241 /* CaseBlock */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 213: + case 241: + case 220: + case 221: + case 222: return true; } return false; @@ -7736,7 +5683,6 @@ var ts; return ts.getLineStarts(sourceFile)[line]; } ts.getStartPositionOfLine = getStartPositionOfLine; - // This is a useful function for debugging purposes. function nodePosToString(node) { var file = getSourceFileOfNode(node); var loc = ts.getLineAndCharacterOfPosition(file, node.pos); @@ -7749,19 +5695,12 @@ var ts; var lineIndex = line; var sourceText = sourceFile.text; if (lineIndex + 1 === lineStarts.length) { - // last line - return EOF return sourceText.length - 1; } else { - // current line start var start = lineStarts[lineIndex]; - // take the start position of the next line - 1 = it should be some line break var pos = lineStarts[lineIndex + 1] - 1; ts.Debug.assert(ts.isLineBreak(sourceText.charCodeAt(pos))); - // walk backwards skipping line breaks, stop the the beginning of current line. - // i.e: - // - // $ <- end of line for this position should match the start position while (start <= pos && ts.isLineBreak(sourceText.charCodeAt(pos))) { pos--; } @@ -7769,45 +5708,21 @@ var ts; } } ts.getEndLinePosition = getEndLinePosition; - /** - * Returns a value indicating whether a name is unique globally or within the current file. - * Note: This does not consider whether a name appears as a free identifier or not, so at the expression `x.y` this includes both `x` and `y`. - */ function isFileLevelUniqueName(sourceFile, name, hasGlobalName) { return !(hasGlobalName && hasGlobalName(name)) && !sourceFile.identifiers.has(name); } ts.isFileLevelUniqueName = isFileLevelUniqueName; - // Returns true if this node is missing from the actual source code. A 'missing' node is different - // from 'undefined/defined'. When a node is undefined (which can happen for optional nodes - // in the tree), it is definitely missing. However, a node may be defined, but still be - // missing. This happens whenever the parser knows it needs to parse something, but can't - // get anything in the source code that it expects at that location. For example: - // - // let a: ; - // - // Here, the Type in the Type-Annotation is not-optional (as there is a colon in the source - // code). So the parser will attempt to parse out a type, and will create an actual node. - // However, this node will be 'missing' in the sense that no actual source-code/tokens are - // contained within it. function nodeIsMissing(node) { if (node === undefined) { return true; } - return node.pos === node.end && node.pos >= 0 && node.kind !== 1 /* EndOfFileToken */; + return node.pos === node.end && node.pos >= 0 && node.kind !== 1; } ts.nodeIsMissing = nodeIsMissing; function nodeIsPresent(node) { return !nodeIsMissing(node); } ts.nodeIsPresent = nodeIsPresent; - /** - * Appends a range of value to begin of an array, returning the array. - * - * @param to The array to which `value` is to be appended. If `to` is `undefined`, a new array - * is created if `value` was appended. - * @param from The values to append to the array. If `from` is `undefined`, nothing is - * appended. If an element of `from` is `undefined`, that element is not appended. - */ function prependStatements(to, from) { if (from === undefined || from.length === 0) return to; @@ -7821,17 +5736,10 @@ var ts; return to; } ts.prependStatements = prependStatements; - /** - * Determine if the given comment is a triple-slash - * - * @return true if the comment is a triple-slash comment else false - */ function isRecognizedTripleSlashComment(text, commentPos, commentEnd) { - // Verify this is /// comment, but do the regexp match only when we first can find /// in the comment text - // so that we don't end up computing comment string and doing match for all // comments - if (text.charCodeAt(commentPos + 1) === 47 /* slash */ && + if (text.charCodeAt(commentPos + 1) === 47 && commentPos + 2 < commentEnd && - text.charCodeAt(commentPos + 2) === 47 /* slash */) { + text.charCodeAt(commentPos + 2) === 47) { var textSubStr = text.substring(commentPos, commentEnd); return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) || textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) || @@ -7843,27 +5751,21 @@ var ts; } ts.isRecognizedTripleSlashComment = isRecognizedTripleSlashComment; function isPinnedComment(text, start) { - return text.charCodeAt(start + 1) === 42 /* asterisk */ && - text.charCodeAt(start + 2) === 33 /* exclamation */; + return text.charCodeAt(start + 1) === 42 && + text.charCodeAt(start + 2) === 33; } ts.isPinnedComment = isPinnedComment; 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)) { return node.pos; } if (ts.isJSDocNode(node)) { - return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ true); + return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, true); } if (includeJsDoc && ts.hasJSDocNodes(node)) { 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 === 299 /* SyntaxList */ && node._children.length > 0) { + if (node.kind === 299 && node._children.length > 0) { return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc); } return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); @@ -7897,51 +5799,38 @@ var ts; function getPos(range) { return range.pos; } - /** - * Note: it is expected that the `nodeArray` and the `node` are within the same file. - * For example, searching for a `SourceFile` in a `SourceFile[]` wouldn't work. - */ function indexOfNode(nodeArray, node) { return ts.binarySearch(nodeArray, node, getPos, ts.compareValues); } ts.indexOfNode = indexOfNode; - /** - * Gets flags that control emit behavior of a node. - */ function getEmitFlags(node) { var emitNode = node.emitNode; return emitNode && emitNode.flags || 0; } ts.getEmitFlags = getEmitFlags; function getLiteralText(node, sourceFile) { - // If we don't need to downlevel and we can reach the original source text using - // the node's parent reference, then simply get the text as it was originally written. - if (!nodeIsSynthesized(node) && node.parent && !(ts.isNumericLiteral(node) && node.numericLiteralFlags & 512 /* ContainsSeparator */)) { + if (!nodeIsSynthesized(node) && node.parent && !(ts.isNumericLiteral(node) && node.numericLiteralFlags & 512)) { return getSourceTextOfNodeFromSourceFile(sourceFile, node); } - var escapeText = getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? escapeString : escapeNonAsciiString; - // If we can't reach the original source text, use the canonical form if it's a number, - // or a (possibly escaped) quoted form of the original text if it's string-like. + var escapeText = getEmitFlags(node) & 16777216 ? escapeString : escapeNonAsciiString; switch (node.kind) { - case 9 /* StringLiteral */: + case 9: if (node.singleQuote) { - return "'" + escapeText(node.text, 39 /* singleQuote */) + "'"; + return "'" + escapeText(node.text, 39) + "'"; } else { - return '"' + escapeText(node.text, 34 /* doubleQuote */) + '"'; + return '"' + escapeText(node.text, 34) + '"'; } - case 13 /* NoSubstitutionTemplateLiteral */: - return "`" + escapeText(node.text, 96 /* backtick */) + "`"; - case 14 /* TemplateHead */: - // tslint:disable-next-line no-invalid-template-strings - return "`" + escapeText(node.text, 96 /* backtick */) + "${"; - case 15 /* TemplateMiddle */: - // tslint:disable-next-line no-invalid-template-strings - return "}" + escapeText(node.text, 96 /* backtick */) + "${"; - case 16 /* TemplateTail */: - return "}" + escapeText(node.text, 96 /* backtick */) + "`"; - case 8 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: + case 13: + return "`" + escapeText(node.text, 96) + "`"; + case 14: + return "`" + escapeText(node.text, 96) + "${"; + case 15: + return "}" + escapeText(node.text, 96) + "${"; + case 16: + return "}" + escapeText(node.text, 96) + "`"; + case 8: + case 12: return node.text; } return ts.Debug.fail("Literal kind '" + node.kind + "' not accounted for."); @@ -7951,74 +5840,59 @@ var ts; return ts.isString(value) ? '"' + escapeNonAsciiString(value) + '"' : "" + value; } ts.getTextOfConstantValue = getTextOfConstantValue; - // Add an extra underscore to identifiers that start with two underscores to avoid issues with magic names like '__proto__' function escapeLeadingUnderscores(identifier) { - return (identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier); + return (identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier); } ts.escapeLeadingUnderscores = escapeLeadingUnderscores; - /** - * @deprecated Use `id.escapedText` to get the escaped text of an Identifier. - * @param identifier The identifier to escape - */ function escapeIdentifier(identifier) { return identifier; } ts.escapeIdentifier = escapeIdentifier; - // Make an identifier from an external module name by extracting the string after the last "/" and replacing - // all non-alphanumeric characters with underscores function makeIdentifierFromModuleName(moduleName) { return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_"); } ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName; function isBlockOrCatchScoped(declaration) { - return (ts.getCombinedNodeFlags(declaration) & 3 /* BlockScoped */) !== 0 || + return (ts.getCombinedNodeFlags(declaration) & 3) !== 0 || isCatchClauseVariableDeclarationOrBindingElement(declaration); } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isCatchClauseVariableDeclarationOrBindingElement(declaration) { var node = getRootDeclaration(declaration); - return node.kind === 232 /* VariableDeclaration */ && node.parent.kind === 269 /* CatchClause */; + return node.kind === 232 && node.parent.kind === 269; } ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement; function isAmbientModule(node) { - return ts.isModuleDeclaration(node) && (node.name.kind === 9 /* StringLiteral */ || isGlobalScopeAugmentation(node)); + return ts.isModuleDeclaration(node) && (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; function isModuleWithStringLiteralName(node) { - return ts.isModuleDeclaration(node) && node.name.kind === 9 /* StringLiteral */; + return ts.isModuleDeclaration(node) && node.name.kind === 9; } ts.isModuleWithStringLiteralName = isModuleWithStringLiteralName; function isNonGlobalAmbientModule(node) { return ts.isModuleDeclaration(node) && ts.isStringLiteral(node.name); } ts.isNonGlobalAmbientModule = isNonGlobalAmbientModule; - /** - * An effective module (namespace) declaration is either - * 1. An actual declaration: namespace X { ... } - * 2. A Javascript declaration, which is: - * An identifier in a nested property access expression: Y in `X.Y.Z = { ... }` - */ function isEffectiveModuleDeclaration(node) { return ts.isModuleDeclaration(node) || ts.isIdentifier(node); } ts.isEffectiveModuleDeclaration = isEffectiveModuleDeclaration; - /** Given a symbol for a module, checks that it is a shorthand ambient module. */ function isShorthandAmbientModuleSymbol(moduleSymbol) { return isShorthandAmbientModule(moduleSymbol.valueDeclaration); } ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol; function isShorthandAmbientModule(node) { - // The only kind of module that can be missing a body is a shorthand ambient module. - return node && node.kind === 239 /* ModuleDeclaration */ && (!node.body); + return node && node.kind === 239 && (!node.body); } function isBlockScopedContainerTopLevel(node) { - return node.kind === 274 /* SourceFile */ || - node.kind === 239 /* ModuleDeclaration */ || + return node.kind === 274 || + node.kind === 239 || ts.isFunctionLike(node); } ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel; function isGlobalScopeAugmentation(module) { - return !!(module.flags & 512 /* GlobalAugmentation */); + return !!(module.flags & 512); } ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation; function isExternalModuleAugmentation(node) { @@ -8026,13 +5900,10 @@ var ts; } ts.isExternalModuleAugmentation = isExternalModuleAugmentation; function isModuleAugmentationExternal(node) { - // external module augmentation is a ambient module declaration that is either: - // - defined in the top level scope and source file is an external module - // - defined inside ambient module declaration located in the top level scope and source file not an external module switch (node.parent.kind) { - case 274 /* SourceFile */: + case 274: return ts.isExternalModule(node.parent); - case 240 /* ModuleBlock */: + case 240: return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; @@ -8044,24 +5915,22 @@ var ts; ts.isEffectiveExternalModule = isEffectiveExternalModule; function isBlockScope(node, parentNode) { switch (node.kind) { - case 274 /* SourceFile */: - case 241 /* CaseBlock */: - case 269 /* CatchClause */: - case 239 /* ModuleDeclaration */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 155 /* Constructor */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 274: + case 241: + case 269: + case 239: + case 220: + case 221: + case 222: + case 155: + case 154: + case 156: + case 157: + case 234: + case 192: + case 193: return true; - case 213 /* Block */: - // function block is not considered block-scope container - // see comment in binder.ts: bind(...), case for SyntaxKind.Block + case 213: return !ts.isFunctionLike(parentNode); } return false; @@ -8069,28 +5938,28 @@ var ts; ts.isBlockScope = isBlockScope; function isDeclarationWithTypeParameters(node) { switch (node.kind) { - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 153 /* MethodSignature */: - case 160 /* IndexSignature */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 284 /* JSDocFunctionType */: - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 296 /* JSDocTemplateTag */: - case 234 /* FunctionDeclaration */: - case 154 /* MethodDeclaration */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 292 /* JSDocCallbackTag */: - case 297 /* JSDocTypedefTag */: - case 288 /* JSDocSignature */: + case 158: + case 159: + case 153: + case 160: + case 163: + case 164: + case 284: + case 235: + case 205: + case 236: + case 237: + case 296: + case 234: + case 154: + case 155: + case 156: + case 157: + case 192: + case 193: + case 292: + case 297: + case 288: return true; default: ts.assertTypeIsNever(node); @@ -8100,8 +5969,8 @@ var ts; ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters; function isAnyImportSyntax(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: + case 244: + case 243: return true; default: return false; @@ -8110,15 +5979,15 @@ var ts; ts.isAnyImportSyntax = isAnyImportSyntax; function isLateVisibilityPaintedStatement(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: - case 214 /* VariableStatement */: - case 235 /* ClassDeclaration */: - case 234 /* FunctionDeclaration */: - case 239 /* ModuleDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 236 /* InterfaceDeclaration */: - case 238 /* EnumDeclaration */: + case 244: + case 243: + case 214: + case 235: + case 234: + case 239: + case 237: + case 236: + case 238: return true; default: return false; @@ -8129,15 +5998,10 @@ var ts; return isAnyImportSyntax(node) || ts.isExportDeclaration(node); } ts.isAnyImportOrReExport = isAnyImportOrReExport; - // Gets the nearest enclosing block scope container that has the provided node - // as a descendant, that is not the provided node. function getEnclosingBlockScopeContainer(node) { return findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); }); } ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; - // Return display name of an identifier - // Computed property names will just be emitted as "[]", where is the source - // text of the expression in the computed property. function declarationNameToString(name) { return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name); } @@ -8148,13 +6012,13 @@ var ts; ts.getNameFromIndexInfo = getNameFromIndexInfo; function getTextOfPropertyName(name) { switch (name.kind) { - case 71 /* Identifier */: + case 71: return name.escapedText; - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: + case 9: + case 8: return escapeLeadingUnderscores(name.text); - case 147 /* ComputedPropertyName */: - return isStringOrNumericLiteral(name.expression) ? escapeLeadingUnderscores(name.expression.text) : undefined; // TODO: GH#18217 Almost all uses of this assume the result to be defined! + case 147: + return isStringOrNumericLiteral(name.expression) ? escapeLeadingUnderscores(name.expression.text) : undefined; default: ts.Debug.assertNever(name); } @@ -8162,11 +6026,11 @@ var ts; ts.getTextOfPropertyName = getTextOfPropertyName; function entityNameToString(name) { switch (name.kind) { - case 71 /* Identifier */: + case 71: return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name); - case 146 /* QualifiedName */: + case 146: return entityNameToString(name.left) + "." + entityNameToString(name.right); - case 185 /* PropertyAccessExpression */: + case 185: return entityNameToString(name.expression) + "." + entityNameToString(name.name); default: throw ts.Debug.assertNever(name); @@ -8202,7 +6066,7 @@ var ts; } ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; function getSpanOfTokenAtPosition(sourceFile, pos) { - var scanner = ts.createScanner(sourceFile.languageVersion, /*skipTrivia*/ true, sourceFile.languageVariant, sourceFile.text, /*onError:*/ undefined, pos); + var scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.languageVariant, sourceFile.text, undefined, pos); scanner.scan(); var start = scanner.getTokenPos(); return ts.createTextSpanFromBounds(start, scanner.getTextPos()); @@ -8210,12 +6074,10 @@ var ts; ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); - if (node.body && node.body.kind === 213 /* Block */) { + if (node.body && node.body.kind === 213) { var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line; var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line; if (startLine < endLine) { - // The arrow function spans multiple lines, - // make the error span be the first line, inclusive. return ts.createTextSpan(pos, getEndLinePosition(startLine, sourceFile) - pos + 1); } } @@ -8224,46 +6086,40 @@ var ts; function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { - case 274 /* SourceFile */: - var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false); + case 274: + var pos_1 = ts.skipTrivia(sourceFile.text, 0, false); if (pos_1 === sourceFile.text.length) { - // file is empty - return span for the beginning of the file return ts.createTextSpan(0, 0); } return getSpanOfTokenAtPosition(sourceFile, pos_1); - // This list is a work in progress. Add missing node kinds to improve their error - // spans. - case 232 /* VariableDeclaration */: - case 182 /* BindingElement */: - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 236 /* InterfaceDeclaration */: - case 239 /* ModuleDeclaration */: - case 238 /* EnumDeclaration */: - case 273 /* EnumMember */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 237 /* TypeAliasDeclaration */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 232: + case 182: + case 235: + case 205: + case 236: + case 239: + case 238: + case 273: + case 234: + case 192: + case 154: + case 156: + case 157: + case 237: + case 152: + case 151: errorNode = node.name; break; - case 193 /* ArrowFunction */: + case 193: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { - // If we don't have a better node, then just set the error on the first token of - // construct. return getSpanOfTokenAtPosition(sourceFile, node.pos); } var isMissing = nodeIsMissing(errorNode); var pos = isMissing ? errorNode.pos : ts.skipTrivia(sourceFile.text, errorNode.pos); - // These asserts should all be satisfied for a properly constructed `errorNode`. if (isMissing) { ts.Debug.assert(pos === errorNode.pos, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); ts.Debug.assert(pos === errorNode.end, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); @@ -8280,58 +6136,57 @@ var ts; } ts.isExternalOrCommonJsModule = isExternalOrCommonJsModule; function isJsonSourceFile(file) { - return file.scriptKind === 6 /* JSON */; + return file.scriptKind === 6; } ts.isJsonSourceFile = isJsonSourceFile; function isConstEnumDeclaration(node) { - return node.kind === 238 /* EnumDeclaration */ && isConst(node); + return node.kind === 238 && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function isConst(node) { - return !!(ts.getCombinedNodeFlags(node) & 2 /* Const */) - || !!(ts.getCombinedModifierFlags(node) & 2048 /* Const */); + return !!(ts.getCombinedNodeFlags(node) & 2) + || !!(ts.getCombinedModifierFlags(node) & 2048); } ts.isConst = isConst; function isLet(node) { - return !!(ts.getCombinedNodeFlags(node) & 1 /* Let */); + return !!(ts.getCombinedNodeFlags(node) & 1); } ts.isLet = isLet; function isSuperCall(n) { - return n.kind === 187 /* CallExpression */ && n.expression.kind === 97 /* SuperKeyword */; + return n.kind === 187 && n.expression.kind === 97; } ts.isSuperCall = isSuperCall; function isImportCall(n) { - return n.kind === 187 /* CallExpression */ && n.expression.kind === 91 /* ImportKeyword */; + return n.kind === 187 && n.expression.kind === 91; } ts.isImportCall = isImportCall; function isLiteralImportTypeNode(n) { - return n.kind === 179 /* ImportType */ && - n.argument.kind === 178 /* LiteralType */ && + return n.kind === 179 && + n.argument.kind === 178 && ts.isStringLiteral(n.argument.literal); } ts.isLiteralImportTypeNode = isLiteralImportTypeNode; function isPrologueDirective(node) { - return node.kind === 216 /* ExpressionStatement */ - && node.expression.kind === 9 /* StringLiteral */; + return node.kind === 216 + && node.expression.kind === 9; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { - return node.kind !== 10 /* JsxText */ ? ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : undefined; + return node.kind !== 10 ? ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : undefined; } ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; function getJSDocCommentRanges(node, text) { - var commentRanges = (node.kind === 149 /* Parameter */ || - node.kind === 148 /* TypeParameter */ || - node.kind === 192 /* FunctionExpression */ || - node.kind === 193 /* ArrowFunction */ || - node.kind === 191 /* ParenthesizedExpression */) ? + var commentRanges = (node.kind === 149 || + node.kind === 148 || + node.kind === 192 || + node.kind === 193 || + node.kind === 191) ? ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : ts.getLeadingCommentRanges(text, node.pos); - // 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 */; + return text.charCodeAt(comment.pos + 1) === 42 && + text.charCodeAt(comment.pos + 2) === 42 && + text.charCodeAt(comment.pos + 3) !== 47; }); } ts.getJSDocCommentRanges = getJSDocCommentRanges; @@ -8340,87 +6195,75 @@ var ts; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; var defaultLibReferenceRegEx = /^(\/\/\/\s*/; function isPartOfTypeNode(node) { - if (161 /* FirstTypeNode */ <= node.kind && node.kind <= 179 /* LastTypeNode */) { + if (161 <= node.kind && node.kind <= 179) { return true; } switch (node.kind) { - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 134 /* NumberKeyword */: - case 137 /* StringKeyword */: - case 122 /* BooleanKeyword */: - case 138 /* SymbolKeyword */: - case 140 /* UndefinedKeyword */: - case 131 /* NeverKeyword */: + case 119: + case 142: + case 134: + case 137: + case 122: + case 138: + case 140: + case 131: return true; - case 105 /* VoidKeyword */: - return node.parent.kind !== 196 /* VoidExpression */; - case 207 /* ExpressionWithTypeArguments */: + case 105: + return node.parent.kind !== 196; + case 207: return !isExpressionWithTypeArgumentsInClassExtendsClause(node); - case 148 /* TypeParameter */: - return node.parent.kind === 177 /* MappedType */ || node.parent.kind === 172 /* InferType */; - // Identifiers and qualified names may be type nodes, depending on their context. Climb - // above them to find the lowest container - case 71 /* Identifier */: - // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. - if (node.parent.kind === 146 /* QualifiedName */ && node.parent.right === node) { + case 148: + return node.parent.kind === 177 || node.parent.kind === 172; + case 71: + if (node.parent.kind === 146 && node.parent.right === node) { node = node.parent; } - else if (node.parent.kind === 185 /* PropertyAccessExpression */ && node.parent.name === node) { + else if (node.parent.kind === 185 && node.parent.name === node) { node = node.parent; } - // At this point, node is either a qualified name or an identifier - ts.Debug.assert(node.kind === 71 /* Identifier */ || node.kind === 146 /* QualifiedName */ || node.kind === 185 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'."); - // falls through - case 146 /* QualifiedName */: - case 185 /* PropertyAccessExpression */: - case 99 /* ThisKeyword */: { + ts.Debug.assert(node.kind === 71 || node.kind === 146 || node.kind === 185, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'."); + case 146: + case 185: + case 99: { var parent = node.parent; - if (parent.kind === 165 /* TypeQuery */) { + if (parent.kind === 165) { return false; } - if (parent.kind === 179 /* ImportType */) { + if (parent.kind === 179) { return !parent.isTypeOf; } - // Do not recursively call isPartOfTypeNode on the parent. In the example: - // - // let a: A.B.C; - // - // Calling isPartOfTypeNode would consider the qualified name A.B a type node. - // Only C and A.B.C are type nodes. - if (161 /* FirstTypeNode */ <= parent.kind && parent.kind <= 179 /* LastTypeNode */) { + if (161 <= parent.kind && parent.kind <= 179) { return true; } switch (parent.kind) { - case 207 /* ExpressionWithTypeArguments */: + case 207: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent); - case 148 /* TypeParameter */: + case 148: return node === parent.constraint; - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 149 /* Parameter */: - case 232 /* VariableDeclaration */: + case 152: + case 151: + case 149: + case 232: return node === parent.type; - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 155 /* Constructor */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 234: + case 192: + case 193: + case 155: + case 154: + case 153: + case 156: + case 157: return node === parent.type; - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: + case 158: + case 159: + case 160: return node === parent.type; - case 190 /* TypeAssertionExpression */: + case 190: return node === parent.type; - case 187 /* CallExpression */: - case 188 /* NewExpression */: + case 187: + case 188: return ts.contains(parent.typeArguments, node); - case 189 /* TaggedTemplateExpression */: - // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments. + case 189: return false; } } @@ -8438,29 +6281,27 @@ var ts; return false; } ts.isChildOfNodeWithKind = isChildOfNodeWithKind; - // Warning: This has the same semantics as the forEach family of functions, - // in that traversal terminates in the event that 'visitor' supplies a truthy value. function forEachReturnStatement(body, visitor) { return traverse(body); function traverse(node) { switch (node.kind) { - case 225 /* ReturnStatement */: + case 225: return visitor(node); - case 241 /* CaseBlock */: - case 213 /* Block */: - case 217 /* IfStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 226 /* WithStatement */: - case 227 /* SwitchStatement */: - case 266 /* CaseClause */: - case 267 /* DefaultClause */: - case 228 /* LabeledStatement */: - case 230 /* TryStatement */: - case 269 /* CatchClause */: + case 241: + case 213: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 226: + case 227: + case 266: + case 267: + case 228: + case 230: + case 269: return ts.forEachChild(node, traverse); } } @@ -8470,52 +6311,39 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 203 /* YieldExpression */: + case 203: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } return; - case 238 /* EnumDeclaration */: - case 236 /* InterfaceDeclaration */: - case 239 /* ModuleDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - // These are not allowed inside a generator now, but eventually they may be allowed - // as local types. Regardless, any yield statements contained within them should be - // skipped in this traversal. + case 238: + case 236: + case 239: + case 237: + case 235: + case 205: return; default: if (ts.isFunctionLike(node)) { - if (node.name && node.name.kind === 147 /* ComputedPropertyName */) { - // Note that we will not include methods/accessors of a class because they would require - // first descending into the class. This is by design. + if (node.name && node.name.kind === 147) { traverse(node.name.expression); return; } } else if (!isPartOfTypeNode(node)) { - // This is the general case, which should include mostly expressions and statements. - // Also includes NodeArrays. ts.forEachChild(node, traverse); } } } } ts.forEachYieldExpression = forEachYieldExpression; - /** - * Gets the most likely element type for a TypeNode. This is not an exhaustive test - * as it assumes a rest argument can only be an array type (either T[], or Array). - * - * @param node The type node. - */ function getRestParameterElementType(node) { - if (node && node.kind === 167 /* ArrayType */) { + if (node && node.kind === 167) { return node.elementType; } - else if (node && node.kind === 162 /* TypeReference */) { + else if (node && node.kind === 162) { return ts.singleOrUndefined(node.typeArguments); } else { @@ -8525,12 +6353,12 @@ var ts; ts.getRestParameterElementType = getRestParameterElementType; function getMembersOfDeclaration(node) { switch (node.kind) { - case 236 /* InterfaceDeclaration */: - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 166 /* TypeLiteral */: + case 236: + case 235: + case 205: + case 166: return node.members; - case 184 /* ObjectLiteralExpression */: + case 184: return node.properties; } } @@ -8538,14 +6366,14 @@ var ts; function isVariableLike(node) { if (node) { switch (node.kind) { - case 182 /* BindingElement */: - case 273 /* EnumMember */: - case 149 /* Parameter */: - case 270 /* PropertyAssignment */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 271 /* ShorthandPropertyAssignment */: - case 232 /* VariableDeclaration */: + case 182: + case 273: + case 149: + case 270: + case 152: + case 151: + case 271: + case 232: return true; } } @@ -8557,8 +6385,8 @@ var ts; } ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor; function isVariableDeclarationInVariableStatement(node) { - return node.parent.kind === 233 /* VariableDeclarationList */ - && node.parent.parent.kind === 214 /* VariableStatement */; + return node.parent.kind === 233 + && node.parent.parent.kind === 214; } ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement; function isValidESSymbolDeclaration(node) { @@ -8569,13 +6397,13 @@ var ts; ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration; function introducesArgumentsExoticObject(node) { switch (node.kind) { - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: + case 154: + case 153: + case 155: + case 156: + case 157: + case 234: + case 192: return true; } return false; @@ -8586,7 +6414,7 @@ var ts; if (beforeUnwrapLabelCallback) { beforeUnwrapLabelCallback(node); } - if (node.statement.kind !== 228 /* LabeledStatement */) { + if (node.statement.kind !== 228) { return node.statement; } node = node.statement; @@ -8594,30 +6422,30 @@ var ts; } ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel; function isFunctionBlock(node) { - return node && node.kind === 213 /* Block */ && ts.isFunctionLike(node.parent); + return node && node.kind === 213 && ts.isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 154 /* MethodDeclaration */ && node.parent.kind === 184 /* ObjectLiteralExpression */; + return node && node.kind === 154 && node.parent.kind === 184; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isObjectLiteralOrClassExpressionMethod(node) { - return node.kind === 154 /* MethodDeclaration */ && - (node.parent.kind === 184 /* ObjectLiteralExpression */ || - node.parent.kind === 205 /* ClassExpression */); + return node.kind === 154 && + (node.parent.kind === 184 || + node.parent.kind === 205); } ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod; function isIdentifierTypePredicate(predicate) { - return predicate && predicate.kind === 1 /* Identifier */; + return predicate && predicate.kind === 1; } ts.isIdentifierTypePredicate = isIdentifierTypePredicate; function isThisTypePredicate(predicate) { - return predicate && predicate.kind === 0 /* This */; + return predicate && predicate.kind === 0; } ts.isThisTypePredicate = isThisTypePredicate; function getPropertyAssignment(objectLiteral, key, key2) { return objectLiteral.properties.filter(function (property) { - if (property.kind === 270 /* PropertyAssignment */) { + if (property.kind === 270) { var propName = getTextOfPropertyName(property.name); return key === propName || (!!key2 && key2 === propName); } @@ -8654,87 +6482,64 @@ var ts; } ts.getContainingClass = getContainingClass; function getThisContainer(node, includeArrowFunctions) { - ts.Debug.assert(node.kind !== 274 /* SourceFile */); + ts.Debug.assert(node.kind !== 274); while (true) { node = node.parent; if (!node) { - return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that. + return ts.Debug.fail(); } switch (node.kind) { - case 147 /* ComputedPropertyName */: - // If the grandparent node is an object literal (as opposed to a class), - // then the computed property is not a 'this' container. - // A computed property name in a class needs to be a this container - // so that we can error on it. + case 147: if (ts.isClassLike(node.parent.parent)) { return node; } - // If this is a computed property, then the parent should not - // make it a this container. The parent might be a property - // in an object literal, like a method or accessor. But in order for - // such a parent to be a this container, the reference must be in - // the *body* of the container. node = node.parent; break; - case 150 /* Decorator */: - // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 149 /* Parameter */ && ts.isClassElement(node.parent.parent)) { - // If the decorator's parent is a Parameter, we resolve the this container from - // the grandparent class declaration. + case 150: + if (node.parent.kind === 149 && ts.isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (ts.isClassElement(node.parent)) { - // If the decorator's parent is a class element, we resolve the 'this' container - // from the parent class declaration. node = node.parent; } break; - case 193 /* ArrowFunction */: + case 193: if (!includeArrowFunctions) { continue; } - // falls through - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 239 /* ModuleDeclaration */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 238 /* EnumDeclaration */: - case 274 /* SourceFile */: + case 234: + case 192: + case 239: + case 152: + case 151: + case 154: + case 153: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 238: + case 274: return node; } } } ts.getThisContainer = getThisContainer; function getNewTargetContainer(node) { - var container = getThisContainer(node, /*includeArrowFunctions*/ false); + var container = getThisContainer(node, false); if (container) { switch (container.kind) { - case 155 /* Constructor */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: + case 155: + case 234: + case 192: return container; } } return undefined; } ts.getNewTargetContainer = getNewTargetContainer; - /** - * Given an super call/property node, returns the closest node where - * - a super call/property access is legal in the node and not legal in the parent node the node. - * i.e. super call is legal in constructor but not legal in the class body. - * - the container is an arrow function (so caller might need to call getSuperContainer again in case it needs to climb higher) - * - a super call/property is definitely illegal in the container (but might be legal in some subnode) - * i.e. super property access is illegal in function declaration but can be legal in the statement list - */ function getSuperContainer(node, stopOnFunctions) { while (true) { node = node.parent; @@ -8742,34 +6547,28 @@ var ts; return node; } switch (node.kind) { - case 147 /* ComputedPropertyName */: + case 147: node = node.parent; break; - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 234: + case 192: + case 193: if (!stopOnFunctions) { continue; } - // falls through - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 152: + case 151: + case 154: + case 153: + case 155: + case 156: + case 157: return node; - case 150 /* Decorator */: - // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 149 /* Parameter */ && ts.isClassElement(node.parent.parent)) { - // If the decorator's parent is a Parameter, we resolve the this container from - // the grandparent class declaration. + case 150: + if (node.parent.kind === 149 && ts.isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (ts.isClassElement(node.parent)) { - // If the decorator's parent is a class element, we resolve the 'this' container - // from the parent class declaration. node = node.parent; } break; @@ -8778,47 +6577,41 @@ var ts; } ts.getSuperContainer = getSuperContainer; function getImmediatelyInvokedFunctionExpression(func) { - if (func.kind === 192 /* FunctionExpression */ || func.kind === 193 /* ArrowFunction */) { + if (func.kind === 192 || func.kind === 193) { var prev = func; var parent = func.parent; - while (parent.kind === 191 /* ParenthesizedExpression */) { + while (parent.kind === 191) { prev = parent; parent = parent.parent; } - if (parent.kind === 187 /* CallExpression */ && parent.expression === prev) { + if (parent.kind === 187 && parent.expression === prev) { return parent; } } } ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression; - /** - * Determines whether a node is a property or element access expression for `super`. - */ function isSuperProperty(node) { var kind = node.kind; - return (kind === 185 /* PropertyAccessExpression */ || kind === 186 /* ElementAccessExpression */) - && node.expression.kind === 97 /* SuperKeyword */; + return (kind === 185 || kind === 186) + && node.expression.kind === 97; } ts.isSuperProperty = isSuperProperty; - /** - * Determines whether a node is a property or element access expression for `this`. - */ function isThisProperty(node) { var kind = node.kind; - return (kind === 185 /* PropertyAccessExpression */ || kind === 186 /* ElementAccessExpression */) - && node.expression.kind === 99 /* ThisKeyword */; + return (kind === 185 || kind === 186) + && node.expression.kind === 99; } ts.isThisProperty = isThisProperty; function getEntityNameFromTypeNode(node) { switch (node.kind) { - case 162 /* TypeReference */: + case 162: return node.typeName; - case 207 /* ExpressionWithTypeArguments */: + case 207: return isEntityNameExpression(node.expression) ? node.expression : undefined; - case 71 /* Identifier */: - case 146 /* QualifiedName */: + case 71: + case 146: return node; } return undefined; @@ -8826,10 +6619,10 @@ var ts; ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { switch (node.kind) { - case 189 /* TaggedTemplateExpression */: + case 189: return node.tag; - case 257 /* JsxOpeningElement */: - case 256 /* JsxSelfClosingElement */: + case 257: + case 256: return node.tagName; default: return node.expression; @@ -8838,45 +6631,41 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node, parent, grandparent) { switch (node.kind) { - case 235 /* ClassDeclaration */: - // classes are valid targets + case 235: return true; - case 152 /* PropertyDeclaration */: - // property declarations are valid if their parent is a class declaration. - return parent.kind === 235 /* ClassDeclaration */; - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 154 /* MethodDeclaration */: - // if this method has a body and its parent is a class declaration, this is a valid target. + case 152: + return parent.kind === 235; + case 156: + case 157: + case 154: return node.body !== undefined - && parent.kind === 235 /* ClassDeclaration */; - case 149 /* Parameter */: - // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target; + && parent.kind === 235; + case 149: return parent.body !== undefined - && (parent.kind === 155 /* Constructor */ - || parent.kind === 154 /* MethodDeclaration */ - || parent.kind === 157 /* SetAccessor */) - && grandparent.kind === 235 /* ClassDeclaration */; + && (parent.kind === 155 + || parent.kind === 154 + || parent.kind === 157) + && grandparent.kind === 235; } return false; } ts.nodeCanBeDecorated = nodeCanBeDecorated; function nodeIsDecorated(node, parent, grandparent) { return node.decorators !== undefined - && nodeCanBeDecorated(node, parent, grandparent); // TODO: GH#18217 + && nodeCanBeDecorated(node, parent, grandparent); } ts.nodeIsDecorated = nodeIsDecorated; function nodeOrChildIsDecorated(node, parent, grandparent) { - return nodeIsDecorated(node, parent, grandparent) || childIsDecorated(node, parent); // TODO: GH#18217 + return nodeIsDecorated(node, parent, grandparent) || childIsDecorated(node, parent); } ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated; function childIsDecorated(node, parent) { switch (node.kind) { - case 235 /* ClassDeclaration */: - return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217 - case 154 /* MethodDeclaration */: - case 157 /* SetAccessor */: - return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217 + case 235: + return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); + case 154: + case 157: + return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); default: return false; } @@ -8884,9 +6673,9 @@ var ts; ts.childIsDecorated = childIsDecorated; function isJSXTagName(node) { var parent = node.parent; - if (parent.kind === 257 /* JsxOpeningElement */ || - parent.kind === 256 /* JsxSelfClosingElement */ || - parent.kind === 258 /* JsxClosingElement */) { + if (parent.kind === 257 || + parent.kind === 256 || + parent.kind === 258) { return parent.tagName === node; } return false; @@ -8894,56 +6683,55 @@ var ts; ts.isJSXTagName = isJSXTagName; function isExpressionNode(node) { switch (node.kind) { - case 97 /* SuperKeyword */: - case 95 /* NullKeyword */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 12 /* RegularExpressionLiteral */: - case 183 /* ArrayLiteralExpression */: - case 184 /* ObjectLiteralExpression */: - case 185 /* PropertyAccessExpression */: - case 186 /* ElementAccessExpression */: - case 187 /* CallExpression */: - case 188 /* NewExpression */: - case 189 /* TaggedTemplateExpression */: - case 208 /* AsExpression */: - case 190 /* TypeAssertionExpression */: - case 209 /* NonNullExpression */: - case 191 /* ParenthesizedExpression */: - case 192 /* FunctionExpression */: - case 205 /* ClassExpression */: - case 193 /* ArrowFunction */: - case 196 /* VoidExpression */: - case 194 /* DeleteExpression */: - case 195 /* TypeOfExpression */: - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: - case 200 /* BinaryExpression */: - case 201 /* ConditionalExpression */: - case 204 /* SpreadElement */: - case 202 /* TemplateExpression */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 206 /* OmittedExpression */: - case 255 /* JsxElement */: - case 256 /* JsxSelfClosingElement */: - case 259 /* JsxFragment */: - case 203 /* YieldExpression */: - case 197 /* AwaitExpression */: - case 210 /* MetaProperty */: + case 97: + case 95: + case 101: + case 86: + case 12: + case 183: + case 184: + case 185: + case 186: + case 187: + case 188: + case 189: + case 208: + case 190: + case 209: + case 191: + case 192: + case 205: + case 193: + case 196: + case 194: + case 195: + case 198: + case 199: + case 200: + case 201: + case 204: + case 202: + case 13: + case 206: + case 255: + case 256: + case 259: + case 203: + case 197: + case 210: return true; - case 146 /* QualifiedName */: - while (node.parent.kind === 146 /* QualifiedName */) { + case 146: + while (node.parent.kind === 146) { node = node.parent; } - return node.parent.kind === 165 /* TypeQuery */ || isJSXTagName(node); - case 71 /* Identifier */: - if (node.parent.kind === 165 /* TypeQuery */ || isJSXTagName(node)) { + return node.parent.kind === 165 || isJSXTagName(node); + case 71: + if (node.parent.kind === 165 || isJSXTagName(node)) { return true; } - // falls through - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - case 99 /* ThisKeyword */: + case 8: + case 9: + case 99: return isInExpressionContext(node); default: return false; @@ -8953,47 +6741,47 @@ var ts; function isInExpressionContext(node) { var parent = node.parent; switch (parent.kind) { - case 232 /* VariableDeclaration */: - case 149 /* Parameter */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 273 /* EnumMember */: - case 270 /* PropertyAssignment */: - case 182 /* BindingElement */: + case 232: + case 149: + case 152: + case 151: + case 273: + case 270: + case 182: return parent.initializer === node; - case 216 /* ExpressionStatement */: - case 217 /* IfStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 225 /* ReturnStatement */: - case 226 /* WithStatement */: - case 227 /* SwitchStatement */: - case 266 /* CaseClause */: - case 229 /* ThrowStatement */: + case 216: + case 217: + case 218: + case 219: + case 225: + case 226: + case 227: + case 266: + case 229: return parent.expression === node; - case 220 /* ForStatement */: + case 220: var forStatement = parent; - return (forStatement.initializer === node && forStatement.initializer.kind !== 233 /* VariableDeclarationList */) || + return (forStatement.initializer === node && forStatement.initializer.kind !== 233) || forStatement.condition === node || forStatement.incrementor === node; - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 221: + case 222: var forInStatement = parent; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 233 /* VariableDeclarationList */) || + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 233) || forInStatement.expression === node; - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: + case 190: + case 208: return node === parent.expression; - case 211 /* TemplateSpan */: + case 211: return node === parent.expression; - case 147 /* ComputedPropertyName */: + case 147: return node === parent.expression; - case 150 /* Decorator */: - case 265 /* JsxExpression */: - case 264 /* JsxSpreadAttribute */: - case 272 /* SpreadAssignment */: + case 150: + case 265: + case 264: + case 272: return true; - case 207 /* ExpressionWithTypeArguments */: + case 207: return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent); default: return isExpressionNode(parent); @@ -9001,7 +6789,7 @@ var ts; } ts.isInExpressionContext = isInExpressionContext; function isExternalModuleImportEqualsDeclaration(node) { - return node.kind === 243 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 254 /* ExternalModuleReference */; + return node.kind === 243 && node.moduleReference.kind === 254; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { @@ -9010,7 +6798,7 @@ var ts; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { - return node.kind === 243 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 254 /* ExternalModuleReference */; + return node.kind === 243 && node.moduleReference.kind !== 254; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { @@ -9022,15 +6810,15 @@ var ts; } ts.isSourceFileNotJavaScript = isSourceFileNotJavaScript; function isInJavaScriptFile(node) { - return !!node && !!(node.flags & 65536 /* JavaScriptFile */); + return !!node && !!(node.flags & 65536); } ts.isInJavaScriptFile = isInJavaScriptFile; function isInJsonFile(node) { - return !!node && !!(node.flags & 16777216 /* JsonFile */); + return !!node && !!(node.flags & 16777216); } ts.isInJsonFile = isInJsonFile; function isInJSDoc(node) { - return !!node && !!(node.flags & 2097152 /* JSDoc */); + return !!node && !!(node.flags & 2097152); } ts.isInJSDoc = isInJSDoc; function isJSDocIndexSignature(node) { @@ -9038,15 +6826,15 @@ var ts; ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && node.typeArguments && node.typeArguments.length === 2 && - (node.typeArguments[0].kind === 137 /* StringKeyword */ || node.typeArguments[0].kind === 134 /* NumberKeyword */); + (node.typeArguments[0].kind === 137 || node.typeArguments[0].kind === 134); } ts.isJSDocIndexSignature = isJSDocIndexSignature; function isRequireCall(callExpression, checkArgumentIsStringLiteralLike) { - if (callExpression.kind !== 187 /* CallExpression */) { + if (callExpression.kind !== 187) { return false; } var _a = callExpression, expression = _a.expression, args = _a.arguments; - if (expression.kind !== 71 /* Identifier */ || expression.escapedText !== "require") { + if (expression.kind !== 71 || expression.escapedText !== "require") { return false; } if (args.length !== 1) { @@ -9057,11 +6845,11 @@ var ts; } ts.isRequireCall = isRequireCall; function isSingleOrDoubleQuote(charCode) { - return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; + return charCode === 39 || charCode === 34; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; function isStringDoubleQuoted(str, sourceFile) { - return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34 /* doubleQuote */; + return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34; } ts.isStringDoubleQuoted = isStringDoubleQuoted; function getDeclarationOfJSInitializer(node) { @@ -9074,16 +6862,16 @@ var ts; name = node.parent.name; decl = node.parent; } - else if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58 /* EqualsToken */ && node.parent.right === node) { + else if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58 && node.parent.right === node) { name = node.parent.left; decl = name; } - else if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 54 /* BarBarToken */) { + else if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 54) { if (ts.isVariableDeclaration(node.parent.parent) && node.parent.parent.initializer === node.parent) { name = node.parent.parent.name; decl = node.parent.parent; } - else if (ts.isBinaryExpression(node.parent.parent) && node.parent.parent.operatorToken.kind === 58 /* EqualsToken */ && node.parent.parent.right === node.parent) { + else if (ts.isBinaryExpression(node.parent.parent) && node.parent.parent.operatorToken.kind === 58 && node.parent.parent.right === node.parent) { name = node.parent.parent.left; decl = name; } @@ -9097,46 +6885,31 @@ var ts; return decl; } ts.getDeclarationOfJSInitializer = getDeclarationOfJSInitializer; - /** Get the initializer, taking into account defaulted Javascript initializers */ function getEffectiveInitializer(node) { if (isInJavaScriptFile(node) && node.initializer && - ts.isBinaryExpression(node.initializer) && node.initializer.operatorToken.kind === 54 /* BarBarToken */ && + ts.isBinaryExpression(node.initializer) && node.initializer.operatorToken.kind === 54 && node.name && isEntityNameExpression(node.name) && isSameEntityName(node.name, node.initializer.left)) { return node.initializer.right; } return node.initializer; } ts.getEffectiveInitializer = getEffectiveInitializer; - /** - * Get the assignment 'initializer' -- the righthand side-- when the initializer is container-like (See getJavascriptInitializer). - * We treat the right hand side of assignments with container-like initalizers as declarations. - */ function getAssignedJavascriptInitializer(node) { - if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58 /* EqualsToken */) { + if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58) { var isPrototypeAssignment = isPrototypeAccess(node.parent.left); return getJavascriptInitializer(node.parent.right, isPrototypeAssignment) || getDefaultedJavascriptInitializer(node.parent.left, node.parent.right, isPrototypeAssignment); } } ts.getAssignedJavascriptInitializer = getAssignedJavascriptInitializer; - /** - * Recognized Javascript container-like initializers are: - * 1. (function() {})() -- IIFEs - * 2. function() { } -- Function expressions - * 3. class { } -- Class expressions - * 4. {} -- Empty object literals - * 5. { ... } -- Non-empty object literals, when used to initialize a prototype, like `C.prototype = { m() { } }` - * - * This function returns the provided initializer, or undefined if it is not valid. - */ function getJavascriptInitializer(initializer, isPrototypeAssignment) { if (ts.isCallExpression(initializer)) { var e = skipParentheses(initializer.expression); - return e.kind === 192 /* FunctionExpression */ || e.kind === 193 /* ArrowFunction */ ? initializer : undefined; + return e.kind === 192 || e.kind === 193 ? initializer : undefined; } - if (initializer.kind === 192 /* FunctionExpression */ || - initializer.kind === 205 /* ClassExpression */ || - initializer.kind === 193 /* ArrowFunction */) { + if (initializer.kind === 192 || + initializer.kind === 205 || + initializer.kind === 193) { return initializer; } if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) { @@ -9144,32 +6917,23 @@ var ts; } } ts.getJavascriptInitializer = getJavascriptInitializer; - /** - * A defaulted Javascript initializer matches the pattern - * `Lhs = Lhs || JavascriptInitializer` - * or `var Lhs = Lhs || JavascriptInitializer` - * - * The second Lhs is required to be the same as the first except that it may be prefixed with - * 'window.', 'global.' or 'self.' The second Lhs is otherwise ignored by the binder and checker. - */ function getDefaultedJavascriptInitializer(name, initializer, isPrototypeAssignment) { - var e = ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 54 /* BarBarToken */ && getJavascriptInitializer(initializer.right, isPrototypeAssignment); + var e = ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 54 && getJavascriptInitializer(initializer.right, isPrototypeAssignment); if (e && isSameEntityName(name, initializer.left)) { return e; } } function isDefaultedJavascriptInitializer(node) { var name = ts.isVariableDeclaration(node.parent) ? node.parent.name : - ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58 /* EqualsToken */ ? node.parent.left : + ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 58 ? node.parent.left : undefined; return name && getJavascriptInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left); } ts.isDefaultedJavascriptInitializer = isDefaultedJavascriptInitializer; - /** Given a Javascript initializer, return the outer name. That is, the lhs of the assignment or the declaration name. */ function getOuterNameOfJsInitializer(node) { if (ts.isBinaryExpression(node.parent)) { - var parent = (node.parent.operatorToken.kind === 54 /* BarBarToken */ && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent; - if (parent.operatorToken.kind === 58 /* EqualsToken */ && ts.isIdentifier(parent.left)) { + var parent = (node.parent.operatorToken.kind === 54 && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent; + if (parent.operatorToken.kind === 58 && ts.isIdentifier(parent.left)) { return parent.left; } } @@ -9178,21 +6942,12 @@ var ts; } } ts.getOuterNameOfJsInitializer = getOuterNameOfJsInitializer; - /** - * Is the 'declared' name the same as the one in the initializer? - * @return true for identical entity names, as well as ones where the initializer is prefixed with - * 'window', 'self' or 'global'. For example: - * - * var my = my || {} - * var min = window.min || {} - * my.app = self.my.app || class { } - */ function isSameEntityName(name, initializer) { if (ts.isIdentifier(name) && ts.isIdentifier(initializer)) { return name.escapedText === initializer.escapedText; } if (ts.isIdentifier(name) && ts.isPropertyAccessExpression(initializer)) { - return (initializer.expression.kind === 99 /* ThisKeyword */ || + return (initializer.expression.kind === 99 || ts.isIdentifier(initializer.expression) && (initializer.expression.escapedText === "window" || initializer.expression.escapedText === "self" || @@ -9205,7 +6960,7 @@ var ts; return false; } function getRightMostAssignedExpression(node) { - while (isAssignmentExpression(node, /*excludeCompoundAssignements*/ true)) { + while (isAssignmentExpression(node, true)) { node = node.right; } return node; @@ -9219,30 +6974,25 @@ var ts; return ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.escapedText === "module" && node.name.escapedText === "exports"; } ts.isModuleExportsPropertyAccessExpression = isModuleExportsPropertyAccessExpression; - /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property - /// assignments we treat as special in the binder function getSpecialPropertyAssignmentKind(expr) { if (!isInJavaScriptFile(expr) || - expr.operatorToken.kind !== 58 /* EqualsToken */ || + expr.operatorToken.kind !== 58 || !ts.isPropertyAccessExpression(expr.left)) { - return 0 /* None */; + return 0; } var lhs = expr.left; - if (lhs.expression.kind === 99 /* ThisKeyword */) { - return 4 /* ThisProperty */; + if (lhs.expression.kind === 99) { + return 4; } else if (ts.isIdentifier(lhs.expression) && lhs.expression.escapedText === "module" && lhs.name.escapedText === "exports") { - // module.exports = expr - return 2 /* ModuleExports */; + return 2; } else if (isEntityNameExpression(lhs.expression)) { if (lhs.name.escapedText === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) { - // F.prototype = { ... } - return 6 /* Prototype */; + return 6; } else if (isPrototypeAccess(lhs.expression)) { - // F.G....prototype.x = expr - return 3 /* PrototypeProperty */; + return 3; } var nextToLast = lhs; while (ts.isPropertyAccessExpression(nextToLast.expression)) { @@ -9252,13 +7002,11 @@ var ts; var id = nextToLast.expression; if (id.escapedText === "exports" || id.escapedText === "module" && nextToLast.name.escapedText === "exports") { - // exports.name = expr OR module.exports.name = expr - return 1 /* ExportsProperty */; + return 1; } - // F.G...x = expr - return 5 /* Property */; + return 5; } - return 0 /* None */; + return 0; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getInitializerOfBinaryExpression(expr) { @@ -9269,12 +7017,12 @@ var ts; } ts.getInitializerOfBinaryExpression = getInitializerOfBinaryExpression; function isPrototypePropertyAssignment(node) { - return ts.isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) === 3 /* PrototypeProperty */; + return ts.isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) === 3; } ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment; function isSpecialPropertyDeclaration(expr) { return isInJavaScriptFile(expr) && - expr.parent && expr.parent.kind === 216 /* ExpressionStatement */ && + expr.parent && expr.parent.kind === 216 && !!ts.getJSDocTypeTag(expr.parent); } ts.isSpecialPropertyDeclaration = isSpecialPropertyDeclaration; @@ -9284,14 +7032,14 @@ var ts; ts.importFromModuleSpecifier = importFromModuleSpecifier; function tryGetImportFromModuleSpecifier(node) { switch (node.parent.kind) { - case 244 /* ImportDeclaration */: - case 250 /* ExportDeclaration */: + case 244: + case 250: return node.parent; - case 254 /* ExternalModuleReference */: + case 254: return node.parent.parent; - case 187 /* CallExpression */: + case 187: return node.parent; - case 178 /* LiteralType */: + case 178: ts.Debug.assert(ts.isStringLiteral(node)); return ts.tryCast(node.parent.parent, ts.isImportTypeNode); default: @@ -9301,12 +7049,12 @@ var ts; ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier; function getExternalModuleName(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: - case 250 /* ExportDeclaration */: + case 244: + case 250: return node.moduleSpecifier; - case 243 /* ImportEqualsDeclaration */: - return node.moduleReference.kind === 254 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined; - case 179 /* ImportType */: + case 243: + return node.moduleReference.kind === 254 ? node.moduleReference.expression : undefined; + case 179: return isLiteralImportTypeNode(node) ? node.argument.literal : undefined; default: return ts.Debug.assertNever(node); @@ -9315,11 +7063,11 @@ var ts; ts.getExternalModuleName = getExternalModuleName; function getNamespaceDeclarationNode(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: + case 244: return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport); - case 243 /* ImportEqualsDeclaration */: + case 243: return node; - case 250 /* ExportDeclaration */: + case 250: return undefined; default: return ts.Debug.assertNever(node); @@ -9327,19 +7075,19 @@ var ts; } ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode; function isDefaultImport(node) { - return node.kind === 244 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name; + return node.kind === 244 && !!node.importClause && !!node.importClause.name; } ts.isDefaultImport = isDefaultImport; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 149 /* Parameter */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 271 /* ShorthandPropertyAssignment */: - case 270 /* PropertyAssignment */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 149: + case 154: + case 153: + case 271: + case 270: + case 152: + case 151: return node.questionToken !== undefined; } } @@ -9347,14 +7095,14 @@ var ts; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { - return node.kind === 284 /* JSDocFunctionType */ && + return node.kind === 284 && node.parameters.length > 0 && node.parameters[0].name && node.parameters[0].name.escapedText === "new"; } ts.isJSDocConstructSignature = isJSDocConstructSignature; function isJSDocTypeAlias(node) { - return node.kind === 297 /* JSDocTypedefTag */ || node.kind === 292 /* JSDocCallbackTag */; + return node.kind === 297 || node.kind === 292; } ts.isJSDocTypeAlias = isJSDocTypeAlias; function isTypeAlias(node) { @@ -9364,27 +7112,27 @@ var ts; function getSourceOfAssignment(node) { return ts.isExpressionStatement(node) && node.expression && ts.isBinaryExpression(node.expression) && - node.expression.operatorToken.kind === 58 /* EqualsToken */ + node.expression.operatorToken.kind === 58 ? node.expression.right : undefined; } function getSourceOfDefaultedAssignment(node) { return ts.isExpressionStatement(node) && ts.isBinaryExpression(node.expression) && - getSpecialPropertyAssignmentKind(node.expression) !== 0 /* None */ && + getSpecialPropertyAssignmentKind(node.expression) !== 0 && ts.isBinaryExpression(node.expression.right) && - node.expression.right.operatorToken.kind === 54 /* BarBarToken */ + node.expression.right.operatorToken.kind === 54 ? node.expression.right.right : undefined; } function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) { switch (node.kind) { - case 214 /* VariableStatement */: + case 214: var v = getSingleVariableOfVariableStatement(node); return v && v.initializer; - case 152 /* PropertyDeclaration */: + case 152: return node.initializer; - case 270 /* PropertyAssignment */: + case 270: return node.initializer; } } @@ -9394,7 +7142,7 @@ var ts; function getNestedModuleDeclaration(node) { return ts.isModuleDeclaration(node) && node.body && - node.body.kind === 239 /* ModuleDeclaration */ + node.body.kind === 239 ? node.body : undefined; } @@ -9406,15 +7154,9 @@ var ts; var parent = node.parent; if (!parent) return; - if (parent.kind === 270 /* PropertyAssignment */ || parent.kind === 152 /* PropertyDeclaration */ || getNestedModuleDeclaration(parent)) { + if (parent.kind === 270 || parent.kind === 152 || getNestedModuleDeclaration(parent)) { getJSDocCommentsAndTagsWorker(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; } if (parent.parent && (getSingleVariableOfVariableStatement(parent.parent) === node)) { getJSDocCommentsAndTagsWorker(parent.parent); } @@ -9424,13 +7166,12 @@ var ts; getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } - if (ts.isBinaryExpression(node) && node.operatorToken.kind === 58 /* EqualsToken */ || - ts.isBinaryExpression(parent) && parent.operatorToken.kind === 58 /* EqualsToken */ || - node.kind === 185 /* PropertyAccessExpression */ && node.parent && node.parent.kind === 216 /* ExpressionStatement */) { + if (ts.isBinaryExpression(node) && node.operatorToken.kind === 58 || + ts.isBinaryExpression(parent) && parent.operatorToken.kind === 58 || + node.kind === 185 && node.parent && node.parent.kind === 216) { getJSDocCommentsAndTagsWorker(parent); } - // Pull parameter comments from declaring function as well - if (node.kind === 149 /* Parameter */) { + if (node.kind === 149) { result = ts.addRange(result, ts.getJSDocParameterTags(node)); } if (isVariableLike(node) && ts.hasInitializer(node) && node.initializer !== hostNode && ts.hasJSDocNodes(node.initializer)) { @@ -9442,7 +7183,6 @@ var ts; } } ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags; - /** Does the opposite of `getJSDocParameterTags`: given a JSDoc parameter, finds the parameter corresponding to it. */ function getParameterSymbolFromJSDoc(node) { if (node.symbol) { return node.symbol; @@ -9455,7 +7195,7 @@ var ts; if (!decl) { return undefined; } - var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 71 /* Identifier */ && p.name.escapedText === name; }); + var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 71 && p.name.escapedText === name; }); return parameter && parameter.symbol; } ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc; @@ -9490,86 +7230,72 @@ var ts; ts.hasRestParameter = hasRestParameter; function isRestParameter(node) { var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type; - return node.dotDotDotToken !== undefined || !!type && type.kind === 285 /* JSDocVariadicType */; + return node.dotDotDotToken !== undefined || !!type && type.kind === 285; } ts.isRestParameter = isRestParameter; - var AssignmentKind; - (function (AssignmentKind) { - AssignmentKind[AssignmentKind["None"] = 0] = "None"; - AssignmentKind[AssignmentKind["Definite"] = 1] = "Definite"; - AssignmentKind[AssignmentKind["Compound"] = 2] = "Compound"; - })(AssignmentKind = ts.AssignmentKind || (ts.AssignmentKind = {})); function getAssignmentTargetKind(node) { var parent = node.parent; while (true) { switch (parent.kind) { - case 200 /* BinaryExpression */: + case 200: var binaryOperator = parent.operatorToken.kind; return isAssignmentOperator(binaryOperator) && parent.left === node ? - binaryOperator === 58 /* EqualsToken */ ? 1 /* Definite */ : 2 /* Compound */ : - 0 /* None */; - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: + binaryOperator === 58 ? 1 : 2 : + 0; + case 198: + case 199: var unaryOperator = parent.operator; - return unaryOperator === 43 /* PlusPlusToken */ || unaryOperator === 44 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */; - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - return parent.initializer === node ? 1 /* Definite */ : 0 /* None */; - case 191 /* ParenthesizedExpression */: - case 183 /* ArrayLiteralExpression */: - case 204 /* SpreadElement */: - case 209 /* NonNullExpression */: + return unaryOperator === 43 || unaryOperator === 44 ? 2 : 0; + case 221: + case 222: + return parent.initializer === node ? 1 : 0; + case 191: + case 183: + case 204: + case 209: node = parent; break; - case 271 /* ShorthandPropertyAssignment */: + case 271: if (parent.name !== node) { - return 0 /* None */; + return 0; } node = parent.parent; break; - case 270 /* PropertyAssignment */: + case 270: if (parent.name === node) { - return 0 /* None */; + return 0; } node = parent.parent; break; default: - return 0 /* None */; + return 0; } parent = node.parent; } } ts.getAssignmentTargetKind = getAssignmentTargetKind; - // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property - // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is - // an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ a }] = xxx'. - // (Note that `p` is not a target in the above examples, only `a`.) function isAssignmentTarget(node) { - return getAssignmentTargetKind(node) !== 0 /* None */; + return getAssignmentTargetKind(node) !== 0; } ts.isAssignmentTarget = isAssignmentTarget; - /** - * Indicates whether a node could contain a `var` VariableDeclarationList that contributes to - * the same `var` declaration scope as the node's parent. - */ function isNodeWithPossibleHoistedDeclaration(node) { switch (node.kind) { - case 213 /* Block */: - case 214 /* VariableStatement */: - case 226 /* WithStatement */: - case 217 /* IfStatement */: - case 227 /* SwitchStatement */: - case 241 /* CaseBlock */: - case 266 /* CaseClause */: - case 267 /* DefaultClause */: - case 228 /* LabeledStatement */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 230 /* TryStatement */: - case 269 /* CatchClause */: + case 213: + case 214: + case 226: + case 217: + case 227: + case 241: + case 266: + case 267: + case 228: + case 220: + case 221: + case 222: + case 218: + case 219: + case 230: + case 269: return true; } return false; @@ -9586,27 +7312,26 @@ var ts; return node; } function walkUpParenthesizedTypes(node) { - return walkUp(node, 173 /* ParenthesizedType */); + return walkUp(node, 173); } ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes; function walkUpParenthesizedExpressions(node) { - return walkUp(node, 191 /* ParenthesizedExpression */); + return walkUp(node, 191); } ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions; function skipParentheses(node) { - while (node.kind === 191 /* ParenthesizedExpression */) { + while (node.kind === 191) { node = node.expression; } return node; } ts.skipParentheses = skipParentheses; - // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped function isDeleteTarget(node) { - if (node.kind !== 185 /* PropertyAccessExpression */ && node.kind !== 186 /* ElementAccessExpression */) { + if (node.kind !== 185 && node.kind !== 186) { return false; } node = walkUpParenthesizedExpressions(node.parent); - return node && node.kind === 194 /* DeleteExpression */; + return node && node.kind === 194; } ts.isDeleteTarget = isDeleteTarget; function isNodeDescendantOf(node, ancestor) { @@ -9618,17 +7343,15 @@ var ts; return false; } ts.isNodeDescendantOf = isNodeDescendantOf; - // True if `name` is the name of a declaration node function isDeclarationName(name) { return !ts.isSourceFile(name) && !ts.isBindingPattern(name) && ts.isDeclaration(name.parent) && name.parent.name === name; } ts.isDeclarationName = isDeclarationName; - // See GH#16030 function isAnyDeclarationName(name) { switch (name.kind) { - case 71 /* Identifier */: - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: { + case 71: + case 9: + case 8: { var parent = name.parent; if (ts.isDeclaration(parent)) { return parent.name === name; @@ -9639,7 +7362,7 @@ var ts; } else { var binExp = name.parent.parent; - return ts.isBinaryExpression(binExp) && getSpecialPropertyAssignmentKind(binExp) !== 0 /* None */ && ts.getNameOfDeclaration(binExp) === name; + return ts.isBinaryExpression(binExp) && getSpecialPropertyAssignmentKind(binExp) !== 0 && ts.getNameOfDeclaration(binExp) === name; } } default: @@ -9648,64 +7371,51 @@ var ts; } ts.isAnyDeclarationName = isAnyDeclarationName; function isLiteralComputedPropertyDeclarationName(node) { - return (node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) && - node.parent.kind === 147 /* ComputedPropertyName */ && + return (node.kind === 9 || node.kind === 8) && + node.parent.kind === 147 && ts.isDeclaration(node.parent.parent); } ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; - // Return true if the given identifier is classified as an IdentifierName function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 273 /* EnumMember */: - case 270 /* PropertyAssignment */: - case 185 /* PropertyAccessExpression */: - // Name in member declaration or property name in property access + case 152: + case 151: + case 154: + case 153: + case 156: + case 157: + case 273: + case 270: + case 185: return parent.name === node; - case 146 /* QualifiedName */: - // Name on right hand side of dot in a type query or type reference + case 146: if (parent.right === node) { - while (parent.kind === 146 /* QualifiedName */) { + while (parent.kind === 146) { parent = parent.parent; } - return parent.kind === 165 /* TypeQuery */ || parent.kind === 162 /* TypeReference */; + return parent.kind === 165 || parent.kind === 162; } return false; - case 182 /* BindingElement */: - case 248 /* ImportSpecifier */: - // Property name in binding element or import specifier + case 182: + case 248: return parent.propertyName === node; - case 252 /* ExportSpecifier */: - case 262 /* JsxAttribute */: - // Any name in an export specifier or JSX Attribute + case 252: + case 262: return true; } return false; } ts.isIdentifierName = isIdentifierName; - // An alias symbol is created by one of the following declarations: - // import = ... - // import from ... - // import * as from ... - // import { x as } from ... - // export { x as } from ... - // export = - // export default function isAliasSymbolDeclaration(node) { - return node.kind === 243 /* ImportEqualsDeclaration */ || - node.kind === 242 /* NamespaceExportDeclaration */ || - node.kind === 245 /* ImportClause */ && !!node.name || - node.kind === 246 /* NamespaceImport */ || - node.kind === 248 /* ImportSpecifier */ || - node.kind === 252 /* ExportSpecifier */ || - node.kind === 249 /* ExportAssignment */ && exportAssignmentIsAlias(node) || - ts.isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) === 2 /* ModuleExports */; + return node.kind === 243 || + node.kind === 242 || + node.kind === 245 && !!node.name || + node.kind === 246 || + node.kind === 248 || + node.kind === 252 || + node.kind === 249 && exportAssignmentIsAlias(node) || + ts.isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) === 2; } ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; function exportAssignmentIsAlias(node) { @@ -9714,16 +7424,15 @@ var ts; } ts.exportAssignmentIsAlias = exportAssignmentIsAlias; function getClassExtendsHeritageClauseElement(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 85 /* ExtendsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 85); return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined; } ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement; function getClassImplementsHeritageClauseElements(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 108 /* ImplementsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 108); return heritageClause ? heritageClause.types : undefined; } ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements; - /** Returns the node in an `extends` or `implements` clause of a class or interface. */ function getAllSuperTypeNodes(node) { return ts.isInterfaceDeclaration(node) ? getInterfaceBaseTypeNodes(node) || ts.emptyArray : ts.isClassLike(node) ? ts.concatenate(ts.singleElementArray(getClassExtendsHeritageClauseElement(node)), getClassImplementsHeritageClauseElements(node)) || ts.emptyArray @@ -9731,7 +7440,7 @@ var ts; } ts.getAllSuperTypeNodes = getAllSuperTypeNodes; function getInterfaceBaseTypeNodes(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 85 /* ExtendsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 85); return heritageClause ? heritageClause.types : undefined; } ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes; @@ -9765,11 +7474,11 @@ var ts; } ts.getAncestor = getAncestor; function isKeyword(token) { - return 72 /* FirstKeyword */ <= token && token <= 145 /* LastKeyword */; + return 72 <= token && token <= 145; } ts.isKeyword = isKeyword; function isContextualKeyword(token) { - return 117 /* FirstContextualKeyword */ <= token && token <= 145 /* LastContextualKeyword */; + return 117 <= token && token <= 145; } ts.isContextualKeyword = isContextualKeyword; function isNonContextualKeyword(token) { @@ -9782,101 +7491,80 @@ var ts; } ts.isStringANonContextualKeyword = isStringANonContextualKeyword; function isTrivia(token) { - return 2 /* FirstTriviaToken */ <= token && token <= 7 /* LastTriviaToken */; + return 2 <= token && token <= 7; } ts.isTrivia = isTrivia; - var FunctionFlags; - (function (FunctionFlags) { - FunctionFlags[FunctionFlags["Normal"] = 0] = "Normal"; - FunctionFlags[FunctionFlags["Generator"] = 1] = "Generator"; - FunctionFlags[FunctionFlags["Async"] = 2] = "Async"; - FunctionFlags[FunctionFlags["Invalid"] = 4] = "Invalid"; - FunctionFlags[FunctionFlags["AsyncGenerator"] = 3] = "AsyncGenerator"; - })(FunctionFlags = ts.FunctionFlags || (ts.FunctionFlags = {})); function getFunctionFlags(node) { if (!node) { - return 4 /* Invalid */; + return 4; } - var flags = 0 /* Normal */; + var flags = 0; switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 154 /* MethodDeclaration */: + case 234: + case 192: + case 154: if (node.asteriskToken) { - flags |= 1 /* Generator */; + flags |= 1; } - // falls through - case 193 /* ArrowFunction */: - if (hasModifier(node, 256 /* Async */)) { - flags |= 2 /* Async */; + case 193: + if (hasModifier(node, 256)) { + flags |= 2; } break; } if (!node.body) { - flags |= 4 /* Invalid */; + flags |= 4; } return flags; } ts.getFunctionFlags = getFunctionFlags; function isAsyncFunction(node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 154 /* MethodDeclaration */: + case 234: + case 192: + case 193: + case 154: return node.body !== undefined && node.asteriskToken === undefined - && hasModifier(node, 256 /* Async */); + && hasModifier(node, 256); } return false; } ts.isAsyncFunction = isAsyncFunction; function isStringOrNumericLiteral(node) { var kind = node.kind; - return kind === 9 /* StringLiteral */ - || kind === 8 /* NumericLiteral */; + return kind === 9 + || kind === 8; } ts.isStringOrNumericLiteral = isStringOrNumericLiteral; - /** - * A declaration has a dynamic name if both of the following are true: - * 1. The declaration has a computed property name - * 2. The computed name is *not* expressed as Symbol., where name - * is a property of the Symbol constructor that denotes a built in - * Symbol. - */ function hasDynamicName(declaration) { var name = ts.getNameOfDeclaration(declaration); return !!name && isDynamicName(name); } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { - return name.kind === 147 /* ComputedPropertyName */ && + return name.kind === 147 && !isStringOrNumericLiteral(name.expression) && !isWellKnownSymbolSyntactically(name.expression); } ts.isDynamicName = isDynamicName; - /** - * Checks if the expression is of the form: - * Symbol.name - * where Symbol is literally the word "Symbol", and name is any identifierName - */ function isWellKnownSymbolSyntactically(node) { return ts.isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression); } ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically; function getPropertyNameForPropertyNameNode(name) { - if (name.kind === 71 /* Identifier */) { + if (name.kind === 71) { return name.escapedText; } - if (name.kind === 9 /* StringLiteral */ || name.kind === 8 /* NumericLiteral */) { + if (name.kind === 9 || name.kind === 8) { return escapeLeadingUnderscores(name.text); } - if (name.kind === 147 /* ComputedPropertyName */) { + if (name.kind === 147) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { return getPropertyNameForKnownSymbolName(ts.idText(nameExpression.name)); } - else if (nameExpression.kind === 9 /* StringLiteral */ || nameExpression.kind === 8 /* NumericLiteral */) { + else if (nameExpression.kind === 9 || nameExpression.kind === 8) { return escapeLeadingUnderscores(nameExpression.text); } } @@ -9885,10 +7573,10 @@ var ts; ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode; function isPropertyNameLiteral(node) { switch (node.kind) { - case 71 /* Identifier */: - case 9 /* StringLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 8 /* NumericLiteral */: + case 71: + case 9: + case 13: + case 8: return true; default: return false; @@ -9896,11 +7584,11 @@ var ts; } ts.isPropertyNameLiteral = isPropertyNameLiteral; function getTextOfIdentifierOrLiteral(node) { - return node.kind === 71 /* Identifier */ ? ts.idText(node) : node.text; + return node.kind === 71 ? ts.idText(node) : node.text; } ts.getTextOfIdentifierOrLiteral = getTextOfIdentifierOrLiteral; function getEscapedTextOfIdentifierOrLiteral(node) { - return node.kind === 71 /* Identifier */ ? node.escapedText : escapeLeadingUnderscores(node.text); + return node.kind === 71 ? node.escapedText : escapeLeadingUnderscores(node.text); } ts.getEscapedTextOfIdentifierOrLiteral = getEscapedTextOfIdentifierOrLiteral; function getPropertyNameForKnownSymbolName(symbolName) { @@ -9911,11 +7599,8 @@ var ts; return ts.startsWith(symbol.escapedName, "__@"); } ts.isKnownSymbol = isKnownSymbol; - /** - * Includes the word "Symbol" with unicode escapes - */ function isESSymbolIdentifier(node) { - return node.kind === 71 /* Identifier */ && node.escapedText === "Symbol"; + return node.kind === 71 && node.escapedText === "Symbol"; } ts.isESSymbolIdentifier = isESSymbolIdentifier; function isPushOrUnshiftIdentifier(node) { @@ -9924,11 +7609,11 @@ var ts; ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier; function isParameterDeclaration(node) { var root = getRootDeclaration(node); - return root.kind === 149 /* Parameter */; + return root.kind === 149; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { - while (node.kind === 182 /* BindingElement */) { + while (node.kind === 182) { node = node.parent.parent; } return node; @@ -9936,15 +7621,15 @@ var ts; ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(node) { var kind = node.kind; - return kind === 155 /* Constructor */ - || kind === 192 /* FunctionExpression */ - || kind === 234 /* FunctionDeclaration */ - || kind === 193 /* ArrowFunction */ - || kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */ - || kind === 239 /* ModuleDeclaration */ - || kind === 274 /* SourceFile */; + return kind === 155 + || kind === 192 + || kind === 234 + || kind === 193 + || kind === 154 + || kind === 156 + || kind === 157 + || kind === 239 + || kind === 274; } ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; function nodeIsSynthesized(range) { @@ -9956,62 +7641,57 @@ var ts; return ts.getParseTreeNode(sourceFile, ts.isSourceFile) || sourceFile; } ts.getOriginalSourceFile = getOriginalSourceFile; - var Associativity; - (function (Associativity) { - Associativity[Associativity["Left"] = 0] = "Left"; - Associativity[Associativity["Right"] = 1] = "Right"; - })(Associativity = ts.Associativity || (ts.Associativity = {})); function getExpressionAssociativity(expression) { var operator = getOperator(expression); - var hasArguments = expression.kind === 188 /* NewExpression */ && expression.arguments !== undefined; + var hasArguments = expression.kind === 188 && expression.arguments !== undefined; return getOperatorAssociativity(expression.kind, operator, hasArguments); } ts.getExpressionAssociativity = getExpressionAssociativity; function getOperatorAssociativity(kind, operator, hasArguments) { switch (kind) { - case 188 /* NewExpression */: - return hasArguments ? 0 /* Left */ : 1 /* Right */; - case 198 /* PrefixUnaryExpression */: - case 195 /* TypeOfExpression */: - case 196 /* VoidExpression */: - case 194 /* DeleteExpression */: - case 197 /* AwaitExpression */: - case 201 /* ConditionalExpression */: - case 203 /* YieldExpression */: - return 1 /* Right */; - case 200 /* BinaryExpression */: + case 188: + return hasArguments ? 0 : 1; + case 198: + case 195: + case 196: + case 194: + case 197: + case 201: + case 203: + return 1; + case 200: switch (operator) { - case 40 /* AsteriskAsteriskToken */: - case 58 /* EqualsToken */: - case 59 /* PlusEqualsToken */: - case 60 /* MinusEqualsToken */: - case 62 /* AsteriskAsteriskEqualsToken */: - case 61 /* AsteriskEqualsToken */: - case 63 /* SlashEqualsToken */: - case 64 /* PercentEqualsToken */: - case 65 /* LessThanLessThanEqualsToken */: - case 66 /* GreaterThanGreaterThanEqualsToken */: - case 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 68 /* AmpersandEqualsToken */: - case 70 /* CaretEqualsToken */: - case 69 /* BarEqualsToken */: - return 1 /* Right */; + case 40: + case 58: + case 59: + case 60: + case 62: + case 61: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 70: + case 69: + return 1; } } - return 0 /* Left */; + return 0; } ts.getOperatorAssociativity = getOperatorAssociativity; function getExpressionPrecedence(expression) { var operator = getOperator(expression); - var hasArguments = expression.kind === 188 /* NewExpression */ && expression.arguments !== undefined; + var hasArguments = expression.kind === 188 && expression.arguments !== undefined; return getOperatorPrecedence(expression.kind, operator, hasArguments); } ts.getExpressionPrecedence = getExpressionPrecedence; function getOperator(expression) { - if (expression.kind === 200 /* BinaryExpression */) { + if (expression.kind === 200) { return expression.operatorToken.kind; } - else if (expression.kind === 198 /* PrefixUnaryExpression */ || expression.kind === 199 /* PostfixUnaryExpression */) { + else if (expression.kind === 198 || expression.kind === 199) { return expression.operator; } else { @@ -10021,125 +7701,122 @@ var ts; ts.getOperator = getOperator; function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) { switch (nodeKind) { - case 302 /* CommaListExpression */: + case 302: return 0; - case 204 /* SpreadElement */: + case 204: return 1; - case 203 /* YieldExpression */: + case 203: return 2; - case 201 /* ConditionalExpression */: + case 201: return 4; - case 200 /* BinaryExpression */: + case 200: switch (operatorKind) { - case 26 /* CommaToken */: + case 26: return 0; - case 58 /* EqualsToken */: - case 59 /* PlusEqualsToken */: - case 60 /* MinusEqualsToken */: - case 62 /* AsteriskAsteriskEqualsToken */: - case 61 /* AsteriskEqualsToken */: - case 63 /* SlashEqualsToken */: - case 64 /* PercentEqualsToken */: - case 65 /* LessThanLessThanEqualsToken */: - case 66 /* GreaterThanGreaterThanEqualsToken */: - case 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 68 /* AmpersandEqualsToken */: - case 70 /* CaretEqualsToken */: - case 69 /* BarEqualsToken */: + case 58: + case 59: + case 60: + case 62: + case 61: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 70: + case 69: return 3; default: return getBinaryOperatorPrecedence(operatorKind); } - case 198 /* PrefixUnaryExpression */: - case 195 /* TypeOfExpression */: - case 196 /* VoidExpression */: - case 194 /* DeleteExpression */: - case 197 /* AwaitExpression */: + case 198: + case 195: + case 196: + case 194: + case 197: return 16; - case 199 /* PostfixUnaryExpression */: + case 199: return 17; - case 187 /* CallExpression */: + case 187: return 18; - case 188 /* NewExpression */: + case 188: return hasArguments ? 19 : 18; - case 189 /* TaggedTemplateExpression */: - case 185 /* PropertyAccessExpression */: - case 186 /* ElementAccessExpression */: + case 189: + case 185: + case 186: return 19; - case 99 /* ThisKeyword */: - case 97 /* SuperKeyword */: - case 71 /* Identifier */: - case 95 /* NullKeyword */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - case 183 /* ArrayLiteralExpression */: - case 184 /* ObjectLiteralExpression */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 205 /* ClassExpression */: - case 255 /* JsxElement */: - case 256 /* JsxSelfClosingElement */: - case 259 /* JsxFragment */: - case 12 /* RegularExpressionLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 202 /* TemplateExpression */: - case 191 /* ParenthesizedExpression */: - case 206 /* OmittedExpression */: + case 99: + case 97: + case 71: + case 95: + case 101: + case 86: + case 8: + case 9: + case 183: + case 184: + case 192: + case 193: + case 205: + case 255: + case 256: + case 259: + case 12: + case 13: + case 202: + case 191: + case 206: return 20; default: return -1; } } ts.getOperatorPrecedence = getOperatorPrecedence; - /* @internal */ function getBinaryOperatorPrecedence(kind) { switch (kind) { - case 54 /* BarBarToken */: + case 54: return 5; - case 53 /* AmpersandAmpersandToken */: + case 53: return 6; - case 49 /* BarToken */: + case 49: return 7; - case 50 /* CaretToken */: + case 50: return 8; - case 48 /* AmpersandToken */: + case 48: return 9; - case 32 /* EqualsEqualsToken */: - case 33 /* ExclamationEqualsToken */: - case 34 /* EqualsEqualsEqualsToken */: - case 35 /* ExclamationEqualsEqualsToken */: + case 32: + case 33: + case 34: + case 35: return 10; - case 27 /* LessThanToken */: - case 29 /* GreaterThanToken */: - case 30 /* LessThanEqualsToken */: - case 31 /* GreaterThanEqualsToken */: - case 93 /* InstanceOfKeyword */: - case 92 /* InKeyword */: - case 118 /* AsKeyword */: + case 27: + case 29: + case 30: + case 31: + case 93: + case 92: + case 118: return 11; - case 45 /* LessThanLessThanToken */: - case 46 /* GreaterThanGreaterThanToken */: - case 47 /* GreaterThanGreaterThanGreaterThanToken */: + case 45: + case 46: + case 47: return 12; - case 37 /* PlusToken */: - case 38 /* MinusToken */: + case 37: + case 38: return 13; - case 39 /* AsteriskToken */: - case 41 /* SlashToken */: - case 42 /* PercentToken */: + case 39: + case 41: + case 42: return 14; - case 40 /* AsteriskAsteriskToken */: + case 40: return 15; } - // -1 is lower than all other precedences. Returning it will cause binary expression - // parsing to stop. return -1; } ts.getBinaryOperatorPrecedence = getBinaryOperatorPrecedence; function createDiagnosticCollection() { - var nonFileDiagnostics = []; // See GH#19873 + var nonFileDiagnostics = []; var filesWithDiagnostics = []; var fileDiagnostics = ts.createMap(); var hasReadNonFileDiagnostics = false; @@ -10157,13 +7834,12 @@ var ts; if (diagnostic.file) { diagnostics = fileDiagnostics.get(diagnostic.file.fileName); if (!diagnostics) { - diagnostics = []; // See GH#19873 + diagnostics = []; fileDiagnostics.set(diagnostic.file.fileName, diagnostics); ts.insertSorted(filesWithDiagnostics, diagnostic.file.fileName, ts.compareStringsCaseSensitive); } } else { - // If we've already read the non-file diagnostics, do not modify the existing array. if (hasReadNonFileDiagnostics) { hasReadNonFileDiagnostics = false; nonFileDiagnostics = nonFileDiagnostics.slice(); @@ -10189,11 +7865,6 @@ var ts; } } ts.createDiagnosticCollection = createDiagnosticCollection; - // This consists of the first 19 unprintable ASCII characters, canonical escapes, lineSeparator, - // paragraphSeparator, and nextLine. The latter three are just desirable to suppress new lines in - // the language service. These characters should be escaped when printing, and if any characters are added, - // the map below must be updated. Note that this regexp *does not* include the 'delete' character. - // There is no reason for this other than that JSON.stringify does not handle it either. var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; var backtickQuoteEscapedCharsRegExp = /[\\\`\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; @@ -10210,35 +7881,28 @@ var ts; "\`": "\\\`", "\u2028": "\\u2028", "\u2029": "\\u2029", - "\u0085": "\\u0085" // nextLine + "\u0085": "\\u0085" }); - /** - * Based heavily on the abstract 'Quote'/'QuoteJSONString' operation from ECMA-262 (24.3.2.2), - * but augmented for a few select characters (e.g. lineSeparator, paragraphSeparator, nextLine) - * Note that this doesn't actually wrap the input in double quotes. - */ function escapeString(s, quoteChar) { - var escapedCharsRegExp = quoteChar === 96 /* backtick */ ? backtickQuoteEscapedCharsRegExp : - quoteChar === 39 /* singleQuote */ ? singleQuoteEscapedCharsRegExp : + var escapedCharsRegExp = quoteChar === 96 ? backtickQuoteEscapedCharsRegExp : + quoteChar === 39 ? singleQuoteEscapedCharsRegExp : doubleQuoteEscapedCharsRegExp; return s.replace(escapedCharsRegExp, getReplacement); } ts.escapeString = escapeString; function getReplacement(c, offset, input) { - if (c.charCodeAt(0) === 0 /* nullCharacter */) { + if (c.charCodeAt(0) === 0) { var lookAhead = input.charCodeAt(offset + c.length); - if (lookAhead >= 48 /* _0 */ && lookAhead <= 57 /* _9 */) { - // If the null character is followed by digits, print as a hex escape to prevent the result from parsing as an octal (which is forbidden in strict mode) + if (lookAhead >= 48 && lookAhead <= 57) { return "\\x00"; } - // Otherwise, keep printing a literal \0 for the null character return "\\0"; } return escapedCharsMap.get(c) || get16BitUnicodeEscapeSequence(c.charCodeAt(0)); } function isIntrinsicJsxName(name) { var ch = name.charCodeAt(0); - return (ch >= 97 /* a */ && ch <= 122 /* z */) || name.indexOf("-") > -1; + return (ch >= 97 && ch <= 122) || name.indexOf("-") > -1; } ts.isIntrinsicJsxName = isIntrinsicJsxName; function get16BitUnicodeEscapeSequence(charCode) { @@ -10249,8 +7913,6 @@ var ts; var nonAsciiCharacters = /[^\u0000-\u007F]/g; function escapeNonAsciiString(s, quoteChar) { s = escapeString(s, quoteChar); - // Replace non-ASCII characters with '\uNNNN' escapes if any exist. - // Otherwise just return the original string. return nonAsciiCharacters.test(s) ? s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) : s; @@ -10369,14 +8031,11 @@ var ts; return getResolvedExternalModuleName(host, file); } ts.getExternalModuleNameFromDeclaration = getExternalModuleNameFromDeclaration; - /** - * Resolves a local path to a path which is absolute to the base of the emit - */ function getExternalModuleNameFromPath(host, fileName, referencePath) { var getCanonicalFileName = function (f) { return host.getCanonicalFileName(f); }; var dir = toPath(referencePath ? ts.getDirectoryPath(referencePath) : host.getCommonSourceDirectory(), host.getCurrentDirectory(), getCanonicalFileName); var filePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); - var relativePath = ts.getRelativePathToDirectoryOrUrl(dir, filePath, dir, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); + var relativePath = ts.getRelativePathToDirectoryOrUrl(dir, filePath, dir, getCanonicalFileName, false); var extensionless = ts.removeFileExtension(relativePath); return referencePath ? ts.ensurePathIsNonModuleName(extensionless) : extensionless; } @@ -10395,29 +8054,19 @@ var ts; ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath; function getDeclarationEmitOutputFilePath(sourceFile, host) { var options = host.getCompilerOptions(); - var outputDir = options.declarationDir || options.outDir; // Prefer declaration folder if specified + var outputDir = options.declarationDir || options.outDir; var path = outputDir ? getSourceFilePathInNewDir(sourceFile, host, outputDir) : sourceFile.fileName; - return ts.removeFileExtension(path) + ".d.ts" /* Dts */; + return ts.removeFileExtension(path) + ".d.ts"; } ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath; - /** - * Gets the source files that are expected to have an emit output. - * - * Originally part of `forEachExpectedEmitFile`, this functionality was extracted to support - * transformations. - * - * @param host An EmitHost. - * @param targetSourceFile An optional target source file to emit. - */ function getSourceFilesToEmit(host, targetSourceFile) { var options = host.getCompilerOptions(); var isSourceFileFromExternalLibrary = function (file) { return host.isSourceFileFromExternalLibrary(file); }; if (options.outFile || options.out) { var moduleKind = ts.getEmitModuleKind(options); var moduleEmitEnabled_1 = moduleKind === ts.ModuleKind.AMD || moduleKind === ts.ModuleKind.System; - // Can emit only sources that are not declaration file and are either non module code or module with --module or --target es6 specified return ts.filter(host.getSourceFiles(), function (sourceFile) { return (moduleEmitEnabled_1 || !ts.isExternalModule(sourceFile)) && sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary); }); @@ -10428,7 +8077,6 @@ var ts; } } ts.getSourceFilesToEmit = getSourceFilesToEmit; - /** Don't call this for `--outFile`, just for `--outDir` or plain emit. `--outFile` needs additional checks. */ function sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary) { return !(options.noEmitForJsFiles && isSourceFileJavaScript(sourceFile)) && !sourceFile.isDeclarationFile && !isSourceFileFromExternalLibrary(sourceFile); } @@ -10465,14 +8113,12 @@ var ts; return accessor.parameters[hasThis ? 1 : 0]; } } - /** Get the type annotation for the value parameter. */ function getSetAccessorTypeAnnotationNode(accessor) { var parameter = getSetAccessorValueParameter(accessor); return parameter && parameter.type; } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getThisParameter(signature) { - // callback tags do not currently support this parameters if (signature.parameters.length && !ts.isJSDocSignature(signature)) { var thisParameter = signature.parameters[0]; if (parameterIsThisKeyword(thisParameter)) { @@ -10486,25 +8132,24 @@ var ts; } ts.parameterIsThisKeyword = parameterIsThisKeyword; function isThisIdentifier(node) { - return !!node && node.kind === 71 /* Identifier */ && identifierIsThisKeyword(node); + return !!node && node.kind === 71 && identifierIsThisKeyword(node); } ts.isThisIdentifier = isThisIdentifier; function identifierIsThisKeyword(id) { - return id.originalKeywordKind === 99 /* ThisKeyword */; + return id.originalKeywordKind === 99; } ts.identifierIsThisKeyword = identifierIsThisKeyword; function getAllAccessorDeclarations(declarations, accessor) { - // TODO: GH#18217 var firstAccessor; var secondAccessor; var getAccessor; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; - if (accessor.kind === 156 /* GetAccessor */) { + if (accessor.kind === 156) { getAccessor = accessor; } - else if (accessor.kind === 157 /* SetAccessor */) { + else if (accessor.kind === 157) { setAccessor = accessor; } else { @@ -10513,8 +8158,8 @@ var ts; } else { ts.forEach(declarations, function (member) { - if ((member.kind === 156 /* GetAccessor */ || member.kind === 157 /* SetAccessor */) - && hasModifier(member, 32 /* Static */) === hasModifier(accessor, 32 /* Static */)) { + if ((member.kind === 156 || member.kind === 157) + && hasModifier(member, 32) === hasModifier(accessor, 32)) { var memberName = getPropertyNameForPropertyNameNode(member.name); var accessorName = getPropertyNameForPropertyNameNode(accessor.name); if (memberName === accessorName) { @@ -10524,10 +8169,10 @@ var ts; else if (!secondAccessor) { secondAccessor = member; } - if (member.kind === 156 /* GetAccessor */ && !getAccessor) { + if (member.kind === 156 && !getAccessor) { getAccessor = member; } - if (member.kind === 157 /* SetAccessor */ && !setAccessor) { + if (member.kind === 157 && !setAccessor) { setAccessor = member; } } @@ -10542,10 +8187,6 @@ var ts; }; } ts.getAllAccessorDeclarations = getAllAccessorDeclarations; - /** - * Gets the effective type annotation of a variable, parameter, or property. If the node was - * parsed in a JavaScript file, gets the type annotation from JSDoc. - */ function getEffectiveTypeAnnotationNode(node) { return node.type || (isInJavaScriptFile(node) ? ts.getJSDocType(node) : undefined); } @@ -10554,10 +8195,6 @@ var ts; return node.type; } ts.getTypeAnnotationNode = getTypeAnnotationNode; - /** - * Gets the effective return type annotation of a signature. If the node was parsed in a - * JavaScript file, gets the return type annotation from JSDoc. - */ function getEffectiveReturnTypeNode(node) { if (ts.isJSDocSignature(node)) { return node.type && node.type.typeExpression && node.type.typeExpression.type; @@ -10565,16 +8202,12 @@ var ts; return node.type || (isInJavaScriptFile(node) ? ts.getJSDocReturnType(node) : undefined); } ts.getEffectiveReturnTypeNode = getEffectiveReturnTypeNode; - /** - * Gets the effective type parameters. If the node was parsed in a - * JavaScript file, gets the type parameters from the `@template` tag from JSDoc. - */ function getEffectiveTypeParameterDeclarations(node) { if (ts.isJSDocSignature(node)) { return ts.emptyArray; } if (isJSDocTypeAlias(node)) { - ts.Debug.assert(node.parent.kind === 286 /* JSDocComment */); + ts.Debug.assert(node.parent.kind === 286); return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; }); } return node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : ts.emptyArray); @@ -10584,14 +8217,9 @@ var ts; return ts.flatMap(ts.getJSDocTags(node), function (tag) { return isNonTypeAliasTemplate(tag) ? tag.typeParameters : undefined; }); } ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations; - /** template tags are only available when a typedef isn't already using them */ function isNonTypeAliasTemplate(tag) { - return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 286 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias)); + return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 286 && tag.parent.tags.some(isJSDocTypeAlias)); } - /** - * Gets the effective type annotation of the value parameter of a set accessor. If the node - * was parsed in a JavaScript file, gets the type annotation from JSDoc. - */ function getEffectiveSetAccessorTypeAnnotationNode(node) { var parameter = getSetAccessorValueParameter(node); return parameter && getEffectiveTypeAnnotationNode(parameter); @@ -10602,7 +8230,6 @@ var ts; } ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments; function emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, pos, leadingComments) { - // If the leading comments start on different line than the start of node, write new line if (leadingComments && leadingComments.length && pos !== leadingComments[0].pos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) { writer.writeLine(); @@ -10610,7 +8237,6 @@ var ts; } ts.emitNewLineBeforeLeadingCommentsOfPosition = emitNewLineBeforeLeadingCommentsOfPosition; function emitNewLineBeforeLeadingCommentOfPosition(lineMap, writer, pos, commentPos) { - // If the leading comments start on different line than the start of node, write new line if (pos !== commentPos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, commentPos)) { writer.writeLine(); @@ -10643,25 +8269,15 @@ var ts; } } ts.emitComments = emitComments; - /** - * Detached comment is a comment at the top of file or function body that is separated from - * the next statement by space. - */ function emitDetachedComments(text, lineMap, writer, writeComment, node, newLine, removeComments) { var leadingComments; var currentDetachedCommentInfo; if (removeComments) { - // removeComments is true, only reserve pinned comment at the top of file - // For example: - // /*! Pinned Comment */ - // - // var x = 10; if (node.pos === 0) { leadingComments = ts.filter(ts.getLeadingCommentRanges(text, node.pos), isPinnedCommentLocal); } } else { - // removeComments is false, just get detached as normal and bypass the process to filter comment leadingComments = ts.getLeadingCommentRanges(text, node.pos); } if (leadingComments) { @@ -10673,9 +8289,6 @@ var ts; var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, lastComment.end); var commentLine = getLineOfLocalPositionFromLineMap(lineMap, comment.pos); if (commentLine >= lastCommentLine + 2) { - // There was a blank line between the last comment and this comment. This - // comment is not part of the copyright comments. Return what we have so - // far. break; } } @@ -10683,15 +8296,11 @@ var ts; lastComment = comment; } if (detachedComments.length) { - // All comments look like they could have been part of the copyright header. Make - // sure there is at least one blank line between it and the node. If not, it's not - // a copyright header. var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, ts.last(detachedComments).end); var nodeLine = getLineOfLocalPositionFromLineMap(lineMap, ts.skipTrivia(text, node.pos)); if (nodeLine >= lastCommentLine + 2) { - // Valid detachedComments emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments); - emitComments(text, lineMap, writer, detachedComments, /*leadingSeparator*/ false, /*trailingSeparator*/ true, newLine, writeComment); + emitComments(text, lineMap, writer, detachedComments, false, true, newLine, writeComment); currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.last(detachedComments).end }; } } @@ -10703,7 +8312,7 @@ var ts; } ts.emitDetachedComments = emitDetachedComments; function writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine) { - if (text.charCodeAt(commentPos + 1) === 42 /* asterisk */) { + if (text.charCodeAt(commentPos + 1) === 42) { var firstCommentLineAndCharacter = ts.computeLineAndCharacterOfPosition(lineMap, commentPos); var lineCount = lineMap.length; var firstCommentLineIndent = void 0; @@ -10712,50 +8321,29 @@ var ts; ? text.length + 1 : lineMap[currentLine + 1]; if (pos !== commentPos) { - // If we are not emitting first line, we need to write the spaces to adjust the alignment if (firstCommentLineIndent === undefined) { firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], commentPos); } - // These are number of spaces writer is going to write at current indent var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); - // Number of spaces we want to be writing - // eg: Assume writer indent - // module m { - // /* starts at character 9 this is line 1 - // * starts at character pos 4 line --1 = 8 - 8 + 3 - // More left indented comment */ --2 = 8 - 8 + 2 - // class c { } - // } - // module m { - // /* this is line 1 -- Assume current writer indent 8 - // * line --3 = 8 - 4 + 5 - // More right indented comment */ --4 = 8 - 4 + 11 - // class c { } - // } var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(text, pos, nextLineStart); if (spacesToEmit > 0) { var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); - // Write indent size string ( in eg 1: = "", 2: "" , 3: string with 8 spaces 4: string with 12 spaces writer.rawWrite(indentSizeSpaceString); - // Emit the single spaces (in eg: 1: 3 spaces, 2: 2 spaces, 3: 1 space, 4: 3 spaces) while (numberOfSingleSpacesToEmit) { writer.rawWrite(" "); numberOfSingleSpacesToEmit--; } } else { - // No spaces to emit write empty string writer.rawWrite(""); } } - // Write the comment line text writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart); pos = nextLineStart; } } else { - // Single line comment of style //.... writer.write(text.substring(commentPos, commentEnd)); } } @@ -10764,33 +8352,29 @@ var ts; var end = Math.min(commentEnd, nextLineStart - 1); var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, ""); if (currentLineText) { - // trimmed forward and ending spaces text writer.write(currentLineText); if (end !== commentEnd) { writer.writeLine(); } } else { - // Empty string - make sure we write empty line writer.writeLiteral(newLine); } } function calculateIndent(text, pos, end) { var currentLineIndent = 0; for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { - if (text.charCodeAt(pos) === 9 /* tab */) { - // Tabs = TabSize = indent size and go to next tabStop + if (text.charCodeAt(pos) === 9) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } else { - // Single space currentLineIndent++; } } return currentLineIndent; } function hasModifiers(node) { - return getModifierFlags(node) !== 0 /* None */; + return getModifierFlags(node) !== 0; } ts.hasModifiers = hasModifiers; function hasModifier(node, flags) { @@ -10798,11 +8382,11 @@ var ts; } ts.hasModifier = hasModifier; function hasStaticModifier(node) { - return hasModifier(node, 32 /* Static */); + return hasModifier(node, 32); } ts.hasStaticModifier = hasStaticModifier; function hasReadonlyModifier(node) { - return hasModifier(node, 64 /* Readonly */); + return hasModifier(node, 64); } ts.hasReadonlyModifier = hasReadonlyModifier; function getSelectedModifierFlags(node, flags) { @@ -10810,59 +8394,58 @@ var ts; } ts.getSelectedModifierFlags = getSelectedModifierFlags; function getModifierFlags(node) { - if (node.modifierFlagsCache & 536870912 /* HasComputedFlags */) { - return node.modifierFlagsCache & ~536870912 /* HasComputedFlags */; + if (node.modifierFlagsCache & 536870912) { + return node.modifierFlagsCache & ~536870912; } var flags = getModifierFlagsNoCache(node); - node.modifierFlagsCache = flags | 536870912 /* HasComputedFlags */; + node.modifierFlagsCache = flags | 536870912; return flags; } ts.getModifierFlags = getModifierFlags; function getModifierFlagsNoCache(node) { - var flags = 0 /* None */; + var flags = 0; if (node.modifiers) { for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; flags |= modifierToFlag(modifier.kind); } } - if (node.flags & 4 /* NestedNamespace */ || (node.kind === 71 /* Identifier */ && node.isInJSDocNamespace)) { - flags |= 1 /* Export */; + if (node.flags & 4 || (node.kind === 71 && node.isInJSDocNamespace)) { + flags |= 1; } return flags; } ts.getModifierFlagsNoCache = getModifierFlagsNoCache; function modifierToFlag(token) { switch (token) { - case 115 /* StaticKeyword */: return 32 /* Static */; - case 114 /* PublicKeyword */: return 4 /* Public */; - case 113 /* ProtectedKeyword */: return 16 /* Protected */; - case 112 /* PrivateKeyword */: return 8 /* Private */; - case 117 /* AbstractKeyword */: return 128 /* Abstract */; - case 84 /* ExportKeyword */: return 1 /* Export */; - case 124 /* DeclareKeyword */: return 2 /* Ambient */; - case 76 /* ConstKeyword */: return 2048 /* Const */; - case 79 /* DefaultKeyword */: return 512 /* Default */; - case 120 /* AsyncKeyword */: return 256 /* Async */; - case 132 /* ReadonlyKeyword */: return 64 /* Readonly */; + case 115: return 32; + case 114: return 4; + case 113: return 16; + case 112: return 8; + case 117: return 128; + case 84: return 1; + case 124: return 2; + case 76: return 2048; + case 79: return 512; + case 120: return 256; + case 132: return 64; } - return 0 /* None */; + return 0; } ts.modifierToFlag = modifierToFlag; function isLogicalOperator(token) { - return token === 54 /* BarBarToken */ - || token === 53 /* AmpersandAmpersandToken */ - || token === 51 /* ExclamationToken */; + return token === 54 + || token === 53 + || token === 51; } ts.isLogicalOperator = isLogicalOperator; function isAssignmentOperator(token) { - return token >= 58 /* FirstAssignment */ && token <= 70 /* LastAssignment */; + return token >= 58 && token <= 70; } ts.isAssignmentOperator = isAssignmentOperator; - /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */ function tryGetClassExtendingExpressionWithTypeArguments(node) { if (ts.isExpressionWithTypeArguments(node) && - node.parent.token === 85 /* ExtendsKeyword */ && + node.parent.token === 85 && ts.isClassLike(node.parent.parent)) { return node.parent.parent; } @@ -10871,16 +8454,16 @@ var ts; function isAssignmentExpression(node, excludeCompoundAssignment) { return ts.isBinaryExpression(node) && (excludeCompoundAssignment - ? node.operatorToken.kind === 58 /* EqualsToken */ + ? node.operatorToken.kind === 58 : isAssignmentOperator(node.operatorToken.kind)) && ts.isLeftHandSideExpression(node.left); } ts.isAssignmentExpression = isAssignmentExpression; function isDestructuringAssignment(node) { - if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) { + if (isAssignmentExpression(node, true)) { var kind = node.left.kind; - return kind === 184 /* ObjectLiteralExpression */ - || kind === 183 /* ArrayLiteralExpression */; + return kind === 184 + || kind === 183; } return false; } @@ -10890,16 +8473,16 @@ var ts; } ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause; function isExpressionWithTypeArgumentsInClassImplementsClause(node) { - return node.kind === 207 /* ExpressionWithTypeArguments */ + return node.kind === 207 && isEntityNameExpression(node.expression) && node.parent - && node.parent.token === 108 /* ImplementsKeyword */ + && node.parent.token === 108 && node.parent.parent && ts.isClassLike(node.parent.parent); } ts.isExpressionWithTypeArgumentsInClassImplementsClause = isExpressionWithTypeArgumentsInClassImplementsClause; function isEntityNameExpression(node) { - return node.kind === 71 /* Identifier */ || isPropertyAccessEntityNameExpression(node); + return node.kind === 71 || isPropertyAccessEntityNameExpression(node); } ts.isEntityNameExpression = isEntityNameExpression; function isPropertyAccessEntityNameExpression(node) { @@ -10911,17 +8494,17 @@ var ts; } ts.isPrototypeAccess = isPrototypeAccess; function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 146 /* QualifiedName */ && node.parent.right === node) || - (node.parent.kind === 185 /* PropertyAccessExpression */ && node.parent.name === node); + return (node.parent.kind === 146 && node.parent.right === node) || + (node.parent.kind === 185 && node.parent.name === node); } ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; function isEmptyObjectLiteral(expression) { - return expression.kind === 184 /* ObjectLiteralExpression */ && + return expression.kind === 184 && expression.properties.length === 0; } ts.isEmptyObjectLiteral = isEmptyObjectLiteral; function isEmptyArrayLiteral(expression) { - return expression.kind === 183 /* ArrayLiteralExpression */ && + return expression.kind === 183 && expression.elements.length === 0; } ts.isEmptyArrayLiteral = isEmptyArrayLiteral; @@ -10930,23 +8513,17 @@ var ts; } ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault; function isExportDefaultSymbol(symbol) { - return symbol && ts.length(symbol.declarations) > 0 && hasModifier(symbol.declarations[0], 512 /* Default */); + return symbol && ts.length(symbol.declarations) > 0 && hasModifier(symbol.declarations[0], 512); } - /** Return ".ts", ".d.ts", or ".tsx", if that is the extension. */ function tryExtractTypeScriptExtension(fileName) { return ts.find(ts.supportedTypescriptExtensionsForExtractExtension, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.tryExtractTypeScriptExtension = tryExtractTypeScriptExtension; - /** - * Replace each instance of non-ascii characters by one, two, three, or four escape sequences - * representing the UTF-8 encoding of the character, and return the expanded char code list. - */ function getExpandedCharCodes(input) { var output = []; var length = input.length; for (var i = 0; i < length; i++) { var charCode = input.charCodeAt(i); - // handle utf8 if (charCode < 0x80) { output.push(charCode); } @@ -10972,9 +8549,6 @@ var ts; return output; } var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - /** - * Converts a string to a base-64 encoded ASCII string. - */ function convertToBase64(input) { var result = ""; var charCodes = getExpandedCharCodes(input); @@ -10982,21 +8556,16 @@ var ts; var length = charCodes.length; var byte1, byte2, byte3, byte4; while (i < length) { - // Convert every 6-bits in the input 3 character points - // into a base64 digit byte1 = charCodes[i] >> 2; byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4; byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6; byte4 = charCodes[i + 2] & 63; - // We are out of characters in the input, set the extra - // digits to 64 (padding character). if (i + 1 >= length) { byte3 = byte4 = 64; } else if (i + 2 >= length) { byte4 = 64; } - // Write to the output result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4); i += 3; } @@ -11022,12 +8591,9 @@ var ts; i++; nextCode = codes[i]; } - // `value` may be greater than 10FFFF (the maximum unicode codepoint) - JS will just make this into an invalid character for us output += String.fromCharCode(value); } else { - // We don't want to kill the process when decoding fails (due to a following char byte not - // following a leading char), so we just print the (bad) value output += String.fromCharCode(charCode); i++; } @@ -11049,11 +8615,9 @@ var ts; var expandedCharCodes = []; var i = 0; while (i < length) { - // Stop decoding once padding characters are present if (input.charCodeAt(i) === base64Digits.charCodeAt(64)) { break; } - // convert 4 input digits into three characters, ignoring padding characters at the end var ch1 = base64Digits.indexOf(input[i]); var ch2 = base64Digits.indexOf(input[i + 1]); var ch3 = base64Digits.indexOf(input[i + 2]); @@ -11061,10 +8625,10 @@ var ts; var code1 = ((ch1 & 63) << 2) | ((ch2 >> 4) & 3); var code2 = ((ch2 & 15) << 4) | ((ch3 >> 2) & 15); var code3 = ((ch3 & 3) << 6) | (ch4 & 63); - if (code2 === 0 && ch3 !== 0) { // code2 decoded to zero, but ch3 was padding - elide code2 and code3 + if (code2 === 0 && ch3 !== 0) { expandedCharCodes.push(code1); } - else if (code3 === 0 && ch4 !== 0) { // code3 decoded to zero, but ch4 was padding, elide code3 + else if (code3 === 0 && ch4 !== 0) { expandedCharCodes.push(code1, code2); } else { @@ -11079,17 +8643,14 @@ var ts; var lineFeed = "\n"; function getNewLineCharacter(options, getNewLine) { switch (options.newLine) { - case 0 /* CarriageReturnLineFeed */: + case 0: return carriageReturnLineFeed; - case 1 /* LineFeed */: + case 1: return lineFeed; } return getNewLine ? getNewLine() : ts.sys ? ts.sys.newLine : carriageReturnLineFeed; } ts.getNewLineCharacter = getNewLineCharacter; - /** - * Formats an enum value as a string for debugging and debug assertions. - */ function formatEnum(value, enumObject, isFlags) { if (value === void 0) { value = 0; } var members = getEnumMembers(enumObject); @@ -11131,96 +8692,61 @@ var ts; return ts.stableSort(result, function (x, y) { return ts.compareValues(x[0], y[0]); }); } function formatSyntaxKind(kind) { - return formatEnum(kind, ts.SyntaxKind, /*isFlags*/ false); + return formatEnum(kind, ts.SyntaxKind, false); } ts.formatSyntaxKind = formatSyntaxKind; function formatModifierFlags(flags) { - return formatEnum(flags, ts.ModifierFlags, /*isFlags*/ true); + return formatEnum(flags, ts.ModifierFlags, true); } ts.formatModifierFlags = formatModifierFlags; function formatTransformFlags(flags) { - return formatEnum(flags, ts.TransformFlags, /*isFlags*/ true); + return formatEnum(flags, ts.TransformFlags, true); } ts.formatTransformFlags = formatTransformFlags; function formatEmitFlags(flags) { - return formatEnum(flags, ts.EmitFlags, /*isFlags*/ true); + return formatEnum(flags, ts.EmitFlags, true); } ts.formatEmitFlags = formatEmitFlags; function formatSymbolFlags(flags) { - return formatEnum(flags, ts.SymbolFlags, /*isFlags*/ true); + return formatEnum(flags, ts.SymbolFlags, true); } ts.formatSymbolFlags = formatSymbolFlags; function formatTypeFlags(flags) { - return formatEnum(flags, ts.TypeFlags, /*isFlags*/ true); + return formatEnum(flags, ts.TypeFlags, true); } ts.formatTypeFlags = formatTypeFlags; function formatObjectFlags(flags) { - return formatEnum(flags, ts.ObjectFlags, /*isFlags*/ true); + return formatEnum(flags, ts.ObjectFlags, true); } ts.formatObjectFlags = formatObjectFlags; - /** - * Creates a new TextRange from the provided pos and end. - * - * @param pos The start position. - * @param end The end position. - */ function createRange(pos, end) { return { pos: pos, end: end }; } ts.createRange = createRange; - /** - * Creates a new TextRange from a provided range with a new end position. - * - * @param range A TextRange. - * @param end The new end position. - */ function moveRangeEnd(range, end) { return createRange(range.pos, end); } ts.moveRangeEnd = moveRangeEnd; - /** - * Creates a new TextRange from a provided range with a new start position. - * - * @param range A TextRange. - * @param pos The new Start position. - */ function moveRangePos(range, pos) { return createRange(pos, range.end); } ts.moveRangePos = moveRangePos; - /** - * Moves the start position of a range past any decorators. - */ function moveRangePastDecorators(node) { return node.decorators && node.decorators.length > 0 ? moveRangePos(node, node.decorators.end) : node; } ts.moveRangePastDecorators = moveRangePastDecorators; - /** - * Moves the start position of a range past any decorators or modifiers. - */ function moveRangePastModifiers(node) { return node.modifiers && node.modifiers.length > 0 ? moveRangePos(node, node.modifiers.end) : moveRangePastDecorators(node); } ts.moveRangePastModifiers = moveRangePastModifiers; - /** - * Determines whether a TextRange has the same start and end positions. - * - * @param range A TextRange. - */ function isCollapsedRange(range) { return range.pos === range.end; } ts.isCollapsedRange = isCollapsedRange; - /** - * Creates a new TextRange for a token at the provides start position. - * - * @param pos The start position. - * @param token The token. - */ function createTokenRange(pos, token) { return createRange(pos, pos + ts.tokenToString(token).length); } @@ -11254,16 +8780,12 @@ var ts; return ts.positionIsSynthesized(range.pos) ? -1 : ts.skipTrivia(sourceFile.text, range.pos); } ts.getStartPositionOfRange = getStartPositionOfRange; - /** - * Determines whether a name was originally the declaration name of an enum or namespace - * declaration. - */ function isDeclarationNameOfEnumOrNamespace(node) { var parseNode = ts.getParseTreeNode(node); if (parseNode) { switch (parseNode.parent.kind) { - case 238 /* EnumDeclaration */: - case 239 /* ModuleDeclaration */: + case 238: + case 239: return parseNode === parseNode.parent.name; } } @@ -11278,7 +8800,6 @@ var ts; return node.initializer !== undefined; } function isWatchSet(options) { - // Firefox has Object.prototype.watch return options.watch && options.hasOwnProperty("watch"); } ts.isWatchSet = isWatchSet; @@ -11287,74 +8808,63 @@ var ts; } ts.closeFileWatcher = closeFileWatcher; function getCheckFlags(symbol) { - return symbol.flags & 33554432 /* Transient */ ? symbol.checkFlags : 0; + return symbol.flags & 33554432 ? symbol.checkFlags : 0; } ts.getCheckFlags = getCheckFlags; function getDeclarationModifierFlagsFromSymbol(s) { if (s.valueDeclaration) { var flags = ts.getCombinedModifierFlags(s.valueDeclaration); - return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */; + return s.parent && s.parent.flags & 32 ? flags : flags & ~28; } - if (getCheckFlags(s) & 6 /* Synthetic */) { + if (getCheckFlags(s) & 6) { var checkFlags = s.checkFlags; - var accessModifier = checkFlags & 256 /* ContainsPrivate */ ? 8 /* Private */ : - checkFlags & 64 /* ContainsPublic */ ? 4 /* Public */ : - 16 /* Protected */; - var staticModifier = checkFlags & 512 /* ContainsStatic */ ? 32 /* Static */ : 0; + var accessModifier = checkFlags & 256 ? 8 : + checkFlags & 64 ? 4 : + 16; + var staticModifier = checkFlags & 512 ? 32 : 0; return accessModifier | staticModifier; } - if (s.flags & 4194304 /* Prototype */) { - return 4 /* Public */ | 32 /* Static */; + if (s.flags & 4194304) { + return 4 | 32; } return 0; } ts.getDeclarationModifierFlagsFromSymbol = getDeclarationModifierFlagsFromSymbol; function skipAlias(symbol, checker) { - return symbol.flags & 2097152 /* Alias */ ? checker.getAliasedSymbol(symbol) : symbol; + return symbol.flags & 2097152 ? checker.getAliasedSymbol(symbol) : symbol; } ts.skipAlias = skipAlias; - /** See comment on `declareModuleMember` in `binder.ts`. */ function getCombinedLocalAndExportSymbolFlags(symbol) { return symbol.exportSymbol ? symbol.exportSymbol.flags | symbol.flags : symbol.flags; } ts.getCombinedLocalAndExportSymbolFlags = getCombinedLocalAndExportSymbolFlags; function isWriteOnlyAccess(node) { - return accessKind(node) === 1 /* Write */; + return accessKind(node) === 1; } ts.isWriteOnlyAccess = isWriteOnlyAccess; function isWriteAccess(node) { - return accessKind(node) !== 0 /* Read */; + return accessKind(node) !== 0; } ts.isWriteAccess = isWriteAccess; - var AccessKind; - (function (AccessKind) { - /** Only reads from a variable. */ - AccessKind[AccessKind["Read"] = 0] = "Read"; - /** Only writes to a variable without using the result. E.g.: `x++;`. */ - AccessKind[AccessKind["Write"] = 1] = "Write"; - /** Writes to a variable and uses the result as an expression. E.g.: `f(x++);`. */ - AccessKind[AccessKind["ReadWrite"] = 2] = "ReadWrite"; - })(AccessKind || (AccessKind = {})); function accessKind(node) { var parent = node.parent; if (!parent) - return 0 /* Read */; + return 0; switch (parent.kind) { - case 199 /* PostfixUnaryExpression */: - case 198 /* PrefixUnaryExpression */: + case 199: + case 198: var operator = parent.operator; - return operator === 43 /* PlusPlusToken */ || operator === 44 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */; - case 200 /* BinaryExpression */: + return operator === 43 || operator === 44 ? writeOrReadWrite() : 0; + case 200: var _a = parent, left = _a.left, operatorToken = _a.operatorToken; - return left === node && isAssignmentOperator(operatorToken.kind) ? writeOrReadWrite() : 0 /* Read */; - case 185 /* PropertyAccessExpression */: - return parent.name !== node ? 0 /* Read */ : accessKind(parent); + return left === node && isAssignmentOperator(operatorToken.kind) ? writeOrReadWrite() : 0; + case 185: + return parent.name !== node ? 0 : accessKind(parent); default: - return 0 /* Read */; + return 0; } function writeOrReadWrite() { - // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect. - return parent.parent && parent.parent.kind === 216 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */; + return parent.parent && parent.parent.kind === 216 ? 1 : 2; } } function compareDataObjects(dst, src) { @@ -11376,43 +8886,30 @@ var ts; return true; } ts.compareDataObjects = compareDataObjects; - /** - * clears already present map by calling onDeleteExistingValue callback before deleting that key/value - */ function clearMap(map, onDeleteValue) { - // Remove all map.forEach(onDeleteValue); map.clear(); } ts.clearMap = clearMap; - /** - * Mutates the map with newMap such that keys in map will be same as newMap. - */ function mutateMap(map, newMap, options) { var createNewValue = options.createNewValue, onDeleteValue = options.onDeleteValue, onExistingValue = options.onExistingValue; - // Needs update map.forEach(function (existingValue, key) { var valueInNewMap = newMap.get(key); - // Not present any more in new map, remove it if (valueInNewMap === undefined) { map.delete(key); onDeleteValue(existingValue, key); } - // If present notify about existing values else if (onExistingValue) { onExistingValue(existingValue, valueInNewMap, key); } }); - // Add new values that are not already present newMap.forEach(function (valueInNewMap, key) { if (!map.has(key)) { - // New values map.set(key, createNewValue(key, valueInNewMap)); } }); } ts.mutateMap = mutateMap; - /** Calls `callback` on `directory` and every ancestor directory it has, returning the first defined result. */ function forEachAncestorDirectory(directory, callback) { while (true) { var result = callback(directory); @@ -11427,15 +8924,14 @@ var ts; } } ts.forEachAncestorDirectory = forEachAncestorDirectory; - // Return true if the given type is the constructor type for an abstract class function isAbstractConstructorType(type) { - return !!(getObjectFlags(type) & 16 /* Anonymous */) && !!type.symbol && isAbstractConstructorSymbol(type.symbol); + return !!(getObjectFlags(type) & 16) && !!type.symbol && isAbstractConstructorSymbol(type.symbol); } ts.isAbstractConstructorType = isAbstractConstructorType; function isAbstractConstructorSymbol(symbol) { - if (symbol.flags & 32 /* Class */) { + if (symbol.flags & 32) { var declaration = getClassLikeDeclarationOfSymbol(symbol); - return !!declaration && hasModifier(declaration, 128 /* Abstract */); + return !!declaration && hasModifier(declaration, 128); } return false; } @@ -11445,11 +8941,11 @@ var ts; } ts.getClassLikeDeclarationOfSymbol = getClassLikeDeclarationOfSymbol; function getObjectFlags(type) { - return type.flags & 131072 /* Object */ ? type.objectFlags : 0; + return type.flags & 131072 ? type.objectFlags : 0; } ts.getObjectFlags = getObjectFlags; function typeHasCallOrConstructSignatures(type, checker) { - return checker.getSignaturesOfType(type, 0 /* Call */).length !== 0 || checker.getSignaturesOfType(type, 1 /* Construct */).length !== 0; + return checker.getSignaturesOfType(type, 0).length !== 0 || checker.getSignaturesOfType(type, 1).length !== 0; } ts.typeHasCallOrConstructSignatures = typeHasCallOrConstructSignatures; function forSomeAncestorDirectory(directory, callback) { @@ -11471,7 +8967,6 @@ var ts; if (nodeIsPresent(child)) lastChild = child; }, function (children) { - // As an optimization, jump straight to the end of the list. for (var i = children.length - 1; i >= 0; i--) { if (nodeIsPresent(children[i])) { lastChild = children[i]; @@ -11500,14 +8995,14 @@ var ts; (function (ts) { function getDefaultLibFileName(options) { switch (options.target) { - case 6 /* ESNext */: + case 6: return "lib.esnext.full.d.ts"; - case 4 /* ES2017 */: + case 4: return "lib.es2017.full.d.ts"; - case 3 /* ES2016 */: + case 3: return "lib.es2016.full.d.ts"; - case 2 /* ES2015 */: - return "lib.es6.d.ts"; // We don't use lib.es2015.full.d.ts due to breaking change. + case 2: + return "lib.es6.d.ts"; default: return "lib.d.ts"; } @@ -11525,7 +9020,6 @@ var ts; return position >= span.start && position < textSpanEnd(span); } ts.textSpanContainsPosition = textSpanContainsPosition; - // Returns true if 'span' contains 'other'. function textSpanContainsTextSpan(span, other) { return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); } @@ -11573,7 +9067,6 @@ var ts; return { start: start, length: length }; } ts.createTextSpan = createTextSpan; - /* @internal */ function createTextRange(pos, end) { if (end === void 0) { end = pos; } ts.Debug.assert(end >= pos); @@ -11600,14 +9093,6 @@ var ts; } ts.createTextChangeRange = createTextChangeRange; ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0); - /** - * Called to merge all the changes that occurred across several versions of a script snapshot - * into a single change. i.e. if a user keeps making successive edits to a script we will - * have a text change from V1 to V2, V2 to V3, ..., Vn. - * - * This function will then merge those changes into a single change range valid between V1 and - * Vn. - */ function collapseTextChangeRangesAcrossMultipleVersions(changes) { if (changes.length === 0) { return ts.unchangedTextChangeRange; @@ -11615,93 +9100,12 @@ var ts; if (changes.length === 1) { return changes[0]; } - // We change from talking about { { oldStart, oldLength }, newLength } to { oldStart, oldEnd, newEnd } - // as it makes things much easier to reason about. var change0 = changes[0]; var oldStartN = change0.span.start; var oldEndN = textSpanEnd(change0.span); var newEndN = oldStartN + change0.newLength; for (var i = 1; i < changes.length; i++) { var nextChange = changes[i]; - // Consider the following case: - // i.e. two edits. The first represents the text change range { { 10, 50 }, 30 }. i.e. The span starting - // at 10, with length 50 is reduced to length 30. The second represents the text change range { { 30, 30 }, 40 }. - // i.e. the span starting at 30 with length 30 is increased to length 40. - // - // 0 10 20 30 40 50 60 70 80 90 100 - // ------------------------------------------------------------------------------------------------------- - // | / - // | /---- - // T1 | /---- - // | /---- - // | /---- - // ------------------------------------------------------------------------------------------------------- - // | \ - // | \ - // T2 | \ - // | \ - // | \ - // ------------------------------------------------------------------------------------------------------- - // - // Merging these turns out to not be too difficult. First, determining the new start of the change is trivial - // it's just the min of the old and new starts. i.e.: - // - // 0 10 20 30 40 50 60 70 80 90 100 - // ------------------------------------------------------------*------------------------------------------ - // | / - // | /---- - // T1 | /---- - // | /---- - // | /---- - // ----------------------------------------$-------------------$------------------------------------------ - // . | \ - // . | \ - // T2 . | \ - // . | \ - // . | \ - // ----------------------------------------------------------------------*-------------------------------- - // - // (Note the dots represent the newly inferred start. - // Determining the new and old end is also pretty simple. Basically it boils down to paying attention to the - // absolute positions at the asterisks, and the relative change between the dollar signs. Basically, we see - // which if the two $'s precedes the other, and we move that one forward until they line up. in this case that - // means: - // - // 0 10 20 30 40 50 60 70 80 90 100 - // --------------------------------------------------------------------------------*---------------------- - // | / - // | /---- - // T1 | /---- - // | /---- - // | /---- - // ------------------------------------------------------------$------------------------------------------ - // . | \ - // . | \ - // T2 . | \ - // . | \ - // . | \ - // ----------------------------------------------------------------------*-------------------------------- - // - // In other words (in this case), we're recognizing that the second edit happened after where the first edit - // ended with a delta of 20 characters (60 - 40). Thus, if we go back in time to where the first edit started - // that's the same as if we started at char 80 instead of 60. - // - // As it so happens, the same logic applies if the second edit precedes the first edit. In that case rather - // than pushing the first edit forward to match the second, we'll push the second edit forward to match the - // first. - // - // In this case that means we have { oldStart: 10, oldEnd: 80, newEnd: 70 } or, in TextChangeRange - // semantics: { { start: 10, length: 70 }, newLength: 60 } - // - // The math then works out as follows. - // If we have { oldStart1, oldEnd1, newEnd1 } and { oldStart2, oldEnd2, newEnd2 } then we can compute the - // final result like so: - // - // { - // oldStart3: Min(oldStart1, oldStart2), - // oldEnd3: Max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)), - // newEnd3: Max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)) - // } var oldStart1 = oldStartN; var oldEnd1 = oldEndN; var newEnd1 = newEndN; @@ -11712,13 +9116,13 @@ var ts; oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); } - return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), /*newLength*/ newEndN - oldStartN); + return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN); } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { - if (d && d.kind === 148 /* TypeParameter */) { + if (d && d.kind === 148) { for (var current = d; current; current = current.parent) { - if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 236 /* InterfaceDeclaration */) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 236) { return current; } } @@ -11726,7 +9130,7 @@ var ts; } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { - return ts.hasModifier(node, 92 /* ParameterPropertyModifier */) && node.parent.kind === 155 /* Constructor */; + return ts.hasModifier(node, 92) && node.parent.kind === 155; } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function isEmptyBindingPattern(node) { @@ -11744,7 +9148,7 @@ var ts; } ts.isEmptyBindingElement = isEmptyBindingElement; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 182 /* BindingElement */ || ts.isBindingPattern(node))) { + while (node && (node.kind === 182 || ts.isBindingPattern(node))) { node = node.parent; } return node; @@ -11752,46 +9156,35 @@ var ts; function getCombinedModifierFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = ts.getModifierFlags(node); - if (node.kind === 232 /* VariableDeclaration */) { + if (node.kind === 232) { node = node.parent; } - if (node && node.kind === 233 /* VariableDeclarationList */) { + if (node && node.kind === 233) { flags |= ts.getModifierFlags(node); node = node.parent; } - if (node && node.kind === 214 /* VariableStatement */) { + if (node && node.kind === 214) { flags |= ts.getModifierFlags(node); } return flags; } ts.getCombinedModifierFlags = getCombinedModifierFlags; - // Returns the node flags for this node and all relevant parent nodes. This is done so that - // nodes like variable declarations and binding elements can returned a view of their flags - // that includes the modifiers from their container. i.e. flags like export/declare aren't - // stored on the variable declaration directly, but on the containing variable statement - // (if it has one). Similarly, flags for let/const are store on the variable declaration - // list. By calling this function, all those flags are combined so that the client can treat - // the node as if it actually had those flags. function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 232 /* VariableDeclaration */) { + if (node.kind === 232) { node = node.parent; } - if (node && node.kind === 233 /* VariableDeclarationList */) { + if (node && node.kind === 233) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 214 /* VariableStatement */) { + if (node && node.kind === 214) { flags |= node.flags; } 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) { @@ -11802,12 +9195,9 @@ var ts; } 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); + trySetLanguageAndTerritory(language, undefined, errors); } - // Set the UI locale for string collation ts.setUILocale(locale); function trySetLanguageAndTerritory(language, territory, errors) { var compilerFilePath = ts.normalizePath(sys.getExecutingFilePath()); @@ -11820,7 +9210,6 @@ var ts; if (!sys.fileExists(filePath)) { return false; } - // TODO: Add codePage support for readFile? var fileContents = ""; try { fileContents = sys.readFile(filePath); @@ -11832,7 +9221,6 @@ var ts; return false; } try { - // tslint:disable-next-line no-unnecessary-qualifier (making clear this is a global mutation!) ts.localizedDiagnosticMessages = JSON.parse(fileContents); } catch (_a) { @@ -11854,13 +9242,8 @@ var ts; return !nodeTest || nodeTest(node) ? node : undefined; } ts.getOriginalNode = getOriginalNode; - /** - * Gets a value indicating whether a node originated in the parse tree. - * - * @param node The node to test. - */ function isParseTreeNode(node) { - return (node.flags & 8 /* Synthesized */) === 0; + return (node.flags & 8) === 0; } ts.isParseTreeNode = isParseTreeNode; function getParseTreeNode(node, nodeTest) { @@ -11874,15 +9257,9 @@ var ts; return undefined; } ts.getParseTreeNode = getParseTreeNode; - /** - * Remove extra underscore from escaped identifier text content. - * - * @param identifier The escaped identifier text. - * @returns The unescaped identifier text. - */ function unescapeLeadingUnderscores(identifier) { var id = identifier; - return id.length >= 3 && id.charCodeAt(0) === 95 /* _ */ && id.charCodeAt(1) === 95 /* _ */ && id.charCodeAt(2) === 95 /* _ */ ? id.substr(1) : id; + return id.length >= 3 && id.charCodeAt(0) === 95 && id.charCodeAt(1) === 95 && id.charCodeAt(2) === 95 ? id.substr(1) : id; } ts.unescapeLeadingUnderscores = unescapeLeadingUnderscores; function idText(identifier) { @@ -11893,55 +9270,42 @@ var ts; return unescapeLeadingUnderscores(symbol.escapedName); } ts.symbolName = symbolName; - /** - * Remove extra underscore from escaped identifier text content. - * @deprecated Use `id.text` for the unescaped text. - * @param identifier The escaped identifier text. - * @returns The unescaped identifier text. - */ function unescapeIdentifier(id) { return id; } ts.unescapeIdentifier = unescapeIdentifier; - /** - * A JSDocTypedef tag has an _optional_ name field - if a name is not directly present, we should - * attempt to draw the name from the node the declaration is on (as that declaration is what its' symbol - * will be merged with) - */ function nameForNamelessJSDocTypedef(declaration) { var hostNode = declaration.parent.parent; if (!hostNode) { return undefined; } - // Covers classes, functions - any named declaration host node if (ts.isDeclaration(hostNode)) { return getDeclarationIdentifier(hostNode); } - // Covers remaining cases switch (hostNode.kind) { - case 214 /* VariableStatement */: + case 214: if (hostNode.declarationList && hostNode.declarationList.declarations[0]) { return getDeclarationIdentifier(hostNode.declarationList.declarations[0]); } return undefined; - case 216 /* ExpressionStatement */: + case 216: var expr = hostNode.expression; switch (expr.kind) { - case 185 /* PropertyAccessExpression */: + case 185: return expr.name; - case 186 /* ElementAccessExpression */: + case 186: var arg = expr.argumentExpression; if (ts.isIdentifier(arg)) { return arg; } } return undefined; - case 1 /* EndOfFileToken */: + case 1: return undefined; - case 191 /* ParenthesizedExpression */: { + case 191: { return getDeclarationIdentifier(hostNode.expression); } - case 228 /* LabeledStatement */: { + case 228: { if (ts.isDeclaration(hostNode.statement) || ts.isExpression(hostNode.statement)) { return getDeclarationIdentifier(hostNode.statement); } @@ -11959,50 +9323,48 @@ var ts; return declaration.name || nameForNamelessJSDocTypedef(declaration); } ts.getNameOfJSDocTypedef = getNameOfJSDocTypedef; - /** @internal */ function isNamedDeclaration(node) { - return !!node.name; // A 'name' property should always be a DeclarationName. + return !!node.name; } ts.isNamedDeclaration = isNamedDeclaration; - // TODO: GH#18217 This is often used as if it returns a defined result function getNameOfDeclaration(declaration) { if (!declaration) { return undefined; } switch (declaration.kind) { - case 205 /* ClassExpression */: - case 192 /* FunctionExpression */: + case 205: + case 192: if (!declaration.name) { return getAssignedName(declaration); } break; - case 71 /* Identifier */: + case 71: return declaration; - case 298 /* JSDocPropertyTag */: - case 293 /* JSDocParameterTag */: { + case 298: + case 293: { var name = declaration.name; - if (name.kind === 146 /* QualifiedName */) { + if (name.kind === 146) { return name.right; } break; } - case 200 /* BinaryExpression */: { + case 200: { var expr = declaration; switch (ts.getSpecialPropertyAssignmentKind(expr)) { - case 1 /* ExportsProperty */: - case 4 /* ThisProperty */: - case 5 /* Property */: - case 3 /* PrototypeProperty */: + case 1: + case 4: + case 5: + case 3: return expr.left.name; default: return undefined; } } - case 292 /* JSDocCallbackTag */: + case 292: return declaration.name; - case 297 /* JSDocTypedefTag */: + case 297: return getNameOfJSDocTypedef(declaration); - case 249 /* ExportAssignment */: { + case 249: { var expression = declaration.expression; return ts.isIdentifier(expression) ? expression : undefined; } @@ -12026,19 +9388,6 @@ var ts; } } } - /** - * Gets the JSDoc parameter tags for the node if present. - * - * @remarks Returns any JSDoc param tag that matches the provided - * parameter, whether a param tag on a containing function - * expression, or a param tag on a variable declaration whose - * initializer is the containing function. The tags closest to the - * node are returned first, so in the previous example, the param - * tag on the containing function expression would be first. - * - * Does not return tags for binding patterns, because JSDoc matches - * parameters by name and binding patterns do not have a name. - */ function getJSDocParameterTags(param) { if (param.name) { if (ts.isIdentifier(param.name)) { @@ -12054,43 +9403,30 @@ var ts; } } } - // return empty array for: out-of-order binding patterns and JSDoc function syntax, which has un-named parameters return ts.emptyArray; } ts.getJSDocParameterTags = getJSDocParameterTags; - /** - * Return true if the node has JSDoc parameter tags. - * - * @remarks Includes parameter tags that are not directly on the node, - * for example on a variable declaration whose initializer is a function expression. - */ function hasJSDocParameterTags(node) { return !!getFirstJSDocTag(node, ts.isJSDocParameterTag); } ts.hasJSDocParameterTags = hasJSDocParameterTags; - /** Gets the JSDoc augments tag for the node if present */ function getJSDocAugmentsTag(node) { return getFirstJSDocTag(node, ts.isJSDocAugmentsTag); } ts.getJSDocAugmentsTag = getJSDocAugmentsTag; - /** Gets the JSDoc class tag for the node if present */ function getJSDocClassTag(node) { return getFirstJSDocTag(node, ts.isJSDocClassTag); } ts.getJSDocClassTag = getJSDocClassTag; - /** Gets the JSDoc return tag for the node if present */ function getJSDocReturnTag(node) { return getFirstJSDocTag(node, ts.isJSDocReturnTag); } ts.getJSDocReturnTag = getJSDocReturnTag; - /** Gets the JSDoc template tag for the node if present */ function getJSDocTemplateTag(node) { return getFirstJSDocTag(node, ts.isJSDocTemplateTag); } ts.getJSDocTemplateTag = getJSDocTemplateTag; - /** Gets the JSDoc type tag for the node if present and valid */ function getJSDocTypeTag(node) { - // We should have already issued an error if there were multiple type jsdocs, so just use the first one. var tag = getFirstJSDocTag(node, ts.isJSDocTypeTag); if (tag && tag.typeExpression && tag.typeExpression.type) { return tag; @@ -12098,17 +9434,6 @@ var ts; return undefined; } ts.getJSDocTypeTag = getJSDocTypeTag; - /** - * Gets the type node for the node if provided via JSDoc. - * - * @remarks The search includes any JSDoc param tag that relates - * to the provided parameter, for example a type tag on the - * parameter itself, or a param tag on a containing function - * expression, or a param tag on a variable declaration whose - * initializer is the containing function. The tags closest to the - * node are examined first, so in the previous example, the type - * tag directly on the node would be returned. - */ function getJSDocType(node) { var tag = getFirstJSDocTag(node, ts.isJSDocTypeTag); if (!tag && ts.isParameter(node)) { @@ -12117,21 +9442,13 @@ var ts; return tag && tag.typeExpression && tag.typeExpression.type; } ts.getJSDocType = getJSDocType; - /** - * Gets the return type node for the node if provided via JSDoc's return tag. - * - * @remarks `getJSDocReturnTag` just gets the whole JSDoc tag. This function - * gets the type from inside the braces. - */ function getJSDocReturnType(node) { var returnTag = getJSDocReturnTag(node); return returnTag && returnTag.typeExpression && returnTag.typeExpression.type; } ts.getJSDocReturnType = getJSDocReturnType; - /** Get all JSDoc tags related to a node, including those on parent nodes. */ function getJSDocTags(node) { var tags = node.jsDocCache; - // If cache is 'null', that means we did the work of searching for JSDoc tags and came up with nothing. if (tags === undefined) { var comments = ts.getJSDocCommentsAndTags(node); ts.Debug.assert(comments.length < 2 || comments[0] !== comments[1]); @@ -12140,745 +9457,706 @@ var ts; return tags; } ts.getJSDocTags = getJSDocTags; - /** Get the first JSDoc tag of a specified kind, or undefined if not present. */ function getFirstJSDocTag(node, predicate) { return ts.find(getJSDocTags(node), predicate); } - /** Gets all JSDoc tags of a specified kind, or undefined if not present. */ function getAllJSDocTagsOfKind(node, kind) { return getJSDocTags(node).filter(function (doc) { return doc.kind === kind; }); } ts.getAllJSDocTagsOfKind = getAllJSDocTagsOfKind; })(ts || (ts = {})); -// Simple node tests of the form `node.kind === SyntaxKind.Foo`. (function (ts) { - // Literals function isNumericLiteral(node) { - return node.kind === 8 /* NumericLiteral */; + return node.kind === 8; } ts.isNumericLiteral = isNumericLiteral; function isStringLiteral(node) { - return node.kind === 9 /* StringLiteral */; + return node.kind === 9; } ts.isStringLiteral = isStringLiteral; function isJsxText(node) { - return node.kind === 10 /* JsxText */; + return node.kind === 10; } ts.isJsxText = isJsxText; function isRegularExpressionLiteral(node) { - return node.kind === 12 /* RegularExpressionLiteral */; + return node.kind === 12; } ts.isRegularExpressionLiteral = isRegularExpressionLiteral; function isNoSubstitutionTemplateLiteral(node) { - return node.kind === 13 /* NoSubstitutionTemplateLiteral */; + return node.kind === 13; } ts.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral; - // Pseudo-literals function isTemplateHead(node) { - return node.kind === 14 /* TemplateHead */; + return node.kind === 14; } ts.isTemplateHead = isTemplateHead; function isTemplateMiddle(node) { - return node.kind === 15 /* TemplateMiddle */; + return node.kind === 15; } ts.isTemplateMiddle = isTemplateMiddle; function isTemplateTail(node) { - return node.kind === 16 /* TemplateTail */; + return node.kind === 16; } ts.isTemplateTail = isTemplateTail; function isIdentifier(node) { - return node.kind === 71 /* Identifier */; + return node.kind === 71; } ts.isIdentifier = isIdentifier; - // Names function isQualifiedName(node) { - return node.kind === 146 /* QualifiedName */; + return node.kind === 146; } ts.isQualifiedName = isQualifiedName; function isComputedPropertyName(node) { - return node.kind === 147 /* ComputedPropertyName */; + return node.kind === 147; } ts.isComputedPropertyName = isComputedPropertyName; - // Signature elements function isTypeParameterDeclaration(node) { - return node.kind === 148 /* TypeParameter */; + return node.kind === 148; } ts.isTypeParameterDeclaration = isTypeParameterDeclaration; function isParameter(node) { - return node.kind === 149 /* Parameter */; + return node.kind === 149; } ts.isParameter = isParameter; function isDecorator(node) { - return node.kind === 150 /* Decorator */; + return node.kind === 150; } ts.isDecorator = isDecorator; - // TypeMember function isPropertySignature(node) { - return node.kind === 151 /* PropertySignature */; + return node.kind === 151; } ts.isPropertySignature = isPropertySignature; function isPropertyDeclaration(node) { - return node.kind === 152 /* PropertyDeclaration */; + return node.kind === 152; } ts.isPropertyDeclaration = isPropertyDeclaration; function isMethodSignature(node) { - return node.kind === 153 /* MethodSignature */; + return node.kind === 153; } ts.isMethodSignature = isMethodSignature; function isMethodDeclaration(node) { - return node.kind === 154 /* MethodDeclaration */; + return node.kind === 154; } ts.isMethodDeclaration = isMethodDeclaration; function isConstructorDeclaration(node) { - return node.kind === 155 /* Constructor */; + return node.kind === 155; } ts.isConstructorDeclaration = isConstructorDeclaration; function isGetAccessorDeclaration(node) { - return node.kind === 156 /* GetAccessor */; + return node.kind === 156; } ts.isGetAccessorDeclaration = isGetAccessorDeclaration; function isSetAccessorDeclaration(node) { - return node.kind === 157 /* SetAccessor */; + return node.kind === 157; } ts.isSetAccessorDeclaration = isSetAccessorDeclaration; function isCallSignatureDeclaration(node) { - return node.kind === 158 /* CallSignature */; + return node.kind === 158; } ts.isCallSignatureDeclaration = isCallSignatureDeclaration; function isConstructSignatureDeclaration(node) { - return node.kind === 159 /* ConstructSignature */; + return node.kind === 159; } ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration; function isIndexSignatureDeclaration(node) { - return node.kind === 160 /* IndexSignature */; + return node.kind === 160; } ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration; - /* @internal */ function isGetOrSetAccessorDeclaration(node) { - return node.kind === 157 /* SetAccessor */ || node.kind === 156 /* GetAccessor */; + return node.kind === 157 || node.kind === 156; } ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration; - // Type function isTypePredicateNode(node) { - return node.kind === 161 /* TypePredicate */; + return node.kind === 161; } ts.isTypePredicateNode = isTypePredicateNode; function isTypeReferenceNode(node) { - return node.kind === 162 /* TypeReference */; + return node.kind === 162; } ts.isTypeReferenceNode = isTypeReferenceNode; function isFunctionTypeNode(node) { - return node.kind === 163 /* FunctionType */; + return node.kind === 163; } ts.isFunctionTypeNode = isFunctionTypeNode; function isConstructorTypeNode(node) { - return node.kind === 164 /* ConstructorType */; + return node.kind === 164; } ts.isConstructorTypeNode = isConstructorTypeNode; function isTypeQueryNode(node) { - return node.kind === 165 /* TypeQuery */; + return node.kind === 165; } ts.isTypeQueryNode = isTypeQueryNode; function isTypeLiteralNode(node) { - return node.kind === 166 /* TypeLiteral */; + return node.kind === 166; } ts.isTypeLiteralNode = isTypeLiteralNode; function isArrayTypeNode(node) { - return node.kind === 167 /* ArrayType */; + return node.kind === 167; } ts.isArrayTypeNode = isArrayTypeNode; function isTupleTypeNode(node) { - return node.kind === 168 /* TupleType */; + return node.kind === 168; } ts.isTupleTypeNode = isTupleTypeNode; function isUnionTypeNode(node) { - return node.kind === 169 /* UnionType */; + return node.kind === 169; } ts.isUnionTypeNode = isUnionTypeNode; function isIntersectionTypeNode(node) { - return node.kind === 170 /* IntersectionType */; + return node.kind === 170; } ts.isIntersectionTypeNode = isIntersectionTypeNode; function isConditionalTypeNode(node) { - return node.kind === 171 /* ConditionalType */; + return node.kind === 171; } ts.isConditionalTypeNode = isConditionalTypeNode; function isInferTypeNode(node) { - return node.kind === 172 /* InferType */; + return node.kind === 172; } ts.isInferTypeNode = isInferTypeNode; function isParenthesizedTypeNode(node) { - return node.kind === 173 /* ParenthesizedType */; + return node.kind === 173; } ts.isParenthesizedTypeNode = isParenthesizedTypeNode; function isThisTypeNode(node) { - return node.kind === 174 /* ThisType */; + return node.kind === 174; } ts.isThisTypeNode = isThisTypeNode; function isTypeOperatorNode(node) { - return node.kind === 175 /* TypeOperator */; + return node.kind === 175; } ts.isTypeOperatorNode = isTypeOperatorNode; function isIndexedAccessTypeNode(node) { - return node.kind === 176 /* IndexedAccessType */; + return node.kind === 176; } ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode; function isMappedTypeNode(node) { - return node.kind === 177 /* MappedType */; + return node.kind === 177; } ts.isMappedTypeNode = isMappedTypeNode; function isLiteralTypeNode(node) { - return node.kind === 178 /* LiteralType */; + return node.kind === 178; } ts.isLiteralTypeNode = isLiteralTypeNode; function isImportTypeNode(node) { - return node.kind === 179 /* ImportType */; + return node.kind === 179; } ts.isImportTypeNode = isImportTypeNode; - // Binding patterns function isObjectBindingPattern(node) { - return node.kind === 180 /* ObjectBindingPattern */; + return node.kind === 180; } ts.isObjectBindingPattern = isObjectBindingPattern; function isArrayBindingPattern(node) { - return node.kind === 181 /* ArrayBindingPattern */; + return node.kind === 181; } ts.isArrayBindingPattern = isArrayBindingPattern; function isBindingElement(node) { - return node.kind === 182 /* BindingElement */; + return node.kind === 182; } ts.isBindingElement = isBindingElement; - // Expression function isArrayLiteralExpression(node) { - return node.kind === 183 /* ArrayLiteralExpression */; + return node.kind === 183; } ts.isArrayLiteralExpression = isArrayLiteralExpression; function isObjectLiteralExpression(node) { - return node.kind === 184 /* ObjectLiteralExpression */; + return node.kind === 184; } ts.isObjectLiteralExpression = isObjectLiteralExpression; function isPropertyAccessExpression(node) { - return node.kind === 185 /* PropertyAccessExpression */; + return node.kind === 185; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { - return node.kind === 186 /* ElementAccessExpression */; + return node.kind === 186; } ts.isElementAccessExpression = isElementAccessExpression; function isCallExpression(node) { - return node.kind === 187 /* CallExpression */; + return node.kind === 187; } ts.isCallExpression = isCallExpression; function isNewExpression(node) { - return node.kind === 188 /* NewExpression */; + return node.kind === 188; } ts.isNewExpression = isNewExpression; function isTaggedTemplateExpression(node) { - return node.kind === 189 /* TaggedTemplateExpression */; + return node.kind === 189; } ts.isTaggedTemplateExpression = isTaggedTemplateExpression; function isTypeAssertion(node) { - return node.kind === 190 /* TypeAssertionExpression */; + return node.kind === 190; } ts.isTypeAssertion = isTypeAssertion; function isParenthesizedExpression(node) { - return node.kind === 191 /* ParenthesizedExpression */; + return node.kind === 191; } ts.isParenthesizedExpression = isParenthesizedExpression; function skipPartiallyEmittedExpressions(node) { - while (node.kind === 301 /* PartiallyEmittedExpression */) { + while (node.kind === 301) { node = node.expression; } return node; } ts.skipPartiallyEmittedExpressions = skipPartiallyEmittedExpressions; function isFunctionExpression(node) { - return node.kind === 192 /* FunctionExpression */; + return node.kind === 192; } ts.isFunctionExpression = isFunctionExpression; function isArrowFunction(node) { - return node.kind === 193 /* ArrowFunction */; + return node.kind === 193; } ts.isArrowFunction = isArrowFunction; function isDeleteExpression(node) { - return node.kind === 194 /* DeleteExpression */; + return node.kind === 194; } ts.isDeleteExpression = isDeleteExpression; function isTypeOfExpression(node) { - return node.kind === 195 /* TypeOfExpression */; + return node.kind === 195; } ts.isTypeOfExpression = isTypeOfExpression; function isVoidExpression(node) { - return node.kind === 196 /* VoidExpression */; + return node.kind === 196; } ts.isVoidExpression = isVoidExpression; function isAwaitExpression(node) { - return node.kind === 197 /* AwaitExpression */; + return node.kind === 197; } ts.isAwaitExpression = isAwaitExpression; function isPrefixUnaryExpression(node) { - return node.kind === 198 /* PrefixUnaryExpression */; + return node.kind === 198; } ts.isPrefixUnaryExpression = isPrefixUnaryExpression; function isPostfixUnaryExpression(node) { - return node.kind === 199 /* PostfixUnaryExpression */; + return node.kind === 199; } ts.isPostfixUnaryExpression = isPostfixUnaryExpression; function isBinaryExpression(node) { - return node.kind === 200 /* BinaryExpression */; + return node.kind === 200; } ts.isBinaryExpression = isBinaryExpression; function isConditionalExpression(node) { - return node.kind === 201 /* ConditionalExpression */; + return node.kind === 201; } ts.isConditionalExpression = isConditionalExpression; function isTemplateExpression(node) { - return node.kind === 202 /* TemplateExpression */; + return node.kind === 202; } ts.isTemplateExpression = isTemplateExpression; function isYieldExpression(node) { - return node.kind === 203 /* YieldExpression */; + return node.kind === 203; } ts.isYieldExpression = isYieldExpression; function isSpreadElement(node) { - return node.kind === 204 /* SpreadElement */; + return node.kind === 204; } ts.isSpreadElement = isSpreadElement; function isClassExpression(node) { - return node.kind === 205 /* ClassExpression */; + return node.kind === 205; } ts.isClassExpression = isClassExpression; function isOmittedExpression(node) { - return node.kind === 206 /* OmittedExpression */; + return node.kind === 206; } ts.isOmittedExpression = isOmittedExpression; function isExpressionWithTypeArguments(node) { - return node.kind === 207 /* ExpressionWithTypeArguments */; + return node.kind === 207; } ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments; function isAsExpression(node) { - return node.kind === 208 /* AsExpression */; + return node.kind === 208; } ts.isAsExpression = isAsExpression; function isNonNullExpression(node) { - return node.kind === 209 /* NonNullExpression */; + return node.kind === 209; } ts.isNonNullExpression = isNonNullExpression; function isMetaProperty(node) { - return node.kind === 210 /* MetaProperty */; + return node.kind === 210; } ts.isMetaProperty = isMetaProperty; - // Misc function isTemplateSpan(node) { - return node.kind === 211 /* TemplateSpan */; + return node.kind === 211; } ts.isTemplateSpan = isTemplateSpan; function isSemicolonClassElement(node) { - return node.kind === 212 /* SemicolonClassElement */; + return node.kind === 212; } ts.isSemicolonClassElement = isSemicolonClassElement; - // Block function isBlock(node) { - return node.kind === 213 /* Block */; + return node.kind === 213; } ts.isBlock = isBlock; function isVariableStatement(node) { - return node.kind === 214 /* VariableStatement */; + return node.kind === 214; } ts.isVariableStatement = isVariableStatement; function isEmptyStatement(node) { - return node.kind === 215 /* EmptyStatement */; + return node.kind === 215; } ts.isEmptyStatement = isEmptyStatement; function isExpressionStatement(node) { - return node.kind === 216 /* ExpressionStatement */; + return node.kind === 216; } ts.isExpressionStatement = isExpressionStatement; function isIfStatement(node) { - return node.kind === 217 /* IfStatement */; + return node.kind === 217; } ts.isIfStatement = isIfStatement; function isDoStatement(node) { - return node.kind === 218 /* DoStatement */; + return node.kind === 218; } ts.isDoStatement = isDoStatement; function isWhileStatement(node) { - return node.kind === 219 /* WhileStatement */; + return node.kind === 219; } ts.isWhileStatement = isWhileStatement; function isForStatement(node) { - return node.kind === 220 /* ForStatement */; + return node.kind === 220; } ts.isForStatement = isForStatement; function isForInStatement(node) { - return node.kind === 221 /* ForInStatement */; + return node.kind === 221; } ts.isForInStatement = isForInStatement; function isForOfStatement(node) { - return node.kind === 222 /* ForOfStatement */; + return node.kind === 222; } ts.isForOfStatement = isForOfStatement; function isContinueStatement(node) { - return node.kind === 223 /* ContinueStatement */; + return node.kind === 223; } ts.isContinueStatement = isContinueStatement; function isBreakStatement(node) { - return node.kind === 224 /* BreakStatement */; + return node.kind === 224; } ts.isBreakStatement = isBreakStatement; function isBreakOrContinueStatement(node) { - return node.kind === 224 /* BreakStatement */ || node.kind === 223 /* ContinueStatement */; + return node.kind === 224 || node.kind === 223; } ts.isBreakOrContinueStatement = isBreakOrContinueStatement; function isReturnStatement(node) { - return node.kind === 225 /* ReturnStatement */; + return node.kind === 225; } ts.isReturnStatement = isReturnStatement; function isWithStatement(node) { - return node.kind === 226 /* WithStatement */; + return node.kind === 226; } ts.isWithStatement = isWithStatement; function isSwitchStatement(node) { - return node.kind === 227 /* SwitchStatement */; + return node.kind === 227; } ts.isSwitchStatement = isSwitchStatement; function isLabeledStatement(node) { - return node.kind === 228 /* LabeledStatement */; + return node.kind === 228; } ts.isLabeledStatement = isLabeledStatement; function isThrowStatement(node) { - return node.kind === 229 /* ThrowStatement */; + return node.kind === 229; } ts.isThrowStatement = isThrowStatement; function isTryStatement(node) { - return node.kind === 230 /* TryStatement */; + return node.kind === 230; } ts.isTryStatement = isTryStatement; function isDebuggerStatement(node) { - return node.kind === 231 /* DebuggerStatement */; + return node.kind === 231; } ts.isDebuggerStatement = isDebuggerStatement; function isVariableDeclaration(node) { - return node.kind === 232 /* VariableDeclaration */; + return node.kind === 232; } ts.isVariableDeclaration = isVariableDeclaration; function isVariableDeclarationList(node) { - return node.kind === 233 /* VariableDeclarationList */; + return node.kind === 233; } ts.isVariableDeclarationList = isVariableDeclarationList; function isFunctionDeclaration(node) { - return node.kind === 234 /* FunctionDeclaration */; + return node.kind === 234; } ts.isFunctionDeclaration = isFunctionDeclaration; function isClassDeclaration(node) { - return node.kind === 235 /* ClassDeclaration */; + return node.kind === 235; } ts.isClassDeclaration = isClassDeclaration; function isInterfaceDeclaration(node) { - return node.kind === 236 /* InterfaceDeclaration */; + return node.kind === 236; } ts.isInterfaceDeclaration = isInterfaceDeclaration; function isTypeAliasDeclaration(node) { - return node.kind === 237 /* TypeAliasDeclaration */; + return node.kind === 237; } ts.isTypeAliasDeclaration = isTypeAliasDeclaration; function isEnumDeclaration(node) { - return node.kind === 238 /* EnumDeclaration */; + return node.kind === 238; } ts.isEnumDeclaration = isEnumDeclaration; function isModuleDeclaration(node) { - return node.kind === 239 /* ModuleDeclaration */; + return node.kind === 239; } ts.isModuleDeclaration = isModuleDeclaration; function isModuleBlock(node) { - return node.kind === 240 /* ModuleBlock */; + return node.kind === 240; } ts.isModuleBlock = isModuleBlock; function isCaseBlock(node) { - return node.kind === 241 /* CaseBlock */; + return node.kind === 241; } ts.isCaseBlock = isCaseBlock; function isNamespaceExportDeclaration(node) { - return node.kind === 242 /* NamespaceExportDeclaration */; + return node.kind === 242; } ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration; function isImportEqualsDeclaration(node) { - return node.kind === 243 /* ImportEqualsDeclaration */; + return node.kind === 243; } ts.isImportEqualsDeclaration = isImportEqualsDeclaration; function isImportDeclaration(node) { - return node.kind === 244 /* ImportDeclaration */; + return node.kind === 244; } ts.isImportDeclaration = isImportDeclaration; function isImportClause(node) { - return node.kind === 245 /* ImportClause */; + return node.kind === 245; } ts.isImportClause = isImportClause; function isNamespaceImport(node) { - return node.kind === 246 /* NamespaceImport */; + return node.kind === 246; } ts.isNamespaceImport = isNamespaceImport; function isNamedImports(node) { - return node.kind === 247 /* NamedImports */; + return node.kind === 247; } ts.isNamedImports = isNamedImports; function isImportSpecifier(node) { - return node.kind === 248 /* ImportSpecifier */; + return node.kind === 248; } ts.isImportSpecifier = isImportSpecifier; function isExportAssignment(node) { - return node.kind === 249 /* ExportAssignment */; + return node.kind === 249; } ts.isExportAssignment = isExportAssignment; function isExportDeclaration(node) { - return node.kind === 250 /* ExportDeclaration */; + return node.kind === 250; } ts.isExportDeclaration = isExportDeclaration; function isNamedExports(node) { - return node.kind === 251 /* NamedExports */; + return node.kind === 251; } ts.isNamedExports = isNamedExports; function isExportSpecifier(node) { - return node.kind === 252 /* ExportSpecifier */; + return node.kind === 252; } ts.isExportSpecifier = isExportSpecifier; function isMissingDeclaration(node) { - return node.kind === 253 /* MissingDeclaration */; + return node.kind === 253; } ts.isMissingDeclaration = isMissingDeclaration; - // Module References function isExternalModuleReference(node) { - return node.kind === 254 /* ExternalModuleReference */; + return node.kind === 254; } ts.isExternalModuleReference = isExternalModuleReference; - // JSX function isJsxElement(node) { - return node.kind === 255 /* JsxElement */; + return node.kind === 255; } ts.isJsxElement = isJsxElement; function isJsxSelfClosingElement(node) { - return node.kind === 256 /* JsxSelfClosingElement */; + return node.kind === 256; } ts.isJsxSelfClosingElement = isJsxSelfClosingElement; function isJsxOpeningElement(node) { - return node.kind === 257 /* JsxOpeningElement */; + return node.kind === 257; } ts.isJsxOpeningElement = isJsxOpeningElement; function isJsxClosingElement(node) { - return node.kind === 258 /* JsxClosingElement */; + return node.kind === 258; } ts.isJsxClosingElement = isJsxClosingElement; function isJsxFragment(node) { - return node.kind === 259 /* JsxFragment */; + return node.kind === 259; } ts.isJsxFragment = isJsxFragment; function isJsxOpeningFragment(node) { - return node.kind === 260 /* JsxOpeningFragment */; + return node.kind === 260; } ts.isJsxOpeningFragment = isJsxOpeningFragment; function isJsxClosingFragment(node) { - return node.kind === 261 /* JsxClosingFragment */; + return node.kind === 261; } ts.isJsxClosingFragment = isJsxClosingFragment; function isJsxAttribute(node) { - return node.kind === 262 /* JsxAttribute */; + return node.kind === 262; } ts.isJsxAttribute = isJsxAttribute; function isJsxAttributes(node) { - return node.kind === 263 /* JsxAttributes */; + return node.kind === 263; } ts.isJsxAttributes = isJsxAttributes; function isJsxSpreadAttribute(node) { - return node.kind === 264 /* JsxSpreadAttribute */; + return node.kind === 264; } ts.isJsxSpreadAttribute = isJsxSpreadAttribute; function isJsxExpression(node) { - return node.kind === 265 /* JsxExpression */; + return node.kind === 265; } ts.isJsxExpression = isJsxExpression; - // Clauses function isCaseClause(node) { - return node.kind === 266 /* CaseClause */; + return node.kind === 266; } ts.isCaseClause = isCaseClause; function isDefaultClause(node) { - return node.kind === 267 /* DefaultClause */; + return node.kind === 267; } ts.isDefaultClause = isDefaultClause; function isHeritageClause(node) { - return node.kind === 268 /* HeritageClause */; + return node.kind === 268; } ts.isHeritageClause = isHeritageClause; function isCatchClause(node) { - return node.kind === 269 /* CatchClause */; + return node.kind === 269; } ts.isCatchClause = isCatchClause; - // Property assignments function isPropertyAssignment(node) { - return node.kind === 270 /* PropertyAssignment */; + return node.kind === 270; } ts.isPropertyAssignment = isPropertyAssignment; function isShorthandPropertyAssignment(node) { - return node.kind === 271 /* ShorthandPropertyAssignment */; + return node.kind === 271; } ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment; function isSpreadAssignment(node) { - return node.kind === 272 /* SpreadAssignment */; + return node.kind === 272; } ts.isSpreadAssignment = isSpreadAssignment; - // Enum function isEnumMember(node) { - return node.kind === 273 /* EnumMember */; + return node.kind === 273; } ts.isEnumMember = isEnumMember; - // Top-level nodes function isSourceFile(node) { - return node.kind === 274 /* SourceFile */; + return node.kind === 274; } ts.isSourceFile = isSourceFile; function isBundle(node) { - return node.kind === 275 /* Bundle */; + return node.kind === 275; } ts.isBundle = isBundle; function isUnparsedSource(node) { - return node.kind === 276 /* UnparsedSource */; + return node.kind === 276; } ts.isUnparsedSource = isUnparsedSource; - // JSDoc function isJSDocTypeExpression(node) { - return node.kind === 278 /* JSDocTypeExpression */; + return node.kind === 278; } ts.isJSDocTypeExpression = isJSDocTypeExpression; function isJSDocAllType(node) { - return node.kind === 279 /* JSDocAllType */; + return node.kind === 279; } ts.isJSDocAllType = isJSDocAllType; function isJSDocUnknownType(node) { - return node.kind === 280 /* JSDocUnknownType */; + return node.kind === 280; } ts.isJSDocUnknownType = isJSDocUnknownType; function isJSDocNullableType(node) { - return node.kind === 281 /* JSDocNullableType */; + return node.kind === 281; } ts.isJSDocNullableType = isJSDocNullableType; function isJSDocNonNullableType(node) { - return node.kind === 282 /* JSDocNonNullableType */; + return node.kind === 282; } ts.isJSDocNonNullableType = isJSDocNonNullableType; function isJSDocOptionalType(node) { - return node.kind === 283 /* JSDocOptionalType */; + return node.kind === 283; } ts.isJSDocOptionalType = isJSDocOptionalType; function isJSDocFunctionType(node) { - return node.kind === 284 /* JSDocFunctionType */; + return node.kind === 284; } ts.isJSDocFunctionType = isJSDocFunctionType; function isJSDocVariadicType(node) { - return node.kind === 285 /* JSDocVariadicType */; + return node.kind === 285; } ts.isJSDocVariadicType = isJSDocVariadicType; function isJSDoc(node) { - return node.kind === 286 /* JSDocComment */; + return node.kind === 286; } ts.isJSDoc = isJSDoc; function isJSDocAugmentsTag(node) { - return node.kind === 290 /* JSDocAugmentsTag */; + return node.kind === 290; } ts.isJSDocAugmentsTag = isJSDocAugmentsTag; function isJSDocClassTag(node) { - return node.kind === 291 /* JSDocClassTag */; + return node.kind === 291; } ts.isJSDocClassTag = isJSDocClassTag; function isJSDocParameterTag(node) { - return node.kind === 293 /* JSDocParameterTag */; + return node.kind === 293; } ts.isJSDocParameterTag = isJSDocParameterTag; function isJSDocReturnTag(node) { - return node.kind === 294 /* JSDocReturnTag */; + return node.kind === 294; } ts.isJSDocReturnTag = isJSDocReturnTag; function isJSDocTypeTag(node) { - return node.kind === 295 /* JSDocTypeTag */; + return node.kind === 295; } ts.isJSDocTypeTag = isJSDocTypeTag; function isJSDocTemplateTag(node) { - return node.kind === 296 /* JSDocTemplateTag */; + return node.kind === 296; } ts.isJSDocTemplateTag = isJSDocTemplateTag; function isJSDocTypedefTag(node) { - return node.kind === 297 /* JSDocTypedefTag */; + return node.kind === 297; } ts.isJSDocTypedefTag = isJSDocTypedefTag; function isJSDocPropertyTag(node) { - return node.kind === 298 /* JSDocPropertyTag */; + return node.kind === 298; } ts.isJSDocPropertyTag = isJSDocPropertyTag; function isJSDocPropertyLikeTag(node) { - return node.kind === 298 /* JSDocPropertyTag */ || node.kind === 293 /* JSDocParameterTag */; + return node.kind === 298 || node.kind === 293; } ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag; function isJSDocTypeLiteral(node) { - return node.kind === 287 /* JSDocTypeLiteral */; + return node.kind === 287; } ts.isJSDocTypeLiteral = isJSDocTypeLiteral; function isJSDocCallbackTag(node) { - return node.kind === 292 /* JSDocCallbackTag */; + return node.kind === 292; } ts.isJSDocCallbackTag = isJSDocCallbackTag; function isJSDocSignature(node) { - return node.kind === 288 /* JSDocSignature */; + return node.kind === 288; } ts.isJSDocSignature = isJSDocSignature; })(ts || (ts = {})); -// Node tests -// -// All node tests in the following list should *not* reference parent pointers so that -// they may be used with transformations. (function (ts) { - /* @internal */ function isSyntaxList(n) { - return n.kind === 299 /* SyntaxList */; + return n.kind === 299; } ts.isSyntaxList = isSyntaxList; - /* @internal */ function isNode(node) { return isNodeKind(node.kind); } ts.isNode = isNode; - /* @internal */ function isNodeKind(kind) { - return kind >= 146 /* FirstNode */; + return kind >= 146; } ts.isNodeKind = isNodeKind; - /** - * True if node is of some token syntax kind. - * For example, this is true for an IfKeyword but not for an IfStatement. - * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail. - */ function isToken(n) { - return n.kind >= 0 /* FirstToken */ && n.kind <= 145 /* LastToken */; + return n.kind >= 0 && n.kind <= 145; } ts.isToken = isToken; - // Node Arrays - /* @internal */ function isNodeArray(array) { return array.hasOwnProperty("pos") && array.hasOwnProperty("end"); } ts.isNodeArray = isNodeArray; - // Literals - /* @internal */ function isLiteralKind(kind) { - return 8 /* FirstLiteralToken */ <= kind && kind <= 13 /* LastLiteralToken */; + return 8 <= kind && kind <= 13; } ts.isLiteralKind = isLiteralKind; function isLiteralExpression(node) { return isLiteralKind(node.kind); } ts.isLiteralExpression = isLiteralExpression; - // Pseudo-literals - /* @internal */ function isTemplateLiteralKind(kind) { - return 13 /* FirstTemplateToken */ <= kind && kind <= 16 /* LastTemplateToken */; + return 13 <= kind && kind <= 16; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isTemplateLiteralToken(node) { @@ -12887,48 +10165,42 @@ var ts; ts.isTemplateLiteralToken = isTemplateLiteralToken; function isTemplateMiddleOrTemplateTail(node) { var kind = node.kind; - return kind === 15 /* TemplateMiddle */ - || kind === 16 /* TemplateTail */; + return kind === 15 + || kind === 16; } ts.isTemplateMiddleOrTemplateTail = isTemplateMiddleOrTemplateTail; function isStringTextContainingNode(node) { - return node.kind === 9 /* StringLiteral */ || isTemplateLiteralKind(node.kind); + return node.kind === 9 || isTemplateLiteralKind(node.kind); } ts.isStringTextContainingNode = isStringTextContainingNode; - // Identifiers - /* @internal */ function isGeneratedIdentifier(node) { - return ts.isIdentifier(node) && (node.autoGenerateFlags & 7 /* KindMask */) > 0 /* None */; + return ts.isIdentifier(node) && (node.autoGenerateFlags & 7) > 0; } ts.isGeneratedIdentifier = isGeneratedIdentifier; - // Keywords - /* @internal */ function isModifierKind(token) { switch (token) { - case 117 /* AbstractKeyword */: - case 120 /* AsyncKeyword */: - case 76 /* ConstKeyword */: - case 124 /* DeclareKeyword */: - case 79 /* DefaultKeyword */: - case 84 /* ExportKeyword */: - case 114 /* PublicKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 132 /* ReadonlyKeyword */: - case 115 /* StaticKeyword */: + case 117: + case 120: + case 76: + case 124: + case 79: + case 84: + case 114: + case 112: + case 113: + case 132: + case 115: return true; } return false; } ts.isModifierKind = isModifierKind; - /* @internal */ function isParameterPropertyModifier(kind) { - return !!(ts.modifierToFlag(kind) & 92 /* ParameterPropertyModifier */); + return !!(ts.modifierToFlag(kind) & 92); } ts.isParameterPropertyModifier = isParameterPropertyModifier; - /* @internal */ function isClassMemberModifier(idToken) { - return isParameterPropertyModifier(idToken) || idToken === 115 /* StaticKeyword */; + return isParameterPropertyModifier(idToken) || idToken === 115; } ts.isClassMemberModifier = isClassMemberModifier; function isModifier(node) { @@ -12937,111 +10209,104 @@ var ts; ts.isModifier = isModifier; function isEntityName(node) { var kind = node.kind; - return kind === 146 /* QualifiedName */ - || kind === 71 /* Identifier */; + return kind === 146 + || kind === 71; } ts.isEntityName = isEntityName; function isPropertyName(node) { var kind = node.kind; - return kind === 71 /* Identifier */ - || kind === 9 /* StringLiteral */ - || kind === 8 /* NumericLiteral */ - || kind === 147 /* ComputedPropertyName */; + return kind === 71 + || kind === 9 + || kind === 8 + || kind === 147; } ts.isPropertyName = isPropertyName; function isBindingName(node) { var kind = node.kind; - return kind === 71 /* Identifier */ - || kind === 180 /* ObjectBindingPattern */ - || kind === 181 /* ArrayBindingPattern */; + return kind === 71 + || kind === 180 + || kind === 181; } ts.isBindingName = isBindingName; - // Functions function isFunctionLike(node) { return node && isFunctionLikeKind(node.kind); } ts.isFunctionLike = isFunctionLike; - /* @internal */ function isFunctionLikeDeclaration(node) { return node && isFunctionLikeDeclarationKind(node.kind); } ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration; function isFunctionLikeDeclarationKind(kind) { switch (kind) { - case 234 /* FunctionDeclaration */: - case 154 /* MethodDeclaration */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 234: + case 154: + case 155: + case 156: + case 157: + case 192: + case 193: return true; default: return false; } } - /* @internal */ function isFunctionLikeKind(kind) { switch (kind) { - case 153 /* MethodSignature */: - case 158 /* CallSignature */: - case 288 /* JSDocSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 163 /* FunctionType */: - case 284 /* JSDocFunctionType */: - case 164 /* ConstructorType */: + case 153: + case 158: + case 288: + case 159: + case 160: + case 163: + case 284: + case 164: return true; default: return isFunctionLikeDeclarationKind(kind); } } ts.isFunctionLikeKind = isFunctionLikeKind; - /* @internal */ function isFunctionOrModuleBlock(node) { return ts.isSourceFile(node) || ts.isModuleBlock(node) || ts.isBlock(node) && isFunctionLike(node.parent); } ts.isFunctionOrModuleBlock = isFunctionOrModuleBlock; - // Classes function isClassElement(node) { var kind = node.kind; - return kind === 155 /* Constructor */ - || kind === 152 /* PropertyDeclaration */ - || kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */ - || kind === 160 /* IndexSignature */ - || kind === 212 /* SemicolonClassElement */; + return kind === 155 + || kind === 152 + || kind === 154 + || kind === 156 + || kind === 157 + || kind === 160 + || kind === 212; } ts.isClassElement = isClassElement; function isClassLike(node) { - return node && (node.kind === 235 /* ClassDeclaration */ || node.kind === 205 /* ClassExpression */); + return node && (node.kind === 235 || node.kind === 205); } ts.isClassLike = isClassLike; function isAccessor(node) { - return node && (node.kind === 156 /* GetAccessor */ || node.kind === 157 /* SetAccessor */); + return node && (node.kind === 156 || node.kind === 157); } ts.isAccessor = isAccessor; - /* @internal */ function isMethodOrAccessor(node) { switch (node.kind) { - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: return true; default: return false; } } ts.isMethodOrAccessor = isMethodOrAccessor; - // Type members function isTypeElement(node) { var kind = node.kind; - return kind === 159 /* ConstructSignature */ - || kind === 158 /* CallSignature */ - || kind === 151 /* PropertySignature */ - || kind === 153 /* MethodSignature */ - || kind === 160 /* IndexSignature */; + return kind === 159 + || kind === 158 + || kind === 151 + || kind === 153 + || kind === 160; } ts.isTypeElement = isTypeElement; function isClassOrTypeElement(node) { @@ -13050,153 +10315,125 @@ var ts; ts.isClassOrTypeElement = isClassOrTypeElement; function isObjectLiteralElementLike(node) { var kind = node.kind; - return kind === 270 /* PropertyAssignment */ - || kind === 271 /* ShorthandPropertyAssignment */ - || kind === 272 /* SpreadAssignment */ - || kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */; + return kind === 270 + || kind === 271 + || kind === 272 + || kind === 154 + || kind === 156 + || kind === 157; } ts.isObjectLiteralElementLike = isObjectLiteralElementLike; - // Type function isTypeNodeKind(kind) { - return (kind >= 161 /* FirstTypeNode */ && kind <= 179 /* LastTypeNode */) - || kind === 119 /* AnyKeyword */ - || kind === 142 /* UnknownKeyword */ - || kind === 134 /* NumberKeyword */ - || kind === 135 /* ObjectKeyword */ - || kind === 122 /* BooleanKeyword */ - || kind === 137 /* StringKeyword */ - || kind === 138 /* SymbolKeyword */ - || kind === 99 /* ThisKeyword */ - || kind === 105 /* VoidKeyword */ - || kind === 140 /* UndefinedKeyword */ - || kind === 95 /* NullKeyword */ - || kind === 131 /* NeverKeyword */ - || kind === 207 /* ExpressionWithTypeArguments */ - || kind === 279 /* JSDocAllType */ - || kind === 280 /* JSDocUnknownType */ - || kind === 281 /* JSDocNullableType */ - || kind === 282 /* JSDocNonNullableType */ - || kind === 283 /* JSDocOptionalType */ - || kind === 284 /* JSDocFunctionType */ - || kind === 285 /* JSDocVariadicType */; + return (kind >= 161 && kind <= 179) + || kind === 119 + || kind === 142 + || kind === 134 + || kind === 135 + || kind === 122 + || kind === 137 + || kind === 138 + || kind === 99 + || kind === 105 + || kind === 140 + || kind === 95 + || kind === 131 + || kind === 207 + || kind === 279 + || kind === 280 + || kind === 281 + || kind === 282 + || kind === 283 + || kind === 284 + || kind === 285; } - /** - * Node test that determines whether a node is a valid type node. - * This differs from the `isPartOfTypeNode` function which determines whether a node is *part* - * of a TypeNode. - */ function isTypeNode(node) { return isTypeNodeKind(node.kind); } ts.isTypeNode = isTypeNode; function isFunctionOrConstructorTypeNode(node) { switch (node.kind) { - case 163 /* FunctionType */: - case 164 /* ConstructorType */: + case 163: + case 164: return true; } return false; } ts.isFunctionOrConstructorTypeNode = isFunctionOrConstructorTypeNode; - // Binding patterns - /* @internal */ function isBindingPattern(node) { if (node) { var kind = node.kind; - return kind === 181 /* ArrayBindingPattern */ - || kind === 180 /* ObjectBindingPattern */; + return kind === 181 + || kind === 180; } return false; } ts.isBindingPattern = isBindingPattern; - /* @internal */ function isAssignmentPattern(node) { var kind = node.kind; - return kind === 183 /* ArrayLiteralExpression */ - || kind === 184 /* ObjectLiteralExpression */; + return kind === 183 + || kind === 184; } ts.isAssignmentPattern = isAssignmentPattern; - /* @internal */ function isArrayBindingElement(node) { var kind = node.kind; - return kind === 182 /* BindingElement */ - || kind === 206 /* OmittedExpression */; + return kind === 182 + || kind === 206; } ts.isArrayBindingElement = isArrayBindingElement; - /** - * Determines whether the BindingOrAssignmentElement is a BindingElement-like declaration - */ - /* @internal */ function isDeclarationBindingElement(bindingElement) { switch (bindingElement.kind) { - case 232 /* VariableDeclaration */: - case 149 /* Parameter */: - case 182 /* BindingElement */: + case 232: + case 149: + case 182: return true; } return false; } ts.isDeclarationBindingElement = isDeclarationBindingElement; - /** - * Determines whether a node is a BindingOrAssignmentPattern - */ - /* @internal */ function isBindingOrAssignmentPattern(node) { return isObjectBindingOrAssignmentPattern(node) || isArrayBindingOrAssignmentPattern(node); } ts.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern; - /** - * Determines whether a node is an ObjectBindingOrAssignmentPattern - */ - /* @internal */ function isObjectBindingOrAssignmentPattern(node) { switch (node.kind) { - case 180 /* ObjectBindingPattern */: - case 184 /* ObjectLiteralExpression */: + case 180: + case 184: return true; } return false; } ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern; - /** - * Determines whether a node is an ArrayBindingOrAssignmentPattern - */ - /* @internal */ function isArrayBindingOrAssignmentPattern(node) { switch (node.kind) { - case 181 /* ArrayBindingPattern */: - case 183 /* ArrayLiteralExpression */: + case 181: + case 183: return true; } return false; } ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern; - /* @internal */ function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) { var kind = node.kind; - return kind === 185 /* PropertyAccessExpression */ - || kind === 146 /* QualifiedName */ - || kind === 179 /* ImportType */; + return kind === 185 + || kind === 146 + || kind === 179; } ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode; - // Expression function isPropertyAccessOrQualifiedName(node) { var kind = node.kind; - return kind === 185 /* PropertyAccessExpression */ - || kind === 146 /* QualifiedName */; + return kind === 185 + || kind === 146; } ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName; function isCallLikeExpression(node) { switch (node.kind) { - case 257 /* JsxOpeningElement */: - case 256 /* JsxSelfClosingElement */: - case 187 /* CallExpression */: - case 188 /* NewExpression */: - case 189 /* TaggedTemplateExpression */: - case 150 /* Decorator */: + case 257: + case 256: + case 187: + case 188: + case 189: + case 150: return true; default: return false; @@ -13204,106 +10441,98 @@ var ts; } ts.isCallLikeExpression = isCallLikeExpression; function isCallOrNewExpression(node) { - return node.kind === 187 /* CallExpression */ || node.kind === 188 /* NewExpression */; + return node.kind === 187 || node.kind === 188; } ts.isCallOrNewExpression = isCallOrNewExpression; function isTemplateLiteral(node) { var kind = node.kind; - return kind === 202 /* TemplateExpression */ - || kind === 13 /* NoSubstitutionTemplateLiteral */; + return kind === 202 + || kind === 13; } ts.isTemplateLiteral = isTemplateLiteral; - /* @internal */ function isLeftHandSideExpression(node) { return isLeftHandSideExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isLeftHandSideExpression = isLeftHandSideExpression; function isLeftHandSideExpressionKind(kind) { switch (kind) { - case 185 /* PropertyAccessExpression */: - case 186 /* ElementAccessExpression */: - case 188 /* NewExpression */: - case 187 /* CallExpression */: - case 255 /* JsxElement */: - case 256 /* JsxSelfClosingElement */: - case 259 /* JsxFragment */: - case 189 /* TaggedTemplateExpression */: - case 183 /* ArrayLiteralExpression */: - case 191 /* ParenthesizedExpression */: - case 184 /* ObjectLiteralExpression */: - case 205 /* ClassExpression */: - case 192 /* FunctionExpression */: - case 71 /* Identifier */: - case 12 /* RegularExpressionLiteral */: - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 202 /* TemplateExpression */: - case 86 /* FalseKeyword */: - case 95 /* NullKeyword */: - case 99 /* ThisKeyword */: - case 101 /* TrueKeyword */: - case 97 /* SuperKeyword */: - case 209 /* NonNullExpression */: - case 210 /* MetaProperty */: - case 91 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression + case 185: + case 186: + case 188: + case 187: + case 255: + case 256: + case 259: + case 189: + case 183: + case 191: + case 184: + case 205: + case 192: + case 71: + case 12: + case 8: + case 9: + case 13: + case 202: + case 86: + case 95: + case 99: + case 101: + case 97: + case 209: + case 210: + case 91: return true; default: return false; } } - /* @internal */ function isUnaryExpression(node) { return isUnaryExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isUnaryExpression = isUnaryExpression; function isUnaryExpressionKind(kind) { switch (kind) { - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: - case 194 /* DeleteExpression */: - case 195 /* TypeOfExpression */: - case 196 /* VoidExpression */: - case 197 /* AwaitExpression */: - case 190 /* TypeAssertionExpression */: + case 198: + case 199: + case 194: + case 195: + case 196: + case 197: + case 190: return true; default: return isLeftHandSideExpressionKind(kind); } } - /* @internal */ function isUnaryExpressionWithWrite(expr) { switch (expr.kind) { - case 199 /* PostfixUnaryExpression */: + case 199: return true; - case 198 /* PrefixUnaryExpression */: - return expr.operator === 43 /* PlusPlusToken */ || - expr.operator === 44 /* MinusMinusToken */; + case 198: + return expr.operator === 43 || + expr.operator === 44; default: return false; } } ts.isUnaryExpressionWithWrite = isUnaryExpressionWithWrite; - /* @internal */ - /** - * Determines whether a node is an expression based only on its kind. - * Use `isExpressionNode` if not in transforms. - */ function isExpression(node) { return isExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isExpression = isExpression; function isExpressionKind(kind) { switch (kind) { - case 201 /* ConditionalExpression */: - case 203 /* YieldExpression */: - case 193 /* ArrowFunction */: - case 200 /* BinaryExpression */: - case 204 /* SpreadElement */: - case 208 /* AsExpression */: - case 206 /* OmittedExpression */: - case 302 /* CommaListExpression */: - case 301 /* PartiallyEmittedExpression */: + case 201: + case 203: + case 193: + case 200: + case 204: + case 208: + case 206: + case 302: + case 301: return true; default: return isUnaryExpressionKind(kind); @@ -13311,21 +10540,18 @@ var ts; } function isAssertionExpression(node) { var kind = node.kind; - return kind === 190 /* TypeAssertionExpression */ - || kind === 208 /* AsExpression */; + return kind === 190 + || kind === 208; } ts.isAssertionExpression = isAssertionExpression; - /* @internal */ function isPartiallyEmittedExpression(node) { - return node.kind === 301 /* PartiallyEmittedExpression */; + return node.kind === 301; } ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression; - /* @internal */ function isNotEmittedStatement(node) { - return node.kind === 300 /* NotEmittedStatement */; + return node.kind === 300; } ts.isNotEmittedStatement = isNotEmittedStatement; - /* @internal */ function isNotEmittedOrPartiallyEmittedNode(node) { return isNotEmittedStatement(node) || isPartiallyEmittedExpression(node); @@ -13333,169 +10559,152 @@ var ts; ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: + case 220: + case 221: + case 222: + case 218: + case 219: return true; - case 228 /* LabeledStatement */: + case 228: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; - /* @internal */ function isForInOrOfStatement(node) { - return node.kind === 221 /* ForInStatement */ || node.kind === 222 /* ForOfStatement */; + return node.kind === 221 || node.kind === 222; } ts.isForInOrOfStatement = isForInOrOfStatement; - // Element - /* @internal */ function isConciseBody(node) { return ts.isBlock(node) || isExpression(node); } ts.isConciseBody = isConciseBody; - /* @internal */ function isFunctionBody(node) { return ts.isBlock(node); } ts.isFunctionBody = isFunctionBody; - /* @internal */ function isForInitializer(node) { return ts.isVariableDeclarationList(node) || isExpression(node); } ts.isForInitializer = isForInitializer; - /* @internal */ function isModuleBody(node) { var kind = node.kind; - return kind === 240 /* ModuleBlock */ - || kind === 239 /* ModuleDeclaration */ - || kind === 71 /* Identifier */; + return kind === 240 + || kind === 239 + || kind === 71; } ts.isModuleBody = isModuleBody; - /* @internal */ function isNamespaceBody(node) { var kind = node.kind; - return kind === 240 /* ModuleBlock */ - || kind === 239 /* ModuleDeclaration */; + return kind === 240 + || kind === 239; } ts.isNamespaceBody = isNamespaceBody; - /* @internal */ function isJSDocNamespaceBody(node) { var kind = node.kind; - return kind === 71 /* Identifier */ - || kind === 239 /* ModuleDeclaration */; + return kind === 71 + || kind === 239; } ts.isJSDocNamespaceBody = isJSDocNamespaceBody; - /* @internal */ function isNamedImportBindings(node) { var kind = node.kind; - return kind === 247 /* NamedImports */ - || kind === 246 /* NamespaceImport */; + return kind === 247 + || kind === 246; } ts.isNamedImportBindings = isNamedImportBindings; - /* @internal */ function isModuleOrEnumDeclaration(node) { - return node.kind === 239 /* ModuleDeclaration */ || node.kind === 238 /* EnumDeclaration */; + return node.kind === 239 || node.kind === 238; } ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration; function isDeclarationKind(kind) { - return kind === 193 /* ArrowFunction */ - || kind === 182 /* BindingElement */ - || kind === 235 /* ClassDeclaration */ - || kind === 205 /* ClassExpression */ - || kind === 155 /* Constructor */ - || kind === 238 /* EnumDeclaration */ - || kind === 273 /* EnumMember */ - || kind === 252 /* ExportSpecifier */ - || kind === 234 /* FunctionDeclaration */ - || kind === 192 /* FunctionExpression */ - || kind === 156 /* GetAccessor */ - || kind === 245 /* ImportClause */ - || kind === 243 /* ImportEqualsDeclaration */ - || kind === 248 /* ImportSpecifier */ - || kind === 236 /* InterfaceDeclaration */ - || kind === 262 /* JsxAttribute */ - || kind === 154 /* MethodDeclaration */ - || kind === 153 /* MethodSignature */ - || kind === 239 /* ModuleDeclaration */ - || kind === 242 /* NamespaceExportDeclaration */ - || kind === 246 /* NamespaceImport */ - || kind === 149 /* Parameter */ - || kind === 270 /* PropertyAssignment */ - || kind === 152 /* PropertyDeclaration */ - || kind === 151 /* PropertySignature */ - || kind === 157 /* SetAccessor */ - || kind === 271 /* ShorthandPropertyAssignment */ - || kind === 237 /* TypeAliasDeclaration */ - || kind === 148 /* TypeParameter */ - || kind === 232 /* VariableDeclaration */ - || kind === 297 /* JSDocTypedefTag */ - || kind === 292 /* JSDocCallbackTag */ - || kind === 298 /* JSDocPropertyTag */; + return kind === 193 + || kind === 182 + || kind === 235 + || kind === 205 + || kind === 155 + || kind === 238 + || kind === 273 + || kind === 252 + || kind === 234 + || kind === 192 + || kind === 156 + || kind === 245 + || kind === 243 + || kind === 248 + || kind === 236 + || kind === 262 + || kind === 154 + || kind === 153 + || kind === 239 + || kind === 242 + || kind === 246 + || kind === 149 + || kind === 270 + || kind === 152 + || kind === 151 + || kind === 157 + || kind === 271 + || kind === 237 + || kind === 148 + || kind === 232 + || kind === 297 + || kind === 292 + || kind === 298; } function isDeclarationStatementKind(kind) { - return kind === 234 /* FunctionDeclaration */ - || kind === 253 /* MissingDeclaration */ - || kind === 235 /* ClassDeclaration */ - || kind === 236 /* InterfaceDeclaration */ - || kind === 237 /* TypeAliasDeclaration */ - || kind === 238 /* EnumDeclaration */ - || kind === 239 /* ModuleDeclaration */ - || kind === 244 /* ImportDeclaration */ - || kind === 243 /* ImportEqualsDeclaration */ - || kind === 250 /* ExportDeclaration */ - || kind === 249 /* ExportAssignment */ - || kind === 242 /* NamespaceExportDeclaration */; + return kind === 234 + || kind === 253 + || kind === 235 + || kind === 236 + || kind === 237 + || kind === 238 + || kind === 239 + || kind === 244 + || kind === 243 + || kind === 250 + || kind === 249 + || kind === 242; } function isStatementKindButNotDeclarationKind(kind) { - return kind === 224 /* BreakStatement */ - || kind === 223 /* ContinueStatement */ - || kind === 231 /* DebuggerStatement */ - || kind === 218 /* DoStatement */ - || kind === 216 /* ExpressionStatement */ - || kind === 215 /* EmptyStatement */ - || kind === 221 /* ForInStatement */ - || kind === 222 /* ForOfStatement */ - || kind === 220 /* ForStatement */ - || kind === 217 /* IfStatement */ - || kind === 228 /* LabeledStatement */ - || kind === 225 /* ReturnStatement */ - || kind === 227 /* SwitchStatement */ - || kind === 229 /* ThrowStatement */ - || kind === 230 /* TryStatement */ - || kind === 214 /* VariableStatement */ - || kind === 219 /* WhileStatement */ - || kind === 226 /* WithStatement */ - || kind === 300 /* NotEmittedStatement */ - || kind === 304 /* EndOfDeclarationMarker */ - || kind === 303 /* MergeDeclarationMarker */; + return kind === 224 + || kind === 223 + || kind === 231 + || kind === 218 + || kind === 216 + || kind === 215 + || kind === 221 + || kind === 222 + || kind === 220 + || kind === 217 + || kind === 228 + || kind === 225 + || kind === 227 + || kind === 229 + || kind === 230 + || kind === 214 + || kind === 219 + || kind === 226 + || kind === 300 + || kind === 304 + || kind === 303; } - /* @internal */ function isDeclaration(node) { - if (node.kind === 148 /* TypeParameter */) { - return node.parent.kind !== 296 /* JSDocTemplateTag */ || ts.isInJavaScriptFile(node); + if (node.kind === 148) { + return node.parent.kind !== 296 || ts.isInJavaScriptFile(node); } return isDeclarationKind(node.kind); } ts.isDeclaration = isDeclaration; - /* @internal */ function isDeclarationStatement(node) { return isDeclarationStatementKind(node.kind); } ts.isDeclarationStatement = isDeclarationStatement; - /** - * Determines whether the node is a statement that is not also a declaration - */ - /* @internal */ function isStatementButNotDeclaration(node) { return isStatementKindButNotDeclarationKind(node.kind); } ts.isStatementButNotDeclaration = isStatementButNotDeclaration; - /* @internal */ function isStatement(node) { var kind = node.kind; return isStatementKindButNotDeclarationKind(kind) @@ -13504,183 +10713,156 @@ var ts; } ts.isStatement = isStatement; function isBlockStatement(node) { - if (node.kind !== 213 /* Block */) + if (node.kind !== 213) return false; if (node.parent !== undefined) { - if (node.parent.kind === 230 /* TryStatement */ || node.parent.kind === 269 /* CatchClause */) { + if (node.parent.kind === 230 || node.parent.kind === 269) { return false; } } return !ts.isFunctionBlock(node); } - // Module references - /* @internal */ function isModuleReference(node) { var kind = node.kind; - return kind === 254 /* ExternalModuleReference */ - || kind === 146 /* QualifiedName */ - || kind === 71 /* Identifier */; + return kind === 254 + || kind === 146 + || kind === 71; } ts.isModuleReference = isModuleReference; - // JSX - /* @internal */ function isJsxTagNameExpression(node) { var kind = node.kind; - return kind === 99 /* ThisKeyword */ - || kind === 71 /* Identifier */ - || kind === 185 /* PropertyAccessExpression */; + return kind === 99 + || kind === 71 + || kind === 185; } ts.isJsxTagNameExpression = isJsxTagNameExpression; - /* @internal */ function isJsxChild(node) { var kind = node.kind; - return kind === 255 /* JsxElement */ - || kind === 265 /* JsxExpression */ - || kind === 256 /* JsxSelfClosingElement */ - || kind === 10 /* JsxText */ - || kind === 259 /* JsxFragment */; + return kind === 255 + || kind === 265 + || kind === 256 + || kind === 10 + || kind === 259; } ts.isJsxChild = isJsxChild; - /* @internal */ function isJsxAttributeLike(node) { var kind = node.kind; - return kind === 262 /* JsxAttribute */ - || kind === 264 /* JsxSpreadAttribute */; + return kind === 262 + || kind === 264; } ts.isJsxAttributeLike = isJsxAttributeLike; - /* @internal */ function isStringLiteralOrJsxExpression(node) { var kind = node.kind; - return kind === 9 /* StringLiteral */ - || kind === 265 /* JsxExpression */; + return kind === 9 + || kind === 265; } ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression; function isJsxOpeningLikeElement(node) { var kind = node.kind; - return kind === 257 /* JsxOpeningElement */ - || kind === 256 /* JsxSelfClosingElement */; + return kind === 257 + || kind === 256; } ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement; - // Clauses function isCaseOrDefaultClause(node) { var kind = node.kind; - return kind === 266 /* CaseClause */ - || kind === 267 /* DefaultClause */; + return kind === 266 + || kind === 267; } ts.isCaseOrDefaultClause = isCaseOrDefaultClause; - // JSDoc - /** True if node is of some JSDoc syntax kind. */ - /* @internal */ function isJSDocNode(node) { - return node.kind >= 278 /* FirstJSDocNode */ && node.kind <= 298 /* LastJSDocNode */; + return node.kind >= 278 && node.kind <= 298; } ts.isJSDocNode = isJSDocNode; - /** True if node is of a kind that may contain comment text. */ function isJSDocCommentContainingNode(node) { - return node.kind === 286 /* JSDocComment */ || isJSDocTag(node) || ts.isJSDocTypeLiteral(node) || ts.isJSDocSignature(node); + return node.kind === 286 || isJSDocTag(node) || ts.isJSDocTypeLiteral(node) || ts.isJSDocSignature(node); } ts.isJSDocCommentContainingNode = isJSDocCommentContainingNode; - // TODO: determine what this does before making it public. - /* @internal */ function isJSDocTag(node) { - return node.kind >= 289 /* FirstJSDocTagNode */ && node.kind <= 298 /* LastJSDocTagNode */; + return node.kind >= 289 && node.kind <= 298; } ts.isJSDocTag = isJSDocTag; function isSetAccessor(node) { - return node.kind === 157 /* SetAccessor */; + return node.kind === 157; } ts.isSetAccessor = isSetAccessor; function isGetAccessor(node) { - return node.kind === 156 /* GetAccessor */; + return node.kind === 156; } ts.isGetAccessor = isGetAccessor; - /** True if has jsdoc nodes attached to it. */ - /* @internal */ - // TODO: GH#19856 Would like to return `node is Node & { jsDoc: JSDoc[] }` but it causes long compile times function hasJSDocNodes(node) { var jsDoc = node.jsDoc; return !!jsDoc && jsDoc.length > 0; } ts.hasJSDocNodes = hasJSDocNodes; - /** True if has type node attached to it. */ - /* @internal */ function hasType(node) { return !!node.type; } ts.hasType = hasType; - /* True if the node could have a type node a `.type` */ - /* @internal */ function couldHaveType(node) { switch (node.kind) { - case 149 /* Parameter */: - case 151 /* PropertySignature */: - case 152 /* PropertyDeclaration */: - case 153 /* MethodSignature */: - case 154 /* MethodDeclaration */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 161 /* TypePredicate */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 173 /* ParenthesizedType */: - case 175 /* TypeOperator */: - case 177 /* MappedType */: - case 190 /* TypeAssertionExpression */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 208 /* AsExpression */: - case 232 /* VariableDeclaration */: - case 234 /* FunctionDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 278 /* JSDocTypeExpression */: - case 281 /* JSDocNullableType */: - case 282 /* JSDocNonNullableType */: - case 283 /* JSDocOptionalType */: - case 284 /* JSDocFunctionType */: - case 285 /* JSDocVariadicType */: + case 149: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 161: + case 163: + case 164: + case 173: + case 175: + case 177: + case 190: + case 192: + case 193: + case 208: + case 232: + case 234: + case 237: + case 278: + case 281: + case 282: + case 283: + case 284: + case 285: return true; } return false; } ts.couldHaveType = couldHaveType; - /** True if has initializer node attached to it. */ - /* @internal */ function hasInitializer(node) { return !!node.initializer; } ts.hasInitializer = hasInitializer; - /** True if has initializer node attached to it. */ - /* @internal */ function hasOnlyExpressionInitializer(node) { return hasInitializer(node) && !ts.isForStatement(node) && !ts.isForInStatement(node) && !ts.isForOfStatement(node) && !ts.isJsxAttribute(node); } ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer; function isObjectLiteralElement(node) { switch (node.kind) { - case 262 /* JsxAttribute */: - case 264 /* JsxSpreadAttribute */: - case 270 /* PropertyAssignment */: - case 271 /* ShorthandPropertyAssignment */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 262: + case 264: + case 270: + case 271: + case 154: + case 156: + case 157: return true; default: return false; } } ts.isObjectLiteralElement = isObjectLiteralElement; - /* @internal */ function isTypeReferenceType(node) { - return node.kind === 162 /* TypeReference */ || node.kind === 207 /* ExpressionWithTypeArguments */; + return node.kind === 162 || node.kind === 207; } ts.isTypeReferenceType = isTypeReferenceType; var MAX_SMI_X86 = 1073741823; - /* @internal */ function guessIndentation(lines) { var indentation = MAX_SMI_X86; for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) { @@ -13705,15 +10887,13 @@ var ts; } ts.guessIndentation = guessIndentation; function isStringLiteralLike(node) { - return node.kind === 9 /* StringLiteral */ || node.kind === 13 /* NoSubstitutionTemplateLiteral */; + return node.kind === 9 || node.kind === 13; } ts.isStringLiteralLike = isStringLiteralLike; })(ts || (ts = {})); -/* @internal */ (function (ts) { - /** @internal */ function isNamedImportsOrExports(node) { - return node.kind === 247 /* NamedImports */ || node.kind === 251 /* NamedExports */; + return node.kind === 247 || node.kind === 251; } ts.isNamedImportsOrExports = isNamedImportsOrExports; function Symbol(flags, name) { @@ -13731,15 +10911,15 @@ var ts; this.checker = checker; } } - function Signature() { } // tslint:disable-line no-empty + function Signature() { } function Node(kind, pos, end) { this.pos = pos; this.end = end; this.kind = kind; this.id = 0; - this.flags = 0 /* None */; - this.modifierFlagsCache = 0 /* None */; - this.transformFlags = 0 /* None */; + this.flags = 0; + this.modifierFlagsCache = 0; + this.transformFlags = 0; this.parent = undefined; this.original = undefined; } @@ -13758,7 +10938,6 @@ var ts; getSignatureConstructor: function () { return Signature; }, getSourceMapSourceConstructor: function () { return SourceMapSource; }, }; - /* @internal */ function formatStringFromArgs(text, args, baseIndex) { if (baseIndex === void 0) { baseIndex = 0; } return text.replace(/{(\d+)}/g, function (_match, index) { return ts.Debug.assertDefined(args[+index + baseIndex]); }); @@ -13790,7 +10969,6 @@ var ts; }; } ts.createFileDiagnostic = createFileDiagnostic; - /* @internal */ function formatMessage(_dummy, message) { var text = getLocaleSpecificMessage(message); if (arguments.length > 2) { @@ -13815,7 +10993,6 @@ var ts; }; } ts.createCompilerDiagnostic = createCompilerDiagnostic; - /* @internal */ function createCompilerDiagnosticFromMessageChain(chain) { return { file: undefined, @@ -13852,21 +11029,19 @@ var ts; function getDiagnosticFilePath(diagnostic) { return diagnostic.file ? diagnostic.file.path : undefined; } - /* @internal */ function compareDiagnostics(d1, d2) { return ts.compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) || ts.compareValues(d1.start, d2.start) || ts.compareValues(d1.length, d2.length) || ts.compareValues(d1.code, d2.code) || compareMessageText(d1.messageText, d2.messageText) || - 0 /* EqualTo */; + 0; } ts.compareDiagnostics = compareDiagnostics; function compareMessageText(t1, t2) { var text1 = t1; var text2 = t2; while (text1 && text2) { - // We still have both chains. var string1 = ts.isString(text1) ? text1 : text1.messageText; var string2 = ts.isString(text2) ? text2 : text2.messageText; var res = ts.compareStringsCaseSensitive(string1, string2); @@ -13877,20 +11052,18 @@ var ts; text2 = ts.isString(text2) ? undefined : text2.next; } if (!text1 && !text2) { - // if the chains are done, then these messages are the same. - return 0 /* EqualTo */; + return 0; } - // We still have one chain remaining. The shorter chain should come first. - return text1 ? 1 /* GreaterThan */ : -1 /* LessThan */; + return text1 ? 1 : -1; } function getEmitScriptTarget(compilerOptions) { - return compilerOptions.target || 0 /* ES3 */; + return compilerOptions.target || 0; } ts.getEmitScriptTarget = getEmitScriptTarget; function getEmitModuleKind(compilerOptions) { return typeof compilerOptions.module === "number" ? compilerOptions.module : - getEmitScriptTarget(compilerOptions) >= 2 /* ES2015 */ ? ts.ModuleKind.ES2015 : ts.ModuleKind.CommonJS; + getEmitScriptTarget(compilerOptions) >= 2 ? ts.ModuleKind.ES2015 : ts.ModuleKind.CommonJS; } ts.getEmitModuleKind = getEmitModuleKind; function getEmitModuleResolutionKind(compilerOptions) { @@ -13933,12 +11106,11 @@ var ts; function hasZeroOrOneAsteriskCharacter(str) { var seenAsterisk = false; for (var i = 0; i < str.length; i++) { - if (str.charCodeAt(i) === 42 /* asterisk */) { + if (str.charCodeAt(i) === 42) { if (!seenAsterisk) { seenAsterisk = true; } else { - // have already seen asterisk return false; } } @@ -13946,126 +11118,78 @@ var ts; return true; } ts.hasZeroOrOneAsteriskCharacter = hasZeroOrOneAsteriskCharacter; - /** - * Internally, we represent paths as strings with '/' as the directory separator. - * When we make system calls (eg: LanguageServiceHost.getDirectory()), - * we expect the host to correctly handle paths in our specified format. - */ ts.directorySeparator = "/"; var altDirectorySeparator = "\\"; var urlSchemeSeparator = "://"; var backslashRegExp = /\\/g; - /** - * Normalize path separators. - */ function normalizeSlashes(path) { return path.replace(backslashRegExp, ts.directorySeparator); } ts.normalizeSlashes = normalizeSlashes; function isVolumeCharacter(charCode) { - return (charCode >= 97 /* a */ && charCode <= 122 /* z */) || - (charCode >= 65 /* A */ && charCode <= 90 /* Z */); + return (charCode >= 97 && charCode <= 122) || + (charCode >= 65 && charCode <= 90); } function getFileUrlVolumeSeparatorEnd(url, start) { var ch0 = url.charCodeAt(start); - if (ch0 === 58 /* colon */) + if (ch0 === 58) return start + 1; - if (ch0 === 37 /* percent */ && url.charCodeAt(start + 1) === 51 /* _3 */) { + if (ch0 === 37 && url.charCodeAt(start + 1) === 51) { var ch2 = url.charCodeAt(start + 2); - if (ch2 === 97 /* a */ || ch2 === 65 /* A */) + if (ch2 === 97 || ch2 === 65) return start + 3; } return -1; } - /** - * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). - * If the root is part of a URL, the twos-complement of the root length is returned. - */ function getEncodedRootLength(path) { if (!path) return 0; var ch0 = path.charCodeAt(0); - // POSIX or UNC - if (ch0 === 47 /* slash */ || ch0 === 92 /* backslash */) { + if (ch0 === 47 || ch0 === 92) { if (path.charCodeAt(1) !== ch0) - return 1; // POSIX: "/" (or non-normalized "\") - var p1 = path.indexOf(ch0 === 47 /* slash */ ? ts.directorySeparator : altDirectorySeparator, 2); + return 1; + var p1 = path.indexOf(ch0 === 47 ? ts.directorySeparator : altDirectorySeparator, 2); if (p1 < 0) - return path.length; // UNC: "//server" or "\\server" - return p1 + 1; // UNC: "//server/" or "\\server\" + return path.length; + return p1 + 1; } - // DOS - if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58 /* colon */) { + if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58) { var ch2 = path.charCodeAt(2); - if (ch2 === 47 /* slash */ || ch2 === 92 /* backslash */) - return 3; // DOS: "c:/" or "c:\" + if (ch2 === 47 || ch2 === 92) + return 3; if (path.length === 2) - return 2; // DOS: "c:" (but not "c:d") + return 2; } - // URL var schemeEnd = path.indexOf(urlSchemeSeparator); if (schemeEnd !== -1) { var authorityStart = schemeEnd + urlSchemeSeparator.length; var authorityEnd = path.indexOf(ts.directorySeparator, authorityStart); - if (authorityEnd !== -1) { // URL: "file:///", "file://server/", "file://server/path" - // For local "file" URLs, include the leading DOS volume (if present). - // Per https://www.ietf.org/rfc/rfc1738.txt, a host of "" or "localhost" is a - // special case interpreted as "the machine from which the URL is being interpreted". + if (authorityEnd !== -1) { var scheme = path.slice(0, schemeEnd); var authority = path.slice(authorityStart, authorityEnd); if (scheme === "file" && (authority === "" || authority === "localhost") && isVolumeCharacter(path.charCodeAt(authorityEnd + 1))) { var volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2); if (volumeSeparatorEnd !== -1) { - if (path.charCodeAt(volumeSeparatorEnd) === 47 /* slash */) { - // URL: "file:///c:/", "file://localhost/c:/", "file:///c%3a/", "file://localhost/c%3a/" + if (path.charCodeAt(volumeSeparatorEnd) === 47) { return ~(volumeSeparatorEnd + 1); } if (volumeSeparatorEnd === path.length) { - // URL: "file:///c:", "file://localhost/c:", "file:///c$3a", "file://localhost/c%3a" - // but not "file:///c:d" or "file:///c%3ad" return ~volumeSeparatorEnd; } } } - return ~(authorityEnd + 1); // URL: "file://server/", "http://server/" + return ~(authorityEnd + 1); } - return ~path.length; // URL: "file://server", "http://server" + return ~path.length; } - // relative return 0; } - /** - * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). - * - * For example: - * ```ts - * getRootLength("a") === 0 // "" - * getRootLength("/") === 1 // "/" - * getRootLength("c:") === 2 // "c:" - * getRootLength("c:d") === 0 // "" - * getRootLength("c:/") === 3 // "c:/" - * getRootLength("c:\\") === 3 // "c:\\" - * getRootLength("//server") === 7 // "//server" - * getRootLength("//server/share") === 8 // "//server/" - * getRootLength("\\\\server") === 7 // "\\\\server" - * getRootLength("\\\\server\\share") === 8 // "\\\\server\\" - * getRootLength("file:///path") === 8 // "file:///" - * getRootLength("file:///c:") === 10 // "file:///c:" - * getRootLength("file:///c:d") === 8 // "file:///" - * getRootLength("file:///c:/path") === 11 // "file:///c:/" - * getRootLength("file://server") === 13 // "file://server" - * getRootLength("file://server/path") === 14 // "file://server/" - * getRootLength("http://server") === 13 // "http://server" - * getRootLength("http://server/path") === 14 // "http://server/" - * ``` - */ function getRootLength(path) { var rootLength = getEncodedRootLength(path); return rootLength < 0 ? ~rootLength : rootLength; } ts.getRootLength = getRootLength; - // TODO(rbuckton): replace references with `resolvePath` function normalizePath(path) { return ts.resolvePath(path); } @@ -14084,12 +11208,9 @@ var ts; ts.normalizePathAndParts = normalizePathAndParts; function getDirectoryPath(path) { path = normalizeSlashes(path); - // If the path provided is itself the root, then return it. var rootLength = getRootLength(path); if (rootLength === path.length) return path; - // return the leading portion of the path up to the last (non-terminal) directory separator - // but not including any trailing directory separator. path = ts.removeTrailingDirectorySeparator(path); return path.slice(0, Math.max(rootLength, path.lastIndexOf(ts.directorySeparator))); } @@ -14102,27 +11223,19 @@ var ts; return /^\.\.?($|[\\/])/.test(path); } ts.pathIsRelative = pathIsRelative; - /** - * Determines whether a path is an absolute path (e.g. starts with `/`, or a dos path - * like `c:`, `c:\` or `c:/`). - */ function isRootedDiskPath(path) { return getEncodedRootLength(path) > 0; } ts.isRootedDiskPath = isRootedDiskPath; - /** - * Determines whether a path consists only of a path root. - */ function isDiskPathRoot(path) { var rootLength = getEncodedRootLength(path); return rootLength > 0 && rootLength === path.length; } ts.isDiskPathRoot = isDiskPathRoot; - /* @internal */ function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) { return !isRootedDiskPath(absoluteOrRelativePath) ? absoluteOrRelativePath - : ts.getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); + : ts.getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false); } ts.convertToRelativePath = convertToRelativePath; function pathComponents(path, rootLength) { @@ -14132,12 +11245,6 @@ var ts; rest.pop(); return [root].concat(rest); } - /** - * Parse a path into an array containing a root component (at index 0) and zero or more path - * components (at indices > 0). The result is not normalized. - * If the path is relative, the root component is `""`. - * If the path is absolute, the root component includes the first path separator (`/`). - */ function getPathComponents(path, currentDirectory) { if (currentDirectory === void 0) { currentDirectory = ""; } path = ts.combinePaths(currentDirectory, path); @@ -14145,10 +11252,6 @@ var ts; return pathComponents(path, rootLength); } ts.getPathComponents = getPathComponents; - /** - * Reduce an array of path components to a more simplified path by navigating any - * `"."` or `".."` entries in the path. - */ function reducePathComponents(components) { if (!ts.some(components)) return []; @@ -14174,12 +11277,6 @@ var ts; return reduced; } ts.reducePathComponents = reducePathComponents; - /** - * Parse a path into an array containing a root component (at index 0) and zero or more path - * components (at indices > 0). The result is normalized. - * If the path is relative, the root component is `""`. - * If the path is absolute, the root component includes the first path separator (`/`). - */ function getNormalizedPathComponents(path, currentDirectory) { return reducePathComponents(getPathComponents(path, currentDirectory)); } @@ -14188,10 +11285,6 @@ var ts; return getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); } ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; - /** - * Formats a parsed path consisting of a root component (at index 0) and zero or more path - * segments (at indices > 0). - */ function getPathFromPathComponents(pathComponents) { if (pathComponents.length === 0) return ""; @@ -14202,7 +11295,6 @@ var ts; } ts.getPathFromPathComponents = getPathFromPathComponents; })(ts || (ts = {})); -/* @internal */ (function (ts) { function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) { var fromComponents = ts.reducePathComponents(ts.getPathComponents(from)); @@ -14248,31 +11340,21 @@ var ts; return ts.getPathFromPathComponents(pathComponents); } ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; - /** - * Ensures a path is either absolute (prefixed with `/` or `c:`) or dot-relative (prefixed - * with `./` or `../`) so as not to be confused with an unprefixed module name. - */ function ensurePathIsNonModuleName(path) { return ts.getRootLength(path) === 0 && !ts.pathIsRelative(path) ? "./" + path : path; } ts.ensurePathIsNonModuleName = ensurePathIsNonModuleName; function getBaseFileName(path, extensions, ignoreCase) { path = ts.normalizeSlashes(path); - // if the path provided is itself the root, then it has not file name. var rootLength = ts.getRootLength(path); if (rootLength === path.length) return ""; - // return the trailing portion of the path starting after the last (non-terminal) directory - // separator but not including any trailing directory separator. path = removeTrailingDirectorySeparator(path); var name = path.slice(Math.max(ts.getRootLength(path), path.lastIndexOf(ts.directorySeparator) + 1)); var extension = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(name, extensions, ignoreCase) : undefined; return extension ? name.slice(0, name.length - extension.length) : name; } ts.getBaseFileName = getBaseFileName; - /** - * Combines paths. If a path is absolute, it replaces any previous path. - */ function combinePaths(path) { var paths = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -14295,10 +11377,6 @@ var ts; return path; } ts.combinePaths = combinePaths; - /** - * Combines and resolves paths. If a path is absolute, it replaces any previous path. Any - * `.` and `..` path components are resolved. - */ function resolvePath(path) { var paths = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -14309,14 +11387,11 @@ var ts; return normalized && hasTrailingDirectorySeparator(combined) ? ensureTrailingDirectorySeparator(normalized) : normalized; } ts.resolvePath = resolvePath; - /** - * Determines whether a path has a trailing separator (`/` or `\\`). - */ function hasTrailingDirectorySeparator(path) { if (path.length === 0) return false; var ch = path.charCodeAt(path.length - 1); - return ch === 47 /* slash */ || ch === 92 /* backslash */; + return ch === 47 || ch === 92; } ts.hasTrailingDirectorySeparator = hasTrailingDirectorySeparator; function removeTrailingDirectorySeparator(path) { @@ -14335,33 +11410,27 @@ var ts; ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; function comparePathsWorker(a, b, componentComparer) { if (a === b) - return 0 /* EqualTo */; + return 0; if (a === undefined) - return -1 /* LessThan */; + return -1; if (b === undefined) - return 1 /* GreaterThan */; + return 1; var aComponents = ts.reducePathComponents(ts.getPathComponents(a)); var bComponents = ts.reducePathComponents(ts.getPathComponents(b)); var sharedLength = Math.min(aComponents.length, bComponents.length); for (var i = 0; i < sharedLength; i++) { var stringComparer = i === 0 ? ts.compareStringsCaseInsensitive : componentComparer; var result = stringComparer(aComponents[i], bComponents[i]); - if (result !== 0 /* EqualTo */) { + if (result !== 0) { return result; } } return ts.compareValues(aComponents.length, bComponents.length); } - /** - * Performs a case-sensitive comparison of two paths. - */ function comparePathsCaseSensitive(a, b) { return comparePathsWorker(a, b, ts.compareStringsCaseSensitive); } ts.comparePathsCaseSensitive = comparePathsCaseSensitive; - /** - * Performs a case-insensitive comparison of two paths. - */ function comparePathsCaseInsensitive(a, b) { return comparePathsWorker(a, b, ts.compareStringsCaseInsensitive); } @@ -14409,19 +11478,16 @@ var ts; if (a === undefined) return undefined; switch (a.charCodeAt(0)) { - case 47 /* slash */: - case 92 /* backslash */: + case 47: + case 92: return a.slice(1); default: return undefined; } } ts.tryRemoveDirectoryPrefix = tryRemoveDirectoryPrefix; - // Reserved characters, forces escaping of any non-word (or digit), non-whitespace character. - // It may be inefficient (we could just match (/[-[\]{}()*+?.,\\^$|#\s]/g), but this is future - // proof. var reservedCharacterPattern = /[^\w\s\/]/g; - var wildcardCharCodes = [42 /* asterisk */, 63 /* question */]; + var wildcardCharCodes = [42, 63]; function hasExtension(fileName) { return ts.stringContains(getBaseFileName(fileName), "."); } @@ -14429,26 +11495,12 @@ var ts; ts.commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"]; var implicitExcludePathRegexPattern = "(?!(" + ts.commonPackageFolders.join("|") + ")(/|$))"; var filesMatcher = { - /** - * Matches any single directory segment unless it is the last segment and a .min.js file - * Breakdown: - * [^./] # matches everything up to the first . character (excluding directory separators) - * (\\.(?!min\\.js$))? # matches . characters but not if they are part of the .min.js file extension - */ singleAsteriskRegexFragment: "([^./]|(\\.(?!min\\.js$))?)*", - /** - * Regex for the ** wildcard. Matches any number of subdirectories. When used for including - * files or directories, does not match subdirectories that start with a . character - */ doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?", replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, filesMatcher.singleAsteriskRegexFragment); } }; var directoriesMatcher = { singleAsteriskRegexFragment: "[^/]*", - /** - * Regex for the ** wildcard. Matches any number of subdirectories. When used for including - * files or directories, does not match subdirectories that start with a . character - */ doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?", replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, directoriesMatcher.singleAsteriskRegexFragment); } }; @@ -14468,7 +11520,6 @@ var ts; return undefined; } var pattern = patterns.map(function (pattern) { return "(" + pattern + ")"; }).join("|"); - // If excluding, match "foo/bar/baz...", but if including, only allow "foo". var terminator = usage === "exclude" ? "($|/)" : "$"; return "^(" + pattern + ")" + terminator; } @@ -14481,10 +11532,6 @@ var ts; return spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage]); }); } - /** - * An "includes" path "foo" is implicitly a glob "foo/** /*" (without the space) if its last component has no extension, - * and does not contain any glob characters itself. - */ function isImplicitGlob(lastPathComponent) { return !/[.*?]/.test(lastPathComponent); } @@ -14498,8 +11545,6 @@ var ts; if (usage !== "exclude" && lastComponent === "**") { return undefined; } - // getNormalizedPathComponents includes the separator for the root component. - // We need to remove to create our regex correctly. components[0] = removeTrailingDirectorySeparator(components[0]); if (isImplicitGlob(lastComponent)) { components.push("**", "*"); @@ -14520,24 +11565,15 @@ var ts; } if (usage !== "exclude") { var componentPattern = ""; - // The * and ? wildcards should not match directories or files that start with . if they - // appear first in a component. Dotted directories and files can be included explicitly - // like so: **/.*/.* - if (component.charCodeAt(0) === 42 /* asterisk */) { + if (component.charCodeAt(0) === 42) { componentPattern += "([^./]" + singleAsteriskRegexFragment + ")?"; component = component.substr(1); } - else if (component.charCodeAt(0) === 63 /* question */) { + else if (component.charCodeAt(0) === 63) { componentPattern += "[^./]"; component = component.substr(1); } componentPattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); - // Patterns should not include subfolders like node_modules unless they are - // explicitly included as part of the path. - // - // As an optimization, if the component pattern is the same as the component, - // then there definitely were no wildcard characters and we do not need to - // add the exclusion pattern. if (componentPattern !== component) { subpattern += implicitExcludePathRegexPattern; } @@ -14558,7 +11594,6 @@ var ts; function replaceWildcardCharacter(match, singleAsteriskRegexFragment) { return match === "*" ? singleAsteriskRegexFragment : match === "?" ? "[^/]" : "\\" + match; } - /** @param path directory of the tsconfig.json */ function getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { path = ts.normalizePath(path); currentDirectory = ts.normalizePath(currentDirectory); @@ -14576,7 +11611,6 @@ var ts; return new RegExp(pattern, useCaseSensitiveFileNames ? "" : "i"); } ts.getRegexFromPattern = getRegexFromPattern; - /** @param path directory of the tsconfig.json */ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries) { path = ts.normalizePath(path); currentDirectory = ts.normalizePath(currentDirectory); @@ -14584,8 +11618,6 @@ var ts; var includeFileRegexes = patterns.includeFilePatterns && patterns.includeFilePatterns.map(function (pattern) { return getRegexFromPattern(pattern, useCaseSensitiveFileNames); }); var includeDirectoryRegex = patterns.includeDirectoryPattern && getRegexFromPattern(patterns.includeDirectoryPattern, useCaseSensitiveFileNames); var excludeRegex = patterns.excludePattern && getRegexFromPattern(patterns.excludePattern, useCaseSensitiveFileNames); - // Associate an array of results with each include regex. This keeps results in order of the "include" order. - // If there are no "includes", then just put everything in results[0]. var results = includeFileRegexes ? includeFileRegexes.map(function () { return []; }) : [[]]; for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { var basePath = _a[_i]; @@ -14633,32 +11665,21 @@ var ts; } } ts.matchFiles = matchFiles; - /** - * Computes the unique non-wildcard base paths amongst the provided include patterns. - */ function getBasePaths(path, includes, useCaseSensitiveFileNames) { - // Storage for our results in the form of literal paths (e.g. the paths as written by the user). var basePaths = [path]; if (includes) { - // Storage for literal base paths amongst the include patterns. var includeBasePaths = []; for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { var include = includes_1[_i]; - // We also need to check the relative paths by converting them to absolute and normalizing - // in case they escape the base path (e.g "..\somedirectory") var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(combinePaths(path, include)); - // Append the literal and canonical candidate base paths. includeBasePaths.push(getIncludeBasePath(absolute)); } - // Sort the offsets array using either the literal or canonical path representations. includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames)); var _loop_2 = function (includeBasePath) { if (ts.every(basePaths, function (basePath) { return !containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) { basePaths.push(includeBasePath); } }; - // Iterate over each include base path and include unique base paths that are not a - // subpath of an existing base path for (var _a = 0, includeBasePaths_1 = includeBasePaths; _a < includeBasePaths_1.length; _a++) { var includeBasePath = includeBasePaths_1[_a]; _loop_2(includeBasePath); @@ -14669,7 +11690,6 @@ var ts; function getIncludeBasePath(absolute) { var wildcardOffset = ts.indexOfAnyCharCode(absolute, wildcardCharCodes); if (wildcardOffset < 0) { - // No "*" or "?" in the path return !hasExtension(absolute) ? absolute : removeTrailingDirectorySeparator(ts.getDirectoryPath(absolute)); @@ -14677,52 +11697,42 @@ var ts; return absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); } function ensureScriptKind(fileName, scriptKind) { - // Using scriptKind as a condition handles both: - // - 'scriptKind' is unspecified and thus it is `undefined` - // - 'scriptKind' is set and it is `Unknown` (0) - // If the 'scriptKind' is 'undefined' or 'Unknown' then we attempt - // to get the ScriptKind from the file name. If it cannot be resolved - // from the file name then the default 'TS' script kind is returned. - return scriptKind || getScriptKindFromFileName(fileName) || 3 /* TS */; + return scriptKind || getScriptKindFromFileName(fileName) || 3; } ts.ensureScriptKind = ensureScriptKind; function getScriptKindFromFileName(fileName) { var ext = fileName.substr(fileName.lastIndexOf(".")); switch (ext.toLowerCase()) { - case ".js" /* Js */: - return 1 /* JS */; - case ".jsx" /* Jsx */: - return 2 /* JSX */; - case ".ts" /* Ts */: - return 3 /* TS */; - case ".tsx" /* Tsx */: - return 4 /* TSX */; - case ".json" /* Json */: - return 6 /* JSON */; + case ".js": + return 1; + case ".jsx": + return 2; + case ".ts": + return 3; + case ".tsx": + return 4; + case ".json": + return 6; default: - return 0 /* Unknown */; + return 0; } } ts.getScriptKindFromFileName = getScriptKindFromFileName; - /** - * List of supported extensions in order of file resolution precedence. - */ - ts.supportedTypeScriptExtensions = [".ts" /* Ts */, ".tsx" /* Tsx */, ".d.ts" /* Dts */]; - /** Must have ".d.ts" first because if ".ts" goes first, that will be detected as the extension instead of ".d.ts". */ - ts.supportedTypescriptExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */]; - ts.supportedJavascriptExtensions = [".js" /* Js */, ".jsx" /* Jsx */]; + ts.supportedTypeScriptExtensions = [".ts", ".tsx", ".d.ts"]; + ts.supportedTypescriptExtensionsForExtractExtension = [".d.ts", ".ts", ".tsx"]; + ts.supportedJavascriptExtensions = [".js", ".jsx"]; var allSupportedExtensions = ts.supportedTypeScriptExtensions.concat(ts.supportedJavascriptExtensions); function getSupportedExtensions(options, extraFileExtensions) { var needJsExtensions = options && options.allowJs; if (!extraFileExtensions || extraFileExtensions.length === 0) { return needJsExtensions ? allSupportedExtensions : ts.supportedTypeScriptExtensions; } - var extensions = (needJsExtensions ? allSupportedExtensions : ts.supportedTypeScriptExtensions).concat(ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJavaScriptLike(x.scriptKind) ? x.extension : undefined; })); + var extensions = (needJsExtensions ? allSupportedExtensions : ts.supportedTypeScriptExtensions).concat(ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 || needJsExtensions && isJavaScriptLike(x.scriptKind) ? x.extension : undefined; })); return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive); } ts.getSupportedExtensions = getSupportedExtensions; function isJavaScriptLike(scriptKind) { - return scriptKind === 1 /* JS */ || scriptKind === 2 /* JSX */; + return scriptKind === 1 || scriptKind === 2; } function hasJavaScriptFileExtension(fileName) { return ts.some(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); @@ -14745,57 +11755,37 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; - /** - * Extension boundaries by priority. Lower numbers indicate higher priorities, and are - * aligned to the offset of the highest priority extension in the - * allSupportedExtensions array. - */ - var ExtensionPriority; - (function (ExtensionPriority) { - ExtensionPriority[ExtensionPriority["TypeScriptFiles"] = 0] = "TypeScriptFiles"; - ExtensionPriority[ExtensionPriority["DeclarationAndJavaScriptFiles"] = 2] = "DeclarationAndJavaScriptFiles"; - ExtensionPriority[ExtensionPriority["Highest"] = 0] = "Highest"; - ExtensionPriority[ExtensionPriority["Lowest"] = 2] = "Lowest"; - })(ExtensionPriority = ts.ExtensionPriority || (ts.ExtensionPriority = {})); function getExtensionPriority(path, supportedExtensions) { for (var i = supportedExtensions.length - 1; i >= 0; i--) { if (ts.fileExtensionIs(path, supportedExtensions[i])) { return adjustExtensionPriority(i, supportedExtensions); } } - // If its not in the list of supported extensions, this is likely a - // TypeScript file with a non-ts extension - return 0 /* Highest */; + return 0; } ts.getExtensionPriority = getExtensionPriority; - /** - * Adjusts an extension priority to be the highest priority within the same range. - */ function adjustExtensionPriority(extensionPriority, supportedExtensions) { - if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { - return 0 /* TypeScriptFiles */; + if (extensionPriority < 2) { + return 0; } else if (extensionPriority < supportedExtensions.length) { - return 2 /* DeclarationAndJavaScriptFiles */; + return 2; } else { return supportedExtensions.length; } } ts.adjustExtensionPriority = adjustExtensionPriority; - /** - * Gets the next lowest extension priority for a given priority. - */ function getNextLowestExtensionPriority(extensionPriority, supportedExtensions) { - if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { - return 2 /* DeclarationAndJavaScriptFiles */; + if (extensionPriority < 2) { + return 2; } else { return supportedExtensions.length; } } ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; - var extensionsToRemove = [".d.ts" /* Dts */, ".ts" /* Ts */, ".js" /* Js */, ".tsx" /* Tsx */, ".jsx" /* Jsx */, ".json" /* Json */]; + var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx", ".json"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { var ext = extensionsToRemove_1[_i]; @@ -14816,7 +11806,7 @@ var ts; } ts.removeExtension = removeExtension; function changeExtension(path, newExtension) { - return changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false); + return changeAnyExtension(path, newExtension, extensionsToRemove, false); } ts.changeExtension = changeExtension; function changeAnyExtension(path, ext, extensions, ignoreCase) { @@ -14848,7 +11838,6 @@ var ts; Debug.showSyntaxKind = showSyntaxKind; })(Debug = ts.Debug || (ts.Debug = {})); function tryParsePattern(pattern) { - // This should be verified outside of here and a proper error thrown. Debug.assert(ts.hasZeroOrOneAsteriskCharacter(pattern)); var indexOfStar = pattern.indexOf("*"); return indexOfStar === -1 ? undefined : { @@ -14858,24 +11847,17 @@ var ts; } ts.tryParsePattern = tryParsePattern; function positionIsSynthesized(pos) { - // This is a fast way of testing the following conditions: - // pos === undefined || pos === null || isNaN(pos) || pos < 0; return !(pos >= 0); } ts.positionIsSynthesized = positionIsSynthesized; - /** True if an extension is one of the supported TypeScript extensions. */ function extensionIsTypeScript(ext) { - return ext === ".ts" /* Ts */ || ext === ".tsx" /* Tsx */ || ext === ".d.ts" /* Dts */; + return ext === ".ts" || ext === ".tsx" || ext === ".d.ts"; } ts.extensionIsTypeScript = extensionIsTypeScript; function resolutionExtensionIsTypeScriptOrJson(ext) { - return extensionIsTypeScript(ext) || ext === ".json" /* Json */; + return extensionIsTypeScript(ext) || ext === ".json"; } ts.resolutionExtensionIsTypeScriptOrJson = resolutionExtensionIsTypeScriptOrJson; - /** - * Gets the extension from a path. - * Path must have a valid extension. - */ function extensionFromPath(path) { var ext = tryGetExtensionFromPath(path); return ext !== undefined ? ext : Debug.fail("File " + path + " has unknown extension."); @@ -14906,8 +11888,6 @@ var ts; return ""; } function getAnyExtensionFromPath(path, extensions, ignoreCase) { - // Retrieves any string from the final "." onwards from a base file name. - // Unlike extensionFromPath, which throws an exception on unrecognized extensions. if (extensions) { return getAnyExtensionFromPathWorker(path, extensions, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive); } @@ -14927,11 +11907,6 @@ var ts; files: ts.emptyArray, directories: ts.emptyArray }; - /** - * patternStrings contains both pattern strings (containing "*") and regular strings. - * Return an exact match if possible, or a pattern match, or undefined. - * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.) - */ function matchPatternOrExact(patternStrings, candidate) { var patterns = []; for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) { @@ -14941,7 +11916,6 @@ var ts; patterns.push(pattern); } else if (patternString === candidate) { - // pattern was matched as is - no need to search further return patternString; } } @@ -14951,26 +11925,15 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - var SignatureFlags; - (function (SignatureFlags) { - SignatureFlags[SignatureFlags["None"] = 0] = "None"; - SignatureFlags[SignatureFlags["Yield"] = 1] = "Yield"; - SignatureFlags[SignatureFlags["Await"] = 2] = "Await"; - SignatureFlags[SignatureFlags["Type"] = 4] = "Type"; - SignatureFlags[SignatureFlags["IgnoreMissingOpenBrace"] = 16] = "IgnoreMissingOpenBrace"; - SignatureFlags[SignatureFlags["JSDoc"] = 32] = "JSDoc"; - })(SignatureFlags || (SignatureFlags = {})); - // tslint:disable variable-name var NodeConstructor; var TokenConstructor; var IdentifierConstructor; var SourceFileConstructor; - // tslint:enable variable-name function createNode(kind, pos, end) { - if (kind === 274 /* SourceFile */) { + if (kind === 274) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } - else if (kind === 71 /* Identifier */) { + else if (kind === 71) { return new (IdentifierConstructor || (IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor()))(kind, pos, end); } else if (!ts.isNodeKind(kind)) { @@ -14998,49 +11961,35 @@ var ts; } } } - /*@internal*/ function isJSDocLikeText(text, start) { - return text.charCodeAt(start + 1) === 42 /* asterisk */ && - text.charCodeAt(start + 2) === 42 /* asterisk */ && - text.charCodeAt(start + 3) !== 47 /* slash */; + return text.charCodeAt(start + 1) === 42 && + text.charCodeAt(start + 2) === 42 && + text.charCodeAt(start + 3) !== 47; } ts.isJSDocLikeText = isJSDocLikeText; - /** - * Invokes a callback for each child of the given node. The 'cbNode' callback is invoked for all child nodes - * stored in properties. If a 'cbNodes' callback is specified, it is invoked for embedded arrays; otherwise, - * embedded arrays are flattened and the 'cbNode' callback is invoked for each element. If a callback returns - * a truthy value, iteration stops and that value is returned. Otherwise, undefined is returned. - * - * @param node a given node to visit its children - * @param cbNode a callback to be invoked for all child nodes - * @param cbNodes a callback to be invoked for embedded array - * - * @remarks `forEachChild` must visit the children of a node in the order - * that they appear in the source code. The language service depends on this property to locate nodes by position. - */ function forEachChild(node, cbNode, cbNodes) { - if (!node || node.kind <= 145 /* LastToken */) { + if (!node || node.kind <= 145) { return; } switch (node.kind) { - case 146 /* QualifiedName */: + case 146: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 148 /* TypeParameter */: + case 148: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.default) || visitNode(cbNode, node.expression); - case 271 /* ShorthandPropertyAssignment */: + case 271: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.equalsToken) || visitNode(cbNode, node.objectAssignmentInitializer); - case 272 /* SpreadAssignment */: + case 272: return visitNode(cbNode, node.expression); - case 149 /* Parameter */: + case 149: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.dotDotDotToken) || @@ -15048,7 +11997,7 @@ var ts; visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 152 /* PropertyDeclaration */: + case 152: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || @@ -15056,51 +12005,51 @@ var ts; visitNode(cbNode, node.exclamationToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 151 /* PropertySignature */: + case 151: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 270 /* PropertyAssignment */: + case 270: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.initializer); - case 232 /* VariableDeclaration */: + case 232: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.exclamationToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 182 /* BindingElement */: + case 182: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.dotDotDotToken) || visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: + case 163: + case 164: + case 158: + case 159: + case 160: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 234 /* FunctionDeclaration */: - case 193 /* ArrowFunction */: + case 154: + case 153: + case 155: + case 156: + case 157: + case 192: + case 234: + case 193: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || @@ -15111,304 +12060,304 @@ var ts; visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); - case 162 /* TypeReference */: + case 162: return visitNode(cbNode, node.typeName) || visitNodes(cbNode, cbNodes, node.typeArguments); - case 161 /* TypePredicate */: + case 161: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); - case 165 /* TypeQuery */: + case 165: return visitNode(cbNode, node.exprName); - case 166 /* TypeLiteral */: + case 166: return visitNodes(cbNode, cbNodes, node.members); - case 167 /* ArrayType */: + case 167: return visitNode(cbNode, node.elementType); - case 168 /* TupleType */: + case 168: return visitNodes(cbNode, cbNodes, node.elementTypes); - case 169 /* UnionType */: - case 170 /* IntersectionType */: + case 169: + case 170: return visitNodes(cbNode, cbNodes, node.types); - case 171 /* ConditionalType */: + case 171: return visitNode(cbNode, node.checkType) || visitNode(cbNode, node.extendsType) || visitNode(cbNode, node.trueType) || visitNode(cbNode, node.falseType); - case 172 /* InferType */: + case 172: return visitNode(cbNode, node.typeParameter); - case 179 /* ImportType */: + case 179: return visitNode(cbNode, node.argument) || visitNode(cbNode, node.qualifier) || visitNodes(cbNode, cbNodes, node.typeArguments); - case 173 /* ParenthesizedType */: - case 175 /* TypeOperator */: + case 173: + case 175: return visitNode(cbNode, node.type); - case 176 /* IndexedAccessType */: + case 176: return visitNode(cbNode, node.objectType) || visitNode(cbNode, node.indexType); - case 177 /* MappedType */: + case 177: return visitNode(cbNode, node.readonlyToken) || visitNode(cbNode, node.typeParameter) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type); - case 178 /* LiteralType */: + case 178: return visitNode(cbNode, node.literal); - case 180 /* ObjectBindingPattern */: - case 181 /* ArrayBindingPattern */: + case 180: + case 181: return visitNodes(cbNode, cbNodes, node.elements); - case 183 /* ArrayLiteralExpression */: + case 183: return visitNodes(cbNode, cbNodes, node.elements); - case 184 /* ObjectLiteralExpression */: + case 184: return visitNodes(cbNode, cbNodes, node.properties); - case 185 /* PropertyAccessExpression */: + case 185: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.name); - case 186 /* ElementAccessExpression */: + case 186: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 187 /* CallExpression */: - case 188 /* NewExpression */: + case 187: + case 188: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNodes(cbNode, cbNodes, node.arguments); - case 189 /* TaggedTemplateExpression */: + case 189: return visitNode(cbNode, node.tag) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode(cbNode, node.template); - case 190 /* TypeAssertionExpression */: + case 190: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 191 /* ParenthesizedExpression */: + case 191: return visitNode(cbNode, node.expression); - case 194 /* DeleteExpression */: + case 194: return visitNode(cbNode, node.expression); - case 195 /* TypeOfExpression */: + case 195: return visitNode(cbNode, node.expression); - case 196 /* VoidExpression */: + case 196: return visitNode(cbNode, node.expression); - case 198 /* PrefixUnaryExpression */: + case 198: return visitNode(cbNode, node.operand); - case 203 /* YieldExpression */: + case 203: return visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.expression); - case 197 /* AwaitExpression */: + case 197: return visitNode(cbNode, node.expression); - case 199 /* PostfixUnaryExpression */: + case 199: return visitNode(cbNode, node.operand); - case 200 /* BinaryExpression */: + case 200: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); - case 208 /* AsExpression */: + case 208: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); - case 209 /* NonNullExpression */: + case 209: return visitNode(cbNode, node.expression); - case 210 /* MetaProperty */: + case 210: return visitNode(cbNode, node.name); - case 201 /* ConditionalExpression */: + case 201: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.colonToken) || visitNode(cbNode, node.whenFalse); - case 204 /* SpreadElement */: + case 204: return visitNode(cbNode, node.expression); - case 213 /* Block */: - case 240 /* ModuleBlock */: + case 213: + case 240: return visitNodes(cbNode, cbNodes, node.statements); - case 274 /* SourceFile */: + case 274: return visitNodes(cbNode, cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 214 /* VariableStatement */: + case 214: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 233 /* VariableDeclarationList */: + case 233: return visitNodes(cbNode, cbNodes, node.declarations); - case 216 /* ExpressionStatement */: + case 216: return visitNode(cbNode, node.expression); - case 217 /* IfStatement */: + case 217: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 218 /* DoStatement */: + case 218: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 219 /* WhileStatement */: + case 219: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 220 /* ForStatement */: + case 220: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.condition) || visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); - case 221 /* ForInStatement */: + case 221: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 222 /* ForOfStatement */: + case 222: return visitNode(cbNode, node.awaitModifier) || visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 223 /* ContinueStatement */: - case 224 /* BreakStatement */: + case 223: + case 224: return visitNode(cbNode, node.label); - case 225 /* ReturnStatement */: + case 225: return visitNode(cbNode, node.expression); - case 226 /* WithStatement */: + case 226: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 227 /* SwitchStatement */: + case 227: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); - case 241 /* CaseBlock */: + case 241: return visitNodes(cbNode, cbNodes, node.clauses); - case 266 /* CaseClause */: + case 266: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.statements); - case 267 /* DefaultClause */: + case 267: return visitNodes(cbNode, cbNodes, node.statements); - case 228 /* LabeledStatement */: + case 228: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 229 /* ThrowStatement */: + case 229: return visitNode(cbNode, node.expression); - case 230 /* TryStatement */: + case 230: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 269 /* CatchClause */: + case 269: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); - case 150 /* Decorator */: + case 150: return visitNode(cbNode, node.expression); - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: + case 235: + case 205: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.heritageClauses) || visitNodes(cbNode, cbNodes, node.members); - case 236 /* InterfaceDeclaration */: + case 236: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.heritageClauses) || visitNodes(cbNode, cbNodes, node.members); - case 237 /* TypeAliasDeclaration */: + case 237: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNode(cbNode, node.type); - case 238 /* EnumDeclaration */: + case 238: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.members); - case 273 /* EnumMember */: + case 273: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 239 /* ModuleDeclaration */: + case 239: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 243 /* ImportEqualsDeclaration */: + case 243: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 244 /* ImportDeclaration */: + case 244: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); - case 245 /* ImportClause */: + case 245: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); - case 242 /* NamespaceExportDeclaration */: + case 242: return visitNode(cbNode, node.name); - case 246 /* NamespaceImport */: + case 246: return visitNode(cbNode, node.name); - case 247 /* NamedImports */: - case 251 /* NamedExports */: + case 247: + case 251: return visitNodes(cbNode, cbNodes, node.elements); - case 250 /* ExportDeclaration */: + case 250: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); - case 248 /* ImportSpecifier */: - case 252 /* ExportSpecifier */: + case 248: + case 252: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); - case 249 /* ExportAssignment */: + case 249: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.expression); - case 202 /* TemplateExpression */: + case 202: return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans); - case 211 /* TemplateSpan */: + case 211: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 147 /* ComputedPropertyName */: + case 147: return visitNode(cbNode, node.expression); - case 268 /* HeritageClause */: + case 268: return visitNodes(cbNode, cbNodes, node.types); - case 207 /* ExpressionWithTypeArguments */: + case 207: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.typeArguments); - case 254 /* ExternalModuleReference */: + case 254: return visitNode(cbNode, node.expression); - case 253 /* MissingDeclaration */: + case 253: return visitNodes(cbNode, cbNodes, node.decorators); - case 302 /* CommaListExpression */: + case 302: return visitNodes(cbNode, cbNodes, node.elements); - case 255 /* JsxElement */: + case 255: return visitNode(cbNode, node.openingElement) || visitNodes(cbNode, cbNodes, node.children) || visitNode(cbNode, node.closingElement); - case 259 /* JsxFragment */: + case 259: return visitNode(cbNode, node.openingFragment) || visitNodes(cbNode, cbNodes, node.children) || visitNode(cbNode, node.closingFragment); - case 256 /* JsxSelfClosingElement */: - case 257 /* JsxOpeningElement */: + case 256: + case 257: return visitNode(cbNode, node.tagName) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode(cbNode, node.attributes); - case 263 /* JsxAttributes */: + case 263: return visitNodes(cbNode, cbNodes, node.properties); - case 262 /* JsxAttribute */: + case 262: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 264 /* JsxSpreadAttribute */: + case 264: return visitNode(cbNode, node.expression); - case 265 /* JsxExpression */: + case 265: return visitNode(cbNode, node.dotDotDotToken) || visitNode(cbNode, node.expression); - case 258 /* JsxClosingElement */: + case 258: return visitNode(cbNode, node.tagName); - case 278 /* JSDocTypeExpression */: + case 278: return visitNode(cbNode, node.type); - case 282 /* JSDocNonNullableType */: + case 282: return visitNode(cbNode, node.type); - case 281 /* JSDocNullableType */: + case 281: return visitNode(cbNode, node.type); - case 283 /* JSDocOptionalType */: + case 283: return visitNode(cbNode, node.type); - case 284 /* JSDocFunctionType */: + case 284: return visitNodes(cbNode, cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 285 /* JSDocVariadicType */: + case 285: return visitNode(cbNode, node.type); - case 286 /* JSDocComment */: + case 286: return visitNodes(cbNode, cbNodes, node.tags); - case 293 /* JSDocParameterTag */: - case 298 /* JSDocPropertyTag */: + case 293: + case 298: if (node.isNameFirst) { return visitNode(cbNode, node.name) || visitNode(cbNode, node.typeExpression); @@ -15417,17 +12366,17 @@ var ts; return visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.name); } - case 294 /* JSDocReturnTag */: + case 294: return visitNode(cbNode, node.typeExpression); - case 295 /* JSDocTypeTag */: + case 295: return visitNode(cbNode, node.typeExpression); - case 290 /* JSDocAugmentsTag */: + case 290: return visitNode(cbNode, node.class); - case 296 /* JSDocTemplateTag */: + case 296: return visitNodes(cbNode, cbNodes, node.typeParameters); - case 297 /* JSDocTypedefTag */: + case 297: if (node.typeExpression && - node.typeExpression.kind === 278 /* JSDocTypeExpression */) { + node.typeExpression.kind === 278) { return visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.fullName); } @@ -15435,16 +12384,16 @@ var ts; return visitNode(cbNode, node.fullName) || visitNode(cbNode, node.typeExpression); } - case 292 /* JSDocCallbackTag */: + case 292: return visitNode(cbNode, node.fullName) || visitNode(cbNode, node.typeExpression); - case 288 /* JSDocSignature */: + case 288: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 287 /* JSDocTypeLiteral */: + case 287: if (node.jsDocPropertyTags) { for (var _i = 0, _a = node.jsDocPropertyTags; _i < _a.length; _i++) { var tag = _a[_i]; @@ -15452,7 +12401,7 @@ var ts; } } return; - case 301 /* PartiallyEmittedExpression */: + case 301: return visitNode(cbNode, node.expression); } } @@ -15461,11 +12410,11 @@ var ts; if (setParentNodes === void 0) { setParentNodes = false; } ts.performance.mark("beforeParse"); var result; - if (languageVersion === 100 /* JSON */) { - result = Parser.parseJsonText(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes); + if (languageVersion === 100) { + result = Parser.parseJsonText(fileName, sourceText, languageVersion, undefined, setParentNodes); } else { - result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind); + result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind); } ts.performance.mark("afterParse"); ts.performance.measure("Parse", "beforeParse", "afterParse"); @@ -15476,71 +12425,41 @@ var ts; return Parser.parseIsolatedEntityName(text, languageVersion); } ts.parseIsolatedEntityName = parseIsolatedEntityName; - /** - * Parse json text into SyntaxTree and return node and parse errors if any - * @param fileName - * @param sourceText - */ function parseJsonText(fileName, sourceText) { return Parser.parseJsonText(fileName, sourceText); } ts.parseJsonText = parseJsonText; - // See also `isExternalOrCommonJsModule` in utilities.ts function isExternalModule(file) { return file.externalModuleIndicator !== undefined; } ts.isExternalModule = isExternalModule; - // Produces a new SourceFile for the 'newText' provided. The 'textChangeRange' parameter - // indicates what changed between the 'text' that this SourceFile has and the 'newText'. - // The SourceFile will be created with the compiler attempting to reuse as many nodes from - // this file as possible. - // - // Note: this function mutates nodes from this SourceFile. That means any existing nodes - // from this SourceFile that are being held onto may change as a result (including - // becoming detached from any SourceFile). It is recommended that this SourceFile not - // be used once 'update' is called on it. function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { if (aggressiveChecks === void 0) { aggressiveChecks = false; } var newSourceFile = IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); - // Because new source file node is created, it may not have the flag PossiblyContainDynamicImport. This is the case if there is no new edit to add dynamic import. - // We will manually port the flag to the new source file. - newSourceFile.flags |= (sourceFile.flags & 1572864 /* PermanentlySetIncrementalFlags */); + newSourceFile.flags |= (sourceFile.flags & 1572864); return newSourceFile; } ts.updateSourceFile = updateSourceFile; - /* @internal */ function parseIsolatedJSDocComment(content, start, length) { var result = Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length); if (result && result.jsDoc) { - // because the jsDocComment was parsed out of the source file, it might - // not be covered by the fixupParentReferences. Parser.fixupParentReferences(result.jsDoc); } return result; } ts.parseIsolatedJSDocComment = parseIsolatedJSDocComment; - /* @internal */ - // Exposed only for testing. function parseJSDocTypeExpressionForTests(content, start, length) { return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length); } ts.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; - // Implement the parser as a singleton module. We do this for perf reasons because creating - // parser instances can actually be expensive enough to impact us on projects with many source - // files. var Parser; (function (Parser) { - // Share a single scanner across all calls to parse a source file. This helps speed things - // up by avoiding the cost of creating/compiling scanners over and over again. - var scanner = ts.createScanner(6 /* Latest */, /*skipTrivia*/ true); - var disallowInAndDecoratorContext = 2048 /* DisallowInContext */ | 8192 /* DecoratorContext */; - // capture constructors in 'initializeState' to avoid null checks - // tslint:disable variable-name + var scanner = ts.createScanner(6, true); + var disallowInAndDecoratorContext = 2048 | 8192; var NodeConstructor; var TokenConstructor; var IdentifierConstructor; var SourceFileConstructor; - // tslint:enable variable-name var sourceFile; var parseDiagnostics; var syntaxCursor; @@ -15550,87 +12469,14 @@ var ts; var identifiers; var identifierCount; var parsingContext; - // Flags that dictate what parsing context we're in. For example: - // Whether or not we are in strict parsing mode. All that changes in strict parsing mode is - // that some tokens that would be considered identifiers may be considered keywords. - // - // When adding more parser context flags, consider which is the more common case that the - // flag will be in. This should be the 'false' state for that flag. The reason for this is - // that we don't store data in our nodes unless the value is in the *non-default* state. So, - // for example, more often than code 'allows-in' (or doesn't 'disallow-in'). We opt for - // 'disallow-in' set to 'false'. Otherwise, if we had 'allowsIn' set to 'true', then almost - // all nodes would need extra state on them to store this info. - // - // Note: 'allowIn' and 'allowYield' track 1:1 with the [in] and [yield] concepts in the ES6 - // grammar specification. - // - // An important thing about these context concepts. By default they are effectively inherited - // while parsing through every grammar production. i.e. if you don't change them, then when - // you parse a sub-production, it will have the same context values as the parent production. - // This is great most of the time. After all, consider all the 'expression' grammar productions - // and how nearly all of them pass along the 'in' and 'yield' context values: - // - // EqualityExpression[In, Yield] : - // RelationalExpression[?In, ?Yield] - // EqualityExpression[?In, ?Yield] == RelationalExpression[?In, ?Yield] - // EqualityExpression[?In, ?Yield] != RelationalExpression[?In, ?Yield] - // EqualityExpression[?In, ?Yield] === RelationalExpression[?In, ?Yield] - // EqualityExpression[?In, ?Yield] !== RelationalExpression[?In, ?Yield] - // - // Where you have to be careful is then understanding what the points are in the grammar - // where the values are *not* passed along. For example: - // - // SingleNameBinding[Yield,GeneratorParameter] - // [+GeneratorParameter]BindingIdentifier[Yield] Initializer[In]opt - // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt - // - // Here this is saying that if the GeneratorParameter context flag is set, that we should - // explicitly set the 'yield' context flag to false before calling into the BindingIdentifier - // and we should explicitly unset the 'yield' context flag before calling into the Initializer. - // production. Conversely, if the GeneratorParameter context flag is not set, then we - // should leave the 'yield' context flag alone. - // - // Getting this all correct is tricky and requires careful reading of the grammar to - // understand when these values should be changed versus when they should be inherited. - // - // Note: it should not be necessary to save/restore these flags during speculative/lookahead - // parsing. These context flags are naturally stored and restored through normal recursive - // descent parsing and unwinding. var contextFlags; - // Whether or not we've had a parse error since creating the last AST node. If we have - // encountered an error, it will be stored on the next AST node we create. Parse errors - // can be broken down into three categories: - // - // 1) An error that occurred during scanning. For example, an unterminated literal, or a - // character that was completely not understood. - // - // 2) A token was expected, but was not present. This type of error is commonly produced - // by the 'parseExpected' function. - // - // 3) A token was present that no parsing function was able to consume. This type of error - // only occurs in the 'abortParsingListOrMoveToNextToken' function when the parser - // decides to skip the token. - // - // In all of these cases, we want to mark the next node as having had an error before it. - // With this mark, we can know in incremental settings if this node can be reused, or if - // we have to reparse it. If we don't keep this information around, we may just reuse the - // node. in that event we would then not produce the same errors as we did before, causing - // significant confusion problems. - // - // Note: it is necessary that this value be saved/restored during speculative/lookahead - // parsing. During lookahead parsing, we will often create a node. That node will have - // this value attached, and then this value will be set back to 'false'. If we decide to - // rewind, we must get back to the same value we had prior to the lookahead. - // - // Note: any errors at the end of the file that do not precede a regular node, should get - // attached to the EOF token. var parseErrorBeforeNextFinishedNode = false; function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes, scriptKind) { if (setParentNodes === void 0) { setParentNodes = false; } scriptKind = ts.ensureScriptKind(fileName, scriptKind); - if (scriptKind === 6 /* JSON */) { + if (scriptKind === 6) { var result_1 = parseJsonText(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes); - ts.convertToObjectWorker(result_1, result_1.parseDiagnostics, /*returnValue*/ false, /*knownRootOptions*/ undefined, /*jsonConversionNotifier*/ undefined); + ts.convertToObjectWorker(result_1, result_1.parseDiagnostics, false, undefined, undefined); result_1.typeReferenceDirectives = ts.emptyArray; result_1.amdDependencies = ts.emptyArray; return result_1; @@ -15642,62 +12488,57 @@ var ts; } Parser.parseSourceFile = parseSourceFile; function parseIsolatedEntityName(content, languageVersion) { - // Choice of `isDeclarationFile` should be arbitrary - initializeState(content, languageVersion, /*syntaxCursor*/ undefined, 1 /* JS */); - // Prime the scanner. + initializeState(content, languageVersion, undefined, 1); nextToken(); - var entityName = parseEntityName(/*allowReservedWords*/ true); - var isInvalid = token() === 1 /* EndOfFileToken */ && !parseDiagnostics.length; + var entityName = parseEntityName(true); + var isInvalid = token() === 1 && !parseDiagnostics.length; clearState(); return isInvalid ? entityName : undefined; } Parser.parseIsolatedEntityName = parseIsolatedEntityName; function parseJsonText(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes) { - if (languageVersion === void 0) { languageVersion = 2 /* ES2015 */; } - initializeState(sourceText, languageVersion, syntaxCursor, 6 /* JSON */); - // Set source file so that errors will be reported with this file name - sourceFile = createSourceFile(fileName, 2 /* ES2015 */, 6 /* JSON */, /*isDeclaration*/ false); + if (languageVersion === void 0) { languageVersion = 2; } + initializeState(sourceText, languageVersion, syntaxCursor, 6); + sourceFile = createSourceFile(fileName, 2, 6, false); sourceFile.flags = contextFlags; - // Prime the scanner. nextToken(); var pos = getNodePos(); - if (token() === 1 /* EndOfFileToken */) { + if (token() === 1) { sourceFile.statements = createNodeArray([], pos, pos); sourceFile.endOfFileToken = parseTokenNode(); } else { - var statement = createNode(216 /* ExpressionStatement */); + var statement = createNode(216); switch (token()) { - case 21 /* OpenBracketToken */: + case 21: statement.expression = parseArrayLiteralExpression(); break; - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 95 /* NullKeyword */: + case 101: + case 86: + case 95: statement.expression = parseTokenNode(); break; - case 38 /* MinusToken */: - if (lookAhead(function () { return nextToken() === 8 /* NumericLiteral */ && nextToken() !== 56 /* ColonToken */; })) { + case 38: + if (lookAhead(function () { return nextToken() === 8 && nextToken() !== 56; })) { statement.expression = parsePrefixUnaryExpression(); } else { statement.expression = parseObjectLiteralExpression(); } break; - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - if (lookAhead(function () { return nextToken() !== 56 /* ColonToken */; })) { + case 8: + case 9: + if (lookAhead(function () { return nextToken() !== 56; })) { statement.expression = parseLiteralNode(); break; } - // falls through default: statement.expression = parseObjectLiteralExpression(); break; } finishNode(statement); sourceFile.statements = createNodeArray([statement], pos); - sourceFile.endOfFileToken = parseExpectedToken(1 /* EndOfFileToken */, ts.Diagnostics.Unexpected_token); + sourceFile.endOfFileToken = parseExpectedToken(1, ts.Diagnostics.Unexpected_token); } if (setParentNodes) { fixupParentReferences(sourceFile); @@ -15709,8 +12550,7 @@ var ts; } Parser.parseJsonText = parseJsonText; function getLanguageVariant(scriptKind) { - // .tsx and .jsx files are treated as jsx language variant. - return scriptKind === 4 /* TSX */ || scriptKind === 2 /* JSX */ || scriptKind === 1 /* JS */ || scriptKind === 6 /* JSON */ ? 1 /* JSX */ : 0 /* Standard */; + return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 || scriptKind === 6 ? 1 : 0; } function initializeState(_sourceText, languageVersion, _syntaxCursor, scriptKind) { NodeConstructor = ts.objectAllocator.getNodeConstructor(); @@ -15725,29 +12565,26 @@ var ts; identifierCount = 0; nodeCount = 0; switch (scriptKind) { - case 1 /* JS */: - case 2 /* JSX */: - contextFlags = 65536 /* JavaScriptFile */; + case 1: + case 2: + contextFlags = 65536; break; - case 6 /* JSON */: - contextFlags = 65536 /* JavaScriptFile */ | 16777216 /* JsonFile */; + case 6: + contextFlags = 65536 | 16777216; break; default: - contextFlags = 0 /* None */; + contextFlags = 0; break; } parseErrorBeforeNextFinishedNode = false; - // Initialize and prime the scanner before parsing the source elements. scanner.setText(sourceText); scanner.setOnError(scanError); scanner.setScriptTarget(languageVersion); scanner.setLanguageVariant(getLanguageVariant(scriptKind)); } function clearState() { - // Clear out the text the scanner is pointing at, so it doesn't keep anything alive unnecessarily. scanner.setText(""); scanner.setOnError(undefined); - // Clear any data. We don't want to accidentally hold onto it for too long. parseDiagnostics = undefined; sourceFile = undefined; identifiers = undefined; @@ -15757,17 +12594,15 @@ var ts; function parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind) { var isDeclarationFile = isDeclarationFileName(fileName); if (isDeclarationFile) { - contextFlags |= 4194304 /* Ambient */; + contextFlags |= 4194304; } sourceFile = createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile); sourceFile.flags = contextFlags; - // Prime the scanner. nextToken(); - // A member of ReadonlyArray isn't assignable to a member of T[] (and prevents a direct cast) - but this is where we set up those members so they can be readonly in the future processCommentPragmas(sourceFile, sourceText); processPragmasIntoFields(sourceFile, reportPragmaDiagnostic); - sourceFile.statements = parseList(0 /* SourceElements */, parseStatement); - ts.Debug.assert(token() === 1 /* EndOfFileToken */); + sourceFile.statements = parseList(0, parseStatement); + ts.Debug.assert(token() === 1); sourceFile.endOfFileToken = addJSDocComment(parseTokenNode()); setExternalModuleIndicator(sourceFile); sourceFile.nodeCount = nodeCount; @@ -15793,17 +12628,10 @@ var ts; return node; } function fixupParentReferences(rootNode) { - // normally parent references are set during binding. However, for clients that only need - // a syntax tree, and no semantic features, then the binding process is an unnecessary - // overhead. This functions allows us to set all the parents, without all the expense of - // binding. var parent = rootNode; forEachChild(rootNode, visitNode); return; function visitNode(n) { - // walk down setting parents that differ from the parent we think it should be. This - // allows us to quickly bail out of setting parents for subtrees during incremental - // parsing if (n.parent !== parent) { n.parent = parent; var saveParent = parent; @@ -15823,9 +12651,7 @@ var ts; } Parser.fixupParentReferences = fixupParentReferences; function createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile) { - // code from createNode is inlined here so createNode won't have to deal with special case of creating source files - // this is quite rare comparing to other nodes and createNode should be as fast as possible - var sourceFile = new SourceFileConstructor(274 /* SourceFile */, /*pos*/ 0, /* end */ sourceText.length); + var sourceFile = new SourceFileConstructor(274, 0, sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; @@ -15846,102 +12672,81 @@ var ts; } } function setDisallowInContext(val) { - setContextFlag(val, 2048 /* DisallowInContext */); + setContextFlag(val, 2048); } function setYieldContext(val) { - setContextFlag(val, 4096 /* YieldContext */); + setContextFlag(val, 4096); } function setDecoratorContext(val) { - setContextFlag(val, 8192 /* DecoratorContext */); + setContextFlag(val, 8192); } function setAwaitContext(val) { - setContextFlag(val, 16384 /* AwaitContext */); + setContextFlag(val, 16384); } function doOutsideOfContext(context, func) { - // contextFlagsToClear will contain only the context flags that are - // currently set that we need to temporarily clear - // We don't just blindly reset to the previous flags to ensure - // that we do not mutate cached flags for the incremental - // parser (ThisNodeHasError, ThisNodeOrAnySubNodesHasError, and - // HasAggregatedChildData). var contextFlagsToClear = context & contextFlags; if (contextFlagsToClear) { - // clear the requested context flags - setContextFlag(/*val*/ false, contextFlagsToClear); + setContextFlag(false, contextFlagsToClear); var result = func(); - // restore the context flags we just cleared - setContextFlag(/*val*/ true, contextFlagsToClear); + setContextFlag(true, contextFlagsToClear); return result; } - // no need to do anything special as we are not in any of the requested contexts return func(); } function doInsideOfContext(context, func) { - // contextFlagsToSet will contain only the context flags that - // are not currently set that we need to temporarily enable. - // We don't just blindly reset to the previous flags to ensure - // that we do not mutate cached flags for the incremental - // parser (ThisNodeHasError, ThisNodeOrAnySubNodesHasError, and - // HasAggregatedChildData). var contextFlagsToSet = context & ~contextFlags; if (contextFlagsToSet) { - // set the requested context flags - setContextFlag(/*val*/ true, contextFlagsToSet); + setContextFlag(true, contextFlagsToSet); var result = func(); - // reset the context flags we just set - setContextFlag(/*val*/ false, contextFlagsToSet); + setContextFlag(false, contextFlagsToSet); return result; } - // no need to do anything special as we are already in all of the requested contexts return func(); } function allowInAnd(func) { - return doOutsideOfContext(2048 /* DisallowInContext */, func); + return doOutsideOfContext(2048, func); } function disallowInAnd(func) { - return doInsideOfContext(2048 /* DisallowInContext */, func); + return doInsideOfContext(2048, func); } function doInYieldContext(func) { - return doInsideOfContext(4096 /* YieldContext */, func); + return doInsideOfContext(4096, func); } function doInDecoratorContext(func) { - return doInsideOfContext(8192 /* DecoratorContext */, func); + return doInsideOfContext(8192, func); } function doInAwaitContext(func) { - return doInsideOfContext(16384 /* AwaitContext */, func); + return doInsideOfContext(16384, func); } function doOutsideOfAwaitContext(func) { - return doOutsideOfContext(16384 /* AwaitContext */, func); + return doOutsideOfContext(16384, func); } function doInYieldAndAwaitContext(func) { - return doInsideOfContext(4096 /* YieldContext */ | 16384 /* AwaitContext */, func); + return doInsideOfContext(4096 | 16384, func); } function inContext(flags) { return (contextFlags & flags) !== 0; } function inYieldContext() { - return inContext(4096 /* YieldContext */); + return inContext(4096); } function inDisallowInContext() { - return inContext(2048 /* DisallowInContext */); + return inContext(2048); } function inDecoratorContext() { - return inContext(8192 /* DecoratorContext */); + return inContext(8192); } function inAwaitContext() { - return inContext(16384 /* AwaitContext */); + return inContext(16384); } function parseErrorAtCurrentToken(message, arg0) { parseErrorAt(scanner.getTokenPos(), scanner.getTextPos(), message, arg0); } function parseErrorAtPosition(start, length, message, arg0) { - // Don't report another error if it would just be at the same position as the last error. var lastError = ts.lastOrUndefined(parseDiagnostics); if (!lastError || start !== lastError.start) { parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0)); } - // Mark that we've encountered an error. We'll set an appropriate bit on the next - // node we finish so that it can't be reused incrementally. parseErrorBeforeNextFinishedNode = true; } function parseErrorAt(start, end, message, arg0) { @@ -15956,12 +12761,6 @@ var ts; function getNodePos() { return scanner.getStartPos(); } - // Use this function to access the current token instead of reading the currentToken - // variable. Since function results aren't narrowed in control flow analysis, this ensures - // that the type checker doesn't make wrong assumptions about the type of the current - // token (e.g. a call to nextToken() changes the current token but the checker doesn't - // reason about this side effect). Mainstream VMs inline simple functions like this, so - // there is no performance penalty. function token() { return currentToken; } @@ -15987,25 +12786,14 @@ var ts; return currentToken = scanner.scanJsxAttributeValue(); } function speculationHelper(callback, isLookAhead) { - // Keep track of the state we'll need to rollback to if lookahead fails (or if the - // caller asked us to always reset our state). var saveToken = currentToken; var saveParseDiagnosticsLength = parseDiagnostics.length; var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; - // Note: it is not actually necessary to save/restore the context flags here. That's - // because the saving/restoring of these flags happens naturally through the recursive - // descent nature of our parser. However, we still store this here just so we can - // assert that invariant holds. var saveContextFlags = contextFlags; - // If we're only looking ahead, then tell the scanner to only lookahead as well. - // Otherwise, if we're actually speculatively parsing, then tell the scanner to do the - // same. var result = isLookAhead ? scanner.lookAhead(callback) : scanner.tryScan(callback); ts.Debug.assert(saveContextFlags === contextFlags); - // If our callback returned something 'falsy' or we're just looking ahead, - // then unconditionally restore us to where we were. if (!result || isLookAhead) { currentToken = saveToken; parseDiagnostics.length = saveParseDiagnosticsLength; @@ -16013,37 +12801,23 @@ var ts; } return result; } - /** Invokes the provided callback then unconditionally restores the parser to the state it - * was in immediately prior to invoking the callback. The result of invoking the callback - * is returned from this function. - */ function lookAhead(callback) { - return speculationHelper(callback, /*isLookAhead*/ true); + return speculationHelper(callback, true); } - /** Invokes the provided callback. If the callback returns something falsy, then it restores - * the parser to the state it was in immediately prior to invoking the callback. If the - * callback returns something truthy, then the parser state is not rolled back. The result - * of invoking the callback is returned from this function. - */ function tryParse(callback) { - return speculationHelper(callback, /*isLookAhead*/ false); + return speculationHelper(callback, false); } - // Ignore strict mode flag because we will report an error in type checker instead. function isIdentifier() { - if (token() === 71 /* Identifier */) { + if (token() === 71) { return true; } - // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is - // considered a keyword and is not an identifier. - if (token() === 116 /* YieldKeyword */ && inYieldContext()) { + if (token() === 116 && inYieldContext()) { return false; } - // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is - // considered a keyword and is not an identifier. - if (token() === 121 /* AwaitKeyword */ && inAwaitContext()) { + if (token() === 121 && inAwaitContext()) { return false; } - return token() > 107 /* LastReservedWord */; + return token() > 107; } function parseExpected(kind, diagnosticMessage, shouldAdvance) { if (shouldAdvance === void 0) { shouldAdvance = true; } @@ -16053,7 +12827,6 @@ var ts; } return true; } - // Report specific message if provided with one. Otherwise, report generic fallback message. if (diagnosticMessage) { parseErrorAtCurrentToken(diagnosticMessage); } @@ -16077,7 +12850,7 @@ var ts; } function parseExpectedToken(t, diagnosticMessage, arg0) { return parseOptionalToken(t) || - createMissingNode(t, /*reportAtCurrentPosition*/ false, diagnosticMessage || ts.Diagnostics._0_expected, arg0 || ts.tokenToString(t)); + createMissingNode(t, false, diagnosticMessage || ts.Diagnostics._0_expected, arg0 || ts.tokenToString(t)); } function parseTokenNode() { var node = createNode(token()); @@ -16085,43 +12858,37 @@ var ts; return finishNode(node); } function canParseSemicolon() { - // If there's a real semicolon, then we can always parse it out. - if (token() === 25 /* SemicolonToken */) { + if (token() === 25) { return true; } - // We can parse out an optional semicolon in ASI cases in the following cases. - return token() === 18 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak(); + return token() === 18 || token() === 1 || scanner.hasPrecedingLineBreak(); } function parseSemicolon() { if (canParseSemicolon()) { - if (token() === 25 /* SemicolonToken */) { - // consume the semicolon if it was explicitly provided. + if (token() === 25) { nextToken(); } return true; } else { - return parseExpected(25 /* SemicolonToken */); + return parseExpected(25); } } function createNode(kind, pos) { nodeCount++; var p = pos >= 0 ? pos : scanner.getStartPos(); - return ts.isNodeKind(kind) || kind === 0 /* Unknown */ ? new NodeConstructor(kind, p, p) : - kind === 71 /* Identifier */ ? new IdentifierConstructor(kind, p, p) : + return ts.isNodeKind(kind) || kind === 0 ? new NodeConstructor(kind, p, p) : + kind === 71 ? new IdentifierConstructor(kind, p, p) : new TokenConstructor(kind, p, p); } function createNodeWithJSDoc(kind, pos) { var node = createNode(kind, pos); - if (scanner.getTokenFlags() & 2 /* PrecedingJSDocComment */) { + if (scanner.getTokenFlags() & 2) { addJSDocComment(node); } return node; } function createNodeArray(elements, pos, end) { - // Since the element list of a node array is typically created by starting with an empty array and - // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for - // small arrays (1 to 4 elements) to give the VM a chance to allocate an optimal representation. var length = elements.length; var array = (length >= 1 && length <= 4 ? elements.slice() : elements); array.pos = pos; @@ -16133,12 +12900,9 @@ var ts; if (contextFlags) { node.flags |= contextFlags; } - // Keep track on the node if we encountered an error while parsing it. If we did, then - // we cannot reuse the node incrementally. Once we've marked this node, clear out the - // flag so that we don't mark any subsequent nodes. if (parseErrorBeforeNextFinishedNode) { parseErrorBeforeNextFinishedNode = false; - node.flags |= 32768 /* ThisNodeHasError */; + node.flags |= 32768; } return node; } @@ -16150,7 +12914,7 @@ var ts; parseErrorAtCurrentToken(diagnosticMessage, arg0); } var result = createNode(kind); - if (kind === 71 /* Identifier */) { + if (kind === 71) { result.escapedText = ""; } else if (ts.isLiteralKind(kind) || ts.isTemplateLiteralKind(kind)) { @@ -16165,24 +12929,19 @@ var ts; } return identifier; } - // An identifier that starts with two underscores has an extra underscore character prepended to it to avoid issues - // with magic property names like '__proto__'. The 'identifiers' object is used to share a single string instance for - // each identifier in order to reduce memory consumption. function createIdentifier(isIdentifier, diagnosticMessage) { identifierCount++; if (isIdentifier) { - var node = createNode(71 /* Identifier */); - // Store original token kind if it is not just an Identifier so we can report appropriate error later in type checker - if (token() !== 71 /* Identifier */) { + var node = createNode(71); + if (token() !== 71) { node.originalKeywordKind = token(); } node.escapedText = ts.escapeLeadingUnderscores(internIdentifier(scanner.getTokenValue())); nextToken(); return finishNode(node); } - // Only for end of file because the error gets reported incorrectly on embedded script tags. - var reportAtCurrentPosition = token() === 1 /* EndOfFileToken */; - return createMissingNode(71 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || ts.Diagnostics.Identifier_expected); + var reportAtCurrentPosition = token() === 1; + return createMissingNode(71, reportAtCurrentPosition, diagnosticMessage || ts.Diagnostics.Identifier_expected); } function parseIdentifier(diagnosticMessage) { return createIdentifier(isIdentifier(), diagnosticMessage); @@ -16192,34 +12951,28 @@ var ts; } function isLiteralPropertyName() { return ts.tokenIsIdentifierOrKeyword(token()) || - token() === 9 /* StringLiteral */ || - token() === 8 /* NumericLiteral */; + token() === 9 || + token() === 8; } function parsePropertyNameWorker(allowComputedPropertyNames) { - if (token() === 9 /* StringLiteral */ || token() === 8 /* NumericLiteral */) { + if (token() === 9 || token() === 8) { var node = parseLiteralNode(); node.text = internIdentifier(node.text); return node; } - if (allowComputedPropertyNames && token() === 21 /* OpenBracketToken */) { + if (allowComputedPropertyNames && token() === 21) { return parseComputedPropertyName(); } return parseIdentifierName(); } function parsePropertyName() { - return parsePropertyNameWorker(/*allowComputedPropertyNames*/ true); + return parsePropertyNameWorker(true); } function parseComputedPropertyName() { - // PropertyName [Yield]: - // LiteralPropertyName - // ComputedPropertyName[?Yield] - var node = createNode(147 /* ComputedPropertyName */); - parseExpected(21 /* OpenBracketToken */); - // We parse any expression (including a comma expression). But the grammar - // says that only an assignment expression is allowed, so the grammar checker - // will error if it sees a comma expression. + var node = createNode(147); + parseExpected(21); node.expression = allowInAnd(parseExpression); - parseExpected(22 /* CloseBracketToken */); + parseExpected(22); return finishNode(node); } function parseContextualModifier(t) { @@ -16234,20 +12987,19 @@ var ts; } function nextTokenCanFollowModifier() { switch (token()) { - case 76 /* ConstKeyword */: - // 'const' is only a modifier if followed by 'enum'. - return nextToken() === 83 /* EnumKeyword */; - case 84 /* ExportKeyword */: + case 76: + return nextToken() === 83; + case 84: nextToken(); - if (token() === 79 /* DefaultKeyword */) { + if (token() === 79) { return lookAhead(nextTokenCanFollowDefaultKeyword); } - return token() !== 39 /* AsteriskToken */ && token() !== 118 /* AsKeyword */ && token() !== 17 /* OpenBraceToken */ && canFollowModifier(); - case 79 /* DefaultKeyword */: + return token() !== 39 && token() !== 118 && token() !== 17 && canFollowModifier(); + case 79: return nextTokenCanFollowDefaultKeyword(); - case 115 /* StaticKeyword */: - case 125 /* GetKeyword */: - case 136 /* SetKeyword */: + case 115: + case 125: + case 136: nextToken(); return canFollowModifier(); default: @@ -16258,112 +13010,86 @@ var ts; return ts.isModifierKind(token()) && tryParse(nextTokenCanFollowModifier); } function canFollowModifier() { - return token() === 21 /* OpenBracketToken */ - || token() === 17 /* OpenBraceToken */ - || token() === 39 /* AsteriskToken */ - || token() === 24 /* DotDotDotToken */ + return token() === 21 + || token() === 17 + || token() === 39 + || token() === 24 || isLiteralPropertyName(); } function nextTokenCanFollowDefaultKeyword() { nextToken(); - return token() === 75 /* ClassKeyword */ || token() === 89 /* FunctionKeyword */ || - token() === 109 /* InterfaceKeyword */ || - (token() === 117 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) || - (token() === 120 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); + return token() === 75 || token() === 89 || + token() === 109 || + (token() === 117 && lookAhead(nextTokenIsClassKeywordOnSameLine)) || + (token() === 120 && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } - // True if positioned at the start of a list element function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); if (node) { return true; } switch (parsingContext) { - case 0 /* SourceElements */: - case 1 /* BlockStatements */: - case 3 /* SwitchClauseStatements */: - // If we're in error recovery, then we don't want to treat ';' as an empty statement. - // The problem is that ';' can show up in far too many contexts, and if we see one - // and assume it's a statement, then we may bail out inappropriately from whatever - // we're parsing. For example, if we have a semicolon in the middle of a class, then - // we really don't want to assume the class is over and we're on a statement in the - // outer module. We just want to consume and move on. - return !(token() === 25 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement(); - case 2 /* SwitchClauses */: - return token() === 73 /* CaseKeyword */ || token() === 79 /* DefaultKeyword */; - case 4 /* TypeMembers */: + case 0: + case 1: + case 3: + return !(token() === 25 && inErrorRecovery) && isStartOfStatement(); + case 2: + return token() === 73 || token() === 79; + case 4: return lookAhead(isTypeMemberStart); - case 5 /* ClassMembers */: - // We allow semicolons as class elements (as specified by ES6) as long as we're - // not in error recovery. If we're in error recovery, we don't want an errant - // semicolon to be treated as a class member (since they're almost always used - // for statements. - return lookAhead(isClassMemberStart) || (token() === 25 /* SemicolonToken */ && !inErrorRecovery); - case 6 /* EnumMembers */: - // Include open bracket computed properties. This technically also lets in indexers, - // which would be a candidate for improved error reporting. - return token() === 21 /* OpenBracketToken */ || isLiteralPropertyName(); - case 12 /* ObjectLiteralMembers */: - return token() === 21 /* OpenBracketToken */ || token() === 39 /* AsteriskToken */ || token() === 24 /* DotDotDotToken */ || isLiteralPropertyName(); - case 17 /* RestProperties */: + case 5: + return lookAhead(isClassMemberStart) || (token() === 25 && !inErrorRecovery); + case 6: + return token() === 21 || isLiteralPropertyName(); + case 12: + return token() === 21 || token() === 39 || token() === 24 || isLiteralPropertyName(); + case 17: return isLiteralPropertyName(); - case 9 /* ObjectBindingElements */: - return token() === 21 /* OpenBracketToken */ || token() === 24 /* DotDotDotToken */ || isLiteralPropertyName(); - case 7 /* HeritageClauseElement */: - // If we see `{ ... }` then only consume it as an expression if it is followed by `,` or `{` - // That way we won't consume the body of a class in its heritage clause. - if (token() === 17 /* OpenBraceToken */) { + case 9: + return token() === 21 || token() === 24 || isLiteralPropertyName(); + case 7: + if (token() === 17) { return lookAhead(isValidHeritageClauseObjectLiteral); } if (!inErrorRecovery) { return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword(); } else { - // If we're in error recovery we tighten up what we're willing to match. - // That way we don't treat something like "this" as a valid heritage clause - // element during recovery. return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword(); } - case 8 /* VariableDeclarations */: + case 8: return isIdentifierOrPattern(); - case 10 /* ArrayBindingElements */: - return token() === 26 /* CommaToken */ || token() === 24 /* DotDotDotToken */ || isIdentifierOrPattern(); - case 18 /* TypeParameters */: + case 10: + return token() === 26 || token() === 24 || isIdentifierOrPattern(); + case 18: return isIdentifier(); - case 15 /* ArrayLiteralMembers */: - if (token() === 26 /* CommaToken */) { + case 15: + if (token() === 26) { return true; } - // falls through - case 11 /* ArgumentExpressions */: - return token() === 24 /* DotDotDotToken */ || isStartOfExpression(); - case 16 /* Parameters */: + case 11: + return token() === 24 || isStartOfExpression(); + case 16: return isStartOfParameter(); - case 19 /* TypeArguments */: - case 20 /* TupleElementTypes */: - return token() === 26 /* CommaToken */ || isStartOfType(); - case 21 /* HeritageClauses */: + case 19: + case 20: + return token() === 26 || isStartOfType(); + case 21: return isHeritageClause(); - case 22 /* ImportOrExportSpecifiers */: + case 22: return ts.tokenIsIdentifierOrKeyword(token()); - case 13 /* JsxAttributes */: - return ts.tokenIsIdentifierOrKeyword(token()) || token() === 17 /* OpenBraceToken */; - case 14 /* JsxChildren */: + case 13: + return ts.tokenIsIdentifierOrKeyword(token()) || token() === 17; + case 14: return true; } return ts.Debug.fail("Non-exhaustive case in 'isListElement'."); } function isValidHeritageClauseObjectLiteral() { - ts.Debug.assert(token() === 17 /* OpenBraceToken */); - if (nextToken() === 18 /* CloseBraceToken */) { - // if we see "extends {}" then only treat the {} as what we're extending (and not - // the class body) if we have: - // - // extends {} { - // extends {}, - // extends {} extends - // extends {} implements + ts.Debug.assert(token() === 17); + if (nextToken() === 18) { var next = nextToken(); - return next === 26 /* CommaToken */ || next === 17 /* OpenBraceToken */ || next === 85 /* ExtendsKeyword */ || next === 108 /* ImplementsKeyword */; + return next === 26 || next === 17 || next === 85 || next === 108; } return true; } @@ -16380,8 +13106,8 @@ var ts; return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token()); } function isHeritageClauseExtendsOrImplementsKeyword() { - if (token() === 108 /* ImplementsKeyword */ || - token() === 85 /* ExtendsKeyword */) { + if (token() === 108 || + token() === 85) { return lookAhead(nextTokenIsStartOfExpression); } return false; @@ -16394,95 +13120,78 @@ var ts; nextToken(); return isStartOfType(); } - // True if positioned at a list terminator function isListTerminator(kind) { - if (token() === 1 /* EndOfFileToken */) { - // Being at the end of the file ends all lists. + if (token() === 1) { return true; } switch (kind) { - case 1 /* BlockStatements */: - case 2 /* SwitchClauses */: - case 4 /* TypeMembers */: - case 5 /* ClassMembers */: - case 6 /* EnumMembers */: - case 12 /* ObjectLiteralMembers */: - case 9 /* ObjectBindingElements */: - case 22 /* ImportOrExportSpecifiers */: - return token() === 18 /* CloseBraceToken */; - case 3 /* SwitchClauseStatements */: - return token() === 18 /* CloseBraceToken */ || token() === 73 /* CaseKeyword */ || token() === 79 /* DefaultKeyword */; - case 7 /* HeritageClauseElement */: - return token() === 17 /* OpenBraceToken */ || token() === 85 /* ExtendsKeyword */ || token() === 108 /* ImplementsKeyword */; - case 8 /* VariableDeclarations */: + case 1: + case 2: + case 4: + case 5: + case 6: + case 12: + case 9: + case 22: + return token() === 18; + case 3: + return token() === 18 || token() === 73 || token() === 79; + case 7: + return token() === 17 || token() === 85 || token() === 108; + case 8: return isVariableDeclaratorListTerminator(); - case 18 /* TypeParameters */: - // Tokens other than '>' are here for better error recovery - return token() === 29 /* GreaterThanToken */ || token() === 19 /* OpenParenToken */ || token() === 17 /* OpenBraceToken */ || token() === 85 /* ExtendsKeyword */ || token() === 108 /* ImplementsKeyword */; - case 11 /* ArgumentExpressions */: - // Tokens other than ')' are here for better error recovery - return token() === 20 /* CloseParenToken */ || token() === 25 /* SemicolonToken */; - case 15 /* ArrayLiteralMembers */: - case 20 /* TupleElementTypes */: - case 10 /* ArrayBindingElements */: - return token() === 22 /* CloseBracketToken */; - case 16 /* Parameters */: - case 17 /* RestProperties */: - // Tokens other than ')' and ']' (the latter for index signatures) are here for better error recovery - return token() === 20 /* CloseParenToken */ || token() === 22 /* CloseBracketToken */ /*|| token === SyntaxKind.OpenBraceToken*/; - case 19 /* TypeArguments */: - // All other tokens should cause the type-argument to terminate except comma token - return token() !== 26 /* CommaToken */; - case 21 /* HeritageClauses */: - return token() === 17 /* OpenBraceToken */ || token() === 18 /* CloseBraceToken */; - case 13 /* JsxAttributes */: - return token() === 29 /* GreaterThanToken */ || token() === 41 /* SlashToken */; - case 14 /* JsxChildren */: - return token() === 27 /* LessThanToken */ && lookAhead(nextTokenIsSlash); + case 18: + return token() === 29 || token() === 19 || token() === 17 || token() === 85 || token() === 108; + case 11: + return token() === 20 || token() === 25; + case 15: + case 20: + case 10: + return token() === 22; + case 16: + case 17: + return token() === 20 || token() === 22; + case 19: + return token() !== 26; + case 21: + return token() === 17 || token() === 18; + case 13: + return token() === 29 || token() === 41; + case 14: + return token() === 27 && lookAhead(nextTokenIsSlash); default: return false; } } function isVariableDeclaratorListTerminator() { - // If we can consume a semicolon (either explicitly, or with ASI), then consider us done - // with parsing the list of variable declarators. if (canParseSemicolon()) { return true; } - // in the case where we're parsing the variable declarator of a 'for-in' statement, we - // are done if we see an 'in' keyword in front of us. Same with for-of if (isInOrOfKeyword(token())) { return true; } - // ERROR RECOVERY TWEAK: - // For better error recovery, if we see an '=>' then we just stop immediately. We've got an - // arrow function here and it's going to be very unlikely that we'll resynchronize and get - // another variable declaration. - if (token() === 36 /* EqualsGreaterThanToken */) { + if (token() === 36) { return true; } - // Keep trying to parse out variable declarators. return false; } - // True if positioned at element or terminator of the current list or any enclosing list function isInSomeParsingContext() { - for (var kind = 0; kind < 23 /* Count */; kind++) { + for (var kind = 0; kind < 23; kind++) { if (parsingContext & (1 << kind)) { - if (isListElement(kind, /*inErrorRecovery*/ true) || isListTerminator(kind)) { + if (isListElement(kind, true) || isListTerminator(kind)) { return true; } } } return false; } - // Parses a list of elements function parseList(kind, parseElement) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var list = []; var listPos = getNodePos(); while (!isListTerminator(kind)) { - if (isListElement(kind, /*inErrorRecovery*/ false)) { + if (isListElement(kind, false)) { var element = parseListElement(kind, parseElement); list.push(element); continue; @@ -16502,145 +13211,85 @@ var ts; return parseElement(); } function currentNode(parsingContext) { - // If there is an outstanding parse error that we've encountered, but not attached to - // some node, then we cannot get a node from the old source tree. This is because we - // want to mark the next node we encounter as being unusable. - // - // Note: This may be too conservative. Perhaps we could reuse the node and set the bit - // on it (or its leftmost child) as having the error. For now though, being conservative - // is nice and likely won't ever affect perf. if (parseErrorBeforeNextFinishedNode) { return undefined; } if (!syntaxCursor) { - // if we don't have a cursor, we could never return a node from the old tree. return undefined; } var node = syntaxCursor.currentNode(scanner.getStartPos()); - // Can't reuse a missing node. if (ts.nodeIsMissing(node)) { return undefined; } - // Can't reuse a node that intersected the change range. if (node.intersectsChange) { return undefined; } - // Can't reuse a node that contains a parse error. This is necessary so that we - // produce the same set of errors again. if (ts.containsParseError(node)) { return undefined; } - // We can only reuse a node if it was parsed under the same strict mode that we're - // currently in. i.e. if we originally parsed a node in non-strict mode, but then - // the user added 'using strict' at the top of the file, then we can't use that node - // again as the presence of strict mode may cause us to parse the tokens in the file - // differently. - // - // Note: we *can* reuse tokens when the strict mode changes. That's because tokens - // are unaffected by strict mode. It's just the parser will decide what to do with it - // differently depending on what mode it is in. - // - // This also applies to all our other context flags as well. - var nodeContextFlags = node.flags & 12679168 /* ContextFlags */; + var nodeContextFlags = node.flags & 12679168; if (nodeContextFlags !== contextFlags) { return undefined; } - // Ok, we have a node that looks like it could be reused. Now verify that it is valid - // in the current list parsing context that we're currently at. if (!canReuseNode(node, parsingContext)) { return undefined; } if (node.jsDocCache) { - // jsDocCache may include tags from parent nodes, which might have been modified. node.jsDocCache = undefined; } return node; } function consumeNode(node) { - // Move the scanner so it is after the node we just consumed. scanner.setTextPos(node.end); nextToken(); return node; } function canReuseNode(node, parsingContext) { switch (parsingContext) { - case 5 /* ClassMembers */: + case 5: return isReusableClassMember(node); - case 2 /* SwitchClauses */: + case 2: return isReusableSwitchClause(node); - case 0 /* SourceElements */: - case 1 /* BlockStatements */: - case 3 /* SwitchClauseStatements */: + case 0: + case 1: + case 3: return isReusableStatement(node); - case 6 /* EnumMembers */: + case 6: return isReusableEnumMember(node); - case 4 /* TypeMembers */: + case 4: return isReusableTypeMember(node); - case 8 /* VariableDeclarations */: + case 8: return isReusableVariableDeclaration(node); - case 16 /* Parameters */: + case 16: return isReusableParameter(node); - case 17 /* RestProperties */: + case 17: return false; - // Any other lists we do not care about reusing nodes in. But feel free to add if - // you can do so safely. Danger areas involve nodes that may involve speculative - // parsing. If speculative parsing is involved with the node, then the range the - // parser reached while looking ahead might be in the edited range (see the example - // in canReuseVariableDeclaratorNode for a good case of this). - case 21 /* HeritageClauses */: - // This would probably be safe to reuse. There is no speculative parsing with - // heritage clauses. - case 18 /* TypeParameters */: - // This would probably be safe to reuse. There is no speculative parsing with - // type parameters. Note that that's because type *parameters* only occur in - // unambiguous *type* contexts. While type *arguments* occur in very ambiguous - // *expression* contexts. - case 20 /* TupleElementTypes */: - // This would probably be safe to reuse. There is no speculative parsing with - // tuple types. - // Technically, type argument list types are probably safe to reuse. While - // speculative parsing is involved with them (since type argument lists are only - // produced from speculative parsing a < as a type argument list), we only have - // the types because speculative parsing succeeded. Thus, the lookahead never - // went past the end of the list and rewound. - case 19 /* TypeArguments */: - // Note: these are almost certainly not safe to ever reuse. Expressions commonly - // need a large amount of lookahead, and we should not reuse them as they may - // have actually intersected the edit. - case 11 /* ArgumentExpressions */: - // This is not safe to reuse for the same reason as the 'AssignmentExpression' - // cases. i.e. a property assignment may end with an expression, and thus might - // have lookahead far beyond it's old node. - case 12 /* ObjectLiteralMembers */: - // This is probably not safe to reuse. There can be speculative parsing with - // type names in a heritage clause. There can be generic names in the type - // name list, and there can be left hand side expressions (which can have type - // arguments.) - case 7 /* HeritageClauseElement */: - // Perhaps safe to reuse, but it's unlikely we'd see more than a dozen attributes - // on any given element. Same for children. - case 13 /* JsxAttributes */: - case 14 /* JsxChildren */: + case 21: + case 18: + case 20: + case 19: + case 11: + case 12: + case 7: + case 13: + case 14: } return false; } function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 155 /* Constructor */: - case 160 /* IndexSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 152 /* PropertyDeclaration */: - case 212 /* SemicolonClassElement */: + case 155: + case 160: + case 156: + case 157: + case 152: + case 212: return true; - case 154 /* MethodDeclaration */: - // Method declarations are not necessarily reusable. An object-literal - // may have a method calls "constructor(...)" and we must reparse that - // into an actual .ConstructorDeclaration. + case 154: var methodDeclaration = node; - var nameIsConstructor = methodDeclaration.name.kind === 71 /* Identifier */ && - methodDeclaration.name.originalKeywordKind === 123 /* ConstructorKeyword */; + var nameIsConstructor = methodDeclaration.name.kind === 71 && + methodDeclaration.name.originalKeywordKind === 123; return !nameIsConstructor; } } @@ -16649,8 +13298,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 266 /* CaseClause */: - case 267 /* DefaultClause */: + case 266: + case 267: return true; } } @@ -16659,86 +13308,70 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 214 /* VariableStatement */: - case 213 /* Block */: - case 217 /* IfStatement */: - case 216 /* ExpressionStatement */: - case 229 /* ThrowStatement */: - case 225 /* ReturnStatement */: - case 227 /* SwitchStatement */: - case 224 /* BreakStatement */: - case 223 /* ContinueStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 220 /* ForStatement */: - case 219 /* WhileStatement */: - case 226 /* WithStatement */: - case 215 /* EmptyStatement */: - case 230 /* TryStatement */: - case 228 /* LabeledStatement */: - case 218 /* DoStatement */: - case 231 /* DebuggerStatement */: - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: - case 250 /* ExportDeclaration */: - case 249 /* ExportAssignment */: - case 239 /* ModuleDeclaration */: - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 238 /* EnumDeclaration */: - case 237 /* TypeAliasDeclaration */: + case 234: + case 214: + case 213: + case 217: + case 216: + case 229: + case 225: + case 227: + case 224: + case 223: + case 221: + case 222: + case 220: + case 219: + case 226: + case 215: + case 230: + case 228: + case 218: + case 231: + case 244: + case 243: + case 250: + case 249: + case 239: + case 235: + case 236: + case 238: + case 237: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 273 /* EnumMember */; + return node.kind === 273; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 159 /* ConstructSignature */: - case 153 /* MethodSignature */: - case 160 /* IndexSignature */: - case 151 /* PropertySignature */: - case 158 /* CallSignature */: + case 159: + case 153: + case 160: + case 151: + case 158: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 232 /* VariableDeclaration */) { + if (node.kind !== 232) { return false; } - // Very subtle incremental parsing bug. Consider the following code: - // - // let v = new List < A, B - // - // This is actually legal code. It's a list of variable declarators "v = new List() - // - // then we have a problem. "v = new List= 0) { - // Always preserve a trailing comma by marking it on the NodeArray result.hasTrailingComma = true; } return result; @@ -16849,9 +13463,8 @@ var ts; function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage); var dotPos = scanner.getStartPos(); - while (parseOptional(23 /* DotToken */)) { - if (token() === 27 /* LessThanToken */) { - // the entity is part of a JSDoc-style generic, so record the trailing dot for later error reporting + while (parseOptional(23)) { + if (token() === 27) { entity.jsdocDotPos = dotPos; break; } @@ -16861,64 +13474,42 @@ var ts; return entity; } function createQualifiedName(entity, name) { - var node = createNode(146 /* QualifiedName */, entity.pos); + var node = createNode(146, entity.pos); node.left = entity; node.right = name; return finishNode(node); } function parseRightSideOfDot(allowIdentifierNames) { - // Technically a keyword is valid here as all identifiers and keywords are identifier names. - // However, often we'll encounter this in error situations when the identifier or keyword - // is actually starting another valid construct. - // - // So, we check for the following specific case: - // - // name. - // identifierOrKeyword identifierNameOrKeyword - // - // Note: the newlines are important here. For example, if that above code - // were rewritten into: - // - // name.identifierOrKeyword - // identifierNameOrKeyword - // - // Then we would consider it valid. That's because ASI would take effect and - // the code would be implicitly: "name.identifierOrKeyword; identifierNameOrKeyword". - // In the first case though, ASI will not take effect because there is not a - // line terminator after the identifier or keyword. if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token())) { var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); if (matchesPattern) { - // Report that we need an identifier. However, report it right after the dot, - // and not on the next token. This is because the next token might actually - // be an identifier and the error would be quite confusing. - return createMissingNode(71 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected); + return createMissingNode(71, true, ts.Diagnostics.Identifier_expected); } } return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { - var template = createNode(202 /* TemplateExpression */); + var template = createNode(202); template.head = parseTemplateHead(); - ts.Debug.assert(template.head.kind === 14 /* TemplateHead */, "Template head has wrong token kind"); + ts.Debug.assert(template.head.kind === 14, "Template head has wrong token kind"); var list = []; var listPos = getNodePos(); do { list.push(parseTemplateSpan()); - } while (ts.last(list).literal.kind === 15 /* TemplateMiddle */); + } while (ts.last(list).literal.kind === 15); template.templateSpans = createNodeArray(list, listPos); return finishNode(template); } function parseTemplateSpan() { - var span = createNode(211 /* TemplateSpan */); + var span = createNode(211); span.expression = allowInAnd(parseExpression); var literal; - if (token() === 18 /* CloseBraceToken */) { + if (token() === 18) { reScanTemplateToken(); literal = parseTemplateMiddleOrTemplateTail(); } else { - literal = parseExpectedToken(16 /* TemplateTail */, ts.Diagnostics._0_expected, ts.tokenToString(18 /* CloseBraceToken */)); + literal = parseExpectedToken(16, ts.Diagnostics._0_expected, ts.tokenToString(18)); } span.literal = literal; return finishNode(span); @@ -16928,12 +13519,12 @@ var ts; } function parseTemplateHead() { var fragment = parseLiteralLikeNode(token()); - ts.Debug.assert(fragment.kind === 14 /* TemplateHead */, "Template head has wrong token kind"); + ts.Debug.assert(fragment.kind === 14, "Template head has wrong token kind"); return fragment; } function parseTemplateMiddleOrTemplateTail() { var fragment = parseLiteralLikeNode(token()); - ts.Debug.assert(fragment.kind === 15 /* TemplateMiddle */ || fragment.kind === 16 /* TemplateTail */, "Template fragment has wrong token kind"); + ts.Debug.assert(fragment.kind === 15 || fragment.kind === 16, "Template fragment has wrong token kind"); return fragment; } function parseLiteralLikeNode(kind) { @@ -16946,40 +13537,31 @@ var ts; if (scanner.isUnterminated()) { node.isUnterminated = true; } - // Octal literals are not allowed in strict mode or ES5 - // Note that theoretically the following condition would hold true literals like 009, - // which is not octal.But because of how the scanner separates the tokens, we would - // never get a token like this. Instead, we would get 00 and 9 as two separate tokens. - // We also do not need to check for negatives because any prefix operator would be part of a - // parent unary expression. - if (node.kind === 8 /* NumericLiteral */) { - node.numericLiteralFlags = scanner.getTokenFlags() & 1008 /* NumericLiteralFlags */; + if (node.kind === 8) { + node.numericLiteralFlags = scanner.getTokenFlags() & 1008; } nextToken(); finishNode(node); return node; } - // TYPES function parseTypeReference() { - var node = createNode(162 /* TypeReference */); - node.typeName = parseEntityName(/*allowReservedWords*/ true, ts.Diagnostics.Type_expected); - if (!scanner.hasPrecedingLineBreak() && token() === 27 /* LessThanToken */) { - node.typeArguments = parseBracketedList(19 /* TypeArguments */, parseType, 27 /* LessThanToken */, 29 /* GreaterThanToken */); + var node = createNode(162); + node.typeName = parseEntityName(true, ts.Diagnostics.Type_expected); + if (!scanner.hasPrecedingLineBreak() && token() === 27) { + node.typeArguments = parseBracketedList(19, parseType, 27, 29); } return finishNode(node); } - // If true, we should abort parsing an error function. function typeHasArrowFunctionBlockingParseError(node) { switch (node.kind) { - case 162 /* TypeReference */: + case 162: return ts.nodeIsMissing(node.typeName); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: { + case 163: + case 164: { var _a = node, parameters = _a.parameters, type = _a.type; - // parameters.pos === parameters.end only if we used parseMissingList, else should contain at least `()` return parameters.pos === parameters.end || typeHasArrowFunctionBlockingParseError(type); } - case 173 /* ParenthesizedType */: + case 173: return typeHasArrowFunctionBlockingParseError(node.type); default: return false; @@ -16987,20 +13569,20 @@ var ts; } function parseThisTypePredicate(lhs) { nextToken(); - var node = createNode(161 /* TypePredicate */, lhs.pos); + var node = createNode(161, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { - var node = createNode(174 /* ThisType */); + var node = createNode(174); nextToken(); return finishNode(node); } function parseJSDocAllType(postFixEquals) { - var result = createNode(279 /* JSDocAllType */); + var result = createNode(279); if (postFixEquals) { - return createJSDocPostfixType(283 /* JSDocOptionalType */, result); + return createJSDocPostfixType(283, result); } else { nextToken(); @@ -17008,162 +13590,127 @@ var ts; return finishNode(result); } function parseJSDocNonNullableType() { - var result = createNode(282 /* JSDocNonNullableType */); + var result = createNode(282); nextToken(); result.type = parseNonArrayType(); return finishNode(result); } function parseJSDocUnknownOrNullableType() { var pos = scanner.getStartPos(); - // skip the ? nextToken(); - // Need to lookahead to decide if this is a nullable or unknown type. - // Here are cases where we'll pick the unknown type: - // - // Foo(?, - // { a: ? } - // Foo(?) - // Foo - // Foo(?= - // (?| - if (token() === 26 /* CommaToken */ || - token() === 18 /* CloseBraceToken */ || - token() === 20 /* CloseParenToken */ || - token() === 29 /* GreaterThanToken */ || - token() === 58 /* EqualsToken */ || - token() === 49 /* BarToken */) { - var result = createNode(280 /* JSDocUnknownType */, pos); + if (token() === 26 || + token() === 18 || + token() === 20 || + token() === 29 || + token() === 58 || + token() === 49) { + var result = createNode(280, pos); return finishNode(result); } else { - var result = createNode(281 /* JSDocNullableType */, pos); + var result = createNode(281, pos); result.type = parseType(); return finishNode(result); } } function parseJSDocFunctionType() { if (lookAhead(nextTokenIsOpenParen)) { - var result = createNodeWithJSDoc(284 /* JSDocFunctionType */); + var result = createNodeWithJSDoc(284); nextToken(); - fillSignature(56 /* ColonToken */, 4 /* Type */ | 32 /* JSDoc */, result); + fillSignature(56, 4 | 32, result); return finishNode(result); } - var node = createNode(162 /* TypeReference */); + var node = createNode(162); node.typeName = parseIdentifierName(); return finishNode(node); } function parseJSDocParameter() { - var parameter = createNode(149 /* Parameter */); - if (token() === 99 /* ThisKeyword */ || token() === 94 /* NewKeyword */) { + var parameter = createNode(149); + if (token() === 99 || token() === 94) { parameter.name = parseIdentifierName(); - parseExpected(56 /* ColonToken */); + parseExpected(56); } parameter.type = parseJSDocType(); return finishNode(parameter); } function parseJSDocType() { - var dotdotdot = parseOptionalToken(24 /* DotDotDotToken */); + var dotdotdot = parseOptionalToken(24); var type = parseType(); if (dotdotdot) { - var variadic = createNode(285 /* JSDocVariadicType */, dotdotdot.pos); + var variadic = createNode(285, dotdotdot.pos); variadic.type = type; type = finishNode(variadic); } - if (token() === 58 /* EqualsToken */) { - return createJSDocPostfixType(283 /* JSDocOptionalType */, type); + if (token() === 58) { + return createJSDocPostfixType(283, type); } return type; } function parseTypeQuery() { - var node = createNode(165 /* TypeQuery */); - parseExpected(103 /* TypeOfKeyword */); - node.exprName = parseEntityName(/*allowReservedWords*/ true); + var node = createNode(165); + parseExpected(103); + node.exprName = parseEntityName(true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(148 /* TypeParameter */); + var node = createNode(148); node.name = parseIdentifier(); - if (parseOptional(85 /* ExtendsKeyword */)) { - // It's not uncommon for people to write improper constraints to a generic. If the - // user writes a constraint that is an expression and not an actual type, then parse - // it out as an expression (so we can recover well), but report that a type is needed - // instead. + if (parseOptional(85)) { if (isStartOfType() || !isStartOfExpression()) { node.constraint = parseType(); } else { - // It was not a type, and it looked like an expression. Parse out an expression - // here so we recover well. Note: it is important that we call parseUnaryExpression - // and not parseExpression here. If the user has: - // - // - // - // We do *not* want to consume the `>` as we're consuming the expression for "". node.expression = parseUnaryExpressionOrHigher(); } } - if (parseOptional(58 /* EqualsToken */)) { + if (parseOptional(58)) { node.default = parseType(); } return finishNode(node); } function parseTypeParameters() { - if (token() === 27 /* LessThanToken */) { - return parseBracketedList(18 /* TypeParameters */, parseTypeParameter, 27 /* LessThanToken */, 29 /* GreaterThanToken */); + if (token() === 27) { + return parseBracketedList(18, parseTypeParameter, 27, 29); } } function parseParameterType() { - if (parseOptional(56 /* ColonToken */)) { + if (parseOptional(56)) { return parseType(); } return undefined; } function isStartOfParameter() { - return token() === 24 /* DotDotDotToken */ || + return token() === 24 || isIdentifierOrPattern() || ts.isModifierKind(token()) || - token() === 57 /* AtToken */ || - isStartOfType(/*inStartOfParameter*/ true); + token() === 57 || + isStartOfType(true); } function parseParameter() { - var node = createNodeWithJSDoc(149 /* Parameter */); - if (token() === 99 /* ThisKeyword */) { - node.name = createIdentifier(/*isIdentifier*/ true); + var node = createNodeWithJSDoc(149); + if (token() === 99) { + node.name = createIdentifier(true); node.type = parseParameterType(); return finishNode(node); } node.decorators = parseDecorators(); node.modifiers = parseModifiers(); - node.dotDotDotToken = parseOptionalToken(24 /* DotDotDotToken */); - // FormalParameter [Yield,Await]: - // BindingElement[?Yield,?Await] + node.dotDotDotToken = parseOptionalToken(24); node.name = parseIdentifierOrPattern(); if (ts.getFullWidth(node.name) === 0 && !ts.hasModifiers(node) && ts.isModifierKind(token())) { - // in cases like - // 'use strict' - // function foo(static) - // isParameter('static') === true, because of isModifier('static') - // however 'static' is not a legal identifier in a strict mode. - // so result of this function will be ParameterDeclaration (flags = 0, name = missing, type = undefined, initializer = undefined) - // and current token will not change => parsing of the enclosing parameter list will last till the end of time (or OOM) - // to avoid this we'll advance cursor to the next token. nextToken(); } - node.questionToken = parseOptionalToken(55 /* QuestionToken */); + node.questionToken = parseOptionalToken(55); node.type = parseParameterType(); node.initializer = parseInitializer(); return finishNode(node); } - /** - * Note: If returnToken is EqualsGreaterThanToken, `signature.type` will always be defined. - * @returns If return type parsing succeeds - */ function fillSignature(returnToken, flags, signature) { - if (!(flags & 32 /* JSDoc */)) { + if (!(flags & 32)) { signature.typeParameters = parseTypeParameters(); } var parametersParsedSuccessfully = parseParameterList(signature, flags); - if (shouldParseReturnType(returnToken, !!(flags & 4 /* Type */))) { + if (shouldParseReturnType(returnToken, !!(flags & 4))) { signature.type = parseTypeOrTypePredicate(); if (typeHasArrowFunctionBlockingParseError(signature.type)) return false; @@ -17171,89 +13718,55 @@ var ts; return parametersParsedSuccessfully; } function shouldParseReturnType(returnToken, isType) { - if (returnToken === 36 /* EqualsGreaterThanToken */) { + if (returnToken === 36) { parseExpected(returnToken); return true; } - else if (parseOptional(56 /* ColonToken */)) { + else if (parseOptional(56)) { return true; } - else if (isType && token() === 36 /* EqualsGreaterThanToken */) { - // This is easy to get backward, especially in type contexts, so parse the type anyway - parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(56 /* ColonToken */)); + else if (isType && token() === 36) { + parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(56)); nextToken(); return true; } return false; } - // Returns true on success. function parseParameterList(signature, flags) { - // FormalParameters [Yield,Await]: (modified) - // [empty] - // FormalParameterList[?Yield,Await] - // - // FormalParameter[Yield,Await]: (modified) - // BindingElement[?Yield,Await] - // - // BindingElement [Yield,Await]: (modified) - // SingleNameBinding[?Yield,?Await] - // BindingPattern[?Yield,?Await]Initializer [In, ?Yield,?Await] opt - // - // SingleNameBinding [Yield,Await]: - // BindingIdentifier[?Yield,?Await]Initializer [In, ?Yield,?Await] opt - if (!parseExpected(19 /* OpenParenToken */)) { + if (!parseExpected(19)) { signature.parameters = createMissingList(); return false; } var savedYieldContext = inYieldContext(); var savedAwaitContext = inAwaitContext(); - setYieldContext(!!(flags & 1 /* Yield */)); - setAwaitContext(!!(flags & 2 /* Await */)); - signature.parameters = parseDelimitedList(16 /* Parameters */, flags & 32 /* JSDoc */ ? parseJSDocParameter : parseParameter); + setYieldContext(!!(flags & 1)); + setAwaitContext(!!(flags & 2)); + signature.parameters = parseDelimitedList(16, flags & 32 ? parseJSDocParameter : parseParameter); setYieldContext(savedYieldContext); setAwaitContext(savedAwaitContext); - return parseExpected(20 /* CloseParenToken */); + return parseExpected(20); } function parseTypeMemberSemicolon() { - // We allow type members to be separated by commas or (possibly ASI) semicolons. - // First check if it was a comma. If so, we're done with the member. - if (parseOptional(26 /* CommaToken */)) { + if (parseOptional(26)) { return; } - // Didn't have a comma. We must have a (possible ASI) semicolon. parseSemicolon(); } function parseSignatureMember(kind) { var node = createNodeWithJSDoc(kind); - if (kind === 159 /* ConstructSignature */) { - parseExpected(94 /* NewKeyword */); + if (kind === 159) { + parseExpected(94); } - fillSignature(56 /* ColonToken */, 4 /* Type */, node); + fillSignature(56, 4, node); parseTypeMemberSemicolon(); return finishNode(node); } function isIndexSignature() { - return token() === 21 /* OpenBracketToken */ && lookAhead(isUnambiguouslyIndexSignature); + return token() === 21 && lookAhead(isUnambiguouslyIndexSignature); } function isUnambiguouslyIndexSignature() { - // The only allowed sequence is: - // - // [id: - // - // However, for error recovery, we also check the following cases: - // - // [... - // [id, - // [id?, - // [id?: - // [id?] - // [public id - // [private id - // [protected id - // [] - // nextToken(); - if (token() === 24 /* DotDotDotToken */ || token() === 22 /* CloseBracketToken */) { + if (token() === 24 || token() === 22) { return true; } if (ts.isModifierKind(token())) { @@ -17266,48 +13779,35 @@ var ts; return false; } else { - // Skip the identifier nextToken(); } - // A colon signifies a well formed indexer - // A comma should be a badly formed indexer because comma expressions are not allowed - // in computed properties. - if (token() === 56 /* ColonToken */ || token() === 26 /* CommaToken */) { + if (token() === 56 || token() === 26) { return true; } - // Question mark could be an indexer with an optional property, - // or it could be a conditional expression in a computed property. - if (token() !== 55 /* QuestionToken */) { + if (token() !== 55) { return false; } - // If any of the following tokens are after the question mark, it cannot - // be a conditional expression, so treat it as an indexer. nextToken(); - return token() === 56 /* ColonToken */ || token() === 26 /* CommaToken */ || token() === 22 /* CloseBracketToken */; + return token() === 56 || token() === 26 || token() === 22; } function parseIndexSignatureDeclaration(node) { - node.kind = 160 /* IndexSignature */; - node.parameters = parseBracketedList(16 /* Parameters */, parseParameter, 21 /* OpenBracketToken */, 22 /* CloseBracketToken */); + node.kind = 160; + node.parameters = parseBracketedList(16, parseParameter, 21, 22); node.type = parseTypeAnnotation(); parseTypeMemberSemicolon(); return finishNode(node); } function parsePropertyOrMethodSignature(node) { node.name = parsePropertyName(); - node.questionToken = parseOptionalToken(55 /* QuestionToken */); - if (token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */) { - node.kind = 153 /* MethodSignature */; - // Method signatures don't exist in expression contexts. So they have neither - // [Yield] nor [Await] - fillSignature(56 /* ColonToken */, 4 /* Type */, node); + node.questionToken = parseOptionalToken(55); + if (token() === 19 || token() === 27) { + node.kind = 153; + fillSignature(56, 4, node); } else { - node.kind = 151 /* PropertySignature */; + node.kind = 151; node.type = parseTypeAnnotation(); - if (token() === 58 /* EqualsToken */) { - // Although type literal properties cannot not have initializers, we attempt - // to parse an initializer so we can report in the checker that an interface - // property or type literal property cannot have an initializer. + if (token() === 58) { node.initializer = parseInitializer(); } } @@ -17315,45 +13815,39 @@ var ts; return finishNode(node); } function isTypeMemberStart() { - // Return true if we have the start of a signature member - if (token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */) { + if (token() === 19 || token() === 27) { return true; } var idToken = false; - // Eat up all modifiers, but hold on to the last one in case it is actually an identifier while (ts.isModifierKind(token())) { idToken = true; nextToken(); } - // Index signatures and computed property names are type members - if (token() === 21 /* OpenBracketToken */) { + if (token() === 21) { return true; } - // Try to get the first property-like token following all modifiers if (isLiteralPropertyName()) { idToken = true; nextToken(); } - // If we were able to get any potential identifier, check that it is - // the start of a member declaration if (idToken) { - return token() === 19 /* OpenParenToken */ || - token() === 27 /* LessThanToken */ || - token() === 55 /* QuestionToken */ || - token() === 56 /* ColonToken */ || - token() === 26 /* CommaToken */ || + return token() === 19 || + token() === 27 || + token() === 55 || + token() === 56 || + token() === 26 || canParseSemicolon(); } return false; } function parseTypeMember() { - if (token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */) { - return parseSignatureMember(158 /* CallSignature */); + if (token() === 19 || token() === 27) { + return parseSignatureMember(158); } - if (token() === 94 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) { - return parseSignatureMember(159 /* ConstructSignature */); + if (token() === 94 && lookAhead(nextTokenIsOpenParenOrLessThan)) { + return parseSignatureMember(159); } - var node = createNodeWithJSDoc(0 /* Unknown */); + var node = createNodeWithJSDoc(0); node.modifiers = parseModifiers(); if (isIndexSignature()) { return parseIndexSignatureDeclaration(node); @@ -17362,30 +13856,30 @@ var ts; } function nextTokenIsOpenParenOrLessThan() { nextToken(); - return token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */; + return token() === 19 || token() === 27; } function nextTokenIsDot() { - return nextToken() === 23 /* DotToken */; + return nextToken() === 23; } function nextTokenIsOpenParenOrLessThanOrDot() { switch (nextToken()) { - case 19 /* OpenParenToken */: - case 27 /* LessThanToken */: - case 23 /* DotToken */: + case 19: + case 27: + case 23: return true; } return false; } function parseTypeLiteral() { - var node = createNode(166 /* TypeLiteral */); + var node = createNode(166); node.members = parseObjectTypeMembers(); return finishNode(node); } function parseObjectTypeMembers() { var members; - if (parseExpected(17 /* OpenBraceToken */)) { - members = parseList(4 /* TypeMembers */, parseTypeMember); - parseExpected(18 /* CloseBraceToken */); + if (parseExpected(17)) { + members = parseList(4, parseTypeMember); + parseExpected(18); } else { members = createMissingList(); @@ -17394,76 +13888,76 @@ var ts; } function isStartOfMappedType() { nextToken(); - if (token() === 37 /* PlusToken */ || token() === 38 /* MinusToken */) { - return nextToken() === 132 /* ReadonlyKeyword */; + if (token() === 37 || token() === 38) { + return nextToken() === 132; } - if (token() === 132 /* ReadonlyKeyword */) { + if (token() === 132) { nextToken(); } - return token() === 21 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 92 /* InKeyword */; + return token() === 21 && nextTokenIsIdentifier() && nextToken() === 92; } function parseMappedTypeParameter() { - var node = createNode(148 /* TypeParameter */); + var node = createNode(148); node.name = parseIdentifier(); - parseExpected(92 /* InKeyword */); + parseExpected(92); node.constraint = parseType(); return finishNode(node); } function parseMappedType() { - var node = createNode(177 /* MappedType */); - parseExpected(17 /* OpenBraceToken */); - if (token() === 132 /* ReadonlyKeyword */ || token() === 37 /* PlusToken */ || token() === 38 /* MinusToken */) { + var node = createNode(177); + parseExpected(17); + if (token() === 132 || token() === 37 || token() === 38) { node.readonlyToken = parseTokenNode(); - if (node.readonlyToken.kind !== 132 /* ReadonlyKeyword */) { - parseExpectedToken(132 /* ReadonlyKeyword */); + if (node.readonlyToken.kind !== 132) { + parseExpectedToken(132); } } - parseExpected(21 /* OpenBracketToken */); + parseExpected(21); node.typeParameter = parseMappedTypeParameter(); - parseExpected(22 /* CloseBracketToken */); - if (token() === 55 /* QuestionToken */ || token() === 37 /* PlusToken */ || token() === 38 /* MinusToken */) { + parseExpected(22); + if (token() === 55 || token() === 37 || token() === 38) { node.questionToken = parseTokenNode(); - if (node.questionToken.kind !== 55 /* QuestionToken */) { - parseExpectedToken(55 /* QuestionToken */); + if (node.questionToken.kind !== 55) { + parseExpectedToken(55); } } node.type = parseTypeAnnotation(); parseSemicolon(); - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); return finishNode(node); } function parseTupleType() { - var node = createNode(168 /* TupleType */); - node.elementTypes = parseBracketedList(20 /* TupleElementTypes */, parseType, 21 /* OpenBracketToken */, 22 /* CloseBracketToken */); + var node = createNode(168); + node.elementTypes = parseBracketedList(20, parseType, 21, 22); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(173 /* ParenthesizedType */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(173); + parseExpected(19); node.type = parseType(); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); return finishNode(node); } function parseFunctionOrConstructorType() { var pos = getNodePos(); - var kind = parseOptional(94 /* NewKeyword */) ? 164 /* ConstructorType */ : 163 /* FunctionType */; + var kind = parseOptional(94) ? 164 : 163; var node = createNodeWithJSDoc(kind, pos); - fillSignature(36 /* EqualsGreaterThanToken */, 4 /* Type */, node); + fillSignature(36, 4, node); return finishNode(node); } function parseKeywordAndNoDot() { var node = parseTokenNode(); - return token() === 23 /* DotToken */ ? undefined : node; + return token() === 23 ? undefined : node; } function parseLiteralTypeNode(negative) { - var node = createNode(178 /* LiteralType */); + var node = createNode(178); var unaryMinusExpression; if (negative) { - unaryMinusExpression = createNode(198 /* PrefixUnaryExpression */); - unaryMinusExpression.operator = 38 /* MinusToken */; + unaryMinusExpression = createNode(198); + unaryMinusExpression.operator = 38; nextToken(); } - var expression = token() === 101 /* TrueKeyword */ || token() === 86 /* FalseKeyword */ + var expression = token() === 101 || token() === 86 ? parseTokenNode() : parseLiteralLikeNode(token()); if (negative) { @@ -17476,79 +13970,78 @@ var ts; } function isStartOfTypeOfImportType() { nextToken(); - return token() === 91 /* ImportKeyword */; + return token() === 91; } function parseImportType() { - sourceFile.flags |= 524288 /* PossiblyContainsDynamicImport */; - var node = createNode(179 /* ImportType */); - if (parseOptional(103 /* TypeOfKeyword */)) { + sourceFile.flags |= 524288; + var node = createNode(179); + if (parseOptional(103)) { node.isTypeOf = true; } - parseExpected(91 /* ImportKeyword */); - parseExpected(19 /* OpenParenToken */); + parseExpected(91); + parseExpected(19); node.argument = parseType(); - parseExpected(20 /* CloseParenToken */); - if (parseOptional(23 /* DotToken */)) { - node.qualifier = parseEntityName(/*allowReservedWords*/ true, ts.Diagnostics.Type_expected); + parseExpected(20); + if (parseOptional(23)) { + node.qualifier = parseEntityName(true, ts.Diagnostics.Type_expected); } node.typeArguments = tryParseTypeArguments(); return finishNode(node); } function nextTokenIsNumericLiteral() { - return nextToken() === 8 /* NumericLiteral */; + return nextToken() === 8; } function parseNonArrayType() { switch (token()) { - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 137 /* StringKeyword */: - case 134 /* NumberKeyword */: - case 138 /* SymbolKeyword */: - case 122 /* BooleanKeyword */: - case 140 /* UndefinedKeyword */: - case 131 /* NeverKeyword */: - case 135 /* ObjectKeyword */: - // If these are followed by a dot, then parse these out as a dotted type reference instead. + case 119: + case 142: + case 137: + case 134: + case 138: + case 122: + case 140: + case 131: + case 135: return tryParse(parseKeywordAndNoDot) || parseTypeReference(); - case 39 /* AsteriskToken */: - return parseJSDocAllType(/*postfixEquals*/ false); - case 61 /* AsteriskEqualsToken */: - return parseJSDocAllType(/*postfixEquals*/ true); - case 55 /* QuestionToken */: + case 39: + return parseJSDocAllType(false); + case 61: + return parseJSDocAllType(true); + case 55: return parseJSDocUnknownOrNullableType(); - case 89 /* FunctionKeyword */: + case 89: return parseJSDocFunctionType(); - case 51 /* ExclamationToken */: + case 51: return parseJSDocNonNullableType(); - case 13 /* NoSubstitutionTemplateLiteral */: - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: + case 13: + case 9: + case 8: + case 101: + case 86: return parseLiteralTypeNode(); - case 38 /* MinusToken */: - return lookAhead(nextTokenIsNumericLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference(); - case 105 /* VoidKeyword */: - case 95 /* NullKeyword */: + case 38: + return lookAhead(nextTokenIsNumericLiteral) ? parseLiteralTypeNode(true) : parseTypeReference(); + case 105: + case 95: return parseTokenNode(); - case 99 /* ThisKeyword */: { + case 99: { var thisKeyword = parseThisTypeNode(); - if (token() === 127 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) { + if (token() === 127 && !scanner.hasPrecedingLineBreak()) { return parseThisTypePredicate(thisKeyword); } else { return thisKeyword; } } - case 103 /* TypeOfKeyword */: + case 103: return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery(); - case 17 /* OpenBraceToken */: + case 17: return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral(); - case 21 /* OpenBracketToken */: + case 21: return parseTupleType(); - case 19 /* OpenParenToken */: + case 19: return parseParenthesizedType(); - case 91 /* ImportKeyword */: + case 91: return parseImportType(); default: return parseTypeReference(); @@ -17556,42 +14049,40 @@ var ts; } function isStartOfType(inStartOfParameter) { switch (token()) { - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 137 /* StringKeyword */: - case 134 /* NumberKeyword */: - case 122 /* BooleanKeyword */: - case 138 /* SymbolKeyword */: - case 141 /* UniqueKeyword */: - case 105 /* VoidKeyword */: - case 140 /* UndefinedKeyword */: - case 95 /* NullKeyword */: - case 99 /* ThisKeyword */: - case 103 /* TypeOfKeyword */: - case 131 /* NeverKeyword */: - case 17 /* OpenBraceToken */: - case 21 /* OpenBracketToken */: - case 27 /* LessThanToken */: - case 49 /* BarToken */: - case 48 /* AmpersandToken */: - case 94 /* NewKeyword */: - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 135 /* ObjectKeyword */: - case 39 /* AsteriskToken */: - case 55 /* QuestionToken */: - case 51 /* ExclamationToken */: - case 24 /* DotDotDotToken */: - case 126 /* InferKeyword */: - case 91 /* ImportKeyword */: + case 119: + case 142: + case 137: + case 134: + case 122: + case 138: + case 141: + case 105: + case 140: + case 95: + case 99: + case 103: + case 131: + case 17: + case 21: + case 27: + case 49: + case 48: + case 94: + case 9: + case 8: + case 101: + case 86: + case 135: + case 39: + case 55: + case 51: + case 24: + case 126: + case 91: return true; - case 38 /* MinusToken */: + case 38: return !inStartOfParameter && lookAhead(nextTokenIsNumericLiteral); - case 19 /* OpenParenToken */: - // Only consider '(' the start of a type if followed by ')', '...', an identifier, a modifier, - // or something that starts a type. We don't want to consider things like '(1)' a type. + case 19: return !inStartOfParameter && lookAhead(isStartOfParenthesizedOrFunctionType); default: return isIdentifier(); @@ -17599,35 +14090,34 @@ var ts; } function isStartOfParenthesizedOrFunctionType() { nextToken(); - return token() === 20 /* CloseParenToken */ || isStartOfParameter() || isStartOfType(); + return token() === 20 || isStartOfParameter() || isStartOfType(); } function parsePostfixTypeOrHigher() { var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak()) { switch (token()) { - case 51 /* ExclamationToken */: - type = createJSDocPostfixType(282 /* JSDocNonNullableType */, type); + case 51: + type = createJSDocPostfixType(282, type); break; - case 55 /* QuestionToken */: - // If not in JSDoc and next token is start of a type we have a conditional type - if (!(contextFlags & 2097152 /* JSDoc */) && lookAhead(nextTokenIsStartOfType)) { + case 55: + if (!(contextFlags & 2097152) && lookAhead(nextTokenIsStartOfType)) { return type; } - type = createJSDocPostfixType(281 /* JSDocNullableType */, type); + type = createJSDocPostfixType(281, type); break; - case 21 /* OpenBracketToken */: - parseExpected(21 /* OpenBracketToken */); + case 21: + parseExpected(21); if (isStartOfType()) { - var node = createNode(176 /* IndexedAccessType */, type.pos); + var node = createNode(176, type.pos); node.objectType = type; node.indexType = parseType(); - parseExpected(22 /* CloseBracketToken */); + parseExpected(22); type = finishNode(node); } else { - var node = createNode(167 /* ArrayType */, type.pos); + var node = createNode(167, type.pos); node.elementType = type; - parseExpected(22 /* CloseBracketToken */); + parseExpected(22); type = finishNode(node); } break; @@ -17644,16 +14134,16 @@ var ts; return finishNode(postfix); } function parseTypeOperator(operator) { - var node = createNode(175 /* TypeOperator */); + var node = createNode(175); parseExpected(operator); node.operator = operator; node.type = parseTypeOperatorOrHigher(); return finishNode(node); } function parseInferType() { - var node = createNode(172 /* InferType */); - parseExpected(126 /* InferKeyword */); - var typeParameter = createNode(148 /* TypeParameter */); + var node = createNode(172); + parseExpected(126); + var typeParameter = createNode(148); typeParameter.name = parseIdentifier(); node.typeParameter = finishNode(typeParameter); return finishNode(node); @@ -17661,10 +14151,10 @@ var ts; function parseTypeOperatorOrHigher() { var operator = token(); switch (operator) { - case 128 /* KeyOfKeyword */: - case 141 /* UniqueKeyword */: + case 128: + case 141: return parseTypeOperator(operator); - case 126 /* InferKeyword */: + case 126: return parseInferType(); } return parsePostfixTypeOrHigher(); @@ -17684,28 +14174,26 @@ var ts; return type; } function parseIntersectionTypeOrHigher() { - return parseUnionOrIntersectionType(170 /* IntersectionType */, parseTypeOperatorOrHigher, 48 /* AmpersandToken */); + return parseUnionOrIntersectionType(170, parseTypeOperatorOrHigher, 48); } function parseUnionTypeOrHigher() { - return parseUnionOrIntersectionType(169 /* UnionType */, parseIntersectionTypeOrHigher, 49 /* BarToken */); + return parseUnionOrIntersectionType(169, parseIntersectionTypeOrHigher, 49); } function isStartOfFunctionType() { - if (token() === 27 /* LessThanToken */) { + if (token() === 27) { return true; } - return token() === 19 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType); + return token() === 19 && lookAhead(isUnambiguouslyStartOfFunctionType); } function skipParameterStart() { if (ts.isModifierKind(token())) { - // Skip modifiers parseModifiers(); } - if (isIdentifier() || token() === 99 /* ThisKeyword */) { + if (isIdentifier() || token() === 99) { nextToken(); return true; } - if (token() === 21 /* OpenBracketToken */ || token() === 17 /* OpenBraceToken */) { - // Return true if we can parse an array or object binding pattern with no errors + if (token() === 21 || token() === 17) { var previousErrorCount = parseDiagnostics.length; parseIdentifierOrPattern(); return previousErrorCount === parseDiagnostics.length; @@ -17714,26 +14202,17 @@ var ts; } function isUnambiguouslyStartOfFunctionType() { nextToken(); - if (token() === 20 /* CloseParenToken */ || token() === 24 /* DotDotDotToken */) { - // ( ) - // ( ... + if (token() === 20 || token() === 24) { return true; } if (skipParameterStart()) { - // We successfully skipped modifiers (if any) and an identifier or binding pattern, - // now see if we have something that indicates a parameter declaration - if (token() === 56 /* ColonToken */ || token() === 26 /* CommaToken */ || - token() === 55 /* QuestionToken */ || token() === 58 /* EqualsToken */) { - // ( xxx : - // ( xxx , - // ( xxx ? - // ( xxx = + if (token() === 56 || token() === 26 || + token() === 55 || token() === 58) { return true; } - if (token() === 20 /* CloseParenToken */) { + if (token() === 20) { nextToken(); - if (token() === 36 /* EqualsGreaterThanToken */) { - // ( xxx ) => + if (token() === 36) { return true; } } @@ -17744,7 +14223,7 @@ var ts; var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { - var node = createNode(161 /* TypePredicate */, typePredicateVariable.pos); + var node = createNode(161, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); @@ -17755,60 +14234,56 @@ var ts; } function parseTypePredicatePrefix() { var id = parseIdentifier(); - if (token() === 127 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) { + if (token() === 127 && !scanner.hasPrecedingLineBreak()) { nextToken(); return id; } } function parseType() { - // The rules about 'yield' only apply to actual code/expression contexts. They don't - // apply to 'type' contexts. So we disable these parameters here before moving on. - return doOutsideOfContext(20480 /* TypeExcludesFlags */, parseTypeWorker); + return doOutsideOfContext(20480, parseTypeWorker); } function parseTypeWorker(noConditionalTypes) { - if (isStartOfFunctionType() || token() === 94 /* NewKeyword */) { + if (isStartOfFunctionType() || token() === 94) { return parseFunctionOrConstructorType(); } var type = parseUnionTypeOrHigher(); - if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(85 /* ExtendsKeyword */)) { - var node = createNode(171 /* ConditionalType */, type.pos); + if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(85)) { + var node = createNode(171, type.pos); node.checkType = type; - // The type following 'extends' is not permitted to be another conditional type - node.extendsType = parseTypeWorker(/*noConditionalTypes*/ true); - parseExpected(55 /* QuestionToken */); + node.extendsType = parseTypeWorker(true); + parseExpected(55); node.trueType = parseTypeWorker(); - parseExpected(56 /* ColonToken */); + parseExpected(56); node.falseType = parseTypeWorker(); return finishNode(node); } return type; } function parseTypeAnnotation() { - return parseOptional(56 /* ColonToken */) ? parseType() : undefined; + return parseOptional(56) ? parseType() : undefined; } - // EXPRESSIONS function isStartOfLeftHandSideExpression() { switch (token()) { - case 99 /* ThisKeyword */: - case 97 /* SuperKeyword */: - case 95 /* NullKeyword */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 14 /* TemplateHead */: - case 19 /* OpenParenToken */: - case 21 /* OpenBracketToken */: - case 17 /* OpenBraceToken */: - case 89 /* FunctionKeyword */: - case 75 /* ClassKeyword */: - case 94 /* NewKeyword */: - case 41 /* SlashToken */: - case 63 /* SlashEqualsToken */: - case 71 /* Identifier */: + case 99: + case 97: + case 95: + case 101: + case 86: + case 8: + case 9: + case 13: + case 14: + case 19: + case 21: + case 17: + case 89: + case 75: + case 94: + case 41: + case 63: + case 71: return true; - case 91 /* ImportKeyword */: + case 91: return lookAhead(nextTokenIsOpenParenOrLessThanOrDot); default: return isIdentifier(); @@ -17819,27 +14294,20 @@ var ts; return true; } switch (token()) { - case 37 /* PlusToken */: - case 38 /* MinusToken */: - case 52 /* TildeToken */: - case 51 /* ExclamationToken */: - case 80 /* DeleteKeyword */: - case 103 /* TypeOfKeyword */: - case 105 /* VoidKeyword */: - case 43 /* PlusPlusToken */: - case 44 /* MinusMinusToken */: - case 27 /* LessThanToken */: - case 121 /* AwaitKeyword */: - case 116 /* YieldKeyword */: - // Yield/await always starts an expression. Either it is an identifier (in which case - // it is definitely an expression). Or it's a keyword (either because we're in - // a generator or async function, or in strict mode (or both)) and it started a yield or await expression. + case 37: + case 38: + case 52: + case 51: + case 80: + case 103: + case 105: + case 43: + case 44: + case 27: + case 121: + case 116: return true; default: - // Error tolerance. If we see the start of some binary operator, we consider - // that the start of an expression. That way we'll parse out a missing identifier, - // give a good message about an identifier being missing, and then consume the - // rest of the binary expression. if (isBinaryOperator()) { return true; } @@ -17847,114 +14315,52 @@ var ts; } } function isStartOfExpressionStatement() { - // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement. - return token() !== 17 /* OpenBraceToken */ && - token() !== 89 /* FunctionKeyword */ && - token() !== 75 /* ClassKeyword */ && - token() !== 57 /* AtToken */ && + return token() !== 17 && + token() !== 89 && + token() !== 75 && + token() !== 57 && isStartOfExpression(); } function parseExpression() { - // Expression[in]: - // AssignmentExpression[in] - // Expression[in] , AssignmentExpression[in] - // clear the decorator context when parsing Expression, as it should be unambiguous when parsing a decorator var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { - setDecoratorContext(/*val*/ false); + setDecoratorContext(false); } var expr = parseAssignmentExpressionOrHigher(); var operatorToken; - while ((operatorToken = parseOptionalToken(26 /* CommaToken */))) { + while ((operatorToken = parseOptionalToken(26))) { expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher()); } if (saveDecoratorContext) { - setDecoratorContext(/*val*/ true); + setDecoratorContext(true); } return expr; } function parseInitializer() { - return parseOptional(58 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined; + return parseOptional(58) ? parseAssignmentExpressionOrHigher() : undefined; } function parseAssignmentExpressionOrHigher() { - // AssignmentExpression[in,yield]: - // 1) ConditionalExpression[?in,?yield] - // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield] - // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield] - // 4) ArrowFunctionExpression[?in,?yield] - // 5) AsyncArrowFunctionExpression[in,yield,await] - // 6) [+Yield] YieldExpression[?In] - // - // Note: for ease of implementation we treat productions '2' and '3' as the same thing. - // (i.e. they're both BinaryExpressions with an assignment operator in it). - // First, do the simple check if we have a YieldExpression (production '6'). if (isYieldExpression()) { return parseYieldExpression(); } - // Then, check if we have an arrow function (production '4' and '5') that starts with a parenthesized - // parameter list or is an async arrow function. - // AsyncArrowFunctionExpression: - // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] - // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] - // Production (1) of AsyncArrowFunctionExpression is parsed in "tryParseAsyncSimpleArrowFunctionExpression". - // And production (2) is parsed in "tryParseParenthesizedArrowFunctionExpression". - // - // If we do successfully parse arrow-function, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is - // not a LeftHandSideExpression, nor does it start a ConditionalExpression. So we are done - // with AssignmentExpression if we see one. var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } - // Now try to see if we're in production '1', '2' or '3'. A conditional expression can - // start with a LogicalOrExpression, while the assignment productions can only start with - // LeftHandSideExpressions. - // - // So, first, we try to just parse out a BinaryExpression. If we get something that is a - // LeftHandSide or higher, then we can try to parse out the assignment expression part. - // Otherwise, we try to parse out the conditional expression bit. We want to allow any - // binary expression here, so we pass in the 'lowest' precedence here so that it matches - // and consumes anything. - var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); - // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized - // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single - // identifier and the current token is an arrow. - if (expr.kind === 71 /* Identifier */ && token() === 36 /* EqualsGreaterThanToken */) { + var expr = parseBinaryExpressionOrHigher(0); + if (expr.kind === 71 && token() === 36) { return parseSimpleArrowFunctionExpression(expr); } - // Now see if we might be in cases '2' or '3'. - // If the expression was a LHS expression, and we have an assignment operator, then - // we're in '2' or '3'. Consume the assignment and return. - // - // Note: we call reScanGreaterToken so that we get an appropriately merged token - // for cases like `> > =` becoming `>>=` if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) { return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher()); } - // It wasn't an assignment or a lambda. This is a conditional expression: return parseConditionalExpressionRest(expr); } function isYieldExpression() { - if (token() === 116 /* YieldKeyword */) { - // If we have a 'yield' keyword, and this is a context where yield expressions are - // allowed, then definitely parse out a yield expression. + if (token() === 116) { if (inYieldContext()) { return true; } - // We're in a context where 'yield expr' is not allowed. However, if we can - // definitely tell that the user was trying to parse a 'yield expr' and not - // just a normal expr that start with a 'yield' identifier, then parse out - // a 'yield expr'. We can then report an error later that they are only - // allowed in generator expressions. - // - // for example, if we see 'yield(foo)', then we'll have to treat that as an - // invocation expression of something called 'yield'. However, if we have - // 'yield foo' then that is not legal as a normal expression, so we can - // definitely recognize this as a yield expression. - // - // for now we just check if the next token is an identifier. More heuristics - // can be added here later as necessary. We just need to make sure that we - // don't accidentally consume something legal. return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); } return false; @@ -17964,302 +14370,213 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(203 /* YieldExpression */); - // YieldExpression[In] : - // yield - // yield [no LineTerminator here] [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] - // yield [no LineTerminator here] * [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] + var node = createNode(203); nextToken(); if (!scanner.hasPrecedingLineBreak() && - (token() === 39 /* AsteriskToken */ || isStartOfExpression())) { - node.asteriskToken = parseOptionalToken(39 /* AsteriskToken */); + (token() === 39 || isStartOfExpression())) { + node.asteriskToken = parseOptionalToken(39); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } else { - // if the next token is not on the same line as yield. or we don't have an '*' or - // the start of an expression, then this is just a simple "yield" expression. return finishNode(node); } } function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { - ts.Debug.assert(token() === 36 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + ts.Debug.assert(token() === 36, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); var node; if (asyncModifier) { - node = createNode(193 /* ArrowFunction */, asyncModifier.pos); + node = createNode(193, asyncModifier.pos); node.modifiers = asyncModifier; } else { - node = createNode(193 /* ArrowFunction */, identifier.pos); + node = createNode(193, identifier.pos); } - var parameter = createNode(149 /* Parameter */, identifier.pos); + var parameter = createNode(149, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = createNodeArray([parameter], parameter.pos, parameter.end); - node.equalsGreaterThanToken = parseExpectedToken(36 /* EqualsGreaterThanToken */); - node.body = parseArrowFunctionExpressionBody(/*isAsync*/ !!asyncModifier); + node.equalsGreaterThanToken = parseExpectedToken(36); + node.body = parseArrowFunctionExpressionBody(!!asyncModifier); return addJSDocComment(finishNode(node)); } function tryParseParenthesizedArrowFunctionExpression() { var triState = isParenthesizedArrowFunctionExpression(); - if (triState === 0 /* False */) { - // It's definitely not a parenthesized arrow function expression. + if (triState === 0) { return undefined; } - // If we definitely have an arrow function, then we can just parse one, not requiring a - // following => or { token. Otherwise, we *might* have an arrow function. Try to parse - // it out, but don't allow any ambiguity, and return 'undefined' if this could be an - // expression instead. - var arrowFunction = triState === 1 /* True */ - ? parseParenthesizedArrowFunctionExpressionHead(/*allowAmbiguity*/ true) + var arrowFunction = triState === 1 + ? parseParenthesizedArrowFunctionExpressionHead(true) : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); if (!arrowFunction) { - // Didn't appear to actually be a parenthesized arrow function. Just bail out. return undefined; } - var isAsync = ts.hasModifier(arrowFunction, 256 /* Async */); - // If we have an arrow, then try to parse the body. Even if not, try to parse if we - // have an opening brace, just in case we're in an error state. + var isAsync = ts.hasModifier(arrowFunction, 256); var lastToken = token(); - arrowFunction.equalsGreaterThanToken = parseExpectedToken(36 /* EqualsGreaterThanToken */); - arrowFunction.body = (lastToken === 36 /* EqualsGreaterThanToken */ || lastToken === 17 /* OpenBraceToken */) + arrowFunction.equalsGreaterThanToken = parseExpectedToken(36); + arrowFunction.body = (lastToken === 36 || lastToken === 17) ? parseArrowFunctionExpressionBody(isAsync) : parseIdentifier(); return finishNode(arrowFunction); } - // True -> We definitely expect a parenthesized arrow function here. - // False -> There *cannot* be a parenthesized arrow function here. - // Unknown -> There *might* be a parenthesized arrow function here. - // Speculatively look ahead to be sure, and rollback if not. function isParenthesizedArrowFunctionExpression() { - if (token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */ || token() === 120 /* AsyncKeyword */) { + if (token() === 19 || token() === 27 || token() === 120) { return lookAhead(isParenthesizedArrowFunctionExpressionWorker); } - if (token() === 36 /* EqualsGreaterThanToken */) { - // ERROR RECOVERY TWEAK: - // If we see a standalone => try to parse it as an arrow function expression as that's - // likely what the user intended to write. - return 1 /* True */; + if (token() === 36) { + return 1; } - // Definitely not a parenthesized arrow function. - return 0 /* False */; + return 0; } function isParenthesizedArrowFunctionExpressionWorker() { - if (token() === 120 /* AsyncKeyword */) { + if (token() === 120) { nextToken(); if (scanner.hasPrecedingLineBreak()) { - return 0 /* False */; + return 0; } - if (token() !== 19 /* OpenParenToken */ && token() !== 27 /* LessThanToken */) { - return 0 /* False */; + if (token() !== 19 && token() !== 27) { + return 0; } } var first = token(); var second = nextToken(); - if (first === 19 /* OpenParenToken */) { - if (second === 20 /* CloseParenToken */) { - // Simple cases: "() =>", "(): ", and "() {". - // This is an arrow function with no parameters. - // The last one is not actually an arrow function, - // but this is probably what the user intended. + if (first === 19) { + if (second === 20) { var third = nextToken(); switch (third) { - case 36 /* EqualsGreaterThanToken */: - case 56 /* ColonToken */: - case 17 /* OpenBraceToken */: - return 1 /* True */; + case 36: + case 56: + case 17: + return 1; default: - return 0 /* False */; + return 0; } } - // If encounter "([" or "({", this could be the start of a binding pattern. - // Examples: - // ([ x ]) => { } - // ({ x }) => { } - // ([ x ]) - // ({ x }) - if (second === 21 /* OpenBracketToken */ || second === 17 /* OpenBraceToken */) { - return 2 /* Unknown */; + if (second === 21 || second === 17) { + return 2; } - // Simple case: "(..." - // This is an arrow function with a rest parameter. - if (second === 24 /* DotDotDotToken */) { - return 1 /* True */; + if (second === 24) { + return 1; } - // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This - // isn't actually allowed, but we want to treat it as a lambda so we can provide - // a good error message. - if (ts.isModifierKind(second) && second !== 120 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) { - return 1 /* True */; + if (ts.isModifierKind(second) && second !== 120 && lookAhead(nextTokenIsIdentifier)) { + return 1; } - // If we had "(" followed by something that's not an identifier, - // then this definitely doesn't look like a lambda. if (!isIdentifier()) { - return 0 /* False */; + return 0; } switch (nextToken()) { - case 56 /* ColonToken */: - // If we have something like "(a:", then we must have a - // type-annotated parameter in an arrow function expression. - return 1 /* True */; - case 55 /* QuestionToken */: + case 56: + return 1; + case 55: nextToken(); - // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda. - if (token() === 56 /* ColonToken */ || token() === 26 /* CommaToken */ || token() === 58 /* EqualsToken */ || token() === 20 /* CloseParenToken */) { - return 1 /* True */; + if (token() === 56 || token() === 26 || token() === 58 || token() === 20) { + return 1; } - // Otherwise it is definitely not a lambda. - return 0 /* False */; - case 26 /* CommaToken */: - case 58 /* EqualsToken */: - case 20 /* CloseParenToken */: - // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function - return 2 /* Unknown */; + return 0; + case 26: + case 58: + case 20: + return 2; } - // It is definitely not an arrow function - return 0 /* False */; + return 0; } else { - ts.Debug.assert(first === 27 /* LessThanToken */); - // If we have "<" not followed by an identifier, - // then this definitely is not an arrow function. + ts.Debug.assert(first === 27); if (!isIdentifier()) { - return 0 /* False */; + return 0; } - // JSX overrides - if (sourceFile.languageVariant === 1 /* JSX */) { + if (sourceFile.languageVariant === 1) { var isArrowFunctionInJsx = lookAhead(function () { var third = nextToken(); - if (third === 85 /* ExtendsKeyword */) { + if (third === 85) { var fourth = nextToken(); switch (fourth) { - case 58 /* EqualsToken */: - case 29 /* GreaterThanToken */: + case 58: + case 29: return false; default: return true; } } - else if (third === 26 /* CommaToken */) { + else if (third === 26) { return true; } return false; }); if (isArrowFunctionInJsx) { - return 1 /* True */; + return 1; } - return 0 /* False */; + return 0; } - // This *could* be a parenthesized arrow function. - return 2 /* Unknown */; + return 2; } } function parsePossibleParenthesizedArrowFunctionExpressionHead() { - return parseParenthesizedArrowFunctionExpressionHead(/*allowAmbiguity*/ false); + return parseParenthesizedArrowFunctionExpressionHead(false); } function tryParseAsyncSimpleArrowFunctionExpression() { - // We do a check here so that we won't be doing unnecessarily call to "lookAhead" - if (token() === 120 /* AsyncKeyword */) { - if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) { + if (token() === 120) { + if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1) { var asyncModifier = parseModifiersForArrowFunction(); - var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); + var expr = parseBinaryExpressionOrHigher(0); return parseSimpleArrowFunctionExpression(expr, asyncModifier); } } return undefined; } function isUnParenthesizedAsyncArrowFunctionWorker() { - // AsyncArrowFunctionExpression: - // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] - // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] - if (token() === 120 /* AsyncKeyword */) { + if (token() === 120) { nextToken(); - // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function - // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher" - if (scanner.hasPrecedingLineBreak() || token() === 36 /* EqualsGreaterThanToken */) { - return 0 /* False */; + if (scanner.hasPrecedingLineBreak() || token() === 36) { + return 0; } - // Check for un-parenthesized AsyncArrowFunction - var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); - if (!scanner.hasPrecedingLineBreak() && expr.kind === 71 /* Identifier */ && token() === 36 /* EqualsGreaterThanToken */) { - return 1 /* True */; + var expr = parseBinaryExpressionOrHigher(0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 71 && token() === 36) { + return 1; } } - return 0 /* False */; + return 0; } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNodeWithJSDoc(193 /* ArrowFunction */); + var node = createNodeWithJSDoc(193); node.modifiers = parseModifiersForArrowFunction(); - var isAsync = ts.hasModifier(node, 256 /* Async */) ? 2 /* Await */ : 0 /* None */; - // Arrow functions are never generators. - // - // If we're speculatively parsing a signature for a parenthesized arrow function, then - // we have to have a complete parameter list. Otherwise we might see something like - // a => (b => c) - // And think that "(b =>" was actually a parenthesized arrow function with a missing - // close paren. - if (!fillSignature(56 /* ColonToken */, isAsync, node) && !allowAmbiguity) { + var isAsync = ts.hasModifier(node, 256) ? 2 : 0; + if (!fillSignature(56, isAsync, node) && !allowAmbiguity) { return undefined; } - // Parsing a signature isn't enough. - // Parenthesized arrow signatures often look like other valid expressions. - // For instance: - // - "(x = 10)" is an assignment expression parsed as a signature with a default parameter value. - // - "(x,y)" is a comma expression parsed as a signature with two parameters. - // - "a ? (b): c" will have "(b):" parsed as a signature with a return type annotation. - // - // So we need just a bit of lookahead to ensure that it can only be a signature. - if (!allowAmbiguity && token() !== 36 /* EqualsGreaterThanToken */ && token() !== 17 /* OpenBraceToken */) { - // Returning undefined here will cause our caller to rewind to where we started from. + if (!allowAmbiguity && token() !== 36 && token() !== 17) { return undefined; } return node; } function parseArrowFunctionExpressionBody(isAsync) { - if (token() === 17 /* OpenBraceToken */) { - return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */); + if (token() === 17) { + return parseFunctionBlock(isAsync ? 2 : 0); } - if (token() !== 25 /* SemicolonToken */ && - token() !== 89 /* FunctionKeyword */ && - token() !== 75 /* ClassKeyword */ && + if (token() !== 25 && + token() !== 89 && + token() !== 75 && isStartOfStatement() && !isStartOfExpressionStatement()) { - // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations) - // - // Here we try to recover from a potential error situation in the case where the - // user meant to supply a block. For example, if the user wrote: - // - // a => - // let v = 0; - // } - // - // they may be missing an open brace. Check to see if that's the case so we can - // try to recover better. If we don't do this, then the next close curly we see may end - // up preemptively closing the containing construct. - // - // Note: even when 'IgnoreMissingOpenBrace' is passed, parseBody will still error. - return parseFunctionBlock(16 /* IgnoreMissingOpenBrace */ | (isAsync ? 2 /* Await */ : 0 /* None */)); + return parseFunctionBlock(16 | (isAsync ? 2 : 0)); } return isAsync ? doInAwaitContext(parseAssignmentExpressionOrHigher) : doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher); } function parseConditionalExpressionRest(leftOperand) { - // Note: we are passed in an expression which was produced from parseBinaryExpressionOrHigher. - var questionToken = parseOptionalToken(55 /* QuestionToken */); + var questionToken = parseOptionalToken(55); if (!questionToken) { return leftOperand; } - // Note: we explicitly 'allowIn' in the whenTrue part of the condition expression, and - // we do not that for the 'whenFalse' part. - var node = createNode(201 /* ConditionalExpression */, leftOperand.pos); + var node = createNode(201, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); - node.colonToken = parseExpectedToken(56 /* ColonToken */); + node.colonToken = parseExpectedToken(56); node.whenFalse = ts.nodeIsPresent(node.colonToken) ? parseAssignmentExpressionOrHigher() - : createMissingNode(71 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(56 /* ColonToken */)); + : createMissingNode(71, false, ts.Diagnostics._0_expected, ts.tokenToString(56)); return finishNode(node); } function parseBinaryExpressionOrHigher(precedence) { @@ -18267,50 +14584,22 @@ var ts; return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { - return t === 92 /* InKeyword */ || t === 145 /* OfKeyword */; + return t === 92 || t === 145; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { - // We either have a binary operator here, or we're finished. We call - // reScanGreaterToken so that we merge token sequences like > and = into >= reScanGreaterToken(); var newPrecedence = ts.getBinaryOperatorPrecedence(token()); - // Check the precedence to see if we should "take" this operator - // - For left associative operator (all operator but **), consume the operator, - // recursively call the function below, and parse binaryExpression as a rightOperand - // of the caller if the new precedence of the operator is greater then or equal to the current precedence. - // For example: - // a - b - c; - // ^token; leftOperand = b. Return b to the caller as a rightOperand - // a * b - c - // ^token; leftOperand = b. Return b to the caller as a rightOperand - // a - b * c; - // ^token; leftOperand = b. Return b * c to the caller as a rightOperand - // - For right associative operator (**), consume the operator, recursively call the function - // and parse binaryExpression as a rightOperand of the caller if the new precedence of - // the operator is strictly grater than the current precedence - // For example: - // a ** b ** c; - // ^^token; leftOperand = b. Return b ** c to the caller as a rightOperand - // a - b ** c; - // ^^token; leftOperand = b. Return b ** c to the caller as a rightOperand - // a ** b - c - // ^token; leftOperand = b. Return b to the caller as a rightOperand - var consumeCurrentOperator = token() === 40 /* AsteriskAsteriskToken */ ? + var consumeCurrentOperator = token() === 40 ? newPrecedence >= precedence : newPrecedence > precedence; if (!consumeCurrentOperator) { break; } - if (token() === 92 /* InKeyword */ && inDisallowInContext()) { + if (token() === 92 && inDisallowInContext()) { break; } - if (token() === 118 /* AsKeyword */) { - // Make sure we *do* perform ASI for constructs like this: - // var x = foo - // as (Bar) - // This should be parsed as an initialized variable, followed - // by a function call to 'as' with the argument 'Bar' + if (token() === 118) { if (scanner.hasPrecedingLineBreak()) { break; } @@ -18326,105 +14615,77 @@ var ts; return leftOperand; } function isBinaryOperator() { - if (inDisallowInContext() && token() === 92 /* InKeyword */) { + if (inDisallowInContext() && token() === 92) { return false; } return ts.getBinaryOperatorPrecedence(token()) > 0; } function makeBinaryExpression(left, operatorToken, right) { - var node = createNode(200 /* BinaryExpression */, left.pos); + var node = createNode(200, left.pos); node.left = left; node.operatorToken = operatorToken; node.right = right; return finishNode(node); } function makeAsExpression(left, right) { - var node = createNode(208 /* AsExpression */, left.pos); + var node = createNode(208, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(198 /* PrefixUnaryExpression */); + var node = createNode(198); node.operator = token(); nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(194 /* DeleteExpression */); + var node = createNode(194); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseTypeOfExpression() { - var node = createNode(195 /* TypeOfExpression */); + var node = createNode(195); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseVoidExpression() { - var node = createNode(196 /* VoidExpression */); + var node = createNode(196); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function isAwaitExpression() { - if (token() === 121 /* AwaitKeyword */) { + if (token() === 121) { if (inAwaitContext()) { return true; } - // here we are using similar heuristics as 'isYieldExpression' return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); } return false; } function parseAwaitExpression() { - var node = createNode(197 /* AwaitExpression */); + var node = createNode(197); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } - /** - * Parse ES7 exponential expression and await expression - * - * ES7 ExponentiationExpression: - * 1) UnaryExpression[?Yield] - * 2) UpdateExpression[?Yield] ** ExponentiationExpression[?Yield] - * - */ function parseUnaryExpressionOrHigher() { - /** - * ES7 UpdateExpression: - * 1) LeftHandSideExpression[?Yield] - * 2) LeftHandSideExpression[?Yield][no LineTerminator here]++ - * 3) LeftHandSideExpression[?Yield][no LineTerminator here]-- - * 4) ++UnaryExpression[?Yield] - * 5) --UnaryExpression[?Yield] - */ if (isUpdateExpression()) { var updateExpression = parseUpdateExpression(); - return token() === 40 /* AsteriskAsteriskToken */ ? + return token() === 40 ? parseBinaryExpressionRest(ts.getBinaryOperatorPrecedence(token()), updateExpression) : updateExpression; } - /** - * ES7 UnaryExpression: - * 1) UpdateExpression[?yield] - * 2) delete UpdateExpression[?yield] - * 3) void UpdateExpression[?yield] - * 4) typeof UpdateExpression[?yield] - * 5) + UpdateExpression[?yield] - * 6) - UpdateExpression[?yield] - * 7) ~ UpdateExpression[?yield] - * 8) ! UpdateExpression[?yield] - */ var unaryOperator = token(); var simpleUnaryExpression = parseSimpleUnaryExpression(); - if (token() === 40 /* AsteriskAsteriskToken */) { + if (token() === 40) { var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); var end = simpleUnaryExpression.end; - if (simpleUnaryExpression.kind === 190 /* TypeAssertionExpression */) { + if (simpleUnaryExpression.kind === 190) { parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses); } else { @@ -18433,108 +14694,63 @@ var ts; } return simpleUnaryExpression; } - /** - * Parse ES7 simple-unary expression or higher: - * - * ES7 UnaryExpression: - * 1) UpdateExpression[?yield] - * 2) delete UnaryExpression[?yield] - * 3) void UnaryExpression[?yield] - * 4) typeof UnaryExpression[?yield] - * 5) + UnaryExpression[?yield] - * 6) - UnaryExpression[?yield] - * 7) ~ UnaryExpression[?yield] - * 8) ! UnaryExpression[?yield] - * 9) [+Await] await UnaryExpression[?yield] - */ function parseSimpleUnaryExpression() { switch (token()) { - case 37 /* PlusToken */: - case 38 /* MinusToken */: - case 52 /* TildeToken */: - case 51 /* ExclamationToken */: + case 37: + case 38: + case 52: + case 51: return parsePrefixUnaryExpression(); - case 80 /* DeleteKeyword */: + case 80: return parseDeleteExpression(); - case 103 /* TypeOfKeyword */: + case 103: return parseTypeOfExpression(); - case 105 /* VoidKeyword */: + case 105: return parseVoidExpression(); - case 27 /* LessThanToken */: - // This is modified UnaryExpression grammar in TypeScript - // UnaryExpression (modified): - // < type > UnaryExpression + case 27: return parseTypeAssertion(); - case 121 /* AwaitKeyword */: + case 121: if (isAwaitExpression()) { return parseAwaitExpression(); } - // falls through default: return parseUpdateExpression(); } } - /** - * Check if the current token can possibly be an ES7 increment expression. - * - * ES7 UpdateExpression: - * LeftHandSideExpression[?Yield] - * LeftHandSideExpression[?Yield][no LineTerminator here]++ - * LeftHandSideExpression[?Yield][no LineTerminator here]-- - * ++LeftHandSideExpression[?Yield] - * --LeftHandSideExpression[?Yield] - */ function isUpdateExpression() { - // This function is called inside parseUnaryExpression to decide - // whether to call parseSimpleUnaryExpression or call parseUpdateExpression directly switch (token()) { - case 37 /* PlusToken */: - case 38 /* MinusToken */: - case 52 /* TildeToken */: - case 51 /* ExclamationToken */: - case 80 /* DeleteKeyword */: - case 103 /* TypeOfKeyword */: - case 105 /* VoidKeyword */: - case 121 /* AwaitKeyword */: + case 37: + case 38: + case 52: + case 51: + case 80: + case 103: + case 105: + case 121: return false; - case 27 /* LessThanToken */: - // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression - if (sourceFile.languageVariant !== 1 /* JSX */) { + case 27: + if (sourceFile.languageVariant !== 1) { return false; } - // We are in JSX context and the token is part of JSXElement. - // falls through default: return true; } } - /** - * Parse ES7 UpdateExpression. UpdateExpression is used instead of ES6's PostFixExpression. - * - * ES7 UpdateExpression[yield]: - * 1) LeftHandSideExpression[?yield] - * 2) LeftHandSideExpression[?yield] [[no LineTerminator here]]++ - * 3) LeftHandSideExpression[?yield] [[no LineTerminator here]]-- - * 4) ++LeftHandSideExpression[?yield] - * 5) --LeftHandSideExpression[?yield] - * In TypeScript (2), (3) are parsed as PostfixUnaryExpression. (4), (5) are parsed as PrefixUnaryExpression - */ function parseUpdateExpression() { - if (token() === 43 /* PlusPlusToken */ || token() === 44 /* MinusMinusToken */) { - var node = createNode(198 /* PrefixUnaryExpression */); + if (token() === 43 || token() === 44) { + var node = createNode(198); node.operator = token(); nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); return finishNode(node); } - else if (sourceFile.languageVariant === 1 /* JSX */ && token() === 27 /* LessThanToken */ && lookAhead(nextTokenIsIdentifierOrKeywordOrGreaterThan)) { - // JSXElement is part of primaryExpression - return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ true); + else if (sourceFile.languageVariant === 1 && token() === 27 && lookAhead(nextTokenIsIdentifierOrKeywordOrGreaterThan)) { + return parseJsxElementOrSelfClosingElementOrFragment(true); } var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); - if ((token() === 43 /* PlusPlusToken */ || token() === 44 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(199 /* PostfixUnaryExpression */, expression.pos); + if ((token() === 43 || token() === 44) && !scanner.hasPrecedingLineBreak()) { + var node = createNode(199, expression.pos); node.operand = expression; node.operator = token(); nextToken(); @@ -18543,139 +14759,51 @@ var ts; return expression; } function parseLeftHandSideExpressionOrHigher() { - // Original Ecma: - // LeftHandSideExpression: See 11.2 - // NewExpression - // CallExpression - // - // Our simplification: - // - // LeftHandSideExpression: See 11.2 - // MemberExpression - // CallExpression - // - // See comment in parseMemberExpressionOrHigher on how we replaced NewExpression with - // MemberExpression to make our lives easier. - // - // to best understand the below code, it's important to see how CallExpression expands - // out into its own productions: - // - // CallExpression: - // MemberExpression Arguments - // CallExpression Arguments - // CallExpression[Expression] - // CallExpression.IdentifierName - // import (AssignmentExpression) - // super Arguments - // super.IdentifierName - // - // Because of the recursion in these calls, we need to bottom out first. There are three - // bottom out states we can run into: 1) We see 'super' which must start either of - // the last two CallExpression productions. 2) We see 'import' which must start import call. - // 3)we have a MemberExpression which either completes the LeftHandSideExpression, - // or starts the beginning of the first four CallExpression productions. var expression; - if (token() === 91 /* ImportKeyword */) { + if (token() === 91) { if (lookAhead(nextTokenIsOpenParenOrLessThan)) { - // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "(" - // For example: - // var foo3 = require("subfolder - // import * as foo1 from "module-from-node - // We want this import to be a statement rather than import call expression - sourceFile.flags |= 524288 /* PossiblyContainsDynamicImport */; + sourceFile.flags |= 524288; expression = parseTokenNode(); } else if (lookAhead(nextTokenIsDot)) { - // This is an 'import.*' metaproperty (i.e. 'import.meta') var fullStart = scanner.getStartPos(); - nextToken(); // advance past the 'import' - nextToken(); // advance past the dot - var node = createNode(210 /* MetaProperty */, fullStart); - node.keywordToken = 91 /* ImportKeyword */; + nextToken(); + nextToken(); + var node = createNode(210, fullStart); + node.keywordToken = 91; node.name = parseIdentifierName(); expression = finishNode(node); - sourceFile.flags |= 1048576 /* PossiblyContainsImportMeta */; + sourceFile.flags |= 1048576; } else { expression = parseMemberExpressionOrHigher(); } } else { - expression = token() === 97 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher(); + expression = token() === 97 ? parseSuperExpression() : parseMemberExpressionOrHigher(); } - // Now, we *may* be complete. However, we might have consumed the start of a - // CallExpression. As such, we need to consume the rest of it here to be complete. return parseCallExpressionRest(expression); } function parseMemberExpressionOrHigher() { - // Note: to make our lives simpler, we decompose the NewExpression productions and - // place ObjectCreationExpression and FunctionExpression into PrimaryExpression. - // like so: - // - // PrimaryExpression : See 11.1 - // this - // Identifier - // Literal - // ArrayLiteral - // ObjectLiteral - // (Expression) - // FunctionExpression - // new MemberExpression Arguments? - // - // MemberExpression : See 11.2 - // PrimaryExpression - // MemberExpression[Expression] - // MemberExpression.IdentifierName - // - // CallExpression : See 11.2 - // MemberExpression - // CallExpression Arguments - // CallExpression[Expression] - // CallExpression.IdentifierName - // - // Technically this is ambiguous. i.e. CallExpression defines: - // - // CallExpression: - // CallExpression Arguments - // - // If you see: "new Foo()" - // - // Then that could be treated as a single ObjectCreationExpression, or it could be - // treated as the invocation of "new Foo". We disambiguate that in code (to match - // the original grammar) by making sure that if we see an ObjectCreationExpression - // we always consume arguments if they are there. So we treat "new Foo()" as an - // object creation only, and not at all as an invocation. Another way to think - // about this is that for every "new" that we see, we will consume an argument list if - // it is there as part of the *associated* object creation node. Any additional - // argument lists we see, will become invocation expressions. - // - // Because there are no other places in the grammar now that refer to FunctionExpression - // or ObjectCreationExpression, it is safe to push down into the PrimaryExpression - // production. - // - // Because CallExpression and MemberExpression are left recursive, we need to bottom out - // of the recursion immediately. So we parse out a primary expression to start with. var expression = parsePrimaryExpression(); return parseMemberExpressionRest(expression); } function parseSuperExpression() { var expression = parseTokenNode(); - if (token() === 19 /* OpenParenToken */ || token() === 23 /* DotToken */ || token() === 21 /* OpenBracketToken */) { + if (token() === 19 || token() === 23 || token() === 21) { return expression; } - // If we have seen "super" it must be followed by '(' or '.'. - // If it wasn't then just try to parse out a '.' and report an error. - var node = createNode(185 /* PropertyAccessExpression */, expression.pos); + var node = createNode(185, expression.pos); node.expression = expression; - parseExpectedToken(23 /* DotToken */, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); - node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + parseExpectedToken(23, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + node.name = parseRightSideOfDot(true); return finishNode(node); } function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext); var result; - if (opening.kind === 257 /* JsxOpeningElement */) { - var node = createNode(255 /* JsxElement */, opening.pos); + if (opening.kind === 257) { + var node = createNode(255, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement); node.closingElement = parseJsxClosingElement(inExpressionContext); @@ -18684,34 +14812,26 @@ var ts; } result = finishNode(node); } - else if (opening.kind === 260 /* JsxOpeningFragment */) { - var node = createNode(259 /* JsxFragment */, opening.pos); + else if (opening.kind === 260) { + var node = createNode(259, opening.pos); node.openingFragment = opening; node.children = parseJsxChildren(node.openingFragment); node.closingFragment = parseJsxClosingFragment(inExpressionContext); result = finishNode(node); } else { - ts.Debug.assert(opening.kind === 256 /* JsxSelfClosingElement */); - // Nothing else to do for self-closing elements + ts.Debug.assert(opening.kind === 256); result = opening; } - // If the user writes the invalid code '
' in an expression context (i.e. not wrapped in - // an enclosing tag), we'll naively try to parse ^ this as a 'less than' operator and the remainder of the tag - // as garbage, which will cause the formatter to badly mangle the JSX. Perform a speculative parse of a JSX - // element if we see a < token so that we can wrap it in a synthetic binary expression so the formatter - // does less damage and we can report a better error. - // Since JSX elements are invalid < operands anyway, this lookahead parse will only occur in error scenarios - // of one sort or another. - if (inExpressionContext && token() === 27 /* LessThanToken */) { - var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ true); }); + if (inExpressionContext && token() === 27) { + var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElementOrFragment(true); }); if (invalidElement) { parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); - var badNode = createNode(200 /* BinaryExpression */, result.pos); + var badNode = createNode(200, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; - badNode.operatorToken = createMissingNode(26 /* CommaToken */, /*reportAtCurrentPosition*/ false, /*diagnosticMessage*/ undefined); // TODO: GH#18217 + badNode.operatorToken = createMissingNode(26, false, undefined); badNode.operatorToken.pos = badNode.operatorToken.end = badNode.right.pos; return badNode; } @@ -18719,16 +14839,14 @@ var ts; return result; } function parseJsxText() { - var node = createNode(10 /* JsxText */); - node.containsOnlyWhiteSpaces = currentToken === 11 /* JsxTextAllWhiteSpaces */; + var node = createNode(10); + node.containsOnlyWhiteSpaces = currentToken === 11; currentToken = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild(openingTag, token) { switch (token) { - case 1 /* EndOfFileToken */: - // If we hit EOF, issue the error at the tag that lacks the closing element - // rather than at the end of the file (which is useless) + case 1: if (ts.isJsxOpeningFragment(openingTag)) { parseErrorAtRange(openingTag, ts.Diagnostics.JSX_fragment_has_no_corresponding_closing_tag); } @@ -18736,16 +14854,16 @@ var ts; parseErrorAtRange(openingTag.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, openingTag.tagName)); } return undefined; - case 28 /* LessThanSlashToken */: - case 7 /* ConflictMarkerTrivia */: + case 28: + case 7: return undefined; - case 10 /* JsxText */: - case 11 /* JsxTextAllWhiteSpaces */: + case 10: + case 11: return parseJsxText(); - case 17 /* OpenBraceToken */: - return parseJsxExpression(/*inExpressionContext*/ false); - case 27 /* LessThanToken */: - return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false); + case 17: + return parseJsxExpression(false); + case 27: + return parseJsxElementOrSelfClosingElementOrFragment(false); default: return ts.Debug.assertNever(token); } @@ -18754,7 +14872,7 @@ var ts; var list = []; var listPos = getNodePos(); var saveParsingContext = parsingContext; - parsingContext |= 1 << 14 /* JsxChildren */; + parsingContext |= 1 << 14; while (true) { var child = parseJsxChild(openingTag, currentToken = scanner.reScanJsxToken()); if (!child) @@ -18765,16 +14883,15 @@ var ts; return createNodeArray(list, listPos); } function parseJsxAttributes() { - var jsxAttributes = createNode(263 /* JsxAttributes */); - jsxAttributes.properties = parseList(13 /* JsxAttributes */, parseJsxAttribute); + var jsxAttributes = createNode(263); + jsxAttributes.properties = parseList(13, parseJsxAttribute); return finishNode(jsxAttributes); } function parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext) { var fullStart = scanner.getStartPos(); - parseExpected(27 /* LessThanToken */); - if (token() === 29 /* GreaterThanToken */) { - // See below for explanation of scanJsxText - var node_1 = createNode(260 /* JsxOpeningFragment */, fullStart); + parseExpected(27); + if (token() === 29) { + var node_1 = createNode(260, fullStart); scanJsxText(); return finishNode(node_1); } @@ -18782,23 +14899,20 @@ var ts; var typeArguments = tryParseTypeArguments(); var attributes = parseJsxAttributes(); var node; - if (token() === 29 /* GreaterThanToken */) { - // Closing tag, so scan the immediately-following text with the JSX scanning instead - // of regular scanning to avoid treating illegal characters (e.g. '#') as immediate - // scanning errors - node = createNode(257 /* JsxOpeningElement */, fullStart); + if (token() === 29) { + node = createNode(257, fullStart); scanJsxText(); } else { - parseExpected(41 /* SlashToken */); + parseExpected(41); if (inExpressionContext) { - parseExpected(29 /* GreaterThanToken */); + parseExpected(29); } else { - parseExpected(29 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false); + parseExpected(29, undefined, false); scanJsxText(); } - node = createNode(256 /* JsxSelfClosingElement */, fullStart); + node = createNode(256, fullStart); } node.tagName = tagName; node.typeArguments = typeArguments; @@ -18807,125 +14921,119 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - // JsxElement can have name in the form of - // propertyAccessExpression - // primaryExpression in the form of an identifier and "this" keyword - // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword - // We only want to consider "this" as a primaryExpression - var expression = token() === 99 /* ThisKeyword */ ? + var expression = token() === 99 ? parseTokenNode() : parseIdentifierName(); - while (parseOptional(23 /* DotToken */)) { - var propertyAccess = createNode(185 /* PropertyAccessExpression */, expression.pos); + while (parseOptional(23)) { + var propertyAccess = createNode(185, expression.pos); propertyAccess.expression = expression; - propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); } return expression; } function parseJsxExpression(inExpressionContext) { - var node = createNode(265 /* JsxExpression */); - if (!parseExpected(17 /* OpenBraceToken */)) { + var node = createNode(265); + if (!parseExpected(17)) { return undefined; } - if (token() !== 18 /* CloseBraceToken */) { - node.dotDotDotToken = parseOptionalToken(24 /* DotDotDotToken */); + if (token() !== 18) { + node.dotDotDotToken = parseOptionalToken(24); node.expression = parseAssignmentExpressionOrHigher(); } if (inExpressionContext) { - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); } else { - parseExpected(18 /* CloseBraceToken */, /*message*/ undefined, /*shouldAdvance*/ false); + parseExpected(18, undefined, false); scanJsxText(); } return finishNode(node); } function parseJsxAttribute() { - if (token() === 17 /* OpenBraceToken */) { + if (token() === 17) { return parseJsxSpreadAttribute(); } scanJsxIdentifier(); - var node = createNode(262 /* JsxAttribute */); + var node = createNode(262); node.name = parseIdentifierName(); - if (token() === 58 /* EqualsToken */) { + if (token() === 58) { switch (scanJsxAttributeValue()) { - case 9 /* StringLiteral */: + case 9: node.initializer = parseLiteralNode(); break; default: - node.initializer = parseJsxExpression(/*inExpressionContext*/ true); + node.initializer = parseJsxExpression(true); break; } } return finishNode(node); } function parseJsxSpreadAttribute() { - var node = createNode(264 /* JsxSpreadAttribute */); - parseExpected(17 /* OpenBraceToken */); - parseExpected(24 /* DotDotDotToken */); + var node = createNode(264); + parseExpected(17); + parseExpected(24); node.expression = parseExpression(); - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { - var node = createNode(258 /* JsxClosingElement */); - parseExpected(28 /* LessThanSlashToken */); + var node = createNode(258); + parseExpected(28); node.tagName = parseJsxElementName(); if (inExpressionContext) { - parseExpected(29 /* GreaterThanToken */); + parseExpected(29); } else { - parseExpected(29 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false); + parseExpected(29, undefined, false); scanJsxText(); } return finishNode(node); } function parseJsxClosingFragment(inExpressionContext) { - var node = createNode(261 /* JsxClosingFragment */); - parseExpected(28 /* LessThanSlashToken */); + var node = createNode(261); + parseExpected(28); if (ts.tokenIsIdentifierOrKeyword(token())) { parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment); } if (inExpressionContext) { - parseExpected(29 /* GreaterThanToken */); + parseExpected(29); } else { - parseExpected(29 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false); + parseExpected(29, undefined, false); scanJsxText(); } return finishNode(node); } function parseTypeAssertion() { - var node = createNode(190 /* TypeAssertionExpression */); - parseExpected(27 /* LessThanToken */); + var node = createNode(190); + parseExpected(27); node.type = parseType(); - parseExpected(29 /* GreaterThanToken */); + parseExpected(29); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseMemberExpressionRest(expression) { while (true) { - var dotToken = parseOptionalToken(23 /* DotToken */); + var dotToken = parseOptionalToken(23); if (dotToken) { - var propertyAccess = createNode(185 /* PropertyAccessExpression */, expression.pos); + var propertyAccess = createNode(185, expression.pos); propertyAccess.expression = expression; - propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; } - if (token() === 51 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) { + if (token() === 51 && !scanner.hasPrecedingLineBreak()) { nextToken(); - var nonNullExpression = createNode(209 /* NonNullExpression */, expression.pos); + var nonNullExpression = createNode(209, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } - // when in the [Decorator] context, we do not parse ElementAccess as it could be part of a ComputedPropertyName - if (!inDecoratorContext() && parseOptional(21 /* OpenBracketToken */)) { - var indexedAccess = createNode(186 /* ElementAccessExpression */, expression.pos); + if (!inDecoratorContext() && parseOptional(21)) { + var indexedAccess = createNode(186, expression.pos); indexedAccess.expression = expression; - if (token() === 22 /* CloseBracketToken */) { - indexedAccess.argumentExpression = createMissingNode(71 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument); + if (token() === 22) { + indexedAccess.argumentExpression = createMissingNode(71, true, ts.Diagnostics.An_element_access_expression_should_take_an_argument); } else { var argument = allowInAnd(parseExpression); @@ -18934,25 +15042,25 @@ var ts; } indexedAccess.argumentExpression = argument; } - parseExpected(22 /* CloseBracketToken */); + parseExpected(22); expression = finishNode(indexedAccess); continue; } if (isTemplateStartOfTaggedTemplate()) { - expression = parseTaggedTemplateRest(expression, /*typeArguments*/ undefined); + expression = parseTaggedTemplateRest(expression, undefined); continue; } return expression; } } function isTemplateStartOfTaggedTemplate() { - return token() === 13 /* NoSubstitutionTemplateLiteral */ || token() === 14 /* TemplateHead */; + return token() === 13 || token() === 14; } function parseTaggedTemplateRest(tag, typeArguments) { - var tagExpression = createNode(189 /* TaggedTemplateExpression */, tag.pos); + var tagExpression = createNode(189, tag.pos); tagExpression.tag = tag; tagExpression.typeArguments = typeArguments; - tagExpression.template = token() === 13 /* NoSubstitutionTemplateLiteral */ + tagExpression.template = token() === 13 ? parseLiteralNode() : parseTemplateExpression(); return finishNode(tagExpression); @@ -18960,11 +15068,7 @@ var ts; function parseCallExpressionRest(expression) { while (true) { expression = parseMemberExpressionRest(expression); - if (token() === 27 /* LessThanToken */) { - // See if this is the start of a generic invocation. If so, consume it and - // keep checking for postfix expressions. Otherwise, it's just a '<' that's - // part of an arithmetic expression. Break out so we consume it higher in the - // stack. + if (token() === 27) { var typeArguments = tryParse(parseTypeArgumentsInExpression); if (!typeArguments) { return expression; @@ -18973,15 +15077,15 @@ var ts; expression = parseTaggedTemplateRest(expression, typeArguments); continue; } - var callExpr = createNode(187 /* CallExpression */, expression.pos); + var callExpr = createNode(187, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } - else if (token() === 19 /* OpenParenToken */) { - var callExpr = createNode(187 /* CallExpression */, expression.pos); + else if (token() === 19) { + var callExpr = createNode(187, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -18991,217 +15095,191 @@ var ts; } } function parseArgumentList() { - parseExpected(19 /* OpenParenToken */); - var result = parseDelimitedList(11 /* ArgumentExpressions */, parseArgumentExpression); - parseExpected(20 /* CloseParenToken */); + parseExpected(19); + var result = parseDelimitedList(11, parseArgumentExpression); + parseExpected(20); return result; } function parseTypeArgumentsInExpression() { - if (!parseOptional(27 /* LessThanToken */)) { + if (!parseOptional(27)) { return undefined; } - var typeArguments = parseDelimitedList(19 /* TypeArguments */, parseType); - if (!parseExpected(29 /* GreaterThanToken */)) { - // If it doesn't have the closing `>` then it's definitely not an type argument list. + var typeArguments = parseDelimitedList(19, parseType); + if (!parseExpected(29)) { return undefined; } - // If we have a '<', then only parse this as a argument list if the type arguments - // are complete and we have an open paren. if we don't, rewind and return nothing. return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : undefined; } function canFollowTypeArgumentsInExpression() { switch (token()) { - case 19 /* OpenParenToken */: // foo( - case 13 /* NoSubstitutionTemplateLiteral */: // foo `...` - case 14 /* TemplateHead */: // foo `...${100}...` - // these are the only tokens can legally follow a type argument - // list. So we definitely want to treat them as type arg lists. - case 23 /* DotToken */: // foo. - case 20 /* CloseParenToken */: // foo) - case 22 /* CloseBracketToken */: // foo] - case 56 /* ColonToken */: // foo: - case 25 /* SemicolonToken */: // foo; - case 55 /* QuestionToken */: // foo? - case 32 /* EqualsEqualsToken */: // foo == - case 34 /* EqualsEqualsEqualsToken */: // foo === - case 33 /* ExclamationEqualsToken */: // foo != - case 35 /* ExclamationEqualsEqualsToken */: // foo !== - case 53 /* AmpersandAmpersandToken */: // foo && - case 54 /* BarBarToken */: // foo || - case 50 /* CaretToken */: // foo ^ - case 48 /* AmpersandToken */: // foo & - case 49 /* BarToken */: // foo | - case 18 /* CloseBraceToken */: // foo } - case 1 /* EndOfFileToken */: // foo - // these cases can't legally follow a type arg list. However, they're not legal - // expressions either. The user is probably in the middle of a generic type. So - // treat it as such. + case 19: + case 13: + case 14: + case 23: + case 20: + case 22: + case 56: + case 25: + case 55: + case 32: + case 34: + case 33: + case 35: + case 53: + case 54: + case 50: + case 48: + case 49: + case 18: + case 1: return true; - case 26 /* CommaToken */: // foo, - case 17 /* OpenBraceToken */: // foo { - // We don't want to treat these as type arguments. Otherwise we'll parse this - // as an invocation expression. Instead, we want to parse out the expression - // in isolation from the type arguments. + case 26: + case 17: default: - // Anything else treat as an expression. return false; } } function parsePrimaryExpression() { switch (token()) { - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: + case 8: + case 9: + case 13: return parseLiteralNode(); - case 99 /* ThisKeyword */: - case 97 /* SuperKeyword */: - case 95 /* NullKeyword */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: + case 99: + case 97: + case 95: + case 101: + case 86: return parseTokenNode(); - case 19 /* OpenParenToken */: + case 19: return parseParenthesizedExpression(); - case 21 /* OpenBracketToken */: + case 21: return parseArrayLiteralExpression(); - case 17 /* OpenBraceToken */: + case 17: return parseObjectLiteralExpression(); - case 120 /* AsyncKeyword */: - // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher. - // If we encounter `async [no LineTerminator here] function` then this is an async - // function; otherwise, its an identifier. + case 120: if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) { break; } return parseFunctionExpression(); - case 75 /* ClassKeyword */: + case 75: return parseClassExpression(); - case 89 /* FunctionKeyword */: + case 89: return parseFunctionExpression(); - case 94 /* NewKeyword */: + case 94: return parseNewExpressionOrNewDotTarget(); - case 41 /* SlashToken */: - case 63 /* SlashEqualsToken */: - if (reScanSlashToken() === 12 /* RegularExpressionLiteral */) { + case 41: + case 63: + if (reScanSlashToken() === 12) { return parseLiteralNode(); } break; - case 14 /* TemplateHead */: + case 14: return parseTemplateExpression(); } return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNodeWithJSDoc(191 /* ParenthesizedExpression */); - parseExpected(19 /* OpenParenToken */); + var node = createNodeWithJSDoc(191); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); return finishNode(node); } function parseSpreadElement() { - var node = createNode(204 /* SpreadElement */); - parseExpected(24 /* DotDotDotToken */); + var node = createNode(204); + parseExpected(24); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { - return token() === 24 /* DotDotDotToken */ ? parseSpreadElement() : - token() === 26 /* CommaToken */ ? createNode(206 /* OmittedExpression */) : + return token() === 24 ? parseSpreadElement() : + token() === 26 ? createNode(206) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { - var node = createNode(183 /* ArrayLiteralExpression */); - parseExpected(21 /* OpenBracketToken */); + var node = createNode(183); + parseExpected(21); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } - node.elements = parseDelimitedList(15 /* ArrayLiteralMembers */, parseArgumentOrArrayLiteralElement); - parseExpected(22 /* CloseBracketToken */); + node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement); + parseExpected(22); return finishNode(node); } function parseObjectLiteralElement() { - var node = createNodeWithJSDoc(0 /* Unknown */); - if (parseOptionalToken(24 /* DotDotDotToken */)) { - node.kind = 272 /* SpreadAssignment */; + var node = createNodeWithJSDoc(0); + if (parseOptionalToken(24)) { + node.kind = 272; node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } node.decorators = parseDecorators(); node.modifiers = parseModifiers(); - if (parseContextualModifier(125 /* GetKeyword */)) { - return parseAccessorDeclaration(node, 156 /* GetAccessor */); + if (parseContextualModifier(125)) { + return parseAccessorDeclaration(node, 156); } - if (parseContextualModifier(136 /* SetKeyword */)) { - return parseAccessorDeclaration(node, 157 /* SetAccessor */); + if (parseContextualModifier(136)) { + return parseAccessorDeclaration(node, 157); } - var asteriskToken = parseOptionalToken(39 /* AsteriskToken */); + var asteriskToken = parseOptionalToken(39); var tokenIsIdentifier = isIdentifier(); node.name = parsePropertyName(); - // Disallowing of optional property assignments happens in the grammar checker. - node.questionToken = parseOptionalToken(55 /* QuestionToken */); - if (asteriskToken || token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */) { + node.questionToken = parseOptionalToken(55); + if (asteriskToken || token() === 19 || token() === 27) { return parseMethodDeclaration(node, asteriskToken); } - // check if it is short-hand property assignment or normal property assignment - // NOTE: if token is EqualsToken it is interpreted as CoverInitializedName production - // CoverInitializedName[Yield] : - // IdentifierReference[?Yield] Initializer[In, ?Yield] - // this is necessary because ObjectLiteral productions are also used to cover grammar for ObjectAssignmentPattern - var isShorthandPropertyAssignment = tokenIsIdentifier && (token() === 26 /* CommaToken */ || token() === 18 /* CloseBraceToken */ || token() === 58 /* EqualsToken */); + var isShorthandPropertyAssignment = tokenIsIdentifier && (token() === 26 || token() === 18 || token() === 58); if (isShorthandPropertyAssignment) { - node.kind = 271 /* ShorthandPropertyAssignment */; - var equalsToken = parseOptionalToken(58 /* EqualsToken */); + node.kind = 271; + var equalsToken = parseOptionalToken(58); if (equalsToken) { node.equalsToken = equalsToken; node.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher); } } else { - node.kind = 270 /* PropertyAssignment */; - parseExpected(56 /* ColonToken */); + node.kind = 270; + parseExpected(56); node.initializer = allowInAnd(parseAssignmentExpressionOrHigher); } return finishNode(node); } function parseObjectLiteralExpression() { - var node = createNode(184 /* ObjectLiteralExpression */); - parseExpected(17 /* OpenBraceToken */); + var node = createNode(184); + parseExpected(17); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } - node.properties = parseDelimitedList(12 /* ObjectLiteralMembers */, parseObjectLiteralElement, /*considerSemicolonAsDelimiter*/ true); - parseExpected(18 /* CloseBraceToken */); + node.properties = parseDelimitedList(12, parseObjectLiteralElement, true); + parseExpected(18); return finishNode(node); } function parseFunctionExpression() { - // GeneratorExpression: - // function* BindingIdentifier [Yield][opt](FormalParameters[Yield]){ GeneratorBody } - // - // FunctionExpression: - // function BindingIdentifier[opt](FormalParameters){ FunctionBody } var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { - setDecoratorContext(/*val*/ false); + setDecoratorContext(false); } - var node = createNodeWithJSDoc(192 /* FunctionExpression */); + var node = createNodeWithJSDoc(192); node.modifiers = parseModifiers(); - parseExpected(89 /* FunctionKeyword */); - node.asteriskToken = parseOptionalToken(39 /* AsteriskToken */); - var isGenerator = node.asteriskToken ? 1 /* Yield */ : 0 /* None */; - var isAsync = ts.hasModifier(node, 256 /* Async */) ? 2 /* Await */ : 0 /* None */; + parseExpected(89); + node.asteriskToken = parseOptionalToken(39); + var isGenerator = node.asteriskToken ? 1 : 0; + var isAsync = ts.hasModifier(node, 256) ? 2 : 0; node.name = isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalIdentifier) : isGenerator ? doInYieldContext(parseOptionalIdentifier) : isAsync ? doInAwaitContext(parseOptionalIdentifier) : parseOptionalIdentifier(); - fillSignature(56 /* ColonToken */, isGenerator | isAsync, node); + fillSignature(56, isGenerator | isAsync, node); node.body = parseFunctionBlock(isGenerator | isAsync); if (saveDecoratorContext) { - setDecoratorContext(/*val*/ true); + setDecoratorContext(true); } return finishNode(node); } @@ -19210,10 +15288,10 @@ var ts; } function parseNewExpressionOrNewDotTarget() { var fullStart = scanner.getStartPos(); - parseExpected(94 /* NewKeyword */); - if (parseOptional(23 /* DotToken */)) { - var node_2 = createNode(210 /* MetaProperty */, fullStart); - node_2.keywordToken = 94 /* NewKeyword */; + parseExpected(94); + if (parseOptional(23)) { + var node_2 = createNode(210, fullStart); + node_2.keywordToken = 94; node_2.name = parseIdentifierName(); return finishNode(node_2); } @@ -19229,23 +15307,22 @@ var ts; } break; } - var node = createNode(188 /* NewExpression */, fullStart); + var node = createNode(188, fullStart); node.expression = expression; node.typeArguments = typeArguments; - if (node.typeArguments || token() === 19 /* OpenParenToken */) { + if (node.typeArguments || token() === 19) { node.arguments = parseArgumentList(); } return finishNode(node); } - // STATEMENTS function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { - var node = createNode(213 /* Block */); - if (parseExpected(17 /* OpenBraceToken */, diagnosticMessage) || ignoreMissingOpenBrace) { + var node = createNode(213); + if (parseExpected(17, diagnosticMessage) || ignoreMissingOpenBrace) { if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } - node.statements = parseList(1 /* BlockStatements */, parseStatement); - parseExpected(18 /* CloseBraceToken */); + node.statements = parseList(1, parseStatement); + parseExpected(18); } else { node.statements = createMissingList(); @@ -19254,104 +15331,98 @@ var ts; } function parseFunctionBlock(flags, diagnosticMessage) { var savedYieldContext = inYieldContext(); - setYieldContext(!!(flags & 1 /* Yield */)); + setYieldContext(!!(flags & 1)); var savedAwaitContext = inAwaitContext(); - setAwaitContext(!!(flags & 2 /* Await */)); - // We may be in a [Decorator] context when parsing a function expression or - // arrow function. The body of the function is not in [Decorator] context. + setAwaitContext(!!(flags & 2)); var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { - setDecoratorContext(/*val*/ false); + setDecoratorContext(false); } - var block = parseBlock(!!(flags & 16 /* IgnoreMissingOpenBrace */), diagnosticMessage); + var block = parseBlock(!!(flags & 16), diagnosticMessage); if (saveDecoratorContext) { - setDecoratorContext(/*val*/ true); + setDecoratorContext(true); } setYieldContext(savedYieldContext); setAwaitContext(savedAwaitContext); return block; } function parseEmptyStatement() { - var node = createNode(215 /* EmptyStatement */); - parseExpected(25 /* SemicolonToken */); + var node = createNode(215); + parseExpected(25); return finishNode(node); } function parseIfStatement() { - var node = createNode(217 /* IfStatement */); - parseExpected(90 /* IfKeyword */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(217); + parseExpected(90); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); node.thenStatement = parseStatement(); - node.elseStatement = parseOptional(82 /* ElseKeyword */) ? parseStatement() : undefined; + node.elseStatement = parseOptional(82) ? parseStatement() : undefined; return finishNode(node); } function parseDoStatement() { - var node = createNode(218 /* DoStatement */); - parseExpected(81 /* DoKeyword */); + var node = createNode(218); + parseExpected(81); node.statement = parseStatement(); - parseExpected(106 /* WhileKeyword */); - parseExpected(19 /* OpenParenToken */); + parseExpected(106); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); - // From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html - // 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in - // spec but allowed in consensus reality. Approved -- this is the de-facto standard whereby - // do;while(0)x will have a semicolon inserted before x. - parseOptional(25 /* SemicolonToken */); + parseExpected(20); + parseOptional(25); return finishNode(node); } function parseWhileStatement() { - var node = createNode(219 /* WhileStatement */); - parseExpected(106 /* WhileKeyword */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(219); + parseExpected(106); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); node.statement = parseStatement(); return finishNode(node); } function parseForOrForInOrForOfStatement() { var pos = getNodePos(); - parseExpected(88 /* ForKeyword */); - var awaitToken = parseOptionalToken(121 /* AwaitKeyword */); - parseExpected(19 /* OpenParenToken */); + parseExpected(88); + var awaitToken = parseOptionalToken(121); + parseExpected(19); var initializer; - if (token() !== 25 /* SemicolonToken */) { - if (token() === 104 /* VarKeyword */ || token() === 110 /* LetKeyword */ || token() === 76 /* ConstKeyword */) { - initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true); + if (token() !== 25) { + if (token() === 104 || token() === 110 || token() === 76) { + initializer = parseVariableDeclarationList(true); } else { initializer = disallowInAnd(parseExpression); } } var forOrForInOrForOfStatement; - if (awaitToken ? parseExpected(145 /* OfKeyword */) : parseOptional(145 /* OfKeyword */)) { - var forOfStatement = createNode(222 /* ForOfStatement */, pos); + if (awaitToken ? parseExpected(145) : parseOptional(145)) { + var forOfStatement = createNode(222, pos); forOfStatement.awaitModifier = awaitToken; forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); forOrForInOrForOfStatement = forOfStatement; } - else if (parseOptional(92 /* InKeyword */)) { - var forInStatement = createNode(221 /* ForInStatement */, pos); + else if (parseOptional(92)) { + var forInStatement = createNode(221, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); forOrForInOrForOfStatement = forInStatement; } else { - var forStatement = createNode(220 /* ForStatement */, pos); + var forStatement = createNode(220, pos); forStatement.initializer = initializer; - parseExpected(25 /* SemicolonToken */); - if (token() !== 25 /* SemicolonToken */ && token() !== 20 /* CloseParenToken */) { + parseExpected(25); + if (token() !== 25 && token() !== 20) { forStatement.condition = allowInAnd(parseExpression); } - parseExpected(25 /* SemicolonToken */); - if (token() !== 20 /* CloseParenToken */) { + parseExpected(25); + if (token() !== 20) { forStatement.incrementor = allowInAnd(parseExpression); } - parseExpected(20 /* CloseParenToken */); + parseExpected(20); forOrForInOrForOfStatement = forStatement; } forOrForInOrForOfStatement.statement = parseStatement(); @@ -19359,7 +15430,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 224 /* BreakStatement */ ? 72 /* BreakKeyword */ : 77 /* ContinueKeyword */); + parseExpected(kind === 224 ? 72 : 77); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -19367,8 +15438,8 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(225 /* ReturnStatement */); - parseExpected(96 /* ReturnKeyword */); + var node = createNode(225); + parseExpected(96); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); } @@ -19376,106 +15447,92 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(226 /* WithStatement */); - parseExpected(107 /* WithKeyword */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(226); + parseExpected(107); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); - node.statement = doInsideOfContext(8388608 /* InWithStatement */, parseStatement); + parseExpected(20); + node.statement = doInsideOfContext(8388608, parseStatement); return finishNode(node); } function parseCaseClause() { - var node = createNode(266 /* CaseClause */); - parseExpected(73 /* CaseKeyword */); + var node = createNode(266); + parseExpected(73); node.expression = allowInAnd(parseExpression); - parseExpected(56 /* ColonToken */); - node.statements = parseList(3 /* SwitchClauseStatements */, parseStatement); + parseExpected(56); + node.statements = parseList(3, parseStatement); return finishNode(node); } function parseDefaultClause() { - var node = createNode(267 /* DefaultClause */); - parseExpected(79 /* DefaultKeyword */); - parseExpected(56 /* ColonToken */); - node.statements = parseList(3 /* SwitchClauseStatements */, parseStatement); + var node = createNode(267); + parseExpected(79); + parseExpected(56); + node.statements = parseList(3, parseStatement); return finishNode(node); } function parseCaseOrDefaultClause() { - return token() === 73 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); + return token() === 73 ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(227 /* SwitchStatement */); - parseExpected(98 /* SwitchKeyword */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(227); + parseExpected(98); + parseExpected(19); node.expression = allowInAnd(parseExpression); - parseExpected(20 /* CloseParenToken */); - var caseBlock = createNode(241 /* CaseBlock */); - parseExpected(17 /* OpenBraceToken */); - caseBlock.clauses = parseList(2 /* SwitchClauses */, parseCaseOrDefaultClause); - parseExpected(18 /* CloseBraceToken */); + parseExpected(20); + var caseBlock = createNode(241); + parseExpected(17); + caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); + parseExpected(18); node.caseBlock = finishNode(caseBlock); return finishNode(node); } function parseThrowStatement() { - // ThrowStatement[Yield] : - // throw [no LineTerminator here]Expression[In, ?Yield]; - // Because of automatic semicolon insertion, we need to report error if this - // throw could be terminated with a semicolon. Note: we can't call 'parseExpression' - // directly as that might consume an expression on the following line. - // We just return 'undefined' in that case. The actual error will be reported in the - // grammar walker. - var node = createNode(229 /* ThrowStatement */); - parseExpected(100 /* ThrowKeyword */); + var node = createNode(229); + parseExpected(100); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } - // TODO: Review for error recovery function parseTryStatement() { - var node = createNode(230 /* TryStatement */); - parseExpected(102 /* TryKeyword */); - node.tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); - node.catchClause = token() === 74 /* CatchKeyword */ ? parseCatchClause() : undefined; - // If we don't have a catch clause, then we must have a finally clause. Try to parse - // one out no matter what. - if (!node.catchClause || token() === 87 /* FinallyKeyword */) { - parseExpected(87 /* FinallyKeyword */); - node.finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); + var node = createNode(230); + parseExpected(102); + node.tryBlock = parseBlock(false); + node.catchClause = token() === 74 ? parseCatchClause() : undefined; + if (!node.catchClause || token() === 87) { + parseExpected(87); + node.finallyBlock = parseBlock(false); } return finishNode(node); } function parseCatchClause() { - var result = createNode(269 /* CatchClause */); - parseExpected(74 /* CatchKeyword */); - if (parseOptional(19 /* OpenParenToken */)) { + var result = createNode(269); + parseExpected(74); + if (parseOptional(19)) { result.variableDeclaration = parseVariableDeclaration(); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); } else { - // Keep shape of node to avoid degrading performance. result.variableDeclaration = undefined; } - result.block = parseBlock(/*ignoreMissingOpenBrace*/ false); + result.block = parseBlock(false); return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(231 /* DebuggerStatement */); - parseExpected(78 /* DebuggerKeyword */); + var node = createNode(231); + parseExpected(78); parseSemicolon(); return finishNode(node); } function parseExpressionOrLabeledStatement() { - // Avoiding having to do the lookahead for a labeled statement by just trying to parse - // out an expression, seeing if it is identifier and then seeing if it is followed by - // a colon. - var node = createNodeWithJSDoc(0 /* Unknown */); + var node = createNodeWithJSDoc(0); var expression = allowInAnd(parseExpression); - if (expression.kind === 71 /* Identifier */ && parseOptional(56 /* ColonToken */)) { - node.kind = 228 /* LabeledStatement */; + if (expression.kind === 71 && parseOptional(56)) { + node.kind = 228; node.label = expression; node.statement = parseStatement(); } else { - node.kind = 216 /* ExpressionStatement */; + node.kind = 216; node.expression = expression; parseSemicolon(); } @@ -19487,82 +15544,60 @@ var ts; } function nextTokenIsClassKeywordOnSameLine() { nextToken(); - return token() === 75 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak(); + return token() === 75 && !scanner.hasPrecedingLineBreak(); } function nextTokenIsFunctionKeywordOnSameLine() { nextToken(); - return token() === 89 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak(); + return token() === 89 && !scanner.hasPrecedingLineBreak(); } function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() { nextToken(); - return (ts.tokenIsIdentifierOrKeyword(token()) || token() === 8 /* NumericLiteral */ || token() === 9 /* StringLiteral */) && !scanner.hasPrecedingLineBreak(); + return (ts.tokenIsIdentifierOrKeyword(token()) || token() === 8 || token() === 9) && !scanner.hasPrecedingLineBreak(); } function isDeclaration() { while (true) { switch (token()) { - case 104 /* VarKeyword */: - case 110 /* LetKeyword */: - case 76 /* ConstKeyword */: - case 89 /* FunctionKeyword */: - case 75 /* ClassKeyword */: - case 83 /* EnumKeyword */: + case 104: + case 110: + case 76: + case 89: + case 75: + case 83: return true; - // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers; - // however, an identifier cannot be followed by another identifier on the same line. This is what we - // count on to parse out the respective declarations. For instance, we exploit this to say that - // - // namespace n - // - // can be none other than the beginning of a namespace declaration, but need to respect that JavaScript sees - // - // namespace - // n - // - // as the identifier 'namespace' on one line followed by the identifier 'n' on another. - // We need to look one token ahead to see if it permissible to try parsing a declaration. - // - // *Note*: 'interface' is actually a strict mode reserved word. So while - // - // "use strict" - // interface - // I {} - // - // could be legal, it would add complexity for very little gain. - case 109 /* InterfaceKeyword */: - case 139 /* TypeKeyword */: + case 109: + case 139: return nextTokenIsIdentifierOnSameLine(); - case 129 /* ModuleKeyword */: - case 130 /* NamespaceKeyword */: + case 129: + case 130: return nextTokenIsIdentifierOrStringLiteralOnSameLine(); - case 117 /* AbstractKeyword */: - case 120 /* AsyncKeyword */: - case 124 /* DeclareKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 114 /* PublicKeyword */: - case 132 /* ReadonlyKeyword */: + case 117: + case 120: + case 124: + case 112: + case 113: + case 114: + case 132: nextToken(); - // ASI takes effect for this modifier. if (scanner.hasPrecedingLineBreak()) { return false; } continue; - case 144 /* GlobalKeyword */: + case 144: nextToken(); - return token() === 17 /* OpenBraceToken */ || token() === 71 /* Identifier */ || token() === 84 /* ExportKeyword */; - case 91 /* ImportKeyword */: + return token() === 17 || token() === 71 || token() === 84; + case 91: nextToken(); - return token() === 9 /* StringLiteral */ || token() === 39 /* AsteriskToken */ || - token() === 17 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token()); - case 84 /* ExportKeyword */: + return token() === 9 || token() === 39 || + token() === 17 || ts.tokenIsIdentifierOrKeyword(token()); + case 84: nextToken(); - if (token() === 58 /* EqualsToken */ || token() === 39 /* AsteriskToken */ || - token() === 17 /* OpenBraceToken */ || token() === 79 /* DefaultKeyword */ || - token() === 118 /* AsKeyword */) { + if (token() === 58 || token() === 39 || + token() === 17 || token() === 79 || + token() === 118) { return true; } continue; - case 115 /* StaticKeyword */: + case 115: nextToken(); continue; default: @@ -19575,52 +15610,47 @@ var ts; } function isStartOfStatement() { switch (token()) { - case 57 /* AtToken */: - case 25 /* SemicolonToken */: - case 17 /* OpenBraceToken */: - case 104 /* VarKeyword */: - case 110 /* LetKeyword */: - case 89 /* FunctionKeyword */: - case 75 /* ClassKeyword */: - case 83 /* EnumKeyword */: - case 90 /* IfKeyword */: - case 81 /* DoKeyword */: - case 106 /* WhileKeyword */: - case 88 /* ForKeyword */: - case 77 /* ContinueKeyword */: - case 72 /* BreakKeyword */: - case 96 /* ReturnKeyword */: - case 107 /* WithKeyword */: - case 98 /* SwitchKeyword */: - case 100 /* ThrowKeyword */: - case 102 /* TryKeyword */: - case 78 /* DebuggerKeyword */: - // 'catch' and 'finally' do not actually indicate that the code is part of a statement, - // however, we say they are here so that we may gracefully parse them and error later. - case 74 /* CatchKeyword */: - case 87 /* FinallyKeyword */: + case 57: + case 25: + case 17: + case 104: + case 110: + case 89: + case 75: + case 83: + case 90: + case 81: + case 106: + case 88: + case 77: + case 72: + case 96: + case 107: + case 98: + case 100: + case 102: + case 78: + case 74: + case 87: return true; - case 91 /* ImportKeyword */: + case 91: return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot); - case 76 /* ConstKeyword */: - case 84 /* ExportKeyword */: + case 76: + case 84: return isStartOfDeclaration(); - case 120 /* AsyncKeyword */: - case 124 /* DeclareKeyword */: - case 109 /* InterfaceKeyword */: - case 129 /* ModuleKeyword */: - case 130 /* NamespaceKeyword */: - case 139 /* TypeKeyword */: - case 144 /* GlobalKeyword */: - // When these don't start a declaration, they're an identifier in an expression statement + case 120: + case 124: + case 109: + case 129: + case 130: + case 139: + case 144: return true; - case 114 /* PublicKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 115 /* StaticKeyword */: - case 132 /* ReadonlyKeyword */: - // When these don't start a declaration, they may be the start of a class member if an identifier - // immediately follows. Otherwise they're an identifier in an expression statement. + case 114: + case 112: + case 113: + case 115: + case 132: return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); default: return isStartOfExpression(); @@ -19628,76 +15658,73 @@ var ts; } function nextTokenIsIdentifierOrStartOfDestructuring() { nextToken(); - return isIdentifier() || token() === 17 /* OpenBraceToken */ || token() === 21 /* OpenBracketToken */; + return isIdentifier() || token() === 17 || token() === 21; } function isLetDeclaration() { - // In ES6 'let' always starts a lexical declaration if followed by an identifier or { - // or [. return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring); } function parseStatement() { switch (token()) { - case 25 /* SemicolonToken */: + case 25: return parseEmptyStatement(); - case 17 /* OpenBraceToken */: - return parseBlock(/*ignoreMissingOpenBrace*/ false); - case 104 /* VarKeyword */: - return parseVariableStatement(createNodeWithJSDoc(232 /* VariableDeclaration */)); - case 110 /* LetKeyword */: + case 17: + return parseBlock(false); + case 104: + return parseVariableStatement(createNodeWithJSDoc(232)); + case 110: if (isLetDeclaration()) { - return parseVariableStatement(createNodeWithJSDoc(232 /* VariableDeclaration */)); + return parseVariableStatement(createNodeWithJSDoc(232)); } break; - case 89 /* FunctionKeyword */: - return parseFunctionDeclaration(createNodeWithJSDoc(234 /* FunctionDeclaration */)); - case 75 /* ClassKeyword */: - return parseClassDeclaration(createNodeWithJSDoc(235 /* ClassDeclaration */)); - case 90 /* IfKeyword */: + case 89: + return parseFunctionDeclaration(createNodeWithJSDoc(234)); + case 75: + return parseClassDeclaration(createNodeWithJSDoc(235)); + case 90: return parseIfStatement(); - case 81 /* DoKeyword */: + case 81: return parseDoStatement(); - case 106 /* WhileKeyword */: + case 106: return parseWhileStatement(); - case 88 /* ForKeyword */: + case 88: return parseForOrForInOrForOfStatement(); - case 77 /* ContinueKeyword */: - return parseBreakOrContinueStatement(223 /* ContinueStatement */); - case 72 /* BreakKeyword */: - return parseBreakOrContinueStatement(224 /* BreakStatement */); - case 96 /* ReturnKeyword */: + case 77: + return parseBreakOrContinueStatement(223); + case 72: + return parseBreakOrContinueStatement(224); + case 96: return parseReturnStatement(); - case 107 /* WithKeyword */: + case 107: return parseWithStatement(); - case 98 /* SwitchKeyword */: + case 98: return parseSwitchStatement(); - case 100 /* ThrowKeyword */: + case 100: return parseThrowStatement(); - case 102 /* TryKeyword */: - // Include 'catch' and 'finally' for error recovery. - case 74 /* CatchKeyword */: - case 87 /* FinallyKeyword */: + case 102: + case 74: + case 87: return parseTryStatement(); - case 78 /* DebuggerKeyword */: + case 78: return parseDebuggerStatement(); - case 57 /* AtToken */: + case 57: return parseDeclaration(); - case 120 /* AsyncKeyword */: - case 109 /* InterfaceKeyword */: - case 139 /* TypeKeyword */: - case 129 /* ModuleKeyword */: - case 130 /* NamespaceKeyword */: - case 124 /* DeclareKeyword */: - case 76 /* ConstKeyword */: - case 83 /* EnumKeyword */: - case 84 /* ExportKeyword */: - case 91 /* ImportKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 114 /* PublicKeyword */: - case 117 /* AbstractKeyword */: - case 115 /* StaticKeyword */: - case 132 /* ReadonlyKeyword */: - case 144 /* GlobalKeyword */: + case 120: + case 109: + case 139: + case 129: + case 130: + case 124: + case 76: + case 83: + case 84: + case 91: + case 112: + case 113: + case 114: + case 117: + case 115: + case 132: + case 144: if (isStartOfDeclaration()) { return parseDeclaration(); } @@ -19706,18 +15733,18 @@ var ts; return parseExpressionOrLabeledStatement(); } function isDeclareModifier(modifier) { - return modifier.kind === 124 /* DeclareKeyword */; + return modifier.kind === 124; } function parseDeclaration() { - var node = createNodeWithJSDoc(0 /* Unknown */); + var node = createNodeWithJSDoc(0); node.decorators = parseDecorators(); node.modifiers = parseModifiers(); if (ts.some(node.modifiers, isDeclareModifier)) { for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var m = _a[_i]; - m.flags |= 4194304 /* Ambient */; + m.flags |= 4194304; } - return doInsideOfContext(4194304 /* Ambient */, function () { return parseDeclarationWorker(node); }); + return doInsideOfContext(4194304, function () { return parseDeclarationWorker(node); }); } else { return parseDeclarationWorker(node); @@ -19725,82 +15752,79 @@ var ts; } function parseDeclarationWorker(node) { switch (token()) { - case 104 /* VarKeyword */: - case 110 /* LetKeyword */: - case 76 /* ConstKeyword */: + case 104: + case 110: + case 76: return parseVariableStatement(node); - case 89 /* FunctionKeyword */: + case 89: return parseFunctionDeclaration(node); - case 75 /* ClassKeyword */: + case 75: return parseClassDeclaration(node); - case 109 /* InterfaceKeyword */: + case 109: return parseInterfaceDeclaration(node); - case 139 /* TypeKeyword */: + case 139: return parseTypeAliasDeclaration(node); - case 83 /* EnumKeyword */: + case 83: return parseEnumDeclaration(node); - case 144 /* GlobalKeyword */: - case 129 /* ModuleKeyword */: - case 130 /* NamespaceKeyword */: + case 144: + case 129: + case 130: return parseModuleDeclaration(node); - case 91 /* ImportKeyword */: + case 91: return parseImportDeclarationOrImportEqualsDeclaration(node); - case 84 /* ExportKeyword */: + case 84: nextToken(); switch (token()) { - case 79 /* DefaultKeyword */: - case 58 /* EqualsToken */: + case 79: + case 58: return parseExportAssignment(node); - case 118 /* AsKeyword */: + case 118: return parseNamespaceExportDeclaration(node); default: return parseExportDeclaration(node); } default: if (node.decorators || node.modifiers) { - // We reached this point because we encountered decorators and/or modifiers and assumed a declaration - // would follow. For recovery and error reporting purposes, return an incomplete declaration. - var missing = createMissingNode(253 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); + var missing = createMissingNode(253, true, ts.Diagnostics.Declaration_expected); missing.pos = node.pos; missing.decorators = node.decorators; missing.modifiers = node.modifiers; return finishNode(missing); } - return undefined; // TODO: GH#18217 + return undefined; } } function nextTokenIsIdentifierOrStringLiteralOnSameLine() { nextToken(); - return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token() === 9 /* StringLiteral */); + return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token() === 9); } function parseFunctionBlockOrSemicolon(flags, diagnosticMessage) { - if (token() !== 17 /* OpenBraceToken */ && canParseSemicolon()) { + if (token() !== 17 && canParseSemicolon()) { parseSemicolon(); return; } return parseFunctionBlock(flags, diagnosticMessage); } - // DECLARATIONS function parseArrayBindingElement() { - if (token() === 26 /* CommaToken */) { - return createNode(206 /* OmittedExpression */); + if (token() === 26) { + return createNode(206); } - var node = createNode(182 /* BindingElement */); - node.dotDotDotToken = parseOptionalToken(24 /* DotDotDotToken */); + var node = createNode(182); + node.dotDotDotToken = parseOptionalToken(24); node.name = parseIdentifierOrPattern(); node.initializer = parseInitializer(); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(182 /* BindingElement */); - node.dotDotDotToken = parseOptionalToken(24 /* DotDotDotToken */); + var node = createNode(182); + node.dotDotDotToken = parseOptionalToken(24); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); - if (tokenIsIdentifier && token() !== 56 /* ColonToken */) { + if (tokenIsIdentifier && token() !== 56) { node.name = propertyName; } else { - parseExpected(56 /* ColonToken */); + parseExpected(56); node.propertyName = propertyName; node.name = parseIdentifierOrPattern(); } @@ -19808,39 +15832,39 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(180 /* ObjectBindingPattern */); - parseExpected(17 /* OpenBraceToken */); - node.elements = parseDelimitedList(9 /* ObjectBindingElements */, parseObjectBindingElement); - parseExpected(18 /* CloseBraceToken */); + var node = createNode(180); + parseExpected(17); + node.elements = parseDelimitedList(9, parseObjectBindingElement); + parseExpected(18); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(181 /* ArrayBindingPattern */); - parseExpected(21 /* OpenBracketToken */); - node.elements = parseDelimitedList(10 /* ArrayBindingElements */, parseArrayBindingElement); - parseExpected(22 /* CloseBracketToken */); + var node = createNode(181); + parseExpected(21); + node.elements = parseDelimitedList(10, parseArrayBindingElement); + parseExpected(22); return finishNode(node); } function isIdentifierOrPattern() { - return token() === 17 /* OpenBraceToken */ || token() === 21 /* OpenBracketToken */ || isIdentifier(); + return token() === 17 || token() === 21 || isIdentifier(); } function parseIdentifierOrPattern() { - if (token() === 21 /* OpenBracketToken */) { + if (token() === 21) { return parseArrayBindingPattern(); } - if (token() === 17 /* OpenBraceToken */) { + if (token() === 17) { return parseObjectBindingPattern(); } return parseIdentifier(); } function parseVariableDeclarationAllowExclamation() { - return parseVariableDeclaration(/*allowExclamation*/ true); + return parseVariableDeclaration(true); } function parseVariableDeclaration(allowExclamation) { - var node = createNode(232 /* VariableDeclaration */); + var node = createNode(232); node.name = parseIdentifierOrPattern(); - if (allowExclamation && node.name.kind === 71 /* Identifier */ && - token() === 51 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) { + if (allowExclamation && node.name.kind === 71 && + token() === 51 && !scanner.hasPrecedingLineBreak()) { node.exclamationToken = parseTokenNode(); } node.type = parseTypeAnnotation(); @@ -19850,104 +15874,84 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { - var node = createNode(233 /* VariableDeclarationList */); + var node = createNode(233); switch (token()) { - case 104 /* VarKeyword */: + case 104: break; - case 110 /* LetKeyword */: - node.flags |= 1 /* Let */; + case 110: + node.flags |= 1; break; - case 76 /* ConstKeyword */: - node.flags |= 2 /* Const */; + case 76: + node.flags |= 2; break; default: ts.Debug.fail(); } nextToken(); - // The user may have written the following: - // - // for (let of X) { } - // - // In this case, we want to parse an empty declaration list, and then parse 'of' - // as a keyword. The reason this is not automatic is that 'of' is a valid identifier. - // So we need to look ahead to determine if 'of' should be treated as a keyword in - // this context. - // The checker will then give an error that there is an empty declaration list. - if (token() === 145 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { + if (token() === 145 && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { var savedDisallowIn = inDisallowInContext(); setDisallowInContext(inForStatementInitializer); - node.declarations = parseDelimitedList(8 /* VariableDeclarations */, inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation); + node.declarations = parseDelimitedList(8, inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation); setDisallowInContext(savedDisallowIn); } return finishNode(node); } function canFollowContextualOfKeyword() { - return nextTokenIsIdentifier() && nextToken() === 20 /* CloseParenToken */; + return nextTokenIsIdentifier() && nextToken() === 20; } function parseVariableStatement(node) { - node.kind = 214 /* VariableStatement */; - node.declarationList = parseVariableDeclarationList(/*inForStatementInitializer*/ false); + node.kind = 214; + node.declarationList = parseVariableDeclarationList(false); parseSemicolon(); return finishNode(node); } function parseFunctionDeclaration(node) { - node.kind = 234 /* FunctionDeclaration */; - parseExpected(89 /* FunctionKeyword */); - node.asteriskToken = parseOptionalToken(39 /* AsteriskToken */); - node.name = ts.hasModifier(node, 512 /* Default */) ? parseOptionalIdentifier() : parseIdentifier(); - var isGenerator = node.asteriskToken ? 1 /* Yield */ : 0 /* None */; - var isAsync = ts.hasModifier(node, 256 /* Async */) ? 2 /* Await */ : 0 /* None */; - fillSignature(56 /* ColonToken */, isGenerator | isAsync, node); + node.kind = 234; + parseExpected(89); + node.asteriskToken = parseOptionalToken(39); + node.name = ts.hasModifier(node, 512) ? parseOptionalIdentifier() : parseIdentifier(); + var isGenerator = node.asteriskToken ? 1 : 0; + var isAsync = ts.hasModifier(node, 256) ? 2 : 0; + fillSignature(56, isGenerator | isAsync, node); node.body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, ts.Diagnostics.or_expected); return finishNode(node); } function parseConstructorDeclaration(node) { - node.kind = 155 /* Constructor */; - parseExpected(123 /* ConstructorKeyword */); - fillSignature(56 /* ColonToken */, 0 /* None */, node); - node.body = parseFunctionBlockOrSemicolon(0 /* None */, ts.Diagnostics.or_expected); + node.kind = 155; + parseExpected(123); + fillSignature(56, 0, node); + node.body = parseFunctionBlockOrSemicolon(0, ts.Diagnostics.or_expected); return finishNode(node); } function parseMethodDeclaration(node, asteriskToken, diagnosticMessage) { - node.kind = 154 /* MethodDeclaration */; + node.kind = 154; node.asteriskToken = asteriskToken; - var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */; - var isAsync = ts.hasModifier(node, 256 /* Async */) ? 2 /* Await */ : 0 /* None */; - fillSignature(56 /* ColonToken */, isGenerator | isAsync, node); + var isGenerator = asteriskToken ? 1 : 0; + var isAsync = ts.hasModifier(node, 256) ? 2 : 0; + fillSignature(56, isGenerator | isAsync, node); node.body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, diagnosticMessage); return finishNode(node); } function parsePropertyDeclaration(node) { - node.kind = 152 /* PropertyDeclaration */; - if (!node.questionToken && token() === 51 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) { + node.kind = 152; + if (!node.questionToken && token() === 51 && !scanner.hasPrecedingLineBreak()) { node.exclamationToken = parseTokenNode(); } node.type = parseTypeAnnotation(); - // For instance properties specifically, since they are evaluated inside the constructor, - // we do *not * want to parse yield expressions, so we specifically turn the yield context - // off. The grammar would look something like this: - // - // MemberVariableDeclaration[Yield]: - // AccessibilityModifier_opt PropertyName TypeAnnotation_opt Initializer_opt[In]; - // AccessibilityModifier_opt static_opt PropertyName TypeAnnotation_opt Initializer_opt[In, ?Yield]; - // - // The checker may still error in the static case to explicitly disallow the yield expression. - node.initializer = ts.hasModifier(node, 32 /* Static */) + node.initializer = ts.hasModifier(node, 32) ? allowInAnd(parseInitializer) - : doOutsideOfContext(4096 /* YieldContext */ | 2048 /* DisallowInContext */, parseInitializer); + : doOutsideOfContext(4096 | 2048, parseInitializer); parseSemicolon(); return finishNode(node); } function parsePropertyOrMethodDeclaration(node) { - var asteriskToken = parseOptionalToken(39 /* AsteriskToken */); + var asteriskToken = parseOptionalToken(39); node.name = parsePropertyName(); - // Note: this is not legal as per the grammar. But we allow it in the parser and - // report an error in the grammar checker. - node.questionToken = parseOptionalToken(55 /* QuestionToken */); - if (asteriskToken || token() === 19 /* OpenParenToken */ || token() === 27 /* LessThanToken */) { + node.questionToken = parseOptionalToken(55); + if (asteriskToken || token() === 19 || token() === 27) { return parseMethodDeclaration(node, asteriskToken, ts.Diagnostics.or_expected); } return parsePropertyDeclaration(node); @@ -19955,64 +15959,45 @@ var ts; function parseAccessorDeclaration(node, kind) { node.kind = kind; node.name = parsePropertyName(); - fillSignature(56 /* ColonToken */, 0 /* None */, node); - node.body = parseFunctionBlockOrSemicolon(0 /* None */); + fillSignature(56, 0, node); + node.body = parseFunctionBlockOrSemicolon(0); return finishNode(node); } function isClassMemberStart() { var idToken; - if (token() === 57 /* AtToken */) { + if (token() === 57) { return true; } - // Eat up all modifiers, but hold on to the last one in case it is actually an identifier. while (ts.isModifierKind(token())) { idToken = token(); - // If the idToken is a class modifier (protected, private, public, and static), it is - // certain that we are starting to parse class member. This allows better error recovery - // Example: - // public foo() ... // true - // public @dec blah ... // true; we will then report an error later - // export public ... // true; we will then report an error later if (ts.isClassMemberModifier(idToken)) { return true; } nextToken(); } - if (token() === 39 /* AsteriskToken */) { + if (token() === 39) { return true; } - // Try to get the first property-like token following all modifiers. - // This can either be an identifier or the 'get' or 'set' keywords. if (isLiteralPropertyName()) { idToken = token(); nextToken(); } - // Index signatures and computed properties are class members; we can parse. - if (token() === 21 /* OpenBracketToken */) { + if (token() === 21) { return true; } - // If we were able to get any potential identifier... if (idToken !== undefined) { - // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse. - if (!ts.isKeyword(idToken) || idToken === 136 /* SetKeyword */ || idToken === 125 /* GetKeyword */) { + if (!ts.isKeyword(idToken) || idToken === 136 || idToken === 125) { return true; } - // If it *is* a keyword, but not an accessor, check a little farther along - // to see if it should actually be parsed as a class member. switch (token()) { - case 19 /* OpenParenToken */: // Method declaration - case 27 /* LessThanToken */: // Generic Method declaration - case 51 /* ExclamationToken */: // Non-null assertion on property name - case 56 /* ColonToken */: // Type Annotation for declaration - case 58 /* EqualsToken */: // Initializer for declaration - case 55 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on. + case 19: + case 27: + case 51: + case 56: + case 58: + case 55: return true; default: - // Covers - // - Semicolons (declaration termination) - // - Closing braces (end-of-class, must be declaration) - // - End-of-files (not valid, but permitted so that it gets caught later on) - // - Line-breaks (enabling *automatic semicolon insertion*) return canParseSemicolon(); } } @@ -20023,32 +16008,23 @@ var ts; var listPos = getNodePos(); while (true) { var decoratorStart = getNodePos(); - if (!parseOptional(57 /* AtToken */)) { + if (!parseOptional(57)) { break; } - var decorator = createNode(150 /* Decorator */, decoratorStart); + var decorator = createNode(150, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); finishNode(decorator); (list || (list = [])).push(decorator); } return list && createNodeArray(list, listPos); } - /* - * There are situations in which a modifier like 'const' will appear unexpectedly, such as on a class member. - * In those situations, if we are entirely sure that 'const' is not valid on its own (such as when ASI takes effect - * and turns it into a standalone declaration), then it is better to parse it and report an error later. - * - * In such situations, 'permitInvalidConstAsModifier' should be set to true. - */ function parseModifiers(permitInvalidConstAsModifier) { var list; var listPos = getNodePos(); while (true) { var modifierStart = scanner.getStartPos(); var modifierKind = token(); - if (token() === 76 /* ConstKeyword */ && permitInvalidConstAsModifier) { - // We need to ensure that any subsequent modifiers appear on the same line - // so that when 'const' is a standalone declaration, we don't issue an error. + if (token() === 76 && permitInvalidConstAsModifier) { if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { break; } @@ -20065,7 +16041,7 @@ var ts; } function parseModifiersForArrowFunction() { var modifiers; - if (token() === 120 /* AsyncKeyword */) { + if (token() === 120) { var modifierStart = scanner.getStartPos(); var modifierKind = token(); nextToken(); @@ -20075,60 +16051,54 @@ var ts; return modifiers; } function parseClassElement() { - if (token() === 25 /* SemicolonToken */) { - var result = createNode(212 /* SemicolonClassElement */); + if (token() === 25) { + var result = createNode(212); nextToken(); return finishNode(result); } - var node = createNodeWithJSDoc(0 /* Unknown */); + var node = createNodeWithJSDoc(0); node.decorators = parseDecorators(); - node.modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true); - if (parseContextualModifier(125 /* GetKeyword */)) { - return parseAccessorDeclaration(node, 156 /* GetAccessor */); + node.modifiers = parseModifiers(true); + if (parseContextualModifier(125)) { + return parseAccessorDeclaration(node, 156); } - if (parseContextualModifier(136 /* SetKeyword */)) { - return parseAccessorDeclaration(node, 157 /* SetAccessor */); + if (parseContextualModifier(136)) { + return parseAccessorDeclaration(node, 157); } - if (token() === 123 /* ConstructorKeyword */) { + if (token() === 123) { return parseConstructorDeclaration(node); } if (isIndexSignature()) { return parseIndexSignatureDeclaration(node); } - // It is very important that we check this *after* checking indexers because - // the [ token can start an index signature or a computed property name if (ts.tokenIsIdentifierOrKeyword(token()) || - token() === 9 /* StringLiteral */ || - token() === 8 /* NumericLiteral */ || - token() === 39 /* AsteriskToken */ || - token() === 21 /* OpenBracketToken */) { + token() === 9 || + token() === 8 || + token() === 39 || + token() === 21) { return parsePropertyOrMethodDeclaration(node); } if (node.decorators || node.modifiers) { - // treat this as a property declaration with a missing name. - node.name = createMissingNode(71 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); + node.name = createMissingNode(71, true, ts.Diagnostics.Declaration_expected); return parsePropertyDeclaration(node); } - // 'isClassMemberStart' should have hinted not to attempt parsing. return ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassExpression() { - return parseClassDeclarationOrExpression(createNodeWithJSDoc(0 /* Unknown */), 205 /* ClassExpression */); + return parseClassDeclarationOrExpression(createNodeWithJSDoc(0), 205); } function parseClassDeclaration(node) { - return parseClassDeclarationOrExpression(node, 235 /* ClassDeclaration */); + return parseClassDeclarationOrExpression(node, 235); } function parseClassDeclarationOrExpression(node, kind) { node.kind = kind; - parseExpected(75 /* ClassKeyword */); + parseExpected(75); node.name = parseNameOfClassDeclarationOrExpression(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(); - if (parseExpected(17 /* OpenBraceToken */)) { - // ClassTail[Yield,Await] : (Modified) See 14.5 - // ClassHeritage[?Yield,?Await]opt { ClassBody[?Yield,?Await]opt } + if (parseExpected(17)) { node.members = parseClassMembers(); - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); } else { node.members = createMissingList(); @@ -20136,55 +16106,48 @@ var ts; return finishNode(node); } function parseNameOfClassDeclarationOrExpression() { - // implements is a future reserved word so - // 'class implements' might mean either - // - class expression with omitted name, 'implements' starts heritage clause - // - class with name 'implements' - // 'isImplementsClause' helps to disambiguate between these two cases return isIdentifier() && !isImplementsClause() ? parseIdentifier() : undefined; } function isImplementsClause() { - return token() === 108 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword); + return token() === 108 && lookAhead(nextTokenIsIdentifierOrKeyword); } function parseHeritageClauses() { - // ClassTail[Yield,Await] : (Modified) See 14.5 - // ClassHeritage[?Yield,?Await]opt { ClassBody[?Yield,?Await]opt } if (isHeritageClause()) { - return parseList(21 /* HeritageClauses */, parseHeritageClause); + return parseList(21, parseHeritageClause); } return undefined; } function parseHeritageClause() { var tok = token(); - ts.Debug.assert(tok === 85 /* ExtendsKeyword */ || tok === 108 /* ImplementsKeyword */); // isListElement() should ensure this. - var node = createNode(268 /* HeritageClause */); + ts.Debug.assert(tok === 85 || tok === 108); + var node = createNode(268); node.token = tok; nextToken(); - node.types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments); + node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); return finishNode(node); } function parseExpressionWithTypeArguments() { - var node = createNode(207 /* ExpressionWithTypeArguments */); + var node = createNode(207); node.expression = parseLeftHandSideExpressionOrHigher(); node.typeArguments = tryParseTypeArguments(); return finishNode(node); } function tryParseTypeArguments() { - return token() === 27 /* LessThanToken */ - ? parseBracketedList(19 /* TypeArguments */, parseType, 27 /* LessThanToken */, 29 /* GreaterThanToken */) + return token() === 27 + ? parseBracketedList(19, parseType, 27, 29) : undefined; } function isHeritageClause() { - return token() === 85 /* ExtendsKeyword */ || token() === 108 /* ImplementsKeyword */; + return token() === 85 || token() === 108; } function parseClassMembers() { - return parseList(5 /* ClassMembers */, parseClassElement); + return parseList(5, parseClassElement); } function parseInterfaceDeclaration(node) { - node.kind = 236 /* InterfaceDeclaration */; - parseExpected(109 /* InterfaceKeyword */); + node.kind = 236; + parseExpected(109); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(); @@ -20192,32 +16155,28 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(node) { - node.kind = 237 /* TypeAliasDeclaration */; - parseExpected(139 /* TypeKeyword */); + node.kind = 237; + parseExpected(139); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); - parseExpected(58 /* EqualsToken */); + parseExpected(58); node.type = parseType(); parseSemicolon(); return finishNode(node); } - // In an ambient declaration, the grammar only allows integer literals as initializers. - // In a non-ambient declaration, the grammar allows uninitialized members only in a - // ConstantEnumMemberSection, which starts at the beginning of an enum declaration - // or any time an integer literal initializer is encountered. function parseEnumMember() { - var node = createNodeWithJSDoc(273 /* EnumMember */); + var node = createNodeWithJSDoc(273); node.name = parsePropertyName(); node.initializer = allowInAnd(parseInitializer); return finishNode(node); } function parseEnumDeclaration(node) { - node.kind = 238 /* EnumDeclaration */; - parseExpected(83 /* EnumKeyword */); + node.kind = 238; + parseExpected(83); node.name = parseIdentifier(); - if (parseExpected(17 /* OpenBraceToken */)) { - node.members = parseDelimitedList(6 /* EnumMembers */, parseEnumMember); - parseExpected(18 /* CloseBraceToken */); + if (parseExpected(17)) { + node.members = parseDelimitedList(6, parseEnumMember); + parseExpected(18); } else { node.members = createMissingList(); @@ -20225,10 +16184,10 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(240 /* ModuleBlock */); - if (parseExpected(17 /* OpenBraceToken */)) { - node.statements = parseList(1 /* BlockStatements */, parseStatement); - parseExpected(18 /* CloseBraceToken */); + var node = createNode(240); + if (parseExpected(17)) { + node.statements = parseList(1, parseStatement); + parseExpected(18); } else { node.statements = createMissingList(); @@ -20236,29 +16195,26 @@ var ts; return finishNode(node); } function parseModuleOrNamespaceDeclaration(node, flags) { - node.kind = 239 /* ModuleDeclaration */; - // If we are parsing a dotted namespace name, we want to - // propagate the 'Namespace' flag across the names if set. - var namespaceFlag = flags & 16 /* Namespace */; + node.kind = 239; + var namespaceFlag = flags & 16; node.flags |= flags; node.name = parseIdentifier(); - node.body = parseOptional(23 /* DotToken */) - ? parseModuleOrNamespaceDeclaration(createNode(0 /* Unknown */), 4 /* NestedNamespace */ | namespaceFlag) + node.body = parseOptional(23) + ? parseModuleOrNamespaceDeclaration(createNode(0), 4 | namespaceFlag) : parseModuleBlock(); return finishNode(node); } function parseAmbientExternalModuleDeclaration(node) { - node.kind = 239 /* ModuleDeclaration */; - if (token() === 144 /* GlobalKeyword */) { - // parse 'global' as name of global scope augmentation + node.kind = 239; + if (token() === 144) { node.name = parseIdentifier(); - node.flags |= 512 /* GlobalAugmentation */; + node.flags |= 512; } else { node.name = parseLiteralNode(); node.name.text = internIdentifier(node.name.text); } - if (token() === 17 /* OpenBraceToken */) { + if (token() === 17) { node.body = parseModuleBlock(); } else { @@ -20268,161 +16224,128 @@ var ts; } function parseModuleDeclaration(node) { var flags = 0; - if (token() === 144 /* GlobalKeyword */) { - // global augmentation + if (token() === 144) { return parseAmbientExternalModuleDeclaration(node); } - else if (parseOptional(130 /* NamespaceKeyword */)) { - flags |= 16 /* Namespace */; + else if (parseOptional(130)) { + flags |= 16; } else { - parseExpected(129 /* ModuleKeyword */); - if (token() === 9 /* StringLiteral */) { + parseExpected(129); + if (token() === 9) { return parseAmbientExternalModuleDeclaration(node); } } return parseModuleOrNamespaceDeclaration(node, flags); } function isExternalModuleReference() { - return token() === 133 /* RequireKeyword */ && + return token() === 133 && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { - return nextToken() === 19 /* OpenParenToken */; + return nextToken() === 19; } function nextTokenIsSlash() { - return nextToken() === 41 /* SlashToken */; + return nextToken() === 41; } function parseNamespaceExportDeclaration(node) { - node.kind = 242 /* NamespaceExportDeclaration */; - parseExpected(118 /* AsKeyword */); - parseExpected(130 /* NamespaceKeyword */); + node.kind = 242; + parseExpected(118); + parseExpected(130); node.name = parseIdentifier(); parseSemicolon(); return finishNode(node); } function parseImportDeclarationOrImportEqualsDeclaration(node) { - parseExpected(91 /* ImportKeyword */); + parseExpected(91); var afterImportPos = scanner.getStartPos(); var identifier; if (isIdentifier()) { identifier = parseIdentifier(); - if (token() !== 26 /* CommaToken */ && token() !== 143 /* FromKeyword */) { + if (token() !== 26 && token() !== 143) { return parseImportEqualsDeclaration(node, identifier); } } - // Import statement - node.kind = 244 /* ImportDeclaration */; - // ImportDeclaration: - // import ImportClause from ModuleSpecifier ; - // import ModuleSpecifier; - if (identifier || // import id - token() === 39 /* AsteriskToken */ || // import * - token() === 17 /* OpenBraceToken */) { // import { + node.kind = 244; + if (identifier || + token() === 39 || + token() === 17) { node.importClause = parseImportClause(identifier, afterImportPos); - parseExpected(143 /* FromKeyword */); + parseExpected(143); } node.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); return finishNode(node); } function parseImportEqualsDeclaration(node, identifier) { - node.kind = 243 /* ImportEqualsDeclaration */; + node.kind = 243; node.name = identifier; - parseExpected(58 /* EqualsToken */); + parseExpected(58); node.moduleReference = parseModuleReference(); parseSemicolon(); return finishNode(node); } function parseImportClause(identifier, fullStart) { - // ImportClause: - // ImportedDefaultBinding - // NameSpaceImport - // NamedImports - // ImportedDefaultBinding, NameSpaceImport - // ImportedDefaultBinding, NamedImports - var importClause = createNode(245 /* ImportClause */, fullStart); + var importClause = createNode(245, fullStart); if (identifier) { - // ImportedDefaultBinding: - // ImportedBinding importClause.name = identifier; } - // If there was no default import or if there is comma token after default import - // parse namespace or named imports if (!importClause.name || - parseOptional(26 /* CommaToken */)) { - importClause.namedBindings = token() === 39 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(247 /* NamedImports */); + parseOptional(26)) { + importClause.namedBindings = token() === 39 ? parseNamespaceImport() : parseNamedImportsOrExports(247); } return finishNode(importClause); } function parseModuleReference() { return isExternalModuleReference() ? parseExternalModuleReference() - : parseEntityName(/*allowReservedWords*/ false); + : parseEntityName(false); } function parseExternalModuleReference() { - var node = createNode(254 /* ExternalModuleReference */); - parseExpected(133 /* RequireKeyword */); - parseExpected(19 /* OpenParenToken */); + var node = createNode(254); + parseExpected(133); + parseExpected(19); node.expression = parseModuleSpecifier(); - parseExpected(20 /* CloseParenToken */); + parseExpected(20); return finishNode(node); } function parseModuleSpecifier() { - if (token() === 9 /* StringLiteral */) { + if (token() === 9) { var result = parseLiteralNode(); result.text = internIdentifier(result.text); return result; } else { - // We allow arbitrary expressions here, even though the grammar only allows string - // literals. We check to ensure that it is only a string literal later in the grammar - // check pass. return parseExpression(); } } function parseNamespaceImport() { - // NameSpaceImport: - // * as ImportedBinding - var namespaceImport = createNode(246 /* NamespaceImport */); - parseExpected(39 /* AsteriskToken */); - parseExpected(118 /* AsKeyword */); + var namespaceImport = createNode(246); + parseExpected(39); + parseExpected(118); namespaceImport.name = parseIdentifier(); return finishNode(namespaceImport); } function parseNamedImportsOrExports(kind) { var node = createNode(kind); - // NamedImports: - // { } - // { ImportsList } - // { ImportsList, } - // ImportsList: - // ImportSpecifier - // ImportsList, ImportSpecifier - node.elements = parseBracketedList(22 /* ImportOrExportSpecifiers */, kind === 247 /* NamedImports */ ? parseImportSpecifier : parseExportSpecifier, 17 /* OpenBraceToken */, 18 /* CloseBraceToken */); + node.elements = parseBracketedList(22, kind === 247 ? parseImportSpecifier : parseExportSpecifier, 17, 18); return finishNode(node); } function parseExportSpecifier() { - return parseImportOrExportSpecifier(252 /* ExportSpecifier */); + return parseImportOrExportSpecifier(252); } function parseImportSpecifier() { - return parseImportOrExportSpecifier(248 /* ImportSpecifier */); + return parseImportOrExportSpecifier(248); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); - // ImportSpecifier: - // BindingIdentifier - // IdentifierName as BindingIdentifier - // ExportSpecifier: - // IdentifierName - // IdentifierName as IdentifierName var checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier(); var checkIdentifierStart = scanner.getTokenPos(); var checkIdentifierEnd = scanner.getTextPos(); var identifierName = parseIdentifierName(); - if (token() === 118 /* AsKeyword */) { + if (token() === 118) { node.propertyName = identifierName; - parseExpected(118 /* AsKeyword */); + parseExpected(118); checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier(); checkIdentifierStart = scanner.getTokenPos(); checkIdentifierEnd = scanner.getTextPos(); @@ -20431,24 +16354,21 @@ var ts; else { node.name = identifierName; } - if (kind === 248 /* ImportSpecifier */ && checkIdentifierIsKeyword) { + if (kind === 248 && checkIdentifierIsKeyword) { parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(node) { - node.kind = 250 /* ExportDeclaration */; - if (parseOptional(39 /* AsteriskToken */)) { - parseExpected(143 /* FromKeyword */); + node.kind = 250; + if (parseOptional(39)) { + parseExpected(143); node.moduleSpecifier = parseModuleSpecifier(); } else { - node.exportClause = parseNamedImportsOrExports(251 /* NamedExports */); - // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios, - // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`) - // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect. - if (token() === 143 /* FromKeyword */ || (token() === 9 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) { - parseExpected(143 /* FromKeyword */); + node.exportClause = parseNamedImportsOrExports(251); + if (token() === 143 || (token() === 9 && !scanner.hasPrecedingLineBreak())) { + parseExpected(143); node.moduleSpecifier = parseModuleSpecifier(); } } @@ -20456,35 +16376,33 @@ var ts; return finishNode(node); } function parseExportAssignment(node) { - node.kind = 249 /* ExportAssignment */; - if (parseOptional(58 /* EqualsToken */)) { + node.kind = 249; + if (parseOptional(58)) { node.isExportEquals = true; } else { - parseExpected(79 /* DefaultKeyword */); + parseExpected(79); } node.expression = parseAssignmentExpressionOrHigher(); parseSemicolon(); return finishNode(node); } function setExternalModuleIndicator(sourceFile) { - // Try to use the first top-level import/export when available, then - // fall back to looking for an 'import.meta' somewhere in the tree if necessary. sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, isAnExternalModuleIndicatorNode) || getImportMetaIfNecessary(sourceFile); } function isAnExternalModuleIndicatorNode(node) { - return ts.hasModifier(node, 1 /* Export */) - || node.kind === 243 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 254 /* ExternalModuleReference */ - || node.kind === 244 /* ImportDeclaration */ - || node.kind === 249 /* ExportAssignment */ - || node.kind === 250 /* ExportDeclaration */ + return ts.hasModifier(node, 1) + || node.kind === 243 && node.moduleReference.kind === 254 + || node.kind === 244 + || node.kind === 249 + || node.kind === 250 ? node : undefined; } function getImportMetaIfNecessary(sourceFile) { - return sourceFile.flags & 1048576 /* PossiblyContainsImportMeta */ ? + return sourceFile.flags & 1048576 ? walkTreeForExternalModuleIndicators(sourceFile) : undefined; } @@ -20492,46 +16410,13 @@ var ts; return isImportMeta(node) ? node : forEachChild(node, walkTreeForExternalModuleIndicators); } function isImportMeta(node) { - return ts.isMetaProperty(node) && node.keywordToken === 91 /* ImportKeyword */ && node.name.escapedText === "meta"; + return ts.isMetaProperty(node) && node.keywordToken === 91 && node.name.escapedText === "meta"; } - var ParsingContext; - (function (ParsingContext) { - ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements"; - ParsingContext[ParsingContext["BlockStatements"] = 1] = "BlockStatements"; - ParsingContext[ParsingContext["SwitchClauses"] = 2] = "SwitchClauses"; - ParsingContext[ParsingContext["SwitchClauseStatements"] = 3] = "SwitchClauseStatements"; - ParsingContext[ParsingContext["TypeMembers"] = 4] = "TypeMembers"; - ParsingContext[ParsingContext["ClassMembers"] = 5] = "ClassMembers"; - ParsingContext[ParsingContext["EnumMembers"] = 6] = "EnumMembers"; - ParsingContext[ParsingContext["HeritageClauseElement"] = 7] = "HeritageClauseElement"; - ParsingContext[ParsingContext["VariableDeclarations"] = 8] = "VariableDeclarations"; - ParsingContext[ParsingContext["ObjectBindingElements"] = 9] = "ObjectBindingElements"; - ParsingContext[ParsingContext["ArrayBindingElements"] = 10] = "ArrayBindingElements"; - ParsingContext[ParsingContext["ArgumentExpressions"] = 11] = "ArgumentExpressions"; - ParsingContext[ParsingContext["ObjectLiteralMembers"] = 12] = "ObjectLiteralMembers"; - ParsingContext[ParsingContext["JsxAttributes"] = 13] = "JsxAttributes"; - ParsingContext[ParsingContext["JsxChildren"] = 14] = "JsxChildren"; - ParsingContext[ParsingContext["ArrayLiteralMembers"] = 15] = "ArrayLiteralMembers"; - ParsingContext[ParsingContext["Parameters"] = 16] = "Parameters"; - ParsingContext[ParsingContext["RestProperties"] = 17] = "RestProperties"; - ParsingContext[ParsingContext["TypeParameters"] = 18] = "TypeParameters"; - ParsingContext[ParsingContext["TypeArguments"] = 19] = "TypeArguments"; - ParsingContext[ParsingContext["TupleElementTypes"] = 20] = "TupleElementTypes"; - ParsingContext[ParsingContext["HeritageClauses"] = 21] = "HeritageClauses"; - ParsingContext[ParsingContext["ImportOrExportSpecifiers"] = 22] = "ImportOrExportSpecifiers"; - ParsingContext[ParsingContext["Count"] = 23] = "Count"; // Number of parsing contexts - })(ParsingContext || (ParsingContext = {})); - var Tristate; - (function (Tristate) { - Tristate[Tristate["False"] = 0] = "False"; - Tristate[Tristate["True"] = 1] = "True"; - Tristate[Tristate["Unknown"] = 2] = "Unknown"; - })(Tristate || (Tristate = {})); var JSDocParser; (function (JSDocParser) { function parseJSDocTypeExpressionForTests(content, start, length) { - initializeState(content, 6 /* Latest */, /*_syntaxCursor:*/ undefined, 1 /* JS */); - sourceFile = createSourceFile("file.js", 6 /* Latest */, 1 /* JS */, /*isDeclarationFile*/ false); + initializeState(content, 6, undefined, 1); + sourceFile = createSourceFile("file.js", 6, 1, false); scanner.setText(content, start, length); currentToken = scanner.scan(); var jsDocTypeExpression = parseJSDocTypeExpression(); @@ -20540,21 +16425,20 @@ var ts; return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined; } JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; - // Parses out a JSDoc type expression. function parseJSDocTypeExpression(mayOmitBraces) { - var result = createNode(278 /* JSDocTypeExpression */, scanner.getTokenPos()); - var hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(17 /* OpenBraceToken */); - result.type = doInsideOfContext(2097152 /* JSDoc */, parseJSDocType); + var result = createNode(278, scanner.getTokenPos()); + var hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(17); + result.type = doInsideOfContext(2097152, parseJSDocType); if (!mayOmitBraces || hasBrace) { - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); } fixupParentReferences(result); return finishNode(result); } JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression; function parseIsolatedJSDocComment(content, start, length) { - initializeState(content, 6 /* Latest */, /*_syntaxCursor:*/ undefined, 1 /* JS */); - sourceFile = { languageVariant: 0 /* Standard */, text: content }; // tslint:disable-line no-object-literal-type-assertion + initializeState(content, 6, undefined, 1); + sourceFile = { languageVariant: 0, text: content }; var jsDoc = parseJSDocCommentWorker(start, length); var diagnostics = parseDiagnostics; clearState(); @@ -20570,7 +16454,7 @@ var ts; if (comment) { comment.parent = parent; } - if (contextFlags & 65536 /* JavaScriptFile */) { + if (contextFlags & 65536) { if (!sourceFile.jsDocDiagnostics) { sourceFile.jsDocDiagnostics = []; } @@ -20582,18 +16466,6 @@ var ts; return comment; } JSDocParser.parseJSDocComment = parseJSDocComment; - var JSDocState; - (function (JSDocState) { - JSDocState[JSDocState["BeginningOfLine"] = 0] = "BeginningOfLine"; - JSDocState[JSDocState["SawAsterisk"] = 1] = "SawAsterisk"; - JSDocState[JSDocState["SavingComments"] = 2] = "SavingComments"; - })(JSDocState || (JSDocState = {})); - var PropertyLikeParse; - (function (PropertyLikeParse) { - PropertyLikeParse[PropertyLikeParse["Property"] = 1] = "Property"; - PropertyLikeParse[PropertyLikeParse["Parameter"] = 2] = "Parameter"; - PropertyLikeParse[PropertyLikeParse["CallbackParameter"] = 4] = "CallbackParameter"; - })(PropertyLikeParse || (PropertyLikeParse = {})); function parseJSDocCommentWorker(start, length) { if (start === void 0) { start = 0; } var content = sourceText; @@ -20607,17 +16479,12 @@ var ts; var tagsEnd; var comments = []; var result; - // Check for /** (JSDoc opening part) if (!isJSDocLikeText(content, start)) { return result; } - // + 3 for leading /**, - 5 in total for /** */ scanner.scanRange(start + 3, length - 5, function () { - // Initially we can parse out a tag. We also have seen a starting asterisk. - // This is so that /** * @type */ doesn't parse. - var state = 1 /* SawAsterisk */; + var state = 1; var margin; - // + 4 for leading '/** ' var indent = start - Math.max(content.lastIndexOf("\n", start), 0) + 4; function pushComment(text) { if (!margin) { @@ -20627,22 +16494,19 @@ var ts; indent += text.length; } nextJSDocToken(); - while (parseOptionalJsdoc(5 /* WhitespaceTrivia */)) + while (parseOptionalJsdoc(5)) ; - if (parseOptionalJsdoc(4 /* NewLineTrivia */)) { - state = 0 /* BeginningOfLine */; + if (parseOptionalJsdoc(4)) { + state = 0; indent = 0; } loop: while (true) { switch (token()) { - case 57 /* AtToken */: - if (state === 0 /* BeginningOfLine */ || state === 1 /* SawAsterisk */) { + case 57: + if (state === 0 || state === 1) { removeTrailingNewlines(comments); addTag(parseTag(indent)); - // NOTE: According to usejsdoc.org, a tag goes to end of line, except the last tag. - // Real-world comments may break this rule, so "BeginningOfLine" will not be a real line beginning - // for malformed examples like `/** @param {string} x @returns {number} the length */` - state = 0 /* BeginningOfLine */; + state = 0; margin = undefined; indent++; } @@ -20650,35 +16514,29 @@ var ts; pushComment(scanner.getTokenText()); } break; - case 4 /* NewLineTrivia */: + case 4: comments.push(scanner.getTokenText()); - state = 0 /* BeginningOfLine */; + state = 0; indent = 0; break; - case 39 /* AsteriskToken */: + case 39: var asterisk = scanner.getTokenText(); - if (state === 1 /* SawAsterisk */ || state === 2 /* SavingComments */) { - // If we've already seen an asterisk, then we can no longer parse a tag on this line - state = 2 /* SavingComments */; + if (state === 1 || state === 2) { + state = 2; pushComment(asterisk); } else { - // Ignore the first asterisk on a line - state = 1 /* SawAsterisk */; + state = 1; indent += asterisk.length; } break; - case 71 /* Identifier */: - // Anything else is doc comment text. We just save it. Because it - // wasn't a tag, we can no longer parse a tag on this line until we hit the next - // line break. + case 71: pushComment(scanner.getTokenText()); - state = 2 /* SavingComments */; + state = 2; break; - case 5 /* WhitespaceTrivia */: - // only collect whitespace if we're already saving comments or have just crossed the comment indent margin + case 5: var whitespace = scanner.getTokenText(); - if (state === 2 /* SavingComments */) { + if (state === 2) { comments.push(whitespace); } else if (margin !== undefined && indent + whitespace.length > margin) { @@ -20686,11 +16544,10 @@ var ts; } indent += whitespace.length; break; - case 1 /* EndOfFileToken */: + case 1: break loop; default: - // anything other than whitespace or asterisk at the beginning of the line starts the comment text - state = 2 /* SavingComments */; + state = 2; pushComment(scanner.getTokenText()); break; } @@ -20712,36 +16569,35 @@ var ts; } } function createJSDocComment() { - var result = createNode(286 /* JSDocComment */, start); + var result = createNode(286, start); result.tags = tags && createNodeArray(tags, tagsPos, tagsEnd); result.comment = comments.length ? comments.join("") : undefined; return finishNode(result, end); } function isNextNonwhitespaceTokenEndOfFile() { - // We must use infinite lookahead, as there could be any number of newlines :( while (true) { nextJSDocToken(); - if (token() === 1 /* EndOfFileToken */) { + if (token() === 1) { return true; } - if (!(token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */)) { + if (!(token() === 5 || token() === 4)) { return false; } } } function skipWhitespace() { - if (token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + if (token() === 5 || token() === 4) { if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) { - return; // Don't skip whitespace prior to EoF (or end of comment) - that shouldn't be included in any node's range + return; } } - while (token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + while (token() === 5 || token() === 4) { nextJSDocToken(); } } function parseTag(indent) { - ts.Debug.assert(token() === 57 /* AtToken */); - var atToken = createNode(57 /* AtToken */, scanner.getTokenPos()); + ts.Debug.assert(token() === 57); + var atToken = createNode(57, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); var tagName = parseJSDocIdentifierName(); @@ -20759,7 +16615,7 @@ var ts; case "arg": case "argument": case "param": - return parseParameterOrPropertyTag(atToken, tagName, 2 /* Parameter */, indent); + return parseParameterOrPropertyTag(atToken, tagName, 2, indent); case "return": case "returns": tag = parseReturnTag(atToken, tagName); @@ -20781,14 +16637,13 @@ var ts; break; } if (!tag.comment) { - // some tags, like typedef and callback, have already parsed their comments earlier tag.comment = parseTagComments(indent + tag.end - tag.pos); } return tag; } function parseTagComments(indent) { var comments = []; - var state = 0 /* BeginningOfLine */; + var state = 0; var margin; function pushComment(text) { if (!margin) { @@ -20800,43 +16655,37 @@ var ts; var tok = token(); loop: while (true) { switch (tok) { - case 4 /* NewLineTrivia */: - if (state >= 1 /* SawAsterisk */) { - state = 0 /* BeginningOfLine */; + case 4: + if (state >= 1) { + state = 0; comments.push(scanner.getTokenText()); } indent = 0; break; - case 57 /* AtToken */: + case 57: scanner.setTextPos(scanner.getTextPos() - 1); - // falls through - case 1 /* EndOfFileToken */: - // Done + case 1: break loop; - case 5 /* WhitespaceTrivia */: - if (state === 2 /* SavingComments */) { + case 5: + if (state === 2) { pushComment(scanner.getTokenText()); } else { var whitespace = scanner.getTokenText(); - // if the whitespace crosses the margin, take only the whitespace that passes the margin if (margin !== undefined && indent + whitespace.length > margin) { comments.push(whitespace.slice(margin - indent - 1)); } indent += whitespace.length; } break; - case 39 /* AsteriskToken */: - if (state === 0 /* BeginningOfLine */) { - // leading asterisks start recording on the *next* (non-whitespace) token - state = 1 /* SawAsterisk */; + case 39: + if (state === 0) { + state = 1; indent += 1; break; } - // record the * as a comment - // falls through default: - state = 2 /* SavingComments */; // leading identifiers start recording as well + state = 2; pushComment(scanner.getTokenText()); break; } @@ -20847,7 +16696,7 @@ var ts; return comments.length === 0 ? undefined : comments.join(""); } function parseUnknownTag(atToken, tagName) { - var result = createNode(289 /* JSDocTag */, atToken.pos); + var result = createNode(289, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); @@ -20867,31 +16716,28 @@ var ts; } function tryParseTypeExpression() { skipWhitespace(); - return token() === 17 /* OpenBraceToken */ ? parseJSDocTypeExpression() : undefined; + return token() === 17 ? parseJSDocTypeExpression() : undefined; } function parseBracketNameInPropertyAndParamTag() { - if (token() === 13 /* NoSubstitutionTemplateLiteral */) { - // a markdown-quoted name: `arg` is not legal jsdoc, but occurs in the wild - return { name: createIdentifier(/*isIdentifier*/ true), isBracketed: false }; + if (token() === 13) { + return { name: createIdentifier(true), isBracketed: false }; } - // Looking for something like '[foo]', 'foo', '[foo.bar]' or 'foo.bar' - var isBracketed = parseOptional(21 /* OpenBracketToken */); + var isBracketed = parseOptional(21); var name = parseJSDocEntityName(); if (isBracketed) { skipWhitespace(); - // May have an optional default, e.g. '[foo = 42]' - if (parseOptionalToken(58 /* EqualsToken */)) { + if (parseOptionalToken(58)) { parseExpression(); } - parseExpected(22 /* CloseBracketToken */); + parseExpected(22); } return { name: name, isBracketed: isBracketed }; } function isObjectOrObjectArrayTypeReference(node) { switch (node.kind) { - case 135 /* ObjectKeyword */: + case 135: return true; - case 167 /* ArrayType */: + case 167: return isObjectOrObjectArrayTypeReference(node.elementType); default: return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object"; @@ -20906,13 +16752,13 @@ var ts; if (isNameFirst) { typeExpression = tryParseTypeExpression(); } - var result = target === 1 /* Property */ ? - createNode(298 /* JSDocPropertyTag */, atToken.pos) : - createNode(293 /* JSDocParameterTag */, atToken.pos); + var result = target === 1 ? + createNode(298, atToken.pos) : + createNode(293, atToken.pos); var comment; if (indent !== undefined) comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos); - var nestedTypeLiteral = target !== 4 /* CallbackParameter */ && parseNestedTypeLiteral(typeExpression, name, target); + var nestedTypeLiteral = target !== 4 && parseNestedTypeLiteral(typeExpression, name, target); if (nestedTypeLiteral) { typeExpression = nestedTypeLiteral; isNameFirst = true; @@ -20928,20 +16774,20 @@ var ts; } function parseNestedTypeLiteral(typeExpression, name, target) { if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) { - var typeLiteralExpression = createNode(278 /* JSDocTypeExpression */, scanner.getTokenPos()); + var typeLiteralExpression = createNode(278, scanner.getTokenPos()); var child = void 0; var jsdocTypeLiteral = void 0; var start_2 = scanner.getStartPos(); var children = void 0; while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, name); })) { - if (child.kind === 293 /* JSDocParameterTag */ || child.kind === 298 /* JSDocPropertyTag */) { + if (child.kind === 293 || child.kind === 298) { children = ts.append(children, child); } } if (children) { - jsdocTypeLiteral = createNode(287 /* JSDocTypeLiteral */, start_2); + jsdocTypeLiteral = createNode(287, start_2); jsdocTypeLiteral.jsDocPropertyTags = children; - if (typeExpression.type.kind === 167 /* ArrayType */) { + if (typeExpression.type.kind === 167) { jsdocTypeLiteral.isArrayType = true; } typeLiteralExpression.type = finishNode(jsdocTypeLiteral); @@ -20950,47 +16796,47 @@ var ts; } } function parseReturnTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 294 /* JSDocReturnTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 294; })) { parseErrorAt(tagName.pos, scanner.getTokenPos(), ts.Diagnostics._0_tag_already_specified, tagName.escapedText); } - var result = createNode(294 /* JSDocReturnTag */, atToken.pos); + var result = createNode(294, 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 === 295 /* JSDocTypeTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 295; })) { parseErrorAt(tagName.pos, scanner.getTokenPos(), ts.Diagnostics._0_tag_already_specified, tagName.escapedText); } - var result = createNode(295 /* JSDocTypeTag */, atToken.pos); + var result = createNode(295, atToken.pos); result.atToken = atToken; result.tagName = tagName; - result.typeExpression = parseJSDocTypeExpression(/*mayOmitBraces*/ true); + result.typeExpression = parseJSDocTypeExpression(true); return finishNode(result); } function parseAugmentsTag(atToken, tagName) { - var result = createNode(290 /* JSDocAugmentsTag */, atToken.pos); + var result = createNode(290, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.class = parseExpressionWithTypeArgumentsForAugments(); return finishNode(result); } function parseExpressionWithTypeArgumentsForAugments() { - var usedBrace = parseOptional(17 /* OpenBraceToken */); - var node = createNode(207 /* ExpressionWithTypeArguments */); + var usedBrace = parseOptional(17); + var node = createNode(207); node.expression = parsePropertyAccessEntityNameExpression(); node.typeArguments = tryParseTypeArguments(); var res = finishNode(node); if (usedBrace) { - parseExpected(18 /* CloseBraceToken */); + parseExpected(18); } return res; } function parsePropertyAccessEntityNameExpression() { var node = parseJSDocIdentifierName(); - while (parseOptional(23 /* DotToken */)) { - var prop = createNode(185 /* PropertyAccessExpression */, node.pos); + while (parseOptional(23)) { + var prop = createNode(185, node.pos); prop.expression = node; prop.name = parseJSDocIdentifierName(); node = finishNode(prop); @@ -20998,7 +16844,7 @@ var ts; return node; } function parseClassTag(atToken, tagName) { - var tag = createNode(291 /* JSDocClassTag */, atToken.pos); + var tag = createNode(291, atToken.pos); tag.atToken = atToken; tag.tagName = tagName; return finishNode(tag); @@ -21006,7 +16852,7 @@ var ts; function parseTypedefTag(atToken, tagName, indent) { var typeExpression = tryParseTypeExpression(); skipWhitespace(); - var typedefTag = createNode(297 /* JSDocTypedefTag */, atToken.pos); + var typedefTag = createNode(297, atToken.pos); typedefTag.atToken = atToken; typedefTag.tagName = tagName; typedefTag.fullName = parseJSDocTypeNameWithNamespace(); @@ -21022,9 +16868,9 @@ var ts; var start_3 = scanner.getStartPos(); while (child = tryParse(function () { return parseChildPropertyTag(); })) { if (!jsdocTypeLiteral) { - jsdocTypeLiteral = createNode(287 /* JSDocTypeLiteral */, start_3); + jsdocTypeLiteral = createNode(287, start_3); } - if (child.kind === 295 /* JSDocTypeTag */) { + if (child.kind === 295) { if (childTypeTag) { break; } @@ -21037,7 +16883,7 @@ var ts; } } if (jsdocTypeLiteral) { - if (typeExpression && typeExpression.type.kind === 167 /* ArrayType */) { + if (typeExpression && typeExpression.type.kind === 167) { jsdocTypeLiteral.isArrayType = true; } typedefTag.typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ? @@ -21046,7 +16892,6 @@ var ts; end = typedefTag.typeExpression.end; } } - // Only include the characters between the name end and the next token if a comment was actually parsed out - otherwise it's just whitespace return finishNode(typedefTag, end || typedefTag.comment !== undefined ? scanner.getStartPos() : (typedefTag.fullName || typedefTag.typeExpression || typedefTag.tagName).end); } function parseJSDocTypeNameWithNamespace(nested) { @@ -21055,13 +16900,13 @@ var ts; return undefined; } var typeNameOrNamespaceName = parseJSDocIdentifierName(); - if (parseOptional(23 /* DotToken */)) { - var jsDocNamespaceNode = createNode(239 /* ModuleDeclaration */, pos); + if (parseOptional(23)) { + var jsDocNamespaceNode = createNode(239, pos); if (nested) { - jsDocNamespaceNode.flags |= 4 /* NestedNamespace */; + jsDocNamespaceNode.flags |= 4; } jsDocNamespaceNode.name = typeNameOrNamespaceName; - jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(/*nested*/ true); + jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(true); return finishNode(jsDocNamespaceNode); } if (nested) { @@ -21070,7 +16915,7 @@ var ts; return typeNameOrNamespaceName; } function parseCallbackTag(atToken, tagName, indent) { - var callbackTag = createNode(292 /* JSDocCallbackTag */, atToken.pos); + var callbackTag = createNode(292, atToken.pos); callbackTag.atToken = atToken; callbackTag.tagName = tagName; callbackTag.fullName = parseJSDocTypeNameWithNamespace(); @@ -21079,15 +16924,15 @@ var ts; callbackTag.comment = parseTagComments(indent); var child; var start = scanner.getStartPos(); - var jsdocSignature = createNode(288 /* JSDocSignature */, start); + var jsdocSignature = createNode(288, start); jsdocSignature.parameters = []; - while (child = tryParse(function () { return parseChildParameterOrPropertyTag(4 /* CallbackParameter */); })) { + while (child = tryParse(function () { return parseChildParameterOrPropertyTag(4); })) { jsdocSignature.parameters = ts.append(jsdocSignature.parameters, child); } var returnTag = tryParse(function () { - if (parseOptionalJsdoc(57 /* AtToken */)) { + if (parseOptionalJsdoc(57)) { var tag = parseTag(indent); - if (tag && tag.kind === 294 /* JSDocReturnTag */) { + if (tag && tag.kind === 294) { return tag; } } @@ -21122,46 +16967,46 @@ var ts; return a.escapedText === b.escapedText; } function parseChildPropertyTag() { - return parseChildParameterOrPropertyTag(1 /* Property */); + return parseChildParameterOrPropertyTag(1); } function parseChildParameterOrPropertyTag(target, name) { var canParseTag = true; var seenAsterisk = false; while (true) { switch (nextJSDocToken()) { - case 57 /* AtToken */: + case 57: if (canParseTag) { var child = tryParseChildTag(target); - if (child && child.kind === 293 /* JSDocParameterTag */ && - target !== 4 /* CallbackParameter */ && - (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) { // TODO: GH#18217 + if (child && child.kind === 293 && + target !== 4 && + (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) { return false; } return child; } seenAsterisk = false; break; - case 4 /* NewLineTrivia */: + case 4: canParseTag = true; seenAsterisk = false; break; - case 39 /* AsteriskToken */: + case 39: if (seenAsterisk) { canParseTag = false; } seenAsterisk = true; break; - case 71 /* Identifier */: + case 71: canParseTag = false; break; - case 1 /* EndOfFileToken */: + case 1: return false; } } } function tryParseChildTag(target) { - ts.Debug.assert(token() === 57 /* AtToken */); - var atToken = createNode(57 /* AtToken */); + ts.Debug.assert(token() === 57); + var atToken = createNode(57); atToken.end = scanner.getTextPos(); nextJSDocToken(); var tagName = parseJSDocIdentifierName(); @@ -21169,15 +17014,15 @@ var ts; var t; switch (tagName.escapedText) { case "type": - return target === 1 /* Property */ && parseTypeTag(atToken, tagName); + return target === 1 && parseTypeTag(atToken, tagName); case "prop": case "property": - t = 1 /* Property */; + t = 1; break; case "arg": case "argument": case "param": - t = 2 /* Parameter */ | 4 /* CallbackParameter */; + t = 2 | 4; break; default: return false; @@ -21185,30 +17030,29 @@ var ts; if (!(target & t)) { return false; } - var tag = parseParameterOrPropertyTag(atToken, tagName, target, /*indent*/ undefined); + var tag = parseParameterOrPropertyTag(atToken, tagName, target, undefined); tag.comment = parseTagComments(tag.end - tag.pos); return tag; } function parseTemplateTag(atToken, tagName) { - // the template tag looks like '@template {Constraint} T,U,V' var constraint; - if (token() === 17 /* OpenBraceToken */) { + if (token() === 17) { constraint = parseJSDocTypeExpression(); } var typeParameters = []; var typeParametersPos = getNodePos(); do { skipWhitespace(); - var typeParameter = createNode(148 /* TypeParameter */); + var typeParameter = createNode(148); typeParameter.name = parseJSDocIdentifierName(ts.Diagnostics.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces); skipWhitespace(); finishNode(typeParameter); typeParameters.push(typeParameter); - } while (parseOptionalJsdoc(26 /* CommaToken */)); + } while (parseOptionalJsdoc(26)); if (constraint) { ts.first(typeParameters).constraint = constraint.type; } - var result = createNode(296 /* JSDocTemplateTag */, atToken.pos); + var result = createNode(296, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = createNodeArray(typeParameters, typeParametersPos); @@ -21227,16 +17071,13 @@ var ts; } function parseJSDocEntityName() { var entity = parseJSDocIdentifierName(); - if (parseOptional(21 /* OpenBracketToken */)) { - parseExpected(22 /* CloseBracketToken */); - // Note that y[] is accepted as an entity name, but the postfix brackets are not saved for checking. - // Technically usejsdoc.org requires them for specifying a property of a type equivalent to Array<{ x: ...}> - // but it's not worth it to enforce that restriction. + if (parseOptional(21)) { + parseExpected(22); } - while (parseOptional(23 /* DotToken */)) { + while (parseOptional(23)) { var name = parseJSDocIdentifierName(); - if (parseOptional(21 /* OpenBracketToken */)) { - parseExpected(22 /* CloseBracketToken */); + if (parseOptional(21)) { + parseExpected(22); } entity = createQualifiedName(entity, name); } @@ -21244,11 +17085,11 @@ var ts; } function parseJSDocIdentifierName(message) { if (!ts.tokenIsIdentifierOrKeyword(token())) { - return createMissingNode(71 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected); + return createMissingNode(71, !message, message || ts.Diagnostics.Identifier_expected); } var pos = scanner.getTokenPos(); var end = scanner.getTextPos(); - var result = createNode(71 /* Identifier */, pos); + var result = createNode(71, pos); result.escapedText = ts.escapeLeadingUnderscores(scanner.getTokenText()); finishNode(result, end); nextJSDocToken(); @@ -21261,72 +17102,27 @@ var ts; var IncrementalParser; (function (IncrementalParser) { function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { - aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2 /* Aggressive */); + aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2); checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks); if (ts.textChangeRangeIsUnchanged(textChangeRange)) { - // if the text didn't change, then we can just return our current source file as-is. return sourceFile; } if (sourceFile.statements.length === 0) { - // If we don't have any statements in the current source file, then there's no real - // way to incrementally parse. So just do a full parse instead. - return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind); + return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true, sourceFile.scriptKind); } - // Make sure we're not trying to incrementally update a source file more than once. Once - // we do an update the original source file is considered unusable from that point onwards. - // - // This is because we do incremental parsing in-place. i.e. we take nodes from the old - // tree and give them new positions and parents. From that point on, trusting the old - // tree at all is not possible as far too much of it may violate invariants. var incrementalSourceFile = sourceFile; ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed); incrementalSourceFile.hasBeenIncrementallyParsed = true; var oldText = sourceFile.text; var syntaxCursor = createSyntaxCursor(sourceFile); - // Make the actual change larger so that we know to reparse anything whose lookahead - // might have intersected the change. var changeRange = extendToAffectedRange(sourceFile, textChangeRange); checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks); - // Ensure that extending the affected range only moved the start of the change range - // earlier in the file. ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start); ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span)); ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange))); - // The is the amount the nodes after the edit range need to be adjusted. It can be - // positive (if the edit added characters), negative (if the edit deleted characters) - // or zero (if this was a pure overwrite with nothing added/removed). var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; - // If we added or removed characters during the edit, then we need to go and adjust all - // the nodes after the edit. Those nodes may move forward (if we inserted chars) or they - // may move backward (if we deleted chars). - // - // Doing this helps us out in two ways. First, it means that any nodes/tokens we want - // to reuse are already at the appropriate position in the new text. That way when we - // reuse them, we don't have to figure out if they need to be adjusted. Second, it makes - // it very easy to determine if we can reuse a node. If the node's position is at where - // we are in the text, then we can reuse it. Otherwise we can't. If the node's position - // is ahead of us, then we'll need to rescan tokens. If the node's position is behind - // us, then we'll need to skip it or crumble it as appropriate - // - // We will also adjust the positions of nodes that intersect the change range as well. - // By doing this, we ensure that all the positions in the old tree are consistent, not - // just the positions of nodes entirely before/after the change range. By being - // consistent, we can then easily map from positions to nodes in the old tree easily. - // - // Also, mark any syntax elements that intersect the changed span. We know, up front, - // that we cannot reuse these elements. updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks); - // Now that we've set up our internal incremental state just proceed and parse the - // source file in the normal fashion. When possible the parser will retrieve and - // reuse nodes from the old tree. - // - // Note: passing in 'true' for setNodeParents is very important. When incrementally - // parsing, we will be reusing nodes from the old tree, and placing it into new - // parents. If we don't set the parents now, we'll end up with an observably - // inconsistent tree. Setting the parents on the new tree should be very fast. We - // will immediately bail out of walking any subtrees when we can see that their parents - // are already correct. - var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind); + var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true, sourceFile.scriptKind); return result; } IncrementalParser.updateSourceFile = updateSourceFile; @@ -21343,8 +17139,6 @@ var ts; if (aggressiveChecks && shouldCheckNode(node)) { text = oldText.substring(node.pos, node.end); } - // Ditch any existing LS children we may have created. This way we can avoid - // moving them forward. if (node._children) { node._children = undefined; } @@ -21374,9 +17168,9 @@ var ts; } function shouldCheckNode(node) { switch (node.kind) { - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: - case 71 /* Identifier */: + case 9: + case 8: + case 71: return true; } return false; @@ -21385,63 +17179,11 @@ var ts; ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); ts.Debug.assert(element.pos <= element.end); - // We have an element that intersects the change range in some way. It may have its - // start, or its end (or both) in the changed range. We want to adjust any part - // that intersects such that the final tree is in a consistent state. i.e. all - // children have spans within the span of their parent, and all siblings are ordered - // properly. - // We may need to update both the 'pos' and the 'end' of the element. - // If the 'pos' is before the start of the change, then we don't need to touch it. - // If it isn't, then the 'pos' must be inside the change. How we update it will - // depend if delta is positive or negative. If delta is positive then we have - // something like: - // - // -------------------AAA----------------- - // -------------------BBBCCCCCCC----------------- - // - // In this case, we consider any node that started in the change range to still be - // starting at the same position. - // - // however, if the delta is negative, then we instead have something like this: - // - // -------------------XXXYYYYYYY----------------- - // -------------------ZZZ----------------- - // - // In this case, any element that started in the 'X' range will keep its position. - // However any element that started after that will have their pos adjusted to be - // at the end of the new range. i.e. any node that started in the 'Y' range will - // be adjusted to have their start at the end of the 'Z' range. - // - // The element will keep its position if possible. Or Move backward to the new-end - // if it's in the 'Y' range. element.pos = Math.min(element.pos, changeRangeNewEnd); - // If the 'end' is after the change range, then we always adjust it by the delta - // amount. However, if the end is in the change range, then how we adjust it - // will depend on if delta is positive or negative. If delta is positive then we - // have something like: - // - // -------------------AAA----------------- - // -------------------BBBCCCCCCC----------------- - // - // In this case, we consider any node that ended inside the change range to keep its - // end position. - // - // however, if the delta is negative, then we instead have something like this: - // - // -------------------XXXYYYYYYY----------------- - // -------------------ZZZ----------------- - // - // In this case, any element that ended in the 'X' range will keep its position. - // However any element that ended after that will have their pos adjusted to be - // at the end of the new range. i.e. any node that ended in the 'Y' range will - // be adjusted to have their end at the end of the 'Z' range. if (element.end >= changeRangeOldEnd) { - // Element ends after the change range. Always adjust the end pos. element.end += delta; } else { - // Element ends in the change range. The element will keep its position if - // possible. Or Move backward to the new-end if it's in the 'Y' range. element.end = Math.min(element.end, changeRangeNewEnd); } ts.Debug.assert(element.pos <= element.end); @@ -21473,19 +17215,13 @@ var ts; function visitNode(child) { ts.Debug.assert(child.pos <= child.end); if (child.pos > changeRangeOldEnd) { - // Node is entirely past the change range. We need to move both its pos and - // end, forward or backward appropriately. - moveElementEntirelyPastChangeRange(child, /*isArray*/ false, delta, oldText, newText, aggressiveChecks); + moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks); return; } - // Check if the element intersects the change range. If it does, then it is not - // reusable. Also, we'll need to recurse to see what constituent portions we may - // be able to use. var fullEnd = child.end; if (fullEnd >= changeStart) { child.intersectsChange = true; child._children = undefined; - // Adjust the pos or end (or both) of the intersecting element accordingly. adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); forEachChild(child, visitNode, visitArray); if (ts.hasJSDocNodes(child)) { @@ -21497,25 +17233,18 @@ var ts; checkNodePositions(child, aggressiveChecks); return; } - // Otherwise, the node is entirely before the change range. No need to do anything with it. ts.Debug.assert(fullEnd < changeStart); } function visitArray(array) { ts.Debug.assert(array.pos <= array.end); if (array.pos > changeRangeOldEnd) { - // Array is entirely after the change range. We need to move it, and move any of - // its children. - moveElementEntirelyPastChangeRange(array, /*isArray*/ true, delta, oldText, newText, aggressiveChecks); + moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks); return; } - // Check if the element intersects the change range. If it does, then it is not - // reusable. Also, we'll need to recurse to see what constituent portions we may - // be able to use. var fullEnd = array.end; if (fullEnd >= changeStart) { array.intersectsChange = true; array._children = undefined; - // Adjust the pos or end (or both) of the intersecting array accordingly. adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { var node = array_9[_i]; @@ -21523,26 +17252,12 @@ var ts; } return; } - // Otherwise, the array is entirely before the change range. No need to do anything with it. ts.Debug.assert(fullEnd < changeStart); } } function extendToAffectedRange(sourceFile, changeRange) { - // Consider the following code: - // void foo() { /; } - // - // If the text changes with an insertion of / just before the semicolon then we end up with: - // void foo() { //; } - // - // If we were to just use the changeRange a is, then we would not rescan the { token - // (as it does not intersect the actual original change range). Because an edit may - // change the token touching it, we actually need to look back *at least* one token so - // that the prior token sees that change. var maxLookahead = 1; var start = changeRange.span.start; - // the first iteration aligns us with the change start. subsequent iteration move us to - // the left by maxLookahead tokens. We only need to do this as long as we're not at the - // start of the tree. for (var i = 0; start > 0 && i <= maxLookahead; i++) { var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); ts.Debug.assert(nearestNode.pos <= start); @@ -21577,54 +17292,23 @@ var ts; } function visit(child) { if (ts.nodeIsMissing(child)) { - // Missing nodes are effectively invisible to us. We never even consider them - // When trying to find the nearest node before us. return; } - // If the child intersects this position, then this node is currently the nearest - // node that starts before the position. if (child.pos <= position) { if (child.pos >= bestResult.pos) { - // This node starts before the position, and is closer to the position than - // the previous best node we found. It is now the new best node. bestResult = child; } - // Now, the node may overlap the position, or it may end entirely before the - // position. If it overlaps with the position, then either it, or one of its - // children must be the nearest node before the position. So we can just - // recurse into this child to see if we can find something better. if (position < child.end) { - // The nearest node is either this child, or one of the children inside - // of it. We've already marked this child as the best so far. Recurse - // in case one of the children is better. forEachChild(child, visit); - // Once we look at the children of this node, then there's no need to - // continue any further. return true; } else { ts.Debug.assert(child.end <= position); - // The child ends entirely before this position. Say you have the following - // (where $ is the position) - // - // ? $ : <...> <...> - // - // We would want to find the nearest preceding node in "complex expr 2". - // To support that, we keep track of this node, and once we're done searching - // for a best node, we recurse down this node to see if we can find a good - // result in it. - // - // This approach allows us to quickly skip over nodes that are entirely - // before the position, while still allowing us to find any nodes in the - // last one that might be what we want. lastNodeEntirelyBeforePosition = child; } } else { ts.Debug.assert(child.pos > position); - // We're now at a node that is entirely past the position we're searching for. - // This node (and all following nodes) could never contribute to the result, - // so just skip them by returning 'true' here. return true; } } @@ -21633,7 +17317,7 @@ var ts; var oldText = sourceFile.text; if (textChangeRange) { ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length); - if (aggressiveChecks || ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + if (aggressiveChecks || ts.Debug.shouldAssert(3)) { var oldTextPrefix = oldText.substr(0, textChangeRange.span.start); var newTextPrefix = newText.substr(0, textChangeRange.span.start); ts.Debug.assert(oldTextPrefix === newTextPrefix); @@ -21648,68 +17332,42 @@ var ts; var currentArrayIndex = 0; ts.Debug.assert(currentArrayIndex < currentArray.length); var current = currentArray[currentArrayIndex]; - var lastQueriedPosition = -1 /* Value */; + var lastQueriedPosition = -1; return { currentNode: function (position) { - // Only compute the current node if the position is different than the last time - // we were asked. The parser commonly asks for the node at the same position - // twice. Once to know if can read an appropriate list element at a certain point, - // and then to actually read and consume the node. if (position !== lastQueriedPosition) { - // Much of the time the parser will need the very next node in the array that - // we just returned a node from.So just simply check for that case and move - // forward in the array instead of searching for the node again. if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) { currentArrayIndex++; current = currentArray[currentArrayIndex]; } - // If we don't have a node, or the node we have isn't in the right position, - // then try to find a viable node at the position requested. if (!current || current.pos !== position) { findHighestListElementThatStartsAtPosition(position); } } - // Cache this query so that we don't do any extra work if the parser calls back - // into us. Note: this is very common as the parser will make pairs of calls like - // 'isListElement -> parseListElement'. If we were unable to find a node when - // called with 'isListElement', we don't want to redo the work when parseListElement - // is called immediately after. lastQueriedPosition = position; - // Either we don'd have a node, or we have a node at the position being asked for. ts.Debug.assert(!current || current.pos === position); return current; } }; - // Finds the highest element in the tree we can find that starts at the provided position. - // The element must be a direct child of some node list in the tree. This way after we - // return it, we can easily return its next sibling in the list. function findHighestListElementThatStartsAtPosition(position) { - // Clear out any cached state about the last node we found. currentArray = undefined; - currentArrayIndex = -1 /* Value */; + currentArrayIndex = -1; current = undefined; - // Recurse into the source file to find the highest node at this position. forEachChild(sourceFile, visitNode, visitArray); return; function visitNode(node) { if (position >= node.pos && position < node.end) { - // Position was within this node. Keep searching deeper to find the node. forEachChild(node, visitNode, visitArray); - // don't proceed any further in the search. return true; } - // position wasn't in this node, have to keep searching. return false; } function visitArray(array) { if (position >= array.pos && position < array.end) { - // position was in this array. Search through this array to see if we find a - // viable element. for (var i = 0; i < array.length; i++) { var child = array[i]; if (child) { if (child.pos === position) { - // Found the right node. We're done. currentArray = array; currentArrayIndex = i; current = child; @@ -21717,8 +17375,6 @@ var ts; } else { if (child.pos < position && position < child.end) { - // Position in somewhere within this child. Search in it and - // stop searching in this array. forEachChild(child, visitNode, visitArray); return true; } @@ -21726,26 +17382,17 @@ var ts; } } } - // position wasn't in this array, have to keep searching. return false; } } } - var InvalidPosition; - (function (InvalidPosition) { - InvalidPosition[InvalidPosition["Value"] = -1] = "Value"; - })(InvalidPosition || (InvalidPosition = {})); })(IncrementalParser || (IncrementalParser = {})); function isDeclarationFileName(fileName) { - return ts.fileExtensionIs(fileName, ".d.ts" /* Dts */); + return ts.fileExtensionIs(fileName, ".d.ts"); } - /*@internal*/ function processCommentPragmas(context, sourceText) { - var triviaScanner = ts.createScanner(context.languageVersion, /*skipTrivia*/ false, 0 /* Standard */, sourceText); + var triviaScanner = ts.createScanner(context.languageVersion, false, 0, sourceText); var pragmas = []; - // Keep scanning all the leading trivia in the file until we get to something that - // isn't trivia. Any single line comment will be analyzed to see if it is a - // reference comment. while (true) { var kind = triviaScanner.scan(); if (!ts.isTrivia(kind)) { @@ -21762,7 +17409,7 @@ var ts; context.pragmas = ts.createMap(); for (var _i = 0, pragmas_1 = pragmas; _i < pragmas_1.length; _i++) { var pragma = pragmas_1[_i]; - if (context.pragmas.has(pragma.name)) { // TODO: GH#18217 + if (context.pragmas.has(pragma.name)) { var currentValue = context.pragmas.get(pragma.name); if (currentValue instanceof Array) { currentValue.push(pragma.args); @@ -21776,7 +17423,6 @@ var ts; } } ts.processCommentPragmas = processCommentPragmas; - /*@internal*/ function processPragmasIntoFields(context, reportDiagnostic) { context.checkJsDirective = undefined; context.referencedFiles = []; @@ -21785,15 +17431,12 @@ var ts; context.amdDependencies = []; context.hasNoDefaultLib = false; context.pragmas.forEach(function (entryOrList, key) { - // TODO: The below should be strongly type-guarded and not need casts/explicit annotations, since entryOrList is related to - // key and key is constrained to a union; but it's not (see GH#21483 for at least partial fix) :( switch (key) { case "reference": { var referencedFiles_1 = context.referencedFiles; var typeReferenceDirectives_1 = context.typeReferenceDirectives; var libReferenceDirectives_1 = context.libReferenceDirectives; ts.forEach(ts.toArray(entryOrList), function (arg) { - // TODO: GH#18217 if (arg.arguments["no-default-lib"]) { context.hasNoDefaultLib = true; } @@ -21813,7 +17456,7 @@ var ts; break; } case "amd-dependency": { - context.amdDependencies = ts.map(ts.toArray(entryOrList), function (x) { return ({ name: x.arguments.name, path: x.arguments.path }); }); // TODO: GH#18217 + context.amdDependencies = ts.map(ts.toArray(entryOrList), function (x) { return ({ name: x.arguments.name, path: x.arguments.path }); }); break; } case "amd-module": { @@ -21821,7 +17464,6 @@ var ts; for (var _i = 0, entryOrList_1 = entryOrList; _i < entryOrList_1.length; _i++) { var entry = entryOrList_1[_i]; if (context.moduleName) { - // TODO: It's probably fine to issue this diagnostic on all instances of the pragma reportDiagnostic(entry.range.pos, entry.range.end - entry.range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments); } context.moduleName = entry.arguments.name; @@ -21834,9 +17476,8 @@ var ts; } case "ts-nocheck": case "ts-check": { - // _last_ of either nocheck or check in a file is the "winner" ts.forEach(ts.toArray(entryOrList), function (entry) { - if (!context.checkJsDirective || entry.range.pos > context.checkJsDirective.pos) { // TODO: GH#18217 + if (!context.checkJsDirective || entry.range.pos > context.checkJsDirective.pos) { context.checkJsDirective = { enabled: key === "ts-check", end: entry.range.end, @@ -21846,8 +17487,8 @@ var ts; }); break; } - case "jsx": return; // Accessed directly - default: ts.Debug.fail("Unhandled pragma kind"); // Can this be made into an assertNever in the future? + case "jsx": return; + default: ts.Debug.fail("Unhandled pragma kind"); } }); } @@ -21864,11 +17505,11 @@ var ts; var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im; var singleLinePragmaRegEx = /^\/\/\/?\s*@(\S+)\s*(.*)\s*$/im; function extractPragmas(pragmas, range, text) { - var tripleSlash = range.kind === 2 /* SingleLineCommentTrivia */ && tripleSlashXMLCommentStartRegEx.exec(text); + var tripleSlash = range.kind === 2 && tripleSlashXMLCommentStartRegEx.exec(text); if (tripleSlash) { - var name = tripleSlash[1].toLowerCase(); // Technically unsafe cast, but we do it so the below check to make it safe typechecks + var name = tripleSlash[1].toLowerCase(); var pragma = ts.commentPragmas[name]; - if (!pragma || !(pragma.kind & 1 /* TripleSlashXML */)) { + if (!pragma || !(pragma.kind & 1)) { return; } if (pragma.args) { @@ -21878,7 +17519,7 @@ var ts; var matcher = getNamedArgRegEx(arg.name); var matchResult = matcher.exec(text); if (!matchResult && !arg.optional) { - return; // Missing required argument, don't parse + return; } else if (matchResult) { if (arg.captureSpan) { @@ -21901,30 +17542,30 @@ var ts; } return; } - var singleLine = range.kind === 2 /* SingleLineCommentTrivia */ && singleLinePragmaRegEx.exec(text); + var singleLine = range.kind === 2 && singleLinePragmaRegEx.exec(text); if (singleLine) { - return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine); + return addPragmaForMatch(pragmas, range, 2, singleLine); } - if (range.kind === 3 /* MultiLineCommentTrivia */) { - var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating) + if (range.kind === 3) { + var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; var multiLineMatch = void 0; while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { - addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch); + addPragmaForMatch(pragmas, range, 4, multiLineMatch); } } } function addPragmaForMatch(pragmas, range, kind, match) { if (!match) return; - var name = match[1].toLowerCase(); // Technically unsafe cast, but we do it so they below check to make it safe typechecks + var name = match[1].toLowerCase(); var pragma = ts.commentPragmas[name]; if (!pragma || !(pragma.kind & kind)) { return; } - var args = match[2]; // Split on spaces and match up positionally with definition + var args = match[2]; var argument = getNamedPragmaArguments(pragma, args); if (argument === "fail") - return; // Missing required argument, fail to parse it + return; pragmas.push({ name: name, args: { arguments: argument, range: range } }); return; } @@ -21947,20 +17588,16 @@ var ts; } return argMap; } - /** @internal */ function tagNamesAreEquivalent(lhs, rhs) { if (lhs.kind !== rhs.kind) { return false; } - if (lhs.kind === 71 /* Identifier */) { + if (lhs.kind === 71) { return lhs.escapedText === rhs.escapedText; } - if (lhs.kind === 99 /* ThisKeyword */) { + if (lhs.kind === 99) { return true; } - // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only - // take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression - // it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element return lhs.name.escapedText === rhs.name.escapedText && tagNamesAreEquivalent(lhs.expression, rhs.expression); } @@ -21968,14 +17605,8 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - /* @internal */ ts.compileOnSaveCommandLineOption = { name: "compileOnSave", type: "boolean" }; - // NOTE: The order here is important to default lib ordering as entries will have the same - // order in the generated program (see `getDefaultLibPriority` in program.ts). This - // order also affects overload resolution when a type declared in one lib is - // augmented in another lib. var libEntries = [ - // JavaScript only ["es5", "lib.es5.d.ts"], ["es6", "lib.es2015.d.ts"], ["es2015", "lib.es2015.d.ts"], @@ -21984,13 +17615,11 @@ var ts; ["es2017", "lib.es2017.d.ts"], ["es2018", "lib.es2018.d.ts"], ["esnext", "lib.esnext.d.ts"], - // Host only ["dom", "lib.dom.d.ts"], ["dom.iterable", "lib.dom.iterable.d.ts"], ["webworker", "lib.webworker.d.ts"], ["webworker.importscripts", "lib.webworker.importscripts.d.ts"], ["scripthost", "lib.scripthost.d.ts"], - // ES2015 Or ESNext By-feature options ["es2015.core", "lib.es2015.core.d.ts"], ["es2015.collection", "lib.es2015.collection.d.ts"], ["es2015.generator", "lib.es2015.generator.d.ts"], @@ -22013,22 +17642,9 @@ var ts; ["esnext.symbol", "lib.esnext.symbol.d.ts"], ["esnext.asynciterable", "lib.esnext.asynciterable.d.ts"], ]; - /** - * An array of supported "lib" reference file names used to determine the order for inclusion - * when referenced, as well as for spelling suggestions. This ensures the correct ordering for - * overload resolution when a type declared in one lib is extended by another. - */ - /* @internal */ ts.libs = libEntries.map(function (entry) { return entry[0]; }); - /** - * A map of lib names to lib files. This map is used both for parsing the "lib" command line - * option as well as for resolving lib reference directives. - */ - /* @internal */ ts.libMap = ts.createMapFromEntries(libEntries); - /* @internal */ ts.optionDeclarations = [ - // CommandLine only options { name: "help", shortName: "h", @@ -22104,19 +17720,18 @@ var ts; category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Watch_input_files, }, - // Basic { name: "target", shortName: "t", type: ts.createMapFromTemplate({ - es3: 0 /* ES3 */, - es5: 1 /* ES5 */, - es6: 2 /* ES2015 */, - es2015: 2 /* ES2015 */, - es2016: 3 /* ES2016 */, - es2017: 4 /* ES2017 */, - es2018: 5 /* ES2018 */, - esnext: 6 /* ESNext */, + es3: 0, + es5: 1, + es6: 2, + es2015: 2, + es2016: 3, + es2017: 4, + es2018: 5, + esnext: 6, }), paramType: ts.Diagnostics.VERSION, showInSimplifiedHelpView: true, @@ -22168,9 +17783,9 @@ var ts; { name: "jsx", type: ts.createMapFromTemplate({ - "preserve": 1 /* Preserve */, - "react-native": 3 /* ReactNative */, - "react": 2 /* React */ + "preserve": 1, + "react-native": 3, + "react": 2 }), paramType: ts.Diagnostics.KIND, showInSimplifiedHelpView: true, @@ -22270,7 +17885,6 @@ var ts; category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule }, - // Strict Type Checks { name: "strict", type: "boolean", @@ -22320,7 +17934,6 @@ var ts; category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file }, - // Additional Checks { name: "noUnusedLocals", type: "boolean", @@ -22349,7 +17962,6 @@ var ts; category: ts.Diagnostics.Additional_Checks, description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement }, - // Module Resolution { name: "moduleResolution", type: ts.createMapFromTemplate({ @@ -22368,8 +17980,6 @@ var ts; description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names }, { - // this option can only be specified in tsconfig.json - // use type = object to copy the value as-is name: "paths", type: "object", isTSConfigOnly: true, @@ -22377,8 +17987,6 @@ var ts; description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl }, { - // this option can only be specified in tsconfig.json - // use type = object to copy the value as-is name: "rootDirs", type: "list", isTSConfigOnly: true, @@ -22431,7 +18039,6 @@ var ts; category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks, }, - // Source Maps { name: "sourceRoot", type: "string", @@ -22460,7 +18067,6 @@ var ts; category: ts.Diagnostics.Source_Map_Options, description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set }, - // Experimental { name: "experimentalDecorators", type: "boolean", @@ -22473,7 +18079,6 @@ var ts; category: ts.Diagnostics.Experimental_Options, description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators }, - // Advanced { name: "jsxFactory", type: "string", @@ -22520,7 +18125,6 @@ var ts; name: "out", type: "string", isFilePath: false, - // for correct behaviour, please use outFile category: ts.Diagnostics.Advanced_Options, paramType: ts.Diagnostics.FILE, description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file, @@ -22558,8 +18162,8 @@ var ts; { name: "newLine", type: ts.createMapFromTemplate({ - crlf: 0 /* CarriageReturnLineFeed */, - lf: 1 /* LineFeed */ + crlf: 0, + lf: 1 }), paramType: ts.Diagnostics.NEWLINE, category: ts.Diagnostics.Advanced_Options, @@ -22682,7 +18286,6 @@ var ts; description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols, }, { - // A list of plugins to load in the language service name: "plugins", type: "list", isTSConfigOnly: true, @@ -22693,12 +18296,8 @@ var ts; description: ts.Diagnostics.List_of_language_service_plugins } ]; - /* @internal */ ts.typeAcquisitionDeclarations = [ { - /* @deprecated typingOptions.enableAutoDiscovery - * Use typeAcquisition.enable instead. - */ name: "enableAutoDiscovery", type: "boolean", }, @@ -22723,17 +18322,14 @@ var ts; } } ]; - /* @internal */ ts.defaultInitCompilerOptions = { module: ts.ModuleKind.CommonJS, - target: 1 /* ES5 */, + target: 1, strict: true, esModuleInterop: true }; var optionNameMapCache; - /* @internal */ function convertEnableAutoDiscoveryToEnable(typeAcquisition) { - // Convert deprecated typingOptions.enableAutoDiscovery to typeAcquisition.enable if (typeAcquisition && typeAcquisition.enableAutoDiscovery !== undefined && typeAcquisition.enable === undefined) { return { enable: typeAcquisition.enableAutoDiscovery, @@ -22759,7 +18355,6 @@ var ts; optionNameMapCache = { optionNameMap: optionNameMap, shortOptionNames: shortOptionNames }; return optionNameMapCache; } - /* @internal */ function createCompilerDiagnosticForInvalidCustomType(opt) { return createDiagnosticForInvalidCustomType(opt, ts.createCompilerDiagnostic); } @@ -22768,12 +18363,10 @@ var ts; var namesOfType = ts.arrayFrom(opt.type.keys()).map(function (key) { return "'" + key + "'"; }).join(", "); return createDiagnostic(ts.Diagnostics.Argument_for_0_option_must_be_Colon_1, "--" + opt.name, namesOfType); } - /* @internal */ function parseCustomTypeOption(opt, value, errors) { return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors); } ts.parseCustomTypeOption = parseCustomTypeOption; - /* @internal */ function parseListTypeOption(opt, value, errors) { if (value === void 0) { value = ""; } value = trimString(value); @@ -22811,17 +18404,16 @@ var ts; while (i < args.length) { var s = args[i]; i++; - if (s.charCodeAt(0) === 64 /* at */) { + if (s.charCodeAt(0) === 64) { parseResponseFile(s.slice(1)); } - else if (s.charCodeAt(0) === 45 /* minus */) { - var opt = getOptionFromName(s.slice(s.charCodeAt(1) === 45 /* minus */ ? 2 : 1), /*allowShort*/ true); + else if (s.charCodeAt(0) === 45) { + var opt = getOptionFromName(s.slice(s.charCodeAt(1) === 45 ? 2 : 1), true); if (opt) { if (opt.isTSConfigOnly) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file, opt.name)); } else { - // Check to see if no argument was provided (e.g. "--locale" is the last command-line argument). if (!args[i] && opt.type !== "boolean") { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name)); } @@ -22831,10 +18423,8 @@ var ts; i++; break; case "boolean": - // boolean flag has optional value true, false, others var optValue = args[i]; options[opt.name] = optValue !== "false"; - // consume next argument as boolean flag value if (optValue === "false" || optValue === "true") { i++; } @@ -22850,7 +18440,6 @@ var ts; i++; } break; - // If not a primitive, the possible types are specified in what is effectively a map of options. default: options[opt.name] = parseCustomTypeOption(opt, args[i], errors); i++; @@ -22876,14 +18465,14 @@ var ts; var args = []; var pos = 0; while (true) { - while (pos < text.length && text.charCodeAt(pos) <= 32 /* space */) + while (pos < text.length && text.charCodeAt(pos) <= 32) pos++; if (pos >= text.length) break; var start = pos; - if (text.charCodeAt(start) === 34 /* doubleQuote */) { + if (text.charCodeAt(start) === 34) { pos++; - while (pos < text.length && text.charCodeAt(pos) !== 34 /* doubleQuote */) + while (pos < text.length && text.charCodeAt(pos) !== 34) pos++; if (pos < text.length) { args.push(text.substring(start + 1, pos)); @@ -22894,7 +18483,7 @@ var ts; } } else { - while (text.charCodeAt(pos) > 32 /* space */) + while (text.charCodeAt(pos) > 32) pos++; args.push(text.substring(start, pos)); } @@ -22903,12 +18492,10 @@ var ts; } } ts.parseCommandLine = parseCommandLine; - /** @internal */ function getOptionFromName(optionName, allowShort) { if (allowShort === void 0) { allowShort = false; } optionName = optionName.toLowerCase(); var _a = getOptionNameMap(), optionNameMap = _a.optionNameMap, shortOptionNames = _a.shortOptionNames; - // Try to translate short option names to their full equivalents. if (allowShort) { var short = shortOptionNames.get(optionName); if (short !== undefined) { @@ -22926,25 +18513,20 @@ var ts; var diagnostic = ts.createCompilerDiagnostic.apply(undefined, arguments); return diagnostic.messageText; } - /* @internal */ function printVersion() { ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + ts.sys.newLine); } ts.printVersion = printVersion; - /* @internal */ function printHelp(optionsList, syntaxPrefix) { if (syntaxPrefix === void 0) { syntaxPrefix = ""; } var output = []; - // We want to align our "syntax" and "examples" commands to a certain margin. var syntaxLength = getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length; var examplesLength = getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length; var marginLength = Math.max(syntaxLength, examplesLength); - // Build up the syntactic skeleton. var syntax = makePadding(marginLength - syntaxLength); syntax += "tsc " + syntaxPrefix + "[" + getDiagnosticText(ts.Diagnostics.options) + "] [" + getDiagnosticText(ts.Diagnostics.file) + "...]"; output.push(getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, syntax)); output.push(ts.sys.newLine + ts.sys.newLine); - // Build up the list of examples. var padding = makePadding(marginLength); output.push(getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + ts.sys.newLine); output.push(padding + "tsc --outFile file.js file.ts" + ts.sys.newLine); @@ -22952,16 +18534,12 @@ var ts; output.push(padding + "tsc --build tsconfig.json" + ts.sys.newLine); output.push(ts.sys.newLine); output.push(getDiagnosticText(ts.Diagnostics.Options_Colon) + ts.sys.newLine); - // We want our descriptions to align at the same column in our output, - // so we keep track of the longest option usage string. marginLength = 0; - var usageColumn = []; // Things like "-d, --declaration" go in here. + var usageColumn = []; var descriptionColumn = []; - var optionsDescriptionMap = ts.createMap(); // Map between option.description and list of option.type if it is a kind + var optionsDescriptionMap = ts.createMap(); for (var _i = 0, optionsList_1 = optionsList; _i < optionsList_1.length; _i++) { var option = optionsList_1[_i]; - // If an option lacks a description, - // it is not officially supported. if (!option.description) { continue; } @@ -22985,15 +18563,12 @@ var ts; description = getDiagnosticText(option.description); } descriptionColumn.push(description); - // Set the new margin for the description column if necessary. marginLength = Math.max(usageText_1.length, marginLength); } - // Special case that can't fit in the loop. var usageText = " @<" + getDiagnosticText(ts.Diagnostics.file) + ">"; usageColumn.push(usageText); descriptionColumn.push(getDiagnosticText(ts.Diagnostics.Insert_command_line_options_and_files_from_a_file)); marginLength = Math.max(usageText.length, marginLength); - // Print out each row, aligning all the descriptions on the same column. for (var i = 0; i < usageColumn.length; i++) { var usage = usageColumn[i]; var description = descriptionColumn[i]; @@ -23024,9 +18599,6 @@ var ts; } } ts.printHelp = printHelp; - /** - * Reads the config file, reports errors if any and exits if the config file cannot be found - */ function getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host) { var configFileText; try { @@ -23047,20 +18619,11 @@ var ts; return parseJsonSourceFileConfigFileContent(result, host, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), cwd), optionsToExtend, ts.getNormalizedAbsolutePath(configFileName, cwd)); } ts.getParsedCommandLineOfConfigFile = getParsedCommandLineOfConfigFile; - /** - * Read tsconfig.json file - * @param fileName The path to the config file - */ function readConfigFile(fileName, readFile) { var textOrDiagnostic = tryReadFile(fileName, readFile); return ts.isString(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic }; } ts.readConfigFile = readConfigFile; - /** - * Parse the text of the tsconfig.json file - * @param fileName The path to the config file - * @param jsonText The text of the config file - */ function parseConfigFileTextToJson(fileName, jsonText) { var jsonSourceFile = ts.parseJsonText(fileName, jsonText); return { @@ -23069,10 +18632,6 @@ var ts; }; } ts.parseConfigFileTextToJson = parseConfigFileTextToJson; - /** - * Read tsconfig.json file - * @param fileName The path to the config file - */ function readJsonConfigFile(fileName, readFile) { var textOrDiagnostic = tryReadFile(fileName, readFile); return ts.isString(textOrDiagnostic) ? ts.parseJsonText(fileName, textOrDiagnostic) : { parseDiagnostics: [textOrDiagnostic] }; @@ -23158,19 +18717,10 @@ var ts; } return _tsconfigRootOptions; } - /** - * Convert the json syntax tree into the json value - */ function convertToObject(sourceFile, errors) { - return convertToObjectWorker(sourceFile, errors, /*returnValue*/ true, /*knownRootOptions*/ undefined, /*jsonConversionNotifier*/ undefined); + return convertToObjectWorker(sourceFile, errors, true, undefined, undefined); } ts.convertToObject = convertToObject; - /** - * Convert the json syntax tree into the json value and report errors - * This returns the json value (apart from checking errors) only if returnValue provided is true. - * Otherwise it just checks the errors and returns undefined - */ - /*@internal*/ function convertToObjectWorker(sourceFile, errors, returnValue, knownRootOptions, jsonConversionNotifier) { if (!sourceFile.statements.length) { return returnValue ? {} : undefined; @@ -23183,7 +18733,7 @@ var ts; var result = returnValue ? {} : undefined; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 270 /* PropertyAssignment */) { + if (element.kind !== 270) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected)); continue; } @@ -23203,24 +18753,19 @@ var ts; if (returnValue) { result[keyText] = value; } - // Notify key value set, if user asked for it if (jsonConversionNotifier && - // Current callbacks are only on known parent option or if we are setting values in the root (parentOption || isRootOptionMap(knownOptions))) { var isValidOptionValue = isCompilerOptionsValue(option, value); if (parentOption) { if (isValidOptionValue) { - // Notify option set in the parent if its a valid option value jsonConversionNotifier.onSetValidOptionKeyValueInParent(parentOption, option, value); } } else if (isRootOptionMap(knownOptions)) { if (isValidOptionValue) { - // Notify about the valid root key value being set jsonConversionNotifier.onSetValidOptionKeyValueInRoot(keyText, element.name, value, element.initializer); } else if (!option) { - // Notify about the unknown root key value being set jsonConversionNotifier.onSetUnknownOptionKeyValueInRoot(keyText, element.name, value, element.initializer); } } @@ -23234,16 +18779,16 @@ var ts; } function convertPropertyValueToJson(valueExpression, option) { switch (valueExpression.kind) { - case 101 /* TrueKeyword */: + case 101: reportInvalidOptionValue(option && option.type !== "boolean"); return true; - case 86 /* FalseKeyword */: + case 86: reportInvalidOptionValue(option && option.type !== "boolean"); return false; - case 95 /* NullKeyword */: - reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for - return null; // tslint:disable-line:no-null-keyword - case 9 /* StringLiteral */: + case 95: + reportInvalidOptionValue(option && option.name === "extends"); + return null; + case 9: if (!isDoubleQuotedString(valueExpression)) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.String_literal_with_double_quotes_expected)); } @@ -23251,45 +18796,36 @@ var ts; var text = valueExpression.text; if (option && !ts.isString(option.type)) { var customOption = option; - // Validate custom option type if (!customOption.type.has(text.toLowerCase())) { errors.push(createDiagnosticForInvalidCustomType(customOption, function (message, arg0, arg1) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, message, arg0, arg1); })); } } return text; - case 8 /* NumericLiteral */: + case 8: reportInvalidOptionValue(option && option.type !== "number"); return Number(valueExpression.text); - case 198 /* PrefixUnaryExpression */: - if (valueExpression.operator !== 38 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) { - break; // not valid JSON syntax + case 198: + if (valueExpression.operator !== 38 || valueExpression.operand.kind !== 8) { + break; } reportInvalidOptionValue(option && option.type !== "number"); return -Number(valueExpression.operand.text); - case 184 /* ObjectLiteralExpression */: + case 184: reportInvalidOptionValue(option && option.type !== "object"); var objectLiteralExpression = valueExpression; - // Currently having element option declaration in the tsconfig with type "object" - // determines if it needs onSetValidOptionKeyValueInParent callback or not - // At moment there are only "compilerOptions", "typeAcquisition" and "typingOptions" - // that satifies it and need it to modify options set in them (for normalizing file paths) - // vs what we set in the json - // If need arises, we can modify this interface and callbacks as needed if (option) { var _a = option, elementOptions = _a.elementOptions, extraKeyDiagnosticMessage = _a.extraKeyDiagnosticMessage, optionName = _a.name; return convertObjectLiteralExpressionToJson(objectLiteralExpression, elementOptions, extraKeyDiagnosticMessage, optionName); } else { - return convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, - /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined); + return convertObjectLiteralExpressionToJson(objectLiteralExpression, undefined, undefined, undefined); } - case 183 /* ArrayLiteralExpression */: + case 183: reportInvalidOptionValue(option && option.type !== "list"); return convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element); } - // Not in expected format if (option) { - reportInvalidOptionValue(/*isError*/ true); + reportInvalidOptionValue(true); } else { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal)); @@ -23314,7 +18850,7 @@ var ts; function isCompilerOptionsValue(option, value) { if (option) { if (isNullOrUndefined(value)) - return true; // All options are undefinable/nullable + return true; if (option.type === "list") { return ts.isArray(value); } @@ -23323,19 +18859,12 @@ var ts; } return false; } - /** - * Generate tsconfig configuration when running command line "--init" - * @param options commandlineOptions to be generated into tsconfig.json - * @param fileNames array of filenames to be generated into tsconfig.json - */ - /* @internal */ function generateTSConfig(options, fileNames, newLine) { var compilerOptions = ts.extend(options, ts.defaultInitCompilerOptions); var compilerOptionsMap = serializeCompilerOptions(compilerOptions); return writeConfigurations(); function getCustomTypeMapOfCommandLineOption(optionDefinition) { if (optionDefinition.type === "string" || optionDefinition.type === "number" || optionDefinition.type === "boolean") { - // this is of a type CommandLineOptionOfPrimitiveType return undefined; } else if (optionDefinition.type === "list") { @@ -23346,7 +18875,6 @@ var ts; } } function getNameOfCompilerOptionValue(value, customTypeMap) { - // There is a typeMap associated with this command-line option so use it to map value back to its name return ts.forEachEntry(customTypeMap, function (mapValue, key) { if (mapValue === value) { return key; @@ -23358,8 +18886,6 @@ var ts; var optionsNameMap = getOptionNameMap().optionNameMap; var _loop_3 = function (name) { if (ts.hasProperty(options, name)) { - // tsconfig only options cannot be specified via command line, - // so we can assume that only types that can appear here string | number | boolean if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) { return "continue"; } @@ -23368,16 +18894,13 @@ var ts; if (optionDefinition) { var customTypeMap_1 = getCustomTypeMapOfCommandLineOption(optionDefinition); if (!customTypeMap_1) { - // 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.set(name, value); } else { if (optionDefinition.type === "list") { - result.set(name, value.map(function (element) { return getNameOfCompilerOptionValue(element, customTypeMap_1); })); // TODO: GH#18217 + result.set(name, value.map(function (element) { return getNameOfCompilerOptionValue(element, customTypeMap_1); })); } else { - // There is a typeMap associated with this command-line option so use it to map value back to its name result.set(name, getNameOfCompilerOptionValue(value, customTypeMap_1)); } } @@ -23410,14 +18933,11 @@ var ts; } function isAllowedOption(_a) { var category = _a.category, name = _a.name; - // Skip options which do not have a category or have category `Command_line_Options` - // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line return category !== undefined && category !== ts.Diagnostics.Command_line_Options && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name)); } function writeConfigurations() { - // Filter applicable options to place in the file var categorizedOptions = ts.createMultiMap(); for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) { var option = optionDeclarations_1[_i]; @@ -23426,7 +18946,6 @@ var ts; categorizedOptions.add(ts.getLocaleSpecificMessage(category), option); } } - // Serialize all options and their descriptions var marginLength = 0; var seenKnownKeys = 0; var nameColumn = []; @@ -23452,12 +18971,10 @@ var ts; marginLength = Math.max(optionName.length, marginLength); } }); - // Write the output var tab = makePadding(2); var result = []; result.push("{"); result.push(tab + "\"compilerOptions\": {"); - // Print out each row, aligning all the descriptions on the same column. for (var i = 0; i < nameColumn.length; i++) { var optionName = nameColumn[i]; var description = descriptionColumn[i]; @@ -23479,29 +18996,14 @@ var ts; } } ts.generateTSConfig = generateTSConfig; - /** - * Parse the contents of a config file (tsconfig.json). - * @param json The contents of the config file to parse - * @param host Instance of ParseConfigHost used to enumerate files in folder. - * @param basePath A root directory to resolve relative path entries in the config - * file to. e.g. outDir - */ function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { - return parseJsonConfigFileContentWorker(json, /*sourceFile*/ undefined, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); + return parseJsonConfigFileContentWorker(json, undefined, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; - /** - * Parse the contents of a config file (tsconfig.json). - * @param jsonNode The contents of the config file to parse - * @param host Instance of ParseConfigHost used to enumerate files in folder. - * @param basePath A root directory to resolve relative path entries in the config - * file to. e.g. outDir - */ function parseJsonSourceFileConfigFileContent(sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { - return parseJsonConfigFileContentWorker(/*json*/ undefined, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); + return parseJsonConfigFileContentWorker(undefined, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); } ts.parseJsonSourceFileConfigFileContent = parseJsonSourceFileConfigFileContent; - /*@internal*/ function setConfigFileInOptions(options, configFile) { if (configFile) { Object.defineProperty(options, "configFile", { enumerable: false, writable: false, value: configFile }); @@ -23509,23 +19011,11 @@ var ts; } ts.setConfigFileInOptions = setConfigFileInOptions; function isNullOrUndefined(x) { - // tslint:disable-next-line:no-null-keyword return x === undefined || x === null; } function directoryOfCombinedPath(fileName, basePath) { - // Use the `getNormalizedAbsolutePath` function to avoid canonicalizing the path, as it must remain noncanonical - // until consistient casing errors are reported return ts.getDirectoryPath(ts.getNormalizedAbsolutePath(fileName, basePath)); } - /** - * Parse the contents of a config file from json or json source file (tsconfig.json). - * @param json The contents of the config file to parse - * @param sourceFile sourceFile corresponding to the Json - * @param host Instance of ParseConfigHost used to enumerate files in folder. - * @param basePath A root directory to resolve relative path entries in the config - * file to. e.g. outDir - * @param resolutionStack Only present for backwards-compatibility. Should be empty. - */ function parseJsonConfigFileContentWorker(json, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { if (existingOptions === void 0) { existingOptions = {}; } if (resolutionStack === void 0) { resolutionStack = []; } @@ -23625,12 +19115,10 @@ var ts; } } } - /*@internal*/ function isErrorNoInputFiles(error) { return error.code === ts.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code; } ts.isErrorNoInputFiles = isErrorNoInputFiles; - /*@internal*/ function getErrorForNoInputFiles(_a, configFileName) { var includeSpecs = _a.includeSpecs, excludeSpecs = _a.excludeSpecs; return ts.createCompilerDiagnostic(ts.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2, configFileName || "tsconfig.json", JSON.stringify(includeSpecs || []), JSON.stringify(excludeSpecs || [])); @@ -23639,10 +19127,6 @@ var ts; function isSuccessfulParsedTsconfig(value) { return !!value.options; } - /** - * This *just* extracts options/include/exclude/files out of a config file. - * It does *not* resolve the included files. - */ function parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors) { basePath = ts.normalizeSlashes(basePath); var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath); @@ -23654,7 +19138,6 @@ var ts; parseOwnConfigOfJson(json, host, basePath, configFileName, errors) : parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors); if (ownConfig.extendedConfigPath) { - // copy the resolution stack so it is never reused between branches in potential diamond-problem scenarios. resolutionStack = resolutionStack.concat([resolvedPath]); var extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, basePath, resolutionStack, errors); if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) { @@ -23673,7 +19156,6 @@ var ts; raw_1.compileOnSave = baseRaw_1.compileOnSave; } ownConfig.options = ts.assign({}, extendedConfig.options, ownConfig.options); - // TODO extend type typeAcquisition } } return ownConfig; @@ -23683,8 +19165,6 @@ var ts; errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } var options = convertCompilerOptionsFromJsonWorker(json.compilerOptions, 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 typeAcquisition = convertTypeAcquisitionFromJsonWorker(json.typeAcquisition || json.typingOptions, basePath, errors, configFileName); json.compileOnSave = convertCompileOnSaveOptionFromJson(json, basePath, errors); var extendedConfigPath; @@ -23734,7 +19214,7 @@ var ts; } } }; - var json = convertToObjectWorker(sourceFile, errors, /*returnValue*/ true, getTsconfigRootOptionsMap(), optionsIterator); + var json = convertToObjectWorker(sourceFile, errors, true, getTsconfigRootOptionsMap(), optionsIterator); if (!typeAcquisition) { if (typingOptionstypeAcquisition) { typeAcquisition = (typingOptionstypeAcquisition.enableAutoDiscovery !== undefined) ? @@ -23753,13 +19233,12 @@ var ts; } function getExtendsConfigPath(extendedConfig, host, basePath, errors, createDiagnostic) { extendedConfig = ts.normalizeSlashes(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(extendedConfig, "./") || ts.startsWith(extendedConfig, "../"))) { errors.push(createDiagnostic(ts.Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extendedConfig)); return undefined; } var extendedConfigPath = ts.getNormalizedAbsolutePath(extendedConfig, basePath); - if (!host.fileExists(extendedConfigPath) && !ts.endsWith(extendedConfigPath, ".json" /* Json */)) { + if (!host.fileExists(extendedConfigPath) && !ts.endsWith(extendedConfigPath, ".json")) { extendedConfigPath = extendedConfigPath + ".json"; if (!host.fileExists(extendedConfigPath)) { errors.push(createDiagnostic(ts.Diagnostics.File_0_does_not_exist, extendedConfig)); @@ -23779,12 +19258,11 @@ var ts; return undefined; } var extendedDirname = ts.getDirectoryPath(extendedConfigPath); - var extendedConfig = parseConfig(/*json*/ undefined, extendedResult, host, extendedDirname, ts.getBaseFileName(extendedConfigPath), resolutionStack, errors); + var extendedConfig = parseConfig(undefined, extendedResult, host, extendedDirname, ts.getBaseFileName(extendedConfigPath), resolutionStack, errors); if (sourceFile) { (_a = sourceFile.extendedSourceFiles).push.apply(_a, extendedResult.extendedSourceFiles); } if (isSuccessfulParsedTsconfig(extendedConfig)) { - // Update the paths to reflect base path var relativeDifference_1 = ts.convertToRelativePath(extendedDirname, basePath, ts.identity); var updatePath_1 = function (path) { return ts.isRootedDiskPath(path) ? path : ts.combinePaths(relativeDifference_1, path); }; var mapPropertiesInRawIfNotUndefined = function (propertyName) { @@ -23913,118 +19391,31 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } - /** - * Tests for a path that ends in a recursive directory wildcard. - * Matches **, \**, **\, and \**\, but not a**b. - * - * NOTE: used \ in place of / above to avoid issues with multiline comments. - * - * Breakdown: - * (^|\/) # matches either the beginning of the string or a directory separator. - * \*\* # matches the recursive directory wildcard "**". - * \/?$ # matches an optional trailing directory separator at the end of the string. - */ var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; - /** - * Tests for a path where .. appears after a recursive directory wildcard. - * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\* - * - * NOTE: used \ in place of / above to avoid issues with multiline comments. - * - * Breakdown: - * (^|\/) # matches either the beginning of the string or a directory separator. - * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. - * (.*\/)? # optionally matches any number of characters followed by a directory separator. - * \.\. # matches a parent directory path component ".." - * ($|\/) # matches either the end of the string or a directory separator. - */ var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; - /** - * Tests for a path containing a wildcard character in a directory component of the path. - * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*. - * - * NOTE: used \ in place of / above to avoid issues with multiline comments. - * - * Breakdown: - * \/ # matches a directory separator. - * [^/]*? # matches any number of characters excluding directory separators (non-greedy). - * [*?] # matches either a wildcard character (* or ?) - * [^/]* # matches any number of characters excluding directory separators (greedy). - * \/ # matches a directory separator. - */ var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; - /** - * Matches the portion of a wildcard path that does not contain wildcards. - * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d. - * - * NOTE: used \ in place of / above to avoid issues with multiline comments. - * - * Breakdown: - * ^ # matches the beginning of the string - * [^*?]* # matches any number of non-wildcard characters - * (?=\/[^/]*[*?]) # lookahead that matches a directory separator followed by - * # a path component that contains at least one wildcard character (* or ?). - */ var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; - /** - * Expands an array of file specifications. - * - * @param filesSpecs The literal file names to include. - * @param includeSpecs The wildcard file specifications to include. - * @param excludeSpecs The wildcard file specifications to exclude. - * @param basePath The base path for any relative file specifications. - * @param options Compiler options. - * @param host The host used to resolve files and directories. - * @param errors An array for diagnostic reporting. - */ function matchFileNames(filesSpecs, includeSpecs, excludeSpecs, basePath, options, host, errors, extraFileExtensions, jsonSourceFile) { basePath = ts.normalizePath(basePath); var validatedIncludeSpecs, validatedExcludeSpecs; - // The exclude spec list is converted into a regular expression, which allows us to quickly - // test whether a file or directory should be excluded before recursively traversing the - // file system. if (includeSpecs) { - validatedIncludeSpecs = validateSpecs(includeSpecs, errors, /*allowTrailingRecursion*/ false, jsonSourceFile, "include"); + validatedIncludeSpecs = validateSpecs(includeSpecs, errors, false, jsonSourceFile, "include"); } if (excludeSpecs) { - validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, /*allowTrailingRecursion*/ true, jsonSourceFile, "exclude"); + validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, true, jsonSourceFile, "exclude"); } - // Wildcard directories (provided as part of a wildcard path) are stored in a - // file map that marks whether it was a regular wildcard match (with a `*` or `?` token), - // or a recursive directory. This information is used by filesystem watchers to monitor for - // new entries in these paths. var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames); var spec = { filesSpecs: filesSpecs, referencesSpecs: undefined, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories }; return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions); } - /** - * Gets the file names from the provided config file specs that contain, files, include, exclude and - * other properties needed to resolve the file names - * @param spec The config file specs extracted with file names to include, wildcards to include/exclude and other details - * @param basePath The base path for any relative file specifications. - * @param options Compiler options. - * @param host The host used to resolve files and directories. - * @param extraFileExtensions optionaly file extra file extension information from host - */ - /* @internal */ function getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions) { if (extraFileExtensions === void 0) { extraFileExtensions = []; } basePath = ts.normalizePath(basePath); var keyMapper = host.useCaseSensitiveFileNames ? ts.identity : ts.toLowerCase; - // Literal file names (provided via the "files" array in tsconfig.json) are stored in a - // file map with a possibly case insensitive key. We use this map later when when including - // wildcard paths. var literalFileMap = ts.createMap(); - // Wildcard paths (provided via the "includes" array in tsconfig.json) are stored in a - // file map with a possibly case insensitive key. We use this map to store paths matched - // via wildcard, and to handle extension priority. var wildcardFileMap = ts.createMap(); var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; - // Rather than requery this for each file and filespec, we query the supported extensions - // once and store it on the expansion context. var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); - // Literal files are always included verbatim. An "include" or "exclude" specification cannot - // remove a literal file. if (filesSpecs) { for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { var fileName = filesSpecs_1[_i]; @@ -24033,21 +19424,11 @@ var ts; } } if (validatedIncludeSpecs && validatedIncludeSpecs.length > 0) { - for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, validatedExcludeSpecs, validatedIncludeSpecs, /*depth*/ undefined); _a < _b.length; _a++) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, validatedExcludeSpecs, validatedIncludeSpecs, undefined); _a < _b.length; _a++) { var file = _b[_a]; - // If we have already included a literal or wildcard path with a - // higher priority extension, we should skip this file. - // - // This handles cases where we may encounter both .ts and - // .d.ts (or .js if "allowJs" is enabled) in the same - // directory when they are compilation outputs. if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { continue; } - // We may have included a wildcard path with a lower priority - // extension due to the user-defined order of entries in the - // "include" array. If there is a lower priority extension in the - // same directory, we should remove it. removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); var key = keyMapper(file); if (!literalFileMap.has(key) && !wildcardFileMap.has(key)) { @@ -24091,22 +19472,7 @@ var ts; return ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0; } } - /** - * Gets directories in a set of include patterns that should be watched for changes. - */ function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { - // We watch a directory recursively if it contains a wildcard anywhere in a directory segment - // of the pattern: - // - // /a/b/**/d - Watch /a/b recursively to catch changes to any d in any subfolder recursively - // /a/b/*/d - Watch /a/b recursively to catch any d in any immediate subfolder, even if a new subfolder is added - // /a/b - Watch /a/b recursively to catch changes to anything in any recursive subfoler - // - // We watch a directory without recursion if it contains a wildcard in the file segment of - // the pattern: - // - // /a/b/* - Watch /a/b directly to catch any new file - // /a/b/a?z - Watch /a/b directly to catch any new file matching a?z var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); var wildcardDirectories = {}; @@ -24124,13 +19490,12 @@ var ts; var existingFlags = wildcardDirectories[key]; if (existingFlags === undefined || existingFlags < flags) { wildcardDirectories[key] = flags; - if (flags === 1 /* Recursive */) { + if (flags === 1) { recursiveKeys.push(key); } } } } - // Remove any subpaths under an existing recursively watched directory. for (var key in wildcardDirectories) { if (ts.hasProperty(wildcardDirectories, key)) { for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { @@ -24149,26 +19514,18 @@ var ts; if (match) { return { key: useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(), - flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */ + flags: watchRecursivePattern.test(spec) ? 1 : 0 }; } if (ts.isImplicitGlob(spec)) { - return { key: spec, flags: 1 /* Recursive */ }; + return { key: spec, flags: 1 }; } return undefined; } - /** - * Determines whether a literal or wildcard file has already been included that has a higher - * extension priority. - * - * @param file The path to the file. - * @param extensionPriority The priority of the extension. - * @param context The expansion context. - */ function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { var extensionPriority = ts.getExtensionPriority(file, extensions); var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority, extensions); - for (var i = 0 /* Highest */; i < adjustedExtensionPriority; i++) { + for (var i = 0; i < adjustedExtensionPriority; i++) { var higherPriorityExtension = extensions[i]; var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); if (literalFiles.has(higherPriorityPath) || wildcardFiles.has(higherPriorityPath)) { @@ -24177,14 +19534,6 @@ var ts; } return false; } - /** - * Removes files included via wildcard expansion with a lower extension priority that have - * already been included. - * - * @param file The path to the file. - * @param extensionPriority The priority of the extension. - * @param context The expansion context. - */ function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { var extensionPriority = ts.getExtensionPriority(file, extensions); var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority, extensions); @@ -24194,17 +19543,12 @@ var ts; wildcardFiles.delete(lowerPriorityPath); } } - /** - * Produces a cleaned version of compiler options with personally identifiying info (aka, paths) removed. - * Also converts enum values back to strings. - */ - /* @internal */ function convertCompilerOptionsForTelemetry(opts) { var out = {}; for (var key in opts) { if (opts.hasOwnProperty(key)) { var type = getOptionFromName(key); - if (type !== undefined) { // Ignore unknown options + if (type !== undefined) { out[key] = getOptionValueWithEmptyStrings(opts[key], type); } } @@ -24214,11 +19558,11 @@ var ts; ts.convertCompilerOptionsForTelemetry = convertCompilerOptionsForTelemetry; function getOptionValueWithEmptyStrings(value, option) { switch (option.type) { - case "object": // "paths". Can't get any useful information from the value since we blank out strings, so just return "". + case "object": return ""; - case "string": // Could be any arbitrary string -- use empty string instead. + case "string": return ""; - case "number": // Allow numbers, but be sure to check it's actually a number. + case "number": return typeof value === "number" ? value : ""; case "boolean": return typeof value === "boolean" ? value : ""; @@ -24230,7 +19574,7 @@ var ts; if (optionEnumValue === value) { return optionStringValue; } - }); // TODO: GH#18217 + }); } } })(ts || (ts = {})); @@ -24240,7 +19584,6 @@ var ts; host.trace(ts.formatMessage.apply(undefined, arguments)); } ts.trace = trace; - /* @internal */ function isTraceEnabled(compilerOptions, host) { return !!compilerOptions.traceResolution && host.trace !== undefined; } @@ -24249,20 +19592,15 @@ var ts; return r && { path: r.path, extension: r.ext, packageId: packageId }; } function noPackageId(r) { - return withPackageId(/*packageId*/ undefined, r); + return withPackageId(undefined, r); } - /** - * Kinds of file that we are currently looking for. - * Typically there is one pass with Extensions.TypeScript, then a second pass with Extensions.JavaScript. - */ var Extensions; (function (Extensions) { Extensions[Extensions["TypeScript"] = 0] = "TypeScript"; Extensions[Extensions["JavaScript"] = 1] = "JavaScript"; Extensions[Extensions["Json"] = 2] = "Json"; - Extensions[Extensions["DtsOnly"] = 3] = "DtsOnly"; /** Only '.d.ts' */ + Extensions[Extensions["DtsOnly"] = 3] = "DtsOnly"; })(Extensions || (Extensions = {})); - /** Used with `Extensions.DtsOnly` to extract the path from TypeScript results. */ function resolvedTypeScriptOnly(resolved) { if (!resolved) { return undefined; @@ -24276,7 +19614,6 @@ var ts; failedLookupLocations: failedLookupLocations }; } - /** Reads from "main" or "types"/"typings" depending on `extensions`. */ function tryReadPackageJsonFields(readTypes, jsonContent, baseDirectory, state) { return readTypes ? tryReadFromField("typings") || tryReadFromField("types") : tryReadFromField("main"); function tryReadFromField(fieldName) { @@ -24300,7 +19637,6 @@ var ts; return path; } } - /* @internal */ function readJson(path, host) { try { var jsonText = host.readFile(path); @@ -24313,7 +19649,6 @@ var ts; return result.config; } catch (e) { - // gracefully handle if readFile fails or returns not JSON return {}; } } @@ -24334,14 +19669,9 @@ var ts; } } ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. - * Returns undefined if there are none. - */ function getDefaultTypeRoots(currentDirectory, host) { if (!host.directoryExists) { return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. } var typeRoots; ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { @@ -24354,11 +19684,6 @@ var ts; return typeRoots; } var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups - * is assumed to be the same as root directory of the project. - */ function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { var traceEnabled = isTraceEnabled(options, host); var moduleResolutionState = { compilerOptions: options, host: host, traceEnabled: traceEnabled }; @@ -24400,7 +19725,6 @@ var ts; } return { resolvedTypeReferenceDirective: resolvedTypeReferenceDirective, failedLookupLocations: failedLookupLocations }; function primaryLookup() { - // Check primary library paths if (typeRoots && typeRoots.length) { if (traceEnabled) { trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); @@ -24424,11 +19748,10 @@ var ts; function secondaryLookup() { var initialLocationForSecondaryLookup = containingFile && ts.getDirectoryPath(containingFile); if (initialLocationForSecondaryLookup !== undefined) { - // check secondary locations if (traceEnabled) { trace(host, ts.Diagnostics.Looking_up_in_node_modules_folder_initial_location_0, initialLocationForSecondaryLookup); } - var result = loadModuleFromNodeModules(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, failedLookupLocations, moduleResolutionState, /*cache*/ undefined); + var result = loadModuleFromNodeModules(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, failedLookupLocations, moduleResolutionState, undefined); var resolvedFile = resolvedTypeScriptOnly(result && result.value); if (!resolvedFile && traceEnabled) { trace(host, ts.Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName); @@ -24443,20 +19766,10 @@ var ts; } } ts.resolveTypeReferenceDirective = resolveTypeReferenceDirective; - /** - * Given a set of options, returns the set of type directive names - * that should be included for this program automatically. - * This list could either come from the config file, - * or from enumerating the types root + initial secondary types lookup location. - * More type directives might appear in the program later as a result of loading actual source files; - * this list is only the set of defaults that are implicitly included. - */ function getAutomaticTypeDirectiveNames(options, host) { - // Use explicit type list from tsconfig.json if (options.types) { return options.types; } - // Walk the primary type lookup locations var result = []; if (host.directoryExists && host.getDirectories) { var typeRoots = getEffectiveTypeRoots(options, host); @@ -24468,12 +19781,8 @@ var ts; var typeDirectivePath = _b[_a]; var normalized = ts.normalizePath(typeDirectivePath); var packageJsonPath = pathToPackageJson(ts.combinePaths(root, normalized)); - // `types-publisher` sometimes creates packages with `"typings": null` for packages that don't provide their own types. - // See `createNotNeededPackageJSON` in the types-publisher` repo. - // tslint:disable-next-line:no-null-keyword var isNotNeededPackage = host.fileExists(packageJsonPath) && readJson(packageJsonPath, host).typings === null; if (!isNotNeededPackage) { - // Return just the type directive names result.push(ts.getBaseFileName(normalized)); } } @@ -24488,7 +19797,6 @@ var ts; return createModuleResolutionCacheWithMaps(ts.createMap(), ts.createMap(), currentDirectory, getCanonicalFileName); } ts.createModuleResolutionCache = createModuleResolutionCache; - /*@internal*/ function createModuleResolutionCacheWithMaps(directoryToModuleNameMap, moduleNameToDirectoryMap, currentDirectory, getCanonicalFileName) { return { getOrCreateCacheForDirectory: getOrCreateCacheForDirectory, getOrCreateCacheForModuleName: getOrCreateCacheForModuleName }; function getOrCreateCacheForDirectory(directoryName) { @@ -24502,7 +19810,7 @@ var ts; } function getOrCreateCacheForModuleName(nonRelativeModuleName) { if (ts.isExternalModuleNameRelative(nonRelativeModuleName)) { - return undefined; // TODO: GH#18217 + return undefined; } var perModuleNameCache = moduleNameToDirectoryMap.get(nonRelativeModuleName); if (!perModuleNameCache) { @@ -24517,29 +19825,13 @@ var ts; function get(directory) { return directoryPathMap.get(ts.toPath(directory, currentDirectory, getCanonicalFileName)); } - /** - * At first this function add entry directory -> module resolution result to the table. - * Then it computes the set of parent folders for 'directory' that should have the same module resolution result - * and for every parent folder in set it adds entry: parent -> module resolution. . - * Lets say we first directory name: /a/b/c/d/e and resolution result is: /a/b/bar.ts. - * Set of parent folders that should have the same result will be: - * [ - * /a/b/c/d, /a/b/c, /a/b - * ] - * this means that request for module resolution from file in any of these folder will be immediately found in cache. - */ function set(directory, result) { var path = ts.toPath(directory, currentDirectory, getCanonicalFileName); - // if entry is already in cache do nothing if (directoryPathMap.has(path)) { return; } directoryPathMap.set(path, result); var resolvedFileName = result.resolvedModule && result.resolvedModule.resolvedFileName; - // find common prefix between directory and resolved file name - // this common prefix should be the shorted path that has the same resolution - // directory: /a/b/c/d/e - // resolvedFileName: /a/b/foo.d.ts var commonPrefix = getCommonPrefix(path, resolvedFileName); var current = path; while (true) { @@ -24559,12 +19851,10 @@ var ts; return undefined; } var resolutionDirectory = ts.toPath(ts.getDirectoryPath(resolution), currentDirectory, getCanonicalFileName); - // find first position where directory and resolution differs var i = 0; while (i < Math.min(directory.length, resolutionDirectory.length) && directory.charCodeAt(i) === resolutionDirectory.charCodeAt(i)) { i++; } - // find last directory separator before position i var sep = directory.lastIndexOf(ts.directorySeparator, i); if (sep < 0) { return undefined; @@ -24618,7 +19908,6 @@ var ts; } if (perFolderCache) { perFolderCache.set(moduleName, result); - // put result in per-module name cache var perModuleNameCache = cache.getOrCreateCacheForModuleName(moduleName); if (perModuleNameCache) { perModuleNameCache.set(containingDirectory, result); @@ -24636,66 +19925,6 @@ var ts; return result; } ts.resolveModuleName = resolveModuleName; - /** - * Any module resolution kind can be augmented with optional settings: 'baseUrl', 'paths' and 'rootDirs' - they are used to - * mitigate differences between design time structure of the project and its runtime counterpart so the same import name - * can be resolved successfully by TypeScript compiler and runtime module loader. - * If these settings are set then loading procedure will try to use them to resolve module name and it can of failure it will - * fallback to standard resolution routine. - * - * - baseUrl - this setting controls how non-relative module names are resolved. If this setting is specified then non-relative - * names will be resolved relative to baseUrl: i.e. if baseUrl is '/a/b' then candidate location to resolve module name 'c/d' will - * be '/a/b/c/d' - * - paths - this setting can only be used when baseUrl is specified. allows to tune how non-relative module names - * will be resolved based on the content of the module name. - * Structure of 'paths' compiler options - * 'paths': { - * pattern-1: [...substitutions], - * pattern-2: [...substitutions], - * ... - * pattern-n: [...substitutions] - * } - * Pattern here is a string that can contain zero or one '*' character. During module resolution module name will be matched against - * all patterns in the list. Matching for patterns that don't contain '*' means that module name must be equal to pattern respecting the case. - * If pattern contains '*' then to match pattern "*" module name must start with the and end with . - * denotes part of the module name between and . - * If module name can be matches with multiple patterns then pattern with the longest prefix will be picked. - * After selecting pattern we'll use list of substitutions to get candidate locations of the module and the try to load module - * from the candidate location. - * Substitution is a string that can contain zero or one '*'. To get candidate location from substitution we'll pick every - * substitution in the list and replace '*' with string. If candidate location is not rooted it - * will be converted to absolute using baseUrl. - * For example: - * baseUrl: /a/b/c - * "paths": { - * // match all module names - * "*": [ - * "*", // use matched name as is, - * // will be looked as /a/b/c/ - * - * "folder1/*" // substitution will convert matched name to 'folder1/', - * // since it is not rooted then final candidate location will be /a/b/c/folder1/ - * ], - * // match module names that start with 'components/' - * "components/*": [ "/root/components/*" ] // substitution will convert /components/folder1/ to '/root/components/folder1/', - * // it is rooted so it will be final candidate location - * } - * - * 'rootDirs' allows the project to be spreaded across multiple locations and resolve modules with relative names as if - * they were in the same location. For example lets say there are two files - * '/local/src/content/file1.ts' - * '/shared/components/contracts/src/content/protocols/file2.ts' - * After bundling content of '/shared/components/contracts/src' will be merged with '/local/src' so - * if file1 has the following import 'import {x} from "./protocols/file2"' it will be resolved successfully in runtime. - * 'rootDirs' provides the way to tell compiler that in order to get the whole project it should behave as if content of all - * root dirs were merged together. - * I.e. for the example above 'rootDirs' will have two entries: [ '/local/src', '/shared/components/contracts/src' ]. - * Compiler will first convert './protocols/file2' into absolute path relative to the location of containing file: - * '/local/src/content/protocols/file2' and try to load it - failure. - * Then it will search 'rootDirs' looking for a longest matching prefix of this absolute path and if such prefix is found - absolute path will - * be converted to a path relative to found rootDir entry './content/protocols/file2' (*). As a last step compiler will check all remaining - * entries in 'rootDirs', use them to build absolute path out of (*) and try to resolve module from this location. - */ function tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state) { if (!ts.isExternalModuleNameRelative(moduleName)) { return tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, failedLookupLocations, state); @@ -24716,9 +19945,6 @@ var ts; var matchedNormalizedPrefix; for (var _i = 0, _a = state.compilerOptions.rootDirs; _i < _a.length; _i++) { var rootDir = _a[_i]; - // rootDirs are expected to be absolute - // in case of tsconfig.json this will happen automatically - compiler will expand relative names - // using location of tsconfig.json as base location var normalizedRoot = ts.normalizePath(rootDir); if (!ts.endsWith(normalizedRoot, ts.directorySeparator)) { normalizedRoot += ts.directorySeparator; @@ -24738,7 +19964,6 @@ var ts; trace(state.host, ts.Diagnostics.Longest_matching_prefix_for_0_is_1, candidate, matchedNormalizedPrefix); } var suffix = candidate.substr(matchedNormalizedPrefix.length); - // first - try to load from a initial location if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, matchedNormalizedPrefix, candidate); } @@ -24749,11 +19974,9 @@ var ts; if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Trying_other_entries_in_rootDirs); } - // then try to resolve using remaining entries in rootDirs for (var _b = 0, _c = state.compilerOptions.rootDirs; _b < _c.length; _b++) { var rootDir = _c[_b]; if (rootDir === matchedRootDir) { - // skip the initially matched entry continue; } var candidate_1 = ts.combinePaths(ts.normalizePath(rootDir), suffix); @@ -24779,7 +20002,6 @@ var ts; if (state.traceEnabled) { trace(state.host, ts.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1, state.compilerOptions.baseUrl, moduleName); } - // string is for exact match var matchedPattern; if (state.compilerOptions.paths) { if (state.traceEnabled) { @@ -24799,10 +20021,9 @@ var ts; if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path); } - // A path mapping may have an extension, in contrast to an import, which should omit it. var extension = ts.tryGetExtensionFromPath(candidate); if (extension !== undefined) { - var path_1 = tryFile(candidate, failedLookupLocations, /*onlyRecordFailures*/ false, state); + var path_1 = tryFile(candidate, failedLookupLocations, false, state); if (path_1 !== undefined) { return noPackageId({ path: path_1, ext: extension }); } @@ -24819,17 +20040,11 @@ var ts; } } function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache) { - return nodeModuleNameResolverWorker(moduleName, ts.getDirectoryPath(containingFile), compilerOptions, host, cache, /*jsOnly*/ false); + return nodeModuleNameResolverWorker(moduleName, ts.getDirectoryPath(containingFile), compilerOptions, host, cache, false); } ts.nodeModuleNameResolver = nodeModuleNameResolver; - /** - * Expose resolution logic to allow us to use Node module resolution logic from arbitrary locations. - * No way to do this with `require()`: https://github.com/nodejs/node/issues/5963 - * Throws an error if the module can't be resolved. - */ - /* @internal */ function resolveJavaScriptModule(moduleName, initialDir, host) { - var _a = nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, /*jsOnly*/ true), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations; + var _a = nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, undefined, true), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations; if (!resolvedModule) { throw new Error("Could not resolve JS module '" + moduleName + "' starting at '" + initialDir + "'. Looked in: " + failedLookupLocations.join(", ")); } @@ -24851,7 +20066,7 @@ var ts; } return { resolvedModule: undefined, failedLookupLocations: failedLookupLocations }; function tryResolve(extensions) { - var loader = function (extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { return nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, /*considerPackageJson*/ true); }; + var loader = function (extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { return nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, true); }; var resolved = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state); if (resolved) { return toSearchResult({ resolved: resolved, isExternalLibraryImport: false }); @@ -24873,13 +20088,11 @@ var ts; } resolvedValue = __assign({}, resolvedValue, { path: path }); } - // For node_modules lookups, get the real path so that multiple accesses to an `npm link`-ed module do not create duplicate files. return { value: resolvedValue && { resolved: resolvedValue, originalPath: originalPath, isExternalLibraryImport: true } }; } else { var _a = ts.normalizePathAndParts(ts.combinePaths(containingDirectory, moduleName)), candidate = _a.path, parts = _a.parts; - var resolved_2 = nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true); - // Treat explicit "node_modules" import as an external library import. + var resolved_2 = nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, false, state, true); return resolved_2 && toSearchResult({ resolved: resolved_2, isExternalLibraryImport: ts.contains(parts, "node_modules") }); } } @@ -24892,7 +20105,7 @@ var ts; if (traceEnabled) { trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, path, real); } - ts.Debug.assert(host.fileExists(real), path + " linked to nonexistent file " + real); // tslint:disable-line + ts.Debug.assert(host.fileExists(real), path + " linked to nonexistent file " + real); return real; } function nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson) { @@ -24912,7 +20125,7 @@ var ts; var resolvedFromFile = loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state); if (resolvedFromFile) { var nm = considerPackageJson ? parseNodeModuleFromPath(resolvedFromFile) : undefined; - var packageId = nm && getPackageJsonInfo(nm.packageDirectory, nm.subModuleName, failedLookupLocations, /*onlyRecordFailures*/ false, state).packageId; + var packageId = nm && getPackageJsonInfo(nm.packageDirectory, nm.subModuleName, failedLookupLocations, false, state).packageId; return withPackageId(packageId, resolvedFromFile); } } @@ -24928,17 +20141,6 @@ var ts; return loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson); } var nodeModulesPathPart = "/node_modules/"; - /** - * This will be called on the successfully resolved path from `loadModuleFromFile`. - * (Not neeeded for `loadModuleFromNodeModules` as that looks up the `package.json` as part of resolution.) - * - * packageDirectory is the directory of the package itself. - * subModuleName is the path within the package. - * For `blah/node_modules/foo/index.d.ts` this is { packageDirectory: "foo", subModuleName: "index.d.ts" }. (Part before "/node_modules/" is ignored.) - * For `/node_modules/foo/bar.d.ts` this is { packageDirectory: "foo", subModuleName": "bar/index.d.ts" }. - * For `/node_modules/@types/foo/bar/index.d.ts` this is { packageDirectory: "@types/foo", subModuleName: "bar/index.d.ts" }. - * For `/node_modules/foo/bar/index.d.ts` this is { packageDirectory: "foo", subModuleName": "bar/index.d.ts" }. - */ function parseNodeModuleFromPath(resolved) { var path = ts.normalizePath(resolved.path); var idx = path.lastIndexOf(nodeModulesPathPart); @@ -24947,11 +20149,11 @@ var ts; } var indexAfterNodeModules = idx + nodeModulesPathPart.length; var indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterNodeModules); - if (path.charCodeAt(indexAfterNodeModules) === 64 /* at */) { + if (path.charCodeAt(indexAfterNodeModules) === 64) { indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterPackageName); } var packageDirectory = path.slice(0, indexAfterPackageName); - var subModuleName = ts.removeExtension(path.slice(indexAfterPackageName + 1), resolved.ext) + ".d.ts" /* Dts */; + var subModuleName = ts.removeExtension(path.slice(indexAfterPackageName + 1), resolved.ext) + ".d.ts"; return { packageDirectory: packageDirectory, subModuleName: subModuleName }; } function moveToNextDirectorySeparatorIfAvailable(path, prevSeparatorIndex) { @@ -24970,31 +20172,22 @@ var ts; } return path + "/index.d.ts"; } - /* @internal */ function directoryProbablyExists(directoryName, host) { - // if host does not support 'directoryExists' assume that directory will exist return !host.directoryExists || host.directoryExists(directoryName); } ts.directoryProbablyExists = directoryProbablyExists; function loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { return noPackageId(loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state)); } - /** - * @param {boolean} onlyRecordFailures - if true then function won't try to actually load files but instead record all attempts as failures. This flag is necessary - * in cases when we know upfront that all load attempts will fail (because containing folder does not exists) however we still need to record all failed lookup locations. - */ function loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { if (extensions === Extensions.Json) { - var extensionLess = ts.tryRemoveExtension(candidate, ".json" /* Json */); + var extensionLess = ts.tryRemoveExtension(candidate, ".json"); return extensionLess === undefined ? undefined : tryAddingExtensions(extensionLess, extensions, failedLookupLocations, onlyRecordFailures, state); } - // First, try adding an extension. An import of "foo" could be matched by a file "foo.ts", or "foo.js" by "foo.js.ts" var resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state); if (resolvedByAddingExtension) { return resolvedByAddingExtension; } - // If that didn't work, try stripping a ".js" or ".jsx" extension and replacing it with a TypeScript one; - // e.g. "./foo.js" can be matched by "./foo.ts" or "./foo.d.ts" if (ts.hasJavaScriptFileExtension(candidate)) { var extensionless = ts.removeFileExtension(candidate); if (state.traceEnabled) { @@ -25004,10 +20197,8 @@ var ts; return tryAddingExtensions(extensionless, extensions, failedLookupLocations, onlyRecordFailures, state); } } - /** Try to return an existing file that adds one of the `extensions` to `candidate`. */ function tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state) { if (!onlyRecordFailures) { - // check if containing folder exists - if it doesn't then just record failures for all supported extensions without disk probing var directory = ts.getDirectoryPath(candidate); if (directory) { onlyRecordFailures = !directoryProbablyExists(directory, state.host); @@ -25015,20 +20206,19 @@ var ts; } switch (extensions) { case Extensions.DtsOnly: - return tryExtension(".d.ts" /* Dts */); + return tryExtension(".d.ts"); case Extensions.TypeScript: - return tryExtension(".ts" /* Ts */) || tryExtension(".tsx" /* Tsx */) || tryExtension(".d.ts" /* Dts */); + return tryExtension(".ts") || tryExtension(".tsx") || tryExtension(".d.ts"); case Extensions.JavaScript: - return tryExtension(".js" /* Js */) || tryExtension(".jsx" /* Jsx */); + return tryExtension(".js") || tryExtension(".jsx"); case Extensions.Json: - return tryExtension(".json" /* Json */); + return tryExtension(".json"); } function tryExtension(ext) { var path = tryFile(candidate + ext, failedLookupLocations, onlyRecordFailures, state); return path === undefined ? undefined : { path: path, ext: ext }; } } - /** Return the file if it exists. */ function tryFile(fileName, failedLookupLocations, onlyRecordFailures, state) { if (!onlyRecordFailures) { if (state.host.fileExists(fileName)) { @@ -25067,25 +20257,25 @@ var ts; var packageJsonPath = pathToPackageJson(nodeModuleDirectory); if (directoryExists && host.fileExists(packageJsonPath)) { var packageJsonContent = readJson(packageJsonPath, host); - if (subModuleName === "") { // looking up the root - need to handle types/typings/main redirects for subModuleName - var path = tryReadPackageJsonFields(/*readTypes*/ true, packageJsonContent, nodeModuleDirectory, state); + if (subModuleName === "") { + var path = tryReadPackageJsonFields(true, packageJsonContent, nodeModuleDirectory, state); if (typeof path === "string") { subModuleName = addExtensionAndIndex(path.substring(nodeModuleDirectory.length + 1)); } else { - var jsPath = tryReadPackageJsonFields(/*readTypes*/ false, packageJsonContent, nodeModuleDirectory, state); + var jsPath = tryReadPackageJsonFields(false, packageJsonContent, nodeModuleDirectory, state); if (typeof jsPath === "string" && jsPath.length > nodeModuleDirectory.length) { var potentialSubModule_1 = jsPath.substring(nodeModuleDirectory.length + 1); subModuleName = (ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.tryRemoveExtension(potentialSubModule_1, extension); - }) || potentialSubModule_1) + ".d.ts" /* Dts */; + }) || potentialSubModule_1) + ".d.ts"; } else { subModuleName = "index.d.ts"; } } } - if (!ts.endsWith(subModuleName, ".d.ts" /* Dts */)) { + if (!ts.endsWith(subModuleName, ".d.ts")) { subModuleName = addExtensionAndIndex(subModuleName); } var packageId = typeof packageJsonContent.name === "string" && typeof packageJsonContent.version === "string" @@ -25105,7 +20295,6 @@ var ts; if (directoryExists && traceEnabled) { trace(host, ts.Diagnostics.File_0_does_not_exist, packageJsonPath); } - // record package json as one of failed lookup locations - in the future if this file will appear it will invalidate resolution results failedLookupLocations.push(packageJsonPath); return { found: false, packageJsonContent: undefined, packageId: undefined }; } @@ -25114,8 +20303,7 @@ var ts; var file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state); if (!file) { if (extensions === Extensions.TypeScript) { - // When resolving typescript modules, try resolving using main field as well - file = tryReadPackageJsonFields(/*readTypes*/ false, jsonContent, candidate, state); + file = tryReadPackageJsonFields(false, jsonContent, candidate, state); if (!file) { return undefined; } @@ -25135,32 +20323,27 @@ var ts; trace(state.host, ts.Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it, fromFile); } } - // Even if extensions is DtsOnly, we can still look up a .ts file as a result of package.json "types" var nextExtensions = extensions === Extensions.DtsOnly ? Extensions.TypeScript : extensions; - // Don't do package.json lookup recursively, because Node.js' package lookup doesn't. - var result = nodeLoadModuleByRelativeName(nextExtensions, file, failedLookupLocations, onlyRecordFailures, state, /*considerPackageJson*/ false); + var result = nodeLoadModuleByRelativeName(nextExtensions, file, failedLookupLocations, onlyRecordFailures, state, false); if (result) { - // It won't have a `packageId` set, because we disabled `considerPackageJson`. ts.Debug.assert(result.packageId === undefined); return { path: result.path, ext: result.extension }; } } - /** Resolve from an arbitrarily specified file. Return `undefined` if it has an unsupported extension. */ function resolvedIfExtensionMatches(extensions, path) { var ext = ts.tryGetExtensionFromPath(path); return ext !== undefined && extensionIsOk(extensions, ext) ? { path: path, ext: ext } : undefined; } - /** True if `extension` is one of the supported `extensions`. */ function extensionIsOk(extensions, extension) { switch (extensions) { case Extensions.JavaScript: - return extension === ".js" /* Js */ || extension === ".jsx" /* Jsx */; + return extension === ".js" || extension === ".jsx"; case Extensions.Json: - return extension === ".json" /* Json */; + return extension === ".json"; case Extensions.TypeScript: - return extension === ".ts" /* Ts */ || extension === ".tsx" /* Tsx */ || extension === ".d.ts" /* Dts */; + return extension === ".ts" || extension === ".tsx" || extension === ".d.ts"; case Extensions.DtsOnly: - return extension === ".d.ts" /* Dts */; + return extension === ".d.ts"; } } function pathToPackageJson(directory) { @@ -25168,18 +20351,16 @@ var ts; } function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) { var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName)); - // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. var packageJsonContent; var packageId; - var packageInfo = getPackageJsonInfo(candidate, "", failedLookupLocations, /*onlyRecordFailures*/ !nodeModulesFolderExists, state); + var packageInfo = getPackageJsonInfo(candidate, "", failedLookupLocations, !nodeModulesFolderExists, state); if (packageInfo.found) { (packageJsonContent = packageInfo.packageJsonContent, packageId = packageInfo.packageId); } else { var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest; - if (rest !== "") { // If "rest" is empty, we just did this search above. + if (rest !== "") { var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName); - // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId. packageId = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state).packageId; } } @@ -25187,7 +20368,6 @@ var ts; loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent); return withPackageId(packageId, pathAndExtension); } - /* @internal */ function getPackageName(moduleName) { var idx = moduleName.indexOf(ts.directorySeparator); if (moduleName[0] === "@") { @@ -25197,11 +20377,10 @@ var ts; } ts.getPackageName = getPackageName; function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) { - return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, /*typesOnly*/ false, cache); + return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache); } function loadModuleFromNodeModulesAtTypes(moduleName, directory, failedLookupLocations, state) { - // Extensions parameter here doesn't actually matter, because typesOnly ensures we're just doing @types lookup, which is always DtsOnly. - return loadModuleFromNodeModulesWorker(Extensions.DtsOnly, moduleName, directory, failedLookupLocations, state, /*typesOnly*/ true, /*cache*/ undefined); + return loadModuleFromNodeModulesWorker(Extensions.DtsOnly, moduleName, directory, failedLookupLocations, state, true, undefined); } function loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, typesOnly, cache) { var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName); @@ -25215,7 +20394,6 @@ var ts; } }); } - /** Load a module from a single node_modules directory, but not from any ancestors' node_modules directories. */ function loadModuleFromNodeModulesOneLevel(extensions, moduleName, directory, failedLookupLocations, state, typesOnly) { if (typesOnly === void 0) { typesOnly = false; } var nodeModulesFolder = ts.combinePaths(directory, "node_modules"); @@ -25239,9 +20417,7 @@ var ts; return loadModuleFromNodeModulesFolder(Extensions.DtsOnly, mangleScopedPackage(moduleName, state), nodeModulesAtTypes_1, nodeModulesAtTypesExists, failedLookupLocations, state); } } - /** Double underscores are used in DefinitelyTyped to delimit scoped packages. */ var mangledScopedPackageSeparator = "__"; - /** For a scoped package, we must look in `@types/foo__bar` instead of `@types/@foo/bar`. */ function mangleScopedPackage(packageName, state) { var mangled = getMangledNameForScopedPackage(packageName); if (state.traceEnabled && mangled !== packageName) { @@ -25249,23 +20425,20 @@ var ts; } return mangled; } - /* @internal */ function getTypesPackageName(packageName) { return "@types/" + getMangledNameForScopedPackage(packageName); } ts.getTypesPackageName = getTypesPackageName; - /* @internal */ function getMangledNameForScopedPackage(packageName) { if (ts.startsWith(packageName, "@")) { var replaceSlash = packageName.replace(ts.directorySeparator, mangledScopedPackageSeparator); if (replaceSlash !== packageName) { - return replaceSlash.slice(1); // Take off the "@" + return replaceSlash.slice(1); } } return packageName; } ts.getMangledNameForScopedPackage = getMangledNameForScopedPackage; - /* @internal */ function getPackageNameFromAtTypesDirectory(mangledName) { var withoutAtTypePrefix = ts.removePrefix(mangledName, "@types/"); if (withoutAtTypePrefix !== mangledName) { @@ -25274,7 +20447,6 @@ var ts; return mangledName; } ts.getPackageNameFromAtTypesDirectory = getPackageNameFromAtTypesDirectory; - /* @internal */ function getUnmangledNameForScopedPackage(typesPackageName) { return ts.stringContains(typesPackageName, mangledScopedPackageSeparator) ? "@" + typesPackageName.replace(mangledScopedPackageSeparator, ts.directorySeparator) : @@ -25297,8 +20469,7 @@ var ts; var failedLookupLocations = []; var containingDirectory = ts.getDirectoryPath(containingFile); var resolved = tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript); - // No originalPath because classic resolution doesn't resolve realPath - return createResolvedModuleWithFailedLookupLocations(resolved && resolved.value, /*originalPath*/ undefined, /*isExternalLibraryImport*/ false, failedLookupLocations); + return createResolvedModuleWithFailedLookupLocations(resolved && resolved.value, undefined, false, failedLookupLocations); function tryResolve(extensions) { var resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loadModuleFromFileNoPackageId, failedLookupLocations, state); if (resolvedUsingSettings) { @@ -25306,35 +20477,28 @@ var ts; } var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName); if (!ts.isExternalModuleNameRelative(moduleName)) { - // Climb up parent directories looking for a module. var resolved_3 = ts.forEachAncestorDirectory(containingDirectory, function (directory) { var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache, moduleName, directory, traceEnabled, host, failedLookupLocations); if (resolutionFromCache) { return resolutionFromCache; } var searchName = ts.normalizePath(ts.combinePaths(directory, moduleName)); - return toSearchResult(loadModuleFromFileNoPackageId(extensions, searchName, failedLookupLocations, /*onlyRecordFailures*/ false, state)); + return toSearchResult(loadModuleFromFileNoPackageId(extensions, searchName, failedLookupLocations, false, state)); }); if (resolved_3) { return resolved_3; } if (extensions === Extensions.TypeScript) { - // If we didn't find the file normally, look it up in @types. return loadModuleFromNodeModulesAtTypes(moduleName, containingDirectory, failedLookupLocations, state); } } else { var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); - return toSearchResult(loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, /*onlyRecordFailures*/ false, state)); + return toSearchResult(loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, false, state)); } } } ts.classicNameResolver = classicNameResolver; - /** - * LSHost may load a module from a global cache of typings. - * This is the minumum code needed to expose that functionality; the rest is in LSHost. - */ - /* @internal */ function loadModuleFromGlobalCache(moduleName, projectName, compilerOptions, host, globalCache) { var traceEnabled = isTraceEnabled(compilerOptions, host); if (traceEnabled) { @@ -25343,66 +20507,47 @@ var ts; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled }; var failedLookupLocations = []; var resolved = loadModuleFromNodeModulesOneLevel(Extensions.DtsOnly, moduleName, globalCache, failedLookupLocations, state); - return createResolvedModuleWithFailedLookupLocations(resolved, /*originalPath*/ undefined, /*isExternalLibraryImport*/ true, failedLookupLocations); + return createResolvedModuleWithFailedLookupLocations(resolved, undefined, true, failedLookupLocations); } ts.loadModuleFromGlobalCache = loadModuleFromGlobalCache; - /** - * Wraps value to SearchResult. - * @returns undefined if value is undefined or { value } otherwise - */ function toSearchResult(value) { return value !== undefined ? { value: value } : undefined; } })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { - var ModuleInstanceState; - (function (ModuleInstanceState) { - ModuleInstanceState[ModuleInstanceState["NonInstantiated"] = 0] = "NonInstantiated"; - ModuleInstanceState[ModuleInstanceState["Instantiated"] = 1] = "Instantiated"; - ModuleInstanceState[ModuleInstanceState["ConstEnumOnly"] = 2] = "ConstEnumOnly"; - })(ModuleInstanceState = ts.ModuleInstanceState || (ts.ModuleInstanceState = {})); function getModuleInstanceState(node) { - return node.body ? getModuleInstanceStateWorker(node.body) : 1 /* Instantiated */; + return node.body ? getModuleInstanceStateWorker(node.body) : 1; } ts.getModuleInstanceState = getModuleInstanceState; function getModuleInstanceStateWorker(node) { - // A module is uninstantiated if it contains only switch (node.kind) { - // 1. interface declarations, type alias declarations - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - return 0 /* NonInstantiated */; - // 2. const enum declarations - case 238 /* EnumDeclaration */: + case 236: + case 237: + return 0; + case 238: if (ts.isConst(node)) { - return 2 /* ConstEnumOnly */; + return 2; } break; - // 3. non-exported import declarations - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: - if (!(ts.hasModifier(node, 1 /* Export */))) { - return 0 /* NonInstantiated */; + case 244: + case 243: + if (!(ts.hasModifier(node, 1))) { + return 0; } break; - // 4. other uninstantiated module declarations. - case 240 /* ModuleBlock */: { - var state_1 = 0 /* NonInstantiated */; + case 240: { + var state_1 = 0; ts.forEachChild(node, function (n) { var childState = getModuleInstanceStateWorker(n); switch (childState) { - case 0 /* NonInstantiated */: - // child is non-instantiated - continue searching + case 0: return; - case 2 /* ConstEnumOnly */: - // child is const enum only - record state and continue searching - state_1 = 2 /* ConstEnumOnly */; + case 2: + state_1 = 2; return; - case 1 /* Instantiated */: - // child is instantiated - record state and stop - state_1 = 1 /* Instantiated */; + case 1: + state_1 = 1; return true; default: ts.Debug.assertNever(childState); @@ -25410,41 +20555,15 @@ var ts; }); return state_1; } - case 239 /* ModuleDeclaration */: + case 239: return getModuleInstanceState(node); - case 71 /* Identifier */: - // Only jsdoc typedef definition can exist in jsdoc namespace, and it should - // be considered the same as type alias + case 71: if (node.isInJSDocNamespace) { - return 0 /* NonInstantiated */; + return 0; } } - return 1 /* Instantiated */; + return 1; } - var ContainerFlags; - (function (ContainerFlags) { - // The current node is not a container, and no container manipulation should happen before - // recursing into it. - ContainerFlags[ContainerFlags["None"] = 0] = "None"; - // The current node is a container. It should be set as the current container (and block- - // container) before recursing into it. The current node does not have locals. Examples: - // - // Classes, ObjectLiterals, TypeLiterals, Interfaces... - ContainerFlags[ContainerFlags["IsContainer"] = 1] = "IsContainer"; - // The current node is a block-scoped-container. It should be set as the current block- - // container before recursing into it. Examples: - // - // Blocks (when not parented by functions), Catch clauses, For/For-in/For-of statements... - ContainerFlags[ContainerFlags["IsBlockScopedContainer"] = 2] = "IsBlockScopedContainer"; - // The current node is the container of a control flow path. The current control flow should - // be saved and restored, and a new control flow initialized within the container. - ContainerFlags[ContainerFlags["IsControlFlowContainer"] = 4] = "IsControlFlowContainer"; - ContainerFlags[ContainerFlags["IsFunctionLike"] = 8] = "IsFunctionLike"; - ContainerFlags[ContainerFlags["IsFunctionExpression"] = 16] = "IsFunctionExpression"; - ContainerFlags[ContainerFlags["HasLocals"] = 32] = "HasLocals"; - ContainerFlags[ContainerFlags["IsInterface"] = 64] = "IsInterface"; - ContainerFlags[ContainerFlags["IsObjectLiteralOrClassExpressionMethod"] = 128] = "IsObjectLiteralOrClassExpressionMethod"; - })(ContainerFlags || (ContainerFlags = {})); var binder = createBinder(); function bindSourceFile(file, options) { ts.performance.mark("beforeBind"); @@ -25459,12 +20578,11 @@ var ts; var languageVersion; var parent; var container; - var thisParentContainer; // Container one level up + var thisParentContainer; var blockScopeContainer; var lastContainer; var delayedTypeAliases; var seenThisKeyword; - // state used by control flow analysis var currentFlow; var currentBreakTarget; var currentContinueTarget; @@ -25474,26 +20592,15 @@ var ts; var preSwitchCaseFlow; var activeLabels; var hasExplicitReturn; - // state used for emit helpers var emitFlags; - // If this file is an external module, then it is automatically in strict-mode according to - // ES6. If it is not an external module, then we'll determine if it is in strict mode or - // not depending on if we see "use strict" in certain places or if we hit a class/namespace - // or if compiler options contain alwaysStrict. var inStrictMode; var symbolCount = 0; - var Symbol; // tslint:disable-line variable-name + var Symbol; var classifiableNames; - var unreachableFlow = { flags: 1 /* Unreachable */ }; - var reportedUnreachableFlow = { flags: 1 /* Unreachable */ }; - // state used to aggregate transform flags during bind. - var subtreeTransformFlags = 0 /* None */; + var unreachableFlow = { flags: 1 }; + var reportedUnreachableFlow = { flags: 1 }; + var subtreeTransformFlags = 0; var skipTransformFlagAggregation; - /** - * Inside the binder, we may create a diagnostic for an as-yet unbound node (with potentially no parent pointers, implying no accessible source file) - * If so, the node _must_ be in the current file (as that's the only way anything could have traversed to it to yield it as the error node) - * This version of `createDiagnosticForNode` uses the binder's context to account for this, and always yields correct diagnostics even in these situations. - */ function createDiagnosticForNode(node, message, arg0, arg1, arg2) { return ts.createDiagnosticForNodeInSourceFile(ts.getSourceFileOfNode(node) || file, node, message, arg0, arg1, arg2); } @@ -25530,13 +20637,12 @@ var ts; currentFalseTarget = undefined; activeLabels = undefined; hasExplicitReturn = false; - emitFlags = 0 /* None */; - subtreeTransformFlags = 0 /* None */; + emitFlags = 0; + subtreeTransformFlags = 0; } return bindSourceFile; function bindInStrictMode(file, opts) { if (ts.getStrictOptionValue(opts, "alwaysStrict") && !file.isDeclarationFile) { - // bind in strict mode source files with alwaysStrict option return true; } else { @@ -25551,26 +20657,23 @@ var ts; symbol.flags |= symbolFlags; node.symbol = symbol; symbol.declarations = ts.append(symbol.declarations, node); - if (symbolFlags & 1955 /* HasExports */ && !symbol.exports) { + if (symbolFlags & 1955 && !symbol.exports) { symbol.exports = ts.createSymbolTable(); } - if (symbolFlags & 6240 /* HasMembers */ && !symbol.members) { + if (symbolFlags & 6240 && !symbol.members) { symbol.members = ts.createSymbolTable(); } - if (symbolFlags & 67216319 /* Value */) { + if (symbolFlags & 67216319) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || (valueDeclaration.kind !== node.kind && ts.isEffectiveModuleDeclaration(valueDeclaration))) { - // other kinds of value declarations take precedence over modules symbol.valueDeclaration = node; } } } - // Should not be called on a declaration with a computed property name, - // unless it is a well known Symbol. function getDeclarationName(node) { - if (node.kind === 249 /* ExportAssignment */) { - return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */; + if (node.kind === 249) { + return node.isExportEquals ? "export=" : "default"; } var name = ts.getNameOfDeclaration(node); if (name) { @@ -25578,9 +20681,8 @@ var ts; var moduleName = ts.getTextOfIdentifierOrLiteral(name); return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\""); } - if (name.kind === 147 /* ComputedPropertyName */) { + if (name.kind === 147) { var nameExpression = name.expression; - // treat computed property names where expression is string/numeric literal as just string/numeric literal if (ts.isStringOrNumericLiteral(nameExpression)) { return ts.escapeLeadingUnderscores(nameExpression.text); } @@ -25590,130 +20692,81 @@ var ts; return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined; } switch (node.kind) { - case 155 /* Constructor */: - return "__constructor" /* Constructor */; - case 163 /* FunctionType */: - case 158 /* CallSignature */: - case 288 /* JSDocSignature */: - return "__call" /* Call */; - case 164 /* ConstructorType */: - case 159 /* ConstructSignature */: - return "__new" /* New */; - case 160 /* IndexSignature */: - return "__index" /* Index */; - case 250 /* ExportDeclaration */: - return "__export" /* ExportStar */; - case 274 /* SourceFile */: - // json file should behave as - // module.exports = ... - return "export=" /* ExportEquals */; - case 200 /* BinaryExpression */: - if (ts.getSpecialPropertyAssignmentKind(node) === 2 /* ModuleExports */) { - // module.exports = ... - return "export=" /* ExportEquals */; + case 155: + return "__constructor"; + case 163: + case 158: + case 288: + return "__call"; + case 164: + case 159: + return "__new"; + case 160: + return "__index"; + case 250: + return "__export"; + case 274: + return "export="; + case 200: + if (ts.getSpecialPropertyAssignmentKind(node) === 2) { + return "export="; } ts.Debug.fail("Unknown binary declaration kind"); break; - case 284 /* JSDocFunctionType */: - return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */); - case 149 /* Parameter */: - // Parameters with names are handled at the top of this function. Parameters - // without names can only come from JSDocFunctionTypes. - ts.Debug.assert(node.parent.kind === 284 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; }); + case 284: + return (ts.isJSDocConstructSignature(node) ? "__new" : "__call"); + case 149: + ts.Debug.assert(node.parent.kind === 284, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; }); var functionType = node.parent; var index = functionType.parameters.indexOf(node); return "arg" + index; } } function getDisplayName(node) { - return ts.isNamedDeclaration(node) ? ts.declarationNameToString(node.name) : ts.unescapeLeadingUnderscores(getDeclarationName(node)); // TODO: GH#18217 + return ts.isNamedDeclaration(node) ? ts.declarationNameToString(node.name) : ts.unescapeLeadingUnderscores(getDeclarationName(node)); } - /** - * Declares a Symbol for the node and adds it to symbols. Reports errors for conflicting identifier names. - * @param symbolTable - The symbol table which node will be added to. - * @param parent - node's parent declaration. - * @param node - The declaration to be added to the symbol table - * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.) - * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations. - */ function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) { ts.Debug.assert(!ts.hasDynamicName(node)); - var isDefaultExport = ts.hasModifier(node, 512 /* Default */); - // The exported symbol for an export default function/class node is always named "default" - var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node); + var isDefaultExport = ts.hasModifier(node, 512); + var name = isDefaultExport && parent ? "default" : getDeclarationName(node); var symbol; if (name === undefined) { - symbol = createSymbol(0 /* None */, "__missing" /* Missing */); + symbol = createSymbol(0, "__missing"); } else { - // Check and see if the symbol table already has a symbol with this name. If not, - // create a new symbol with this name and add it to the table. Note that we don't - // give the new symbol any flags *yet*. This ensures that it will not conflict - // with the 'excludes' flags we pass in. - // - // If we do get an existing symbol, see if it conflicts with the new symbol we're - // creating. For example, a 'var' symbol and a 'class' symbol will conflict within - // the same symbol table. If we have a conflict, report the issue on each - // declaration we have for this symbol, and then create a new symbol for this - // declaration. - // - // Note that when properties declared in Javascript constructors - // (marked by isReplaceableByMethod) conflict with another symbol, the property loses. - // Always. This allows the common Javascript pattern of overwriting a prototype method - // with an bound instance method of the same type: `this.method = this.method.bind(this)` - // - // If we created a new symbol, either because we didn't have a symbol with this name - // in the symbol table, or we conflicted with an existing symbol, then just add this - // node as the sole declaration of the new symbol. - // - // Otherwise, we'll be merging into a compatible existing symbol (for example when - // you have multiple 'vars' with the same name in the same container). In this case - // just add this node into the declarations list of the symbol. symbol = symbolTable.get(name); - if (includes & 2885600 /* Classifiable */) { + if (includes & 2885600) { classifiableNames.set(name, true); } if (!symbol) { - symbolTable.set(name, symbol = createSymbol(0 /* None */, name)); + symbolTable.set(name, symbol = createSymbol(0, name)); if (isReplaceableByMethod) symbol.isReplaceableByMethod = true; } else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) { - // A symbol already exists, so don't add this as a declaration. return symbol; } else if (symbol.flags & excludes) { if (symbol.isReplaceableByMethod) { - // Javascript constructor-declared symbols can be discarded in favor of - // prototype symbols like methods. - symbolTable.set(name, symbol = createSymbol(0 /* None */, name)); + symbolTable.set(name, symbol = createSymbol(0, name)); } else { if (ts.isNamedDeclaration(node)) { node.name.parent = node; } - // Report errors every position with duplicate declaration - // Report errors on previous encountered declarations - var message_1 = symbol.flags & 2 /* BlockScopedVariable */ + var message_1 = symbol.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; - if (symbol.flags & 384 /* Enum */ || includes & 384 /* Enum */) { + if (symbol.flags & 384 || includes & 384) { message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; } if (symbol.declarations && symbol.declarations.length) { - // If the current node is a default export of some sort, then check if - // there are any other default exports that we need to error on. - // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; } else { - // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. - // Error on multiple export default in the following case: - // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default - // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers) if (symbol.declarations && symbol.declarations.length && - (node.kind === 249 /* ExportAssignment */ && !node.isExportEquals)) { + (node.kind === 249 && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; } } @@ -25722,7 +20775,7 @@ var ts; file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(declaration) || declaration, message_1, getDisplayName(declaration))); }); file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(node) || node, message_1, getDisplayName(node))); - symbol = createSymbol(0 /* None */, name); + symbol = createSymbol(0, name); } } } @@ -25736,127 +20789,85 @@ var ts; return symbol; } function declareModuleMember(node, symbolFlags, symbolExcludes) { - var hasExportModifier = ts.getCombinedModifierFlags(node) & 1 /* Export */; - if (symbolFlags & 2097152 /* Alias */) { - if (node.kind === 252 /* ExportSpecifier */ || (node.kind === 243 /* ImportEqualsDeclaration */ && hasExportModifier)) { + var hasExportModifier = ts.getCombinedModifierFlags(node) & 1; + if (symbolFlags & 2097152) { + if (node.kind === 252 || (node.kind === 243 && hasExportModifier)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } else { - return declareSymbol(container.locals, /*parent*/ undefined, node, symbolFlags, symbolExcludes); + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } else { - // Exported module members are given 2 symbols: A local symbol that is classified with an ExportValue flag, - // and an associated export symbol with all the correct flags set on it. There are 2 main reasons: - // - // 1. We treat locals and exports of the same name as mutually exclusive within a container. - // That means the binder will issue a Duplicate Identifier error if you mix locals and exports - // with the same name in the same container. - // TODO: Make this a more specific error and decouple it from the exclusion logic. - // 2. When we checkIdentifier in the checker, we set its resolved symbol to the local symbol, - // but return the export symbol (by calling getExportSymbolOfValueSymbolIfExported). That way - // when the emitter comes back to it, it knows not to qualify the name if it was found in a containing scope. - // NOTE: Nested ambient modules always should go to to 'locals' table to prevent their automatic merge - // 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. if (ts.isJSDocTypeAlias(node)) - ts.Debug.assert(ts.isInJavaScriptFile(node)); // We shouldn't add symbols for JSDoc nodes if not in a JS file. - if ((!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 32 /* ExportContext */)) || ts.isJSDocTypeAlias(node)) { - if (ts.hasModifier(node, 512 /* Default */) && !getDeclarationName(node)) { - return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); // No local symbol for an unnamed default! + ts.Debug.assert(ts.isInJavaScriptFile(node)); + if ((!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 32)) || ts.isJSDocTypeAlias(node)) { + if (ts.hasModifier(node, 512) && !getDeclarationName(node)) { + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } - var exportKind = symbolFlags & 67216319 /* Value */ ? 1048576 /* ExportValue */ : 0; - var local = declareSymbol(container.locals, /*parent*/ undefined, node, exportKind, symbolExcludes); + var exportKind = symbolFlags & 67216319 ? 1048576 : 0; + var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); node.localSymbol = local; return local; } else { - return declareSymbol(container.locals, /*parent*/ undefined, node, symbolFlags, symbolExcludes); + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } } - // All container nodes are kept on a linked list in declaration order. This list is used by - // the getLocalNameOfContainer function in the type checker to validate that the local name - // used for a container is unique. function bindContainer(node, containerFlags) { - // Before we recurse into a node's children, we first save the existing parent, container - // and block-container. Then after we pop out of processing the children, we restore - // these saved values. var saveContainer = container; var saveThisParentContainer = thisParentContainer; var savedBlockScopeContainer = blockScopeContainer; - // Depending on what kind of node this is, we may have to adjust the current container - // and block-container. If the current node is a container, then it is automatically - // considered the current block-container as well. Also, for containers that we know - // may contain locals, we eagerly initialize the .locals field. We do this because - // it's highly likely that the .locals will be needed to place some child in (for example, - // a parameter, or variable declaration). - // - // However, we do not proactively create the .locals for block-containers because it's - // totally normal and common for block-containers to never actually have a block-scoped - // variable in them. We don't want to end up allocating an object for every 'block' we - // run into when most of them won't be necessary. - // - // Finally, if this is a block-container, then we clear out any existing .locals object - // it may contain within it. This happens in incremental scenarios. Because we can be - // reusing a node from a previous compilation, that node may have had 'locals' created - // for it. We must clear this so we don't accidentally move any stale data forward from - // a previous compilation. - if (containerFlags & 1 /* IsContainer */) { - if (node.kind !== 193 /* ArrowFunction */) { + if (containerFlags & 1) { + if (node.kind !== 193) { thisParentContainer = container; } container = blockScopeContainer = node; - if (containerFlags & 32 /* HasLocals */) { + if (containerFlags & 32) { container.locals = ts.createSymbolTable(); } addToContainerChain(container); } - else if (containerFlags & 2 /* IsBlockScopedContainer */) { + else if (containerFlags & 2) { blockScopeContainer = node; blockScopeContainer.locals = undefined; } - if (containerFlags & 4 /* IsControlFlowContainer */) { + if (containerFlags & 4) { var saveCurrentFlow = currentFlow; var saveBreakTarget = currentBreakTarget; var saveContinueTarget = currentContinueTarget; var saveReturnTarget = currentReturnTarget; var saveActiveLabels = activeLabels; var saveHasExplicitReturn = hasExplicitReturn; - var isIIFE = containerFlags & 16 /* IsFunctionExpression */ && !ts.hasModifier(node, 256 /* Async */) && + var isIIFE = containerFlags & 16 && !ts.hasModifier(node, 256) && !node.asteriskToken && !!ts.getImmediatelyInvokedFunctionExpression(node); - // A non-async, non-generator IIFE is considered part of the containing control flow. Return statements behave - // similarly to break statements that exit to a label just past the statement body. if (!isIIFE) { - currentFlow = { flags: 2 /* Start */ }; - if (containerFlags & (16 /* IsFunctionExpression */ | 128 /* IsObjectLiteralOrClassExpressionMethod */)) { + currentFlow = { flags: 2 }; + if (containerFlags & (16 | 128)) { currentFlow.container = node; } } - // We create a return control flow graph for IIFEs and constructors. For constructors - // we use the return control flow graph in strict property intialization checks. - currentReturnTarget = isIIFE || node.kind === 155 /* Constructor */ ? createBranchLabel() : undefined; + currentReturnTarget = isIIFE || node.kind === 155 ? createBranchLabel() : undefined; currentBreakTarget = undefined; currentContinueTarget = undefined; activeLabels = undefined; hasExplicitReturn = false; bindChildren(node); - // Reset all reachability check related flags on node (for incremental scenarios) - node.flags &= ~1408 /* ReachabilityAndEmitFlags */; - if (!(currentFlow.flags & 1 /* Unreachable */) && containerFlags & 8 /* IsFunctionLike */ && ts.nodeIsPresent(node.body)) { - node.flags |= 128 /* HasImplicitReturn */; + node.flags &= ~1408; + if (!(currentFlow.flags & 1) && containerFlags & 8 && ts.nodeIsPresent(node.body)) { + node.flags |= 128; if (hasExplicitReturn) - node.flags |= 256 /* HasExplicitReturn */; + node.flags |= 256; } - if (node.kind === 274 /* SourceFile */) { + if (node.kind === 274) { node.flags |= emitFlags; } if (currentReturnTarget) { addAntecedent(currentReturnTarget, currentFlow); currentFlow = finishFlowLabel(currentReturnTarget); - if (node.kind === 155 /* Constructor */) { + if (node.kind === 155) { node.returnFlowNode = currentFlow; } } @@ -25869,10 +20880,10 @@ var ts; activeLabels = saveActiveLabels; hasExplicitReturn = saveHasExplicitReturn; } - else if (containerFlags & 64 /* IsInterface */) { + else if (containerFlags & 64) { seenThisKeyword = false; bindChildren(node); - node.flags = seenThisKeyword ? node.flags | 64 /* ContainsThis */ : node.flags & ~64 /* ContainsThis */; + node.flags = seenThisKeyword ? node.flags | 64 : node.flags & ~64; } else { bindChildren(node); @@ -25885,7 +20896,7 @@ var ts; if (skipTransformFlagAggregation) { bindChildrenWorker(node); } - else if (node.transformFlags & 536870912 /* HasComputedFlags */) { + else if (node.transformFlags & 536870912) { skipTransformFlagAggregation = true; bindChildrenWorker(node); skipTransformFlagAggregation = false; @@ -25899,8 +20910,8 @@ var ts; } } function bindEachFunctionsFirst(nodes) { - bindEach(nodes, function (n) { return n.kind === 234 /* FunctionDeclaration */ ? bind(n) : undefined; }); - bindEach(nodes, function (n) { return n.kind !== 234 /* FunctionDeclaration */ ? bind(n) : undefined; }); + bindEach(nodes, function (n) { return n.kind === 234 ? bind(n) : undefined; }); + bindEach(nodes, function (n) { return n.kind !== 234 ? bind(n) : undefined; }); } function bindEach(nodes, bindFunction) { if (bindFunction === void 0) { bindFunction = bind; } @@ -25912,14 +20923,14 @@ var ts; } else { var savedSubtreeTransformFlags = subtreeTransformFlags; - subtreeTransformFlags = 0 /* None */; - var nodeArrayFlags = 0 /* None */; + subtreeTransformFlags = 0; + var nodeArrayFlags = 0; for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) { var node = nodes_2[_i]; bindFunction(node); - nodeArrayFlags |= node.transformFlags & ~536870912 /* HasComputedFlags */; + nodeArrayFlags |= node.transformFlags & ~536870912; } - nodes.transformFlags = nodeArrayFlags | 536870912 /* HasComputedFlags */; + nodes.transformFlags = nodeArrayFlags | 536870912; subtreeTransformFlags |= savedSubtreeTransformFlags; } } @@ -25932,77 +20943,76 @@ var ts; return; } switch (node.kind) { - case 219 /* WhileStatement */: + case 219: bindWhileStatement(node); break; - case 218 /* DoStatement */: + case 218: bindDoStatement(node); break; - case 220 /* ForStatement */: + case 220: bindForStatement(node); break; - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 221: + case 222: bindForInOrForOfStatement(node); break; - case 217 /* IfStatement */: + case 217: bindIfStatement(node); break; - case 225 /* ReturnStatement */: - case 229 /* ThrowStatement */: + case 225: + case 229: bindReturnOrThrow(node); break; - case 224 /* BreakStatement */: - case 223 /* ContinueStatement */: + case 224: + case 223: bindBreakOrContinueStatement(node); break; - case 230 /* TryStatement */: + case 230: bindTryStatement(node); break; - case 227 /* SwitchStatement */: + case 227: bindSwitchStatement(node); break; - case 241 /* CaseBlock */: + case 241: bindCaseBlock(node); break; - case 266 /* CaseClause */: + case 266: bindCaseClause(node); break; - case 228 /* LabeledStatement */: + case 228: bindLabeledStatement(node); break; - case 198 /* PrefixUnaryExpression */: + case 198: bindPrefixUnaryExpressionFlow(node); break; - case 199 /* PostfixUnaryExpression */: + case 199: bindPostfixUnaryExpressionFlow(node); break; - case 200 /* BinaryExpression */: + case 200: bindBinaryExpressionFlow(node); break; - case 194 /* DeleteExpression */: + case 194: bindDeleteExpressionFlow(node); break; - case 201 /* ConditionalExpression */: + case 201: bindConditionalExpressionFlow(node); break; - case 232 /* VariableDeclaration */: + case 232: bindVariableDeclarationFlow(node); break; - case 187 /* CallExpression */: + case 187: bindCallExpressionFlow(node); break; - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: + case 297: + case 292: bindJSDocTypeAlias(node); break; - // In source files and blocks, bind functions first to match hoisting that occurs at runtime - case 274 /* SourceFile */: + case 274: bindEachFunctionsFirst(node.statements); bind(node.endOfFileToken); break; - case 213 /* Block */: - case 240 /* ModuleBlock */: + case 213: + case 240: bindEachFunctionsFirst(node.statements); break; default: @@ -26013,26 +21023,26 @@ var ts; } function isNarrowingExpression(expr) { switch (expr.kind) { - case 71 /* Identifier */: - case 99 /* ThisKeyword */: - case 185 /* PropertyAccessExpression */: + case 71: + case 99: + case 185: return isNarrowableReference(expr); - case 187 /* CallExpression */: + case 187: return hasNarrowableArgument(expr); - case 191 /* ParenthesizedExpression */: + case 191: return isNarrowingExpression(expr.expression); - case 200 /* BinaryExpression */: + case 200: return isNarrowingBinaryExpression(expr); - case 198 /* PrefixUnaryExpression */: - return expr.operator === 51 /* ExclamationToken */ && isNarrowingExpression(expr.operand); + case 198: + return expr.operator === 51 && isNarrowingExpression(expr.operand); } return false; } function isNarrowableReference(expr) { - return expr.kind === 71 /* Identifier */ || - expr.kind === 99 /* ThisKeyword */ || - expr.kind === 97 /* SuperKeyword */ || - expr.kind === 185 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + return expr.kind === 71 || + expr.kind === 99 || + expr.kind === 97 || + expr.kind === 185 && isNarrowableReference(expr.expression); } function hasNarrowableArgument(expr) { if (expr.arguments) { @@ -26043,7 +21053,7 @@ var ts; } } } - if (expr.expression.kind === 185 /* PropertyAccessExpression */ && + if (expr.expression.kind === 185 && isNarrowableReference(expr.expression.expression)) { return true; } @@ -26057,32 +21067,32 @@ var ts; } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { - case 58 /* EqualsToken */: + case 58: return isNarrowableReference(expr.left); - case 32 /* EqualsEqualsToken */: - case 33 /* ExclamationEqualsToken */: - case 34 /* EqualsEqualsEqualsToken */: - case 35 /* ExclamationEqualsEqualsToken */: + case 32: + case 33: + case 34: + case 35: return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) || isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right); - case 93 /* InstanceOfKeyword */: + case 93: return isNarrowableOperand(expr.left); - case 92 /* InKeyword */: + case 92: return isNarrowableInOperands(expr.left, expr.right); - case 26 /* CommaToken */: + case 26: return isNarrowingExpression(expr.right); } return false; } function isNarrowableOperand(expr) { switch (expr.kind) { - case 191 /* ParenthesizedExpression */: + case 191: return isNarrowableOperand(expr.expression); - case 200 /* BinaryExpression */: + case 200: switch (expr.operatorToken.kind) { - case 58 /* EqualsToken */: + case 58: return isNarrowableOperand(expr.left); - case 26 /* CommaToken */: + case 26: return isNarrowableOperand(expr.right); } } @@ -26090,35 +21100,34 @@ var ts; } function createBranchLabel() { return { - flags: 4 /* BranchLabel */, + flags: 4, antecedents: undefined }; } function createLoopLabel() { return { - flags: 8 /* LoopLabel */, + flags: 8, antecedents: undefined }; } function setFlowNodeReferenced(flow) { - // On first reference we set the Referenced flag, thereafter we set the Shared flag - flow.flags |= flow.flags & 512 /* Referenced */ ? 1024 /* Shared */ : 512 /* Referenced */; + flow.flags |= flow.flags & 512 ? 1024 : 512; } function addAntecedent(label, antecedent) { - if (!(antecedent.flags & 1 /* Unreachable */) && !ts.contains(label.antecedents, antecedent)) { + if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { (label.antecedents || (label.antecedents = [])).push(antecedent); setFlowNodeReferenced(antecedent); } } function createFlowCondition(flags, antecedent, expression) { - if (antecedent.flags & 1 /* Unreachable */) { + if (antecedent.flags & 1) { return antecedent; } if (!expression) { - return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow; + return flags & 32 ? antecedent : unreachableFlow; } - if (expression.kind === 101 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || - expression.kind === 86 /* FalseKeyword */ && flags & 32 /* TrueCondition */) { + if (expression.kind === 101 && flags & 64 || + expression.kind === 86 && flags & 32) { return unreachableFlow; } if (!isNarrowingExpression(expression)) { @@ -26132,15 +21141,15 @@ var ts; return antecedent; } setFlowNodeReferenced(antecedent); - return { flags: 128 /* SwitchClause */, switchStatement: switchStatement, clauseStart: clauseStart, clauseEnd: clauseEnd, antecedent: antecedent }; + return { flags: 128, switchStatement: switchStatement, clauseStart: clauseStart, clauseEnd: clauseEnd, antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { setFlowNodeReferenced(antecedent); - return { flags: 16 /* Assignment */, antecedent: antecedent, node: node }; + return { flags: 16, antecedent: antecedent, node: node }; } function createFlowArrayMutation(antecedent, node) { setFlowNodeReferenced(antecedent); - var res = { flags: 256 /* ArrayMutation */, antecedent: antecedent, node: node }; + var res = { flags: 256, antecedent: antecedent, node: node }; return res; } function finishFlowLabel(flow) { @@ -26156,34 +21165,34 @@ var ts; function isStatementCondition(node) { var parent = node.parent; switch (parent.kind) { - case 217 /* IfStatement */: - case 219 /* WhileStatement */: - case 218 /* DoStatement */: + case 217: + case 219: + case 218: return parent.expression === node; - case 220 /* ForStatement */: - case 201 /* ConditionalExpression */: + case 220: + case 201: return parent.condition === node; } return false; } function isLogicalExpression(node) { while (true) { - if (node.kind === 191 /* ParenthesizedExpression */) { + if (node.kind === 191) { node = node.expression; } - else if (node.kind === 198 /* PrefixUnaryExpression */ && node.operator === 51 /* ExclamationToken */) { + else if (node.kind === 198 && node.operator === 51) { node = node.operand; } else { - return node.kind === 200 /* BinaryExpression */ && (node.operatorToken.kind === 53 /* AmpersandAmpersandToken */ || - node.operatorToken.kind === 54 /* BarBarToken */); + return node.kind === 200 && (node.operatorToken.kind === 53 || + node.operatorToken.kind === 54); } } } function isTopLevelLogicalExpression(node) { - while (node.parent.kind === 191 /* ParenthesizedExpression */ || - node.parent.kind === 198 /* PrefixUnaryExpression */ && - node.parent.operator === 51 /* ExclamationToken */) { + while (node.parent.kind === 191 || + node.parent.kind === 198 && + node.parent.operator === 51) { node = node.parent; } return !isStatementCondition(node) && !isLogicalExpression(node.parent); @@ -26197,8 +21206,8 @@ var ts; currentTrueTarget = saveTrueTarget; currentFalseTarget = saveFalseTarget; if (!node || !isLogicalExpression(node)) { - addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node)); - addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node)); + addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node)); } } function bindIterativeStatement(node, breakTarget, continueTarget) { @@ -26224,11 +21233,9 @@ var ts; } function bindDoStatement(node) { var preDoLabel = createLoopLabel(); - var enclosingLabeledStatement = node.parent.kind === 228 /* LabeledStatement */ + var enclosingLabeledStatement = node.parent.kind === 228 ? ts.lastOrUndefined(activeLabels) : undefined; - // if do statement is wrapped in labeled statement then target labels for break/continue with or without - // label should be the same var preConditionLabel = enclosingLabeledStatement ? enclosingLabeledStatement.continueTarget : createBranchLabel(); var postDoLabel = enclosingLabeledStatement ? enclosingLabeledStatement.breakTarget : createBranchLabel(); addAntecedent(preDoLabel, currentFlow); @@ -26258,13 +21265,13 @@ var ts; var postLoopLabel = createBranchLabel(); addAntecedent(preLoopLabel, currentFlow); currentFlow = preLoopLabel; - if (node.kind === 222 /* ForOfStatement */) { + if (node.kind === 222) { bind(node.awaitModifier); } bind(node.expression); addAntecedent(postLoopLabel, currentFlow); bind(node.initializer); - if (node.initializer.kind !== 233 /* VariableDeclarationList */) { + if (node.initializer.kind !== 233) { bindAssignmentTargetFlow(node.initializer); } bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); @@ -26286,7 +21293,7 @@ var ts; } function bindReturnOrThrow(node) { bind(node.expression); - if (node.kind === 225 /* ReturnStatement */) { + if (node.kind === 225) { hasExplicitReturn = true; if (currentReturnTarget) { addAntecedent(currentReturnTarget, currentFlow); @@ -26306,7 +21313,7 @@ var ts; return undefined; } function bindBreakOrContinueFlow(node, breakTarget, continueTarget) { - var flowLabel = node.kind === 224 /* BreakStatement */ ? breakTarget : continueTarget; + var flowLabel = node.kind === 224 ? breakTarget : continueTarget; if (flowLabel) { addAntecedent(flowLabel, currentFlow); currentFlow = unreachableFlow; @@ -26328,7 +21335,6 @@ var ts; function bindTryStatement(node) { var preFinallyLabel = createBranchLabel(); var preTryFlow = currentFlow; - // TODO: Every statement in try block is potentially an exit point! bind(node.tryBlock); addAntecedent(preFinallyLabel, currentFlow); var flowAfterTry = currentFlow; @@ -26340,51 +21346,19 @@ var ts; flowAfterCatch = currentFlow; } if (node.finallyBlock) { - // in finally flow is combined from pre-try/flow from try/flow from catch - // pre-flow is necessary to make sure that finally is reachable even if finally flows in both try and finally blocks are unreachable - // also for finally blocks we inject two extra edges into the flow graph. - // first -> edge that connects pre-try flow with the label at the beginning of the finally block, it has lock associated with it - // second -> edge that represents post-finally flow. - // these edges are used in following scenario: - // let a; (1) - // try { a = someOperation(); (2)} - // finally { (3) console.log(a) } (4) - // (5) a - // flow graph for this case looks roughly like this (arrows show ): - // (1-pre-try-flow) <--.. <-- (2-post-try-flow) - // ^ ^ - // |*****(3-pre-finally-label) -----| - // ^ - // |-- ... <-- (4-post-finally-label) <--- (5) - // In case when we walk the flow starting from inside the finally block we want to take edge '*****' into account - // since it ensures that finally is always reachable. However when we start outside the finally block and go through label (5) - // then edge '*****' should be discarded because label 4 is only reachable if post-finally label-4 is reachable - // Simply speaking code inside finally block is treated as reachable as pre-try-flow - // since we conservatively assume that any line in try block can throw or return in which case we'll enter finally. - // However code after finally is reachable only if control flow was not abrupted in try/catch or finally blocks - it should be composed from - // final flows of these blocks without taking pre-try flow into account. - // - // extra edges that we inject allows to control this behavior - // if when walking the flow we step on post-finally edge - we can mark matching pre-finally edge as locked so it will be skipped. - var preFinallyFlow = { flags: 2048 /* PreFinally */, antecedent: preTryFlow, lock: {} }; + var preFinallyFlow = { flags: 2048, antecedent: preTryFlow, lock: {} }; addAntecedent(preFinallyLabel, preFinallyFlow); currentFlow = finishFlowLabel(preFinallyLabel); bind(node.finallyBlock); - // if flow after finally is unreachable - keep it - // otherwise check if flows after try and after catch are unreachable - // if yes - convert current flow to unreachable - // i.e. - // try { return "1" } finally { console.log(1); } - // console.log(2); // this line should be unreachable even if flow falls out of finally block - if (!(currentFlow.flags & 1 /* Unreachable */)) { - if ((flowAfterTry.flags & 1 /* Unreachable */) && (flowAfterCatch.flags & 1 /* Unreachable */)) { + if (!(currentFlow.flags & 1)) { + if ((flowAfterTry.flags & 1) && (flowAfterCatch.flags & 1)) { currentFlow = flowAfterTry === reportedUnreachableFlow || flowAfterCatch === reportedUnreachableFlow ? reportedUnreachableFlow : unreachableFlow; } } - if (!(currentFlow.flags & 1 /* Unreachable */)) { - var afterFinallyFlow = { flags: 4096 /* AfterFinally */, antecedent: currentFlow }; + if (!(currentFlow.flags & 1)) { + var afterFinallyFlow = { flags: 4096, antecedent: currentFlow }; preFinallyFlow.lock = afterFinallyFlow; currentFlow = afterFinallyFlow; } @@ -26402,9 +21376,7 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 267 /* DefaultClause */; }); - // We mark a switch statement as possibly exhaustive if it has no default clause and if all - // case clauses have unreachable end points (e.g. they all return). + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 267; }); node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; if (!hasDefault) { addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); @@ -26432,11 +21404,11 @@ var ts; var clause = clauses[i]; bind(clause); fallthroughFlow = currentFlow; - if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } - clauses.transformFlags = subtreeTransformFlags | 536870912 /* HasComputedFlags */; + clauses.transformFlags = subtreeTransformFlags | 536870912; subtreeTransformFlags |= savedSubtreeTransformFlags; } function bindCaseClause(node) { @@ -26470,14 +21442,13 @@ var ts; if (!activeLabel.referenced && !options.allowUnusedLabels) { errorOrSuggestionOnFirstToken(ts.unusedLabelIsError(options), node, ts.Diagnostics.Unused_label); } - if (!node.statement || node.statement.kind !== 218 /* DoStatement */) { - // do statement sets current flow inside bindDoStatement + if (!node.statement || node.statement.kind !== 218) { addAntecedent(postStatementLabel, currentFlow); currentFlow = finishFlowLabel(postStatementLabel); } } function bindDestructuringTargetFlow(node) { - if (node.kind === 200 /* BinaryExpression */ && node.operatorToken.kind === 58 /* EqualsToken */) { + if (node.kind === 200 && node.operatorToken.kind === 58) { bindAssignmentTargetFlow(node.left); } else { @@ -26488,10 +21459,10 @@ var ts; if (isNarrowableReference(node)) { currentFlow = createFlowAssignment(currentFlow, node); } - else if (node.kind === 183 /* ArrayLiteralExpression */) { + else if (node.kind === 183) { for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { var e = _a[_i]; - if (e.kind === 204 /* SpreadElement */) { + if (e.kind === 204) { bindAssignmentTargetFlow(e.expression); } else { @@ -26499,16 +21470,16 @@ var ts; } } } - else if (node.kind === 184 /* ObjectLiteralExpression */) { + else if (node.kind === 184) { for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { var p = _c[_b]; - if (p.kind === 270 /* PropertyAssignment */) { + if (p.kind === 270) { bindDestructuringTargetFlow(p.initializer); } - else if (p.kind === 271 /* ShorthandPropertyAssignment */) { + else if (p.kind === 271) { bindAssignmentTargetFlow(p.name); } - else if (p.kind === 272 /* SpreadAssignment */) { + else if (p.kind === 272) { bindAssignmentTargetFlow(p.expression); } } @@ -26516,7 +21487,7 @@ var ts; } function bindLogicalExpression(node, trueTarget, falseTarget) { var preRightLabel = createBranchLabel(); - if (node.operatorToken.kind === 53 /* AmpersandAmpersandToken */) { + if (node.operatorToken.kind === 53) { bindCondition(node.left, preRightLabel, falseTarget); } else { @@ -26527,7 +21498,7 @@ var ts; bindCondition(node.right, trueTarget, falseTarget); } function bindPrefixUnaryExpressionFlow(node) { - if (node.operator === 51 /* ExclamationToken */) { + if (node.operator === 51) { var saveTrueTarget = currentTrueTarget; currentTrueTarget = currentFalseTarget; currentFalseTarget = saveTrueTarget; @@ -26537,20 +21508,20 @@ var ts; } else { bindEachChild(node); - if (node.operator === 43 /* PlusPlusToken */ || node.operator === 44 /* MinusMinusToken */) { + if (node.operator === 43 || node.operator === 44) { bindAssignmentTargetFlow(node.operand); } } } function bindPostfixUnaryExpressionFlow(node) { bindEachChild(node); - if (node.operator === 43 /* PlusPlusToken */ || node.operator === 44 /* MinusMinusToken */) { + if (node.operator === 43 || node.operator === 44) { bindAssignmentTargetFlow(node.operand); } } function bindBinaryExpressionFlow(node) { var operator = node.operatorToken.kind; - if (operator === 53 /* AmpersandAmpersandToken */ || operator === 54 /* BarBarToken */) { + if (operator === 53 || operator === 54) { if (isTopLevelLogicalExpression(node)) { var postExpressionLabel = createBranchLabel(); bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); @@ -26564,7 +21535,7 @@ var ts; bindEachChild(node); if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) { bindAssignmentTargetFlow(node.left); - if (operator === 58 /* EqualsToken */ && node.left.kind === 186 /* ElementAccessExpression */) { + if (operator === 58 && node.left.kind === 186) { var elementAccess = node.left; if (isNarrowableOperand(elementAccess.expression)) { currentFlow = createFlowArrayMutation(currentFlow, node); @@ -26575,7 +21546,7 @@ var ts; } function bindDeleteExpressionFlow(node) { bindEachChild(node); - if (node.expression.kind === 185 /* PropertyAccessExpression */) { + if (node.expression.kind === 185) { bindAssignmentTargetFlow(node.expression); } } @@ -26618,14 +21589,11 @@ var ts; } } function bindCallExpressionFlow(node) { - // If the target of the call expression is a function expression or arrow function we have - // an immediately invoked function expression (IIFE). Initialize the flowNode property to - // the current control flow (which includes evaluation of the IIFE arguments). var expr = node.expression; - while (expr.kind === 191 /* ParenthesizedExpression */) { + while (expr.kind === 191) { expr = expr.expression; } - if (expr.kind === 192 /* FunctionExpression */ || expr.kind === 193 /* ArrowFunction */) { + if (expr.kind === 192 || expr.kind === 193) { bindEach(node.typeArguments); bindEach(node.arguments); bind(node.expression); @@ -26633,7 +21601,7 @@ var ts; else { bindEachChild(node); } - if (node.expression.kind === 185 /* PropertyAccessExpression */) { + if (node.expression.kind === 185) { var propertyAccess = node.expression; if (isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) { currentFlow = createFlowArrayMutation(currentFlow, node); @@ -26642,73 +21610,56 @@ var ts; } function getContainerFlags(node) { switch (node.kind) { - case 205 /* ClassExpression */: - case 235 /* ClassDeclaration */: - case 238 /* EnumDeclaration */: - case 184 /* ObjectLiteralExpression */: - case 166 /* TypeLiteral */: - case 287 /* JSDocTypeLiteral */: - case 263 /* JsxAttributes */: - return 1 /* IsContainer */; - case 236 /* InterfaceDeclaration */: - return 1 /* IsContainer */ | 64 /* IsInterface */; - case 239 /* ModuleDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 177 /* MappedType */: - return 1 /* IsContainer */ | 32 /* HasLocals */; - case 274 /* SourceFile */: - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */; - case 154 /* MethodDeclaration */: + case 205: + case 235: + case 238: + case 184: + case 166: + case 287: + case 263: + return 1; + case 236: + return 1 | 64; + case 239: + case 237: + case 177: + return 1 | 32; + case 274: + return 1 | 4 | 32; + case 154: if (ts.isObjectLiteralOrClassExpressionMethod(node)) { - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */; + return 1 | 4 | 32 | 8 | 128; } - // falls through - case 155 /* Constructor */: - case 234 /* FunctionDeclaration */: - case 153 /* MethodSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 158 /* CallSignature */: - case 288 /* JSDocSignature */: - case 284 /* JSDocFunctionType */: - case 163 /* FunctionType */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 164 /* ConstructorType */: - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */; - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */; - case 240 /* ModuleBlock */: - return 4 /* IsControlFlowContainer */; - case 152 /* PropertyDeclaration */: - return node.initializer ? 4 /* IsControlFlowContainer */ : 0; - case 269 /* CatchClause */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: - case 241 /* CaseBlock */: - return 2 /* IsBlockScopedContainer */; - case 213 /* Block */: - // do not treat blocks directly inside a function as a block-scoped-container. - // Locals that reside in this block should go to the function locals. Otherwise 'x' - // would not appear to be a redeclaration of a block scoped local in the following - // example: - // - // function foo() { - // var x; - // let x; - // } - // - // If we placed 'var x' into the function locals and 'let x' into the locals of - // the block, then there would be no collision. - // - // By not creating a new block-scoped-container here, we ensure that both 'var x' - // and 'let x' go into the Function-container's locals, and we do get a collision - // conflict. - return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */; + case 155: + case 234: + case 153: + case 156: + case 157: + case 158: + case 288: + case 284: + case 163: + case 159: + case 160: + case 164: + return 1 | 4 | 32 | 8; + case 192: + case 193: + return 1 | 4 | 32 | 8 | 16; + case 240: + return 4; + case 152: + return node.initializer ? 4 : 0; + case 269: + case 220: + case 221: + case 222: + case 241: + return 2; + case 213: + return ts.isFunctionLike(node.parent) ? 0 : 2; } - return 0 /* None */; + return 0; } function addToContainerChain(next) { if (lastContainer) { @@ -26718,74 +21669,59 @@ var ts; } function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) { switch (container.kind) { - // Modules, source files, and classes need specialized handling for how their - // members are declared (for example, a member of a class will go into a specific - // symbol table depending on if it is static or not). We defer to specialized - // handlers to take care of declaring these child members. - case 239 /* ModuleDeclaration */: + case 239: return declareModuleMember(node, symbolFlags, symbolExcludes); - case 274 /* SourceFile */: + case 274: return declareSourceFileMember(node, symbolFlags, symbolExcludes); - case 205 /* ClassExpression */: - case 235 /* ClassDeclaration */: + case 205: + case 235: return declareClassMember(node, symbolFlags, symbolExcludes); - case 238 /* EnumDeclaration */: + case 238: return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); - case 166 /* TypeLiteral */: - case 287 /* JSDocTypeLiteral */: - case 184 /* ObjectLiteralExpression */: - case 236 /* InterfaceDeclaration */: - case 263 /* JsxAttributes */: - // 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 - // object / type / interface declaring them). An exception is type parameters, - // which are in scope without qualification (similar to 'locals'). + case 166: + case 287: + case 184: + case 236: + case 263: return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 288 /* JSDocSignature */: - case 160 /* IndexSignature */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 284 /* JSDocFunctionType */: - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: - case 237 /* TypeAliasDeclaration */: - case 177 /* MappedType */: - // All the children of these container types are never visible through another - // symbol (i.e. through another symbol's 'exports' or 'members'). Instead, - // they're only accessed 'lexically' (i.e. from code that exists underneath - // their container in the tree). To accomplish this, we simply add their declared - // symbol to the 'locals' of the container. These symbols can then be found as - // the type checker walks up the containers, checking them for matching names. - return declareSymbol(container.locals, /*parent*/ undefined, node, symbolFlags, symbolExcludes); + case 163: + case 164: + case 158: + case 159: + case 288: + case 160: + case 154: + case 153: + case 155: + case 156: + case 157: + case 234: + case 192: + case 193: + case 284: + case 297: + case 292: + case 237: + case 177: + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } function declareClassMember(node, symbolFlags, symbolExcludes) { - return ts.hasModifier(node, 32 /* Static */) + return ts.hasModifier(node, 32) ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); } function declareSourceFileMember(node, symbolFlags, symbolExcludes) { return ts.isExternalModule(file) ? declareModuleMember(node, symbolFlags, symbolExcludes) - : declareSymbol(file.locals, /*parent*/ undefined, node, symbolFlags, symbolExcludes); + : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { - var body = node.kind === 274 /* SourceFile */ ? node : node.body; - if (body && (body.kind === 274 /* SourceFile */ || body.kind === 240 /* ModuleBlock */)) { + var body = node.kind === 274 ? node : node.body; + if (body && (body.kind === 274 || body.kind === 240)) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var stat = _a[_i]; - if (stat.kind === 250 /* ExportDeclaration */ || stat.kind === 249 /* ExportAssignment */) { + if (stat.kind === 250 || stat.kind === 249) { return true; } } @@ -26793,19 +21729,17 @@ var ts; return false; } function setExportContextFlag(node) { - // A declaration source file or ambient module declaration that contains no export declarations (but possibly regular - // declarations with export modifiers) is an export context in which declarations are implicitly exported. - if (node.flags & 4194304 /* Ambient */ && !hasExportDeclarations(node)) { - node.flags |= 32 /* ExportContext */; + if (node.flags & 4194304 && !hasExportDeclarations(node)) { + node.flags |= 32; } else { - node.flags &= ~32 /* ExportContext */; + node.flags &= ~32; } } function bindModuleDeclaration(node) { setExportContextFlag(node); if (ts.isAmbientModule(node)) { - if (ts.hasModifier(node, 1 /* Export */)) { + if (ts.hasModifier(node, 1)) { errorOnFirstToken(node, ts.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible); } if (ts.isModuleAugmentationExternal(node)) { @@ -26813,7 +21747,7 @@ var ts; } else { var pattern = void 0; - if (node.name.kind === 9 /* StringLiteral */) { + if (node.name.kind === 9) { var text = node.name.text; if (ts.hasZeroOrOneAsteriskCharacter(text)) { pattern = ts.tryParsePattern(text); @@ -26822,90 +21756,68 @@ var ts; errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text); } } - var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 67215503 /* ValueModuleExcludes */); + var symbol = declareSymbolAndAddToSymbolTable(node, 512, 67215503); file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol }); } } else { var state = declareModuleSymbol(node); - if (state !== 0 /* NonInstantiated */) { + if (state !== 0) { var symbol = node.symbol; - // if module was already merged with some function, class or non-const enum, treat it as non-const-enum-only - symbol.constEnumOnlyModule = (!(symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */))) - // Current must be `const enum` only - && state === 2 /* ConstEnumOnly */ - // Can't have been set to 'false' in a previous merged symbol. ('undefined' OK) + symbol.constEnumOnlyModule = (!(symbol.flags & (16 | 32 | 256))) + && state === 2 && symbol.constEnumOnlyModule !== false; } } } function declareModuleSymbol(node) { var state = getModuleInstanceState(node); - var instantiated = state !== 0 /* NonInstantiated */; - declareSymbolAndAddToSymbolTable(node, instantiated ? 512 /* ValueModule */ : 1024 /* NamespaceModule */, instantiated ? 67215503 /* ValueModuleExcludes */ : 0 /* NamespaceModuleExcludes */); + var instantiated = state !== 0; + declareSymbolAndAddToSymbolTable(node, instantiated ? 512 : 1024, instantiated ? 67215503 : 0); return state; } function bindFunctionOrConstructorType(node) { - // For a given function symbol "<...>(...) => T" we want to generate a symbol identical - // to the one we would get for: { <...>(...): T } - // - // We do that by making an anonymous type literal symbol, and then setting the function - // symbol as its sole member. To the rest of the system, this symbol will be indistinguishable - // from an actual type literal symbol you would have gotten had you used the long form. - var symbol = createSymbol(131072 /* Signature */, getDeclarationName(node)); // TODO: GH#18217 - addDeclarationToSymbol(symbol, node, 131072 /* Signature */); - var typeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); - addDeclarationToSymbol(typeLiteralSymbol, node, 2048 /* TypeLiteral */); + var symbol = createSymbol(131072, getDeclarationName(node)); + addDeclarationToSymbol(symbol, node, 131072); + var typeLiteralSymbol = createSymbol(2048, "__type"); + addDeclarationToSymbol(typeLiteralSymbol, node, 2048); typeLiteralSymbol.members = ts.createSymbolTable(); typeLiteralSymbol.members.set(symbol.escapedName, symbol); } function bindObjectLiteralExpression(node) { - var ElementKind; - (function (ElementKind) { - ElementKind[ElementKind["Property"] = 1] = "Property"; - ElementKind[ElementKind["Accessor"] = 2] = "Accessor"; - })(ElementKind || (ElementKind = {})); if (inStrictMode) { var seen = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var prop = _a[_i]; - if (prop.kind === 272 /* SpreadAssignment */ || prop.name.kind !== 71 /* Identifier */) { + if (prop.kind === 272 || prop.name.kind !== 71) { continue; } var identifier = prop.name; - // ECMA-262 11.1.5 Object Initializer - // If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true - // a.This production is contained in strict code and IsDataDescriptor(previous) is true and - // IsDataDescriptor(propId.descriptor) is true. - // b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true. - // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. - // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true - // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields - var currentKind = prop.kind === 270 /* PropertyAssignment */ || prop.kind === 271 /* ShorthandPropertyAssignment */ || prop.kind === 154 /* MethodDeclaration */ - ? 1 /* Property */ - : 2 /* Accessor */; + var currentKind = prop.kind === 270 || prop.kind === 271 || prop.kind === 154 + ? 1 + : 2; var existingKind = seen.get(identifier.escapedText); if (!existingKind) { seen.set(identifier.escapedText, currentKind); continue; } - if (currentKind === 1 /* Property */ && existingKind === 1 /* Property */) { + if (currentKind === 1 && existingKind === 1) { var span = ts.getErrorSpanForNode(file, identifier); file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode)); } } } - return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object" /* Object */); + return bindAnonymousDeclaration(node, 4096, "__object"); } function bindJsxAttributes(node) { - return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__jsxAttributes" /* JSXAttributes */); + return bindAnonymousDeclaration(node, 4096, "__jsxAttributes"); } function bindJsxAttribute(node, symbolFlags, symbolExcludes) { return declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } function bindAnonymousDeclaration(node, symbolFlags, name) { var symbol = createSymbol(symbolFlags, name); - if (symbolFlags & (8 /* EnumMember */ | 106500 /* ClassMember */)) { + if (symbolFlags & (8 | 106500)) { symbol.parent = container.symbol; } addDeclarationToSymbol(symbol, node, symbolFlags); @@ -26913,25 +21825,24 @@ var ts; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { - case 239 /* ModuleDeclaration */: + case 239: declareModuleMember(node, symbolFlags, symbolExcludes); break; - case 274 /* SourceFile */: + case 274: if (ts.isExternalOrCommonJsModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; } - // falls through default: if (!blockScopeContainer.locals) { blockScopeContainer.locals = ts.createSymbolTable(); addToContainerChain(blockScopeContainer); } - declareSymbol(blockScopeContainer.locals, /*parent*/ undefined, node, symbolFlags, symbolExcludes); + declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes); } } function bindBlockScopedVariableDeclaration(node) { - bindBlockScopedDeclaration(node, 2 /* BlockScopedVariable */, 67216319 /* BlockScopedVariableExcludes */); + bindBlockScopedDeclaration(node, 2, 67216319); } function delayedBindJSDocTypedefTag() { if (!delayedTypeAliases) { @@ -26945,14 +21856,14 @@ var ts; for (var _i = 0, delayedTypeAliases_1 = delayedTypeAliases; _i < delayedTypeAliases_1.length; _i++) { var typeAlias = delayedTypeAliases_1[_i]; var host = ts.getJSDocHost(typeAlias); - container = ts.findAncestor(host.parent, function (n) { return !!(getContainerFlags(n) & 1 /* IsContainer */); }) || file; + container = ts.findAncestor(host.parent, function (n) { return !!(getContainerFlags(n) & 1); }) || file; blockScopeContainer = ts.getEnclosingBlockScopeContainer(host) || file; - currentFlow = { flags: 2 /* Start */ }; + currentFlow = { flags: 2 }; parent = typeAlias; bind(typeAlias.typeExpression); - if (!typeAlias.fullName || typeAlias.fullName.kind === 71 /* Identifier */) { + if (!typeAlias.fullName || typeAlias.fullName.kind === 71) { parent = typeAlias.parent; - bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 67901928 /* TypeAliasExcludes */); + bindBlockScopedDeclaration(typeAlias, 524288, 67901928); } else { bind(typeAlias.fullName); @@ -26964,23 +21875,18 @@ var ts; parent = saveParent; currentFlow = saveCurrentFlow; } - // The binder visits every node in the syntax tree so it is a convenient place to perform a single localized - // check for reserved words used as identifiers in strict mode code. function checkStrictModeIdentifier(node) { if (inStrictMode && - node.originalKeywordKind >= 108 /* FirstFutureReservedWord */ && - node.originalKeywordKind <= 116 /* LastFutureReservedWord */ && + node.originalKeywordKind >= 108 && + node.originalKeywordKind <= 116 && !ts.isIdentifierName(node) && - !(node.flags & 4194304 /* Ambient */)) { - // Report error only if there are no parse errors in file + !(node.flags & 4194304)) { if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); } } } function getStrictModeIdentifierMessage(node) { - // Provide specialized messages to help the user understand why we think they're in - // strict mode. if (ts.getContainingClass(node)) { return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; } @@ -26991,23 +21897,16 @@ var ts; } function checkStrictModeBinaryExpression(node) { if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) { - // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) checkStrictModeEvalOrArguments(node, node.left); } } function checkStrictModeCatchClause(node) { - // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the - // Catch production is eval or arguments if (inStrictMode && node.variableDeclaration) { checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); } } function checkStrictModeDeleteExpression(node) { - // Grammar checking - if (inStrictMode && node.expression.kind === 71 /* Identifier */) { - // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its - // UnaryExpression is a direct reference to a variable, function argument, or function name + if (inStrictMode && node.expression.kind === 71) { var span = ts.getErrorSpanForNode(file, node.expression); file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode)); } @@ -27016,19 +21915,15 @@ var ts; return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments"); } function checkStrictModeEvalOrArguments(contextNode, name) { - if (name && name.kind === 71 /* Identifier */) { + if (name && name.kind === 71) { var identifier = name; if (isEvalOrArgumentsIdentifier(identifier)) { - // We check first if the name is inside class declaration or class expression; if so give explicit message - // otherwise report generic error message. var span = ts.getErrorSpanForNode(file, name); file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), ts.idText(identifier))); } } } function getStrictModeEvalOrArgumentsMessage(node) { - // Provide specialized messages to help the user understand why we think they're in - // strict mode. if (ts.getContainingClass(node)) { return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode; } @@ -27039,13 +21934,10 @@ var ts; } function checkStrictModeFunctionName(node) { if (inStrictMode) { - // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression (13.1)) checkStrictModeEvalOrArguments(node, node.name); } } function getStrictModeBlockScopeFunctionDeclarationMessage(node) { - // Provide specialized messages to help the user understand why we think they're in - // strict mode. if (ts.getContainingClass(node)) { return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode; } @@ -27055,42 +21947,33 @@ var ts; return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5; } function checkStrictModeFunctionDeclaration(node) { - if (languageVersion < 2 /* ES2015 */) { - // Report error if function is not top level function declaration - if (blockScopeContainer.kind !== 274 /* SourceFile */ && - blockScopeContainer.kind !== 239 /* ModuleDeclaration */ && + if (languageVersion < 2) { + if (blockScopeContainer.kind !== 274 && + blockScopeContainer.kind !== 239 && !ts.isFunctionLike(blockScopeContainer)) { - // We check first if the name is inside class declaration or class expression; if so give explicit message - // otherwise report generic error message. var errorSpan = ts.getErrorSpanForNode(file, node); file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); } } } function checkStrictModeNumericLiteral(node) { - if (inStrictMode && node.numericLiteralFlags & 32 /* Octal */) { + if (inStrictMode && node.numericLiteralFlags & 32) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); } } function checkStrictModePostfixUnaryExpression(node) { - // Grammar checking - // The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression - // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. if (inStrictMode) { checkStrictModeEvalOrArguments(node, node.operand); } } function checkStrictModePrefixUnaryExpression(node) { - // Grammar checking if (inStrictMode) { - if (node.operator === 43 /* PlusPlusToken */ || node.operator === 44 /* MinusMinusToken */) { + if (node.operator === 43 || node.operator === 44) { checkStrictModeEvalOrArguments(node, node.operand); } } } function checkStrictModeWithStatement(node) { - // Grammar checking for withStatement if (inStrictMode) { errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); } @@ -27115,36 +21998,12 @@ var ts; } node.parent = parent; var saveInStrictMode = inStrictMode; - // Even though in the AST the jsdoc @typedef node belongs to the current node, - // its symbol might be in the same scope with the current node's symbol. Consider: - // - // /** @typedef {string | number} MyType */ - // function foo(); - // - // Here the current node is "foo", which is a container, but the scope of "MyType" should - // not be inside "foo". Therefore we always bind @typedef before bind the parent node, - // and skip binding this tag later when binding all the other jsdoc tags. - // First we bind declaration nodes to a symbol if possible. We'll both create a symbol - // and then potentially add the symbol to an appropriate symbol table. Possible - // destination symbol tables are: - // - // 1) The 'exports' table of the current container's symbol. - // 2) The 'members' table of the current container's symbol. - // 3) The 'locals' table of the current container. - // - // However, not all symbols will end up in any of these tables. 'Anonymous' symbols - // (like TypeLiterals for example) will not be put in any table. bindWorker(node); - // Then we recurse into the children of the node to bind them as well. For certain - // symbols we do specialized work when we recurse. For example, we'll keep track of - // the current 'container' node when it changes. This helps us know which symbol table - // a local should go into for example. Since terminal nodes are known not to have - // children, as an optimization we don't process those. - if (node.kind > 145 /* LastToken */) { + if (node.kind > 145) { var saveParent = parent; parent = node; var containerFlags = getContainerFlags(node); - if (containerFlags === 0 /* None */) { + if (containerFlags === 0) { bindChildren(node); } else { @@ -27152,7 +22011,7 @@ var ts; } parent = saveParent; } - else if (!skipTransformFlagAggregation && (node.transformFlags & 536870912 /* HasComputedFlags */) === 0) { + else if (!skipTransformFlagAggregation && (node.transformFlags & 536870912) === 0) { subtreeTransformFlags |= computeTransformFlagsForNode(node, 0); bindJSDoc(node); } @@ -27188,35 +22047,27 @@ var ts; } } } - /// Should be called only on prologue directives (isPrologueDirective(node) should be true) function isUseStrictPrologueDirective(node) { var nodeText = ts.getSourceTextOfNodeFromSourceFile(file, node.expression); - // Note: the node text must be exactly "use strict" or 'use strict'. It is not ok for the - // string to contain unicode escapes (as per ES5). return nodeText === '"use strict"' || nodeText === "'use strict'"; } function bindWorker(node) { switch (node.kind) { - /* Strict mode checks */ - case 71 /* Identifier */: - // for typedef type names with namespaces, bind the new jsdoc type symbol here - // because it requires all containing namespaces to be in effect, namely the - // current "blockScopeContainer" needs to be set to its immediate namespace parent. + case 71: if (node.isInJSDocNamespace) { var parentNode = node.parent; while (parentNode && !ts.isJSDocTypeAlias(parentNode)) { parentNode = parentNode.parent; } - bindBlockScopedDeclaration(parentNode, 524288 /* TypeAlias */, 67901928 /* TypeAliasExcludes */); + bindBlockScopedDeclaration(parentNode, 524288, 67901928); break; } - // falls through - case 99 /* ThisKeyword */: - if (currentFlow && (ts.isExpression(node) || parent.kind === 271 /* ShorthandPropertyAssignment */)) { + case 99: + if (currentFlow && (ts.isExpression(node) || parent.kind === 271)) { node.flowNode = currentFlow; } return checkStrictModeIdentifier(node); - case 185 /* PropertyAccessExpression */: + case 185: if (currentFlow && isNarrowableReference(node)) { node.flowNode = currentFlow; } @@ -27224,173 +22075,162 @@ var ts; bindSpecialPropertyDeclaration(node); } break; - case 200 /* BinaryExpression */: + case 200: var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { - case 1 /* ExportsProperty */: + case 1: bindExportsPropertyAssignment(node); break; - case 2 /* ModuleExports */: + case 2: bindModuleExportsAssignment(node); break; - case 3 /* PrototypeProperty */: + case 3: bindPrototypePropertyAssignment(node.left, node); break; - case 6 /* Prototype */: + case 6: bindPrototypeAssignment(node); break; - case 4 /* ThisProperty */: + case 4: bindThisPropertyAssignment(node); break; - case 5 /* Property */: + case 5: bindSpecialPropertyAssignment(node); break; - case 0 /* None */: - // Nothing to do + case 0: break; default: ts.Debug.fail("Unknown special property assignment kind"); } return checkStrictModeBinaryExpression(node); - case 269 /* CatchClause */: + case 269: return checkStrictModeCatchClause(node); - case 194 /* DeleteExpression */: + case 194: return checkStrictModeDeleteExpression(node); - case 8 /* NumericLiteral */: + case 8: return checkStrictModeNumericLiteral(node); - case 199 /* PostfixUnaryExpression */: + case 199: return checkStrictModePostfixUnaryExpression(node); - case 198 /* PrefixUnaryExpression */: + case 198: return checkStrictModePrefixUnaryExpression(node); - case 226 /* WithStatement */: + case 226: return checkStrictModeWithStatement(node); - case 174 /* ThisType */: + case 174: seenThisKeyword = true; return; - case 161 /* TypePredicate */: - break; // Binding the children will handle everything - case 148 /* TypeParameter */: + case 161: + break; + case 148: return bindTypeParameter(node); - case 149 /* Parameter */: + case 149: return bindParameter(node); - case 232 /* VariableDeclaration */: + case 232: return bindVariableDeclarationOrBindingElement(node); - case 182 /* BindingElement */: + case 182: node.flowNode = currentFlow; return bindVariableDeclarationOrBindingElement(node); - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 152: + case 151: return bindPropertyWorker(node); - case 270 /* PropertyAssignment */: - case 271 /* ShorthandPropertyAssignment */: - return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */); - case 273 /* EnumMember */: - return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 68008959 /* EnumMemberExcludes */); - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */); - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - // If this is an ObjectLiteralExpression method, then it sits in the same space - // as other properties in the object literal. So we use SymbolFlags.PropertyExcludes - // so that it will conflict with any other object literal members with the same - // name. - return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 67208127 /* MethodExcludes */); - case 234 /* FunctionDeclaration */: + case 270: + case 271: + return bindPropertyOrMethodOrAccessor(node, 4, 0); + case 273: + return bindPropertyOrMethodOrAccessor(node, 8, 68008959); + case 158: + case 159: + case 160: + return declareSymbolAndAddToSymbolTable(node, 131072, 0); + case 154: + case 153: + return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 16777216 : 0), ts.isObjectLiteralMethod(node) ? 0 : 67208127); + case 234: return bindFunctionDeclaration(node); - case 155 /* Constructor */: - return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */); - case 156 /* GetAccessor */: - return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 67150783 /* GetAccessorExcludes */); - case 157 /* SetAccessor */: - return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 67183551 /* SetAccessorExcludes */); - case 163 /* FunctionType */: - case 284 /* JSDocFunctionType */: - case 288 /* JSDocSignature */: - case 164 /* ConstructorType */: + case 155: + return declareSymbolAndAddToSymbolTable(node, 16384, 0); + case 156: + return bindPropertyOrMethodOrAccessor(node, 32768, 67150783); + case 157: + return bindPropertyOrMethodOrAccessor(node, 65536, 67183551); + case 163: + case 284: + case 288: + case 164: return bindFunctionOrConstructorType(node); - case 166 /* TypeLiteral */: - case 287 /* JSDocTypeLiteral */: - case 177 /* MappedType */: + case 166: + case 287: + case 177: return bindAnonymousTypeWorker(node); - case 184 /* ObjectLiteralExpression */: + case 184: return bindObjectLiteralExpression(node); - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 192: + case 193: return bindFunctionExpression(node); - case 187 /* CallExpression */: + case 187: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; - // Members of classes, interfaces, and modules - case 205 /* ClassExpression */: - case 235 /* ClassDeclaration */: - // All classes are automatically in strict mode in ES6. + case 205: + case 235: inStrictMode = true; return bindClassLikeDeclaration(node); - case 236 /* InterfaceDeclaration */: - return bindBlockScopedDeclaration(node, 64 /* Interface */, 67901832 /* InterfaceExcludes */); - case 237 /* TypeAliasDeclaration */: - return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 67901928 /* TypeAliasExcludes */); - case 238 /* EnumDeclaration */: + case 236: + return bindBlockScopedDeclaration(node, 64, 67901832); + case 237: + return bindBlockScopedDeclaration(node, 524288, 67901928); + case 238: return bindEnumDeclaration(node); - case 239 /* ModuleDeclaration */: + case 239: return bindModuleDeclaration(node); - // Jsx-attributes - case 263 /* JsxAttributes */: + case 263: return bindJsxAttributes(node); - case 262 /* JsxAttribute */: - return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */); - // Imports and exports - case 243 /* ImportEqualsDeclaration */: - case 246 /* NamespaceImport */: - case 248 /* ImportSpecifier */: - case 252 /* ExportSpecifier */: - return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); - case 242 /* NamespaceExportDeclaration */: + case 262: + return bindJsxAttribute(node, 4, 0); + case 243: + case 246: + case 248: + case 252: + return declareSymbolAndAddToSymbolTable(node, 2097152, 2097152); + case 242: return bindNamespaceExportDeclaration(node); - case 245 /* ImportClause */: + case 245: return bindImportClause(node); - case 250 /* ExportDeclaration */: + case 250: return bindExportDeclaration(node); - case 249 /* ExportAssignment */: + case 249: return bindExportAssignment(node); - case 274 /* SourceFile */: + case 274: updateStrictModeStatementList(node.statements); return bindSourceFileIfExternalModule(); - case 213 /* Block */: + case 213: if (!ts.isFunctionLike(node.parent)) { return; } - // falls through - case 240 /* ModuleBlock */: + case 240: return updateStrictModeStatementList(node.statements); - case 293 /* JSDocParameterTag */: - if (node.parent.kind === 288 /* JSDocSignature */) { + case 293: + if (node.parent.kind === 288) { return bindParameter(node); } - if (node.parent.kind !== 287 /* JSDocTypeLiteral */) { + if (node.parent.kind !== 287) { break; } - // falls through - case 298 /* JSDocPropertyTag */: + case 298: var propTag = node; - var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 283 /* JSDocOptionalType */ ? - 4 /* Property */ | 16777216 /* Optional */ : - 4 /* Property */; - return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */); - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: + var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 283 ? + 4 | 16777216 : + 4; + return declareSymbolAndAddToSymbolTable(propTag, flags, 0); + case 297: + case 292: return (delayedTypeAliases || (delayedTypeAliases = [])).push(node); } } function bindPropertyWorker(node) { - return bindPropertyOrMethodOrAccessor(node, 4 /* Property */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */); + return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 16777216 : 0), 0); } function bindAnonymousTypeWorker(node) { - return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type" /* Type */); + return bindAnonymousDeclaration(node, 2048, "__type"); } function bindSourceFileIfExternalModule() { setExportContextFlag(file); @@ -27399,36 +22239,30 @@ var ts; } else if (ts.isJsonSourceFile(file)) { bindSourceFileAsExternalModule(); - // Create symbol equivalent for the module.exports = {} var originalSymbol = file.symbol; - declareSymbol(file.symbol.exports, file.symbol, file, 4 /* Property */, 67108863 /* All */); + declareSymbol(file.symbol.exports, file.symbol, file, 4, 67108863); file.symbol = originalSymbol; } } function bindSourceFileAsExternalModule() { - bindAnonymousDeclaration(file, 512 /* ValueModule */, "\"" + ts.removeFileExtension(file.fileName) + "\""); + bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { if (!container.symbol || !container.symbol.exports) { - // Export assignment in some sort of block construct - bindAnonymousDeclaration(node, 2097152 /* Alias */, getDeclarationName(node)); + bindAnonymousDeclaration(node, 2097152, getDeclarationName(node)); } else { - var flags = node.kind === 249 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node) - // An export default clause with an EntityNameExpression or a class expression exports all meanings of that identifier or expression; - ? 2097152 /* Alias */ - // An export default clause with any other expression exports a value - : 4 /* Property */; - // If there is an `export default x;` alias declaration, can't `export default` anything else. - // (In contrast, you can still have `export default function f() {}` and `export default interface I {}`.) - declareSymbol(container.symbol.exports, container.symbol, node, flags, 67108863 /* All */); + var flags = node.kind === 249 && ts.exportAssignmentIsAlias(node) + ? 2097152 + : 4; + declareSymbol(container.symbol.exports, container.symbol, node, flags, 67108863); } } function bindNamespaceExportDeclaration(node) { if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); } - if (node.parent.kind !== 274 /* SourceFile */) { + if (node.parent.kind !== 274) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } @@ -27444,21 +22278,19 @@ var ts; } } file.symbol.globalExports = file.symbol.globalExports || ts.createSymbolTable(); - declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152, 2097152); } function bindExportDeclaration(node) { if (!container.symbol || !container.symbol.exports) { - // Export * in some sort of block construct - bindAnonymousDeclaration(node, 8388608 /* ExportStar */, getDeclarationName(node)); + bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); } else if (!node.exportClause) { - // All export * declarations are collected in an __export symbol - declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* ExportStar */, 0 /* None */); + declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 0); } } function bindImportClause(node) { if (node.name) { - declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + declareSymbolAndAddToSymbolTable(node, 2097152, 2097152); } } function setCommonJsModuleIndicator(node) { @@ -27470,86 +22302,71 @@ var ts; } } function bindExportsPropertyAssignment(node) { - // When we create a property via 'exports.foo = bar', the 'exports.foo' property access - // expression is the declaration setCommonJsModuleIndicator(node); var lhs = node.left; - var symbol = forEachIdentifierInEntityName(lhs.expression, /*parent*/ undefined, function (id, symbol) { + var symbol = forEachIdentifierInEntityName(lhs.expression, undefined, function (id, symbol) { if (symbol) { - addDeclarationToSymbol(symbol, id, 1536 /* Module */ | 67108864 /* JSContainer */); + addDeclarationToSymbol(symbol, id, 1536 | 67108864); } return symbol; }); if (symbol) { var flags = ts.isClassExpression(node.right) ? - 4 /* Property */ | 1048576 /* ExportValue */ | 32 /* Class */ : - 4 /* Property */ | 1048576 /* ExportValue */; - declareSymbol(symbol.exports, symbol, lhs, flags, 0 /* None */); + 4 | 1048576 | 32 : + 4 | 1048576; + declareSymbol(symbol.exports, symbol, lhs, flags, 0); } } function bindModuleExportsAssignment(node) { - // A common practice in node modules is to set 'export = module.exports = {}', this ensures that 'exports' - // is still pointing to 'module.exports'. - // We do not want to consider this as 'export=' since a module can have only one of these. - // Similarly we do not want to treat 'module.exports = exports' as an 'export='. var assignedExpression = ts.getRightMostAssignedExpression(node.right); if (ts.isEmptyObjectLiteral(assignedExpression) || container === file && isExportsOrModuleExportsOrAlias(file, assignedExpression)) { - // Mark it as a module in case there are no other exports in the file setCommonJsModuleIndicator(node); return; } - // 'module.exports = expr' assignment setCommonJsModuleIndicator(node); var flags = ts.exportAssignmentIsAlias(node) - ? 2097152 /* Alias */ - : 4 /* Property */ | 1048576 /* ExportValue */ | 512 /* ValueModule */; - declareSymbol(file.symbol.exports, file.symbol, node, flags, 0 /* None */); + ? 2097152 + : 4 | 1048576 | 512; + declareSymbol(file.symbol.exports, file.symbol, node, flags, 0); } function bindThisPropertyAssignment(node) { ts.Debug.assert(ts.isInJavaScriptFile(node)); - var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false); + var thisContainer = ts.getThisContainer(node, false); switch (thisContainer.kind) { - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: + case 234: + case 192: var constructorSymbol = thisContainer.symbol; - // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression. - if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 58 /* EqualsToken */) { + if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 58) { var l = thisContainer.parent.left; if (ts.isPropertyAccessEntityNameExpression(l) && ts.isPrototypeAccess(l.expression)) { constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer); } } if (constructorSymbol) { - // Declare a 'member' if the container is an ES5 class or ES6 constructor constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable(); - // It's acceptable for multiple 'this' assignments of the same identifier to occur - declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */, 0 /* PropertyExcludes */ & ~4 /* Property */); + declareSymbol(constructorSymbol.members, constructorSymbol, node, 4, 0 & ~4); } break; - case 155 /* Constructor */: - case 152 /* PropertyDeclaration */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - // this.foo assignment in a JavaScript class - // Bind this property to the containing class + case 155: + case 152: + case 154: + case 156: + case 157: var containingClass = thisContainer.parent; - var symbolTable = ts.hasModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members; - declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true); + var symbolTable = ts.hasModifier(thisContainer, 32) ? containingClass.symbol.exports : containingClass.symbol.members; + declareSymbol(symbolTable, containingClass.symbol, node, 4, 0, true); break; - case 274 /* SourceFile */: - // this.foo assignment in a source file - // Do not bind. It would be nice to support this someday though. + case 274: break; default: ts.Debug.fail(ts.Debug.showSyntaxKind(thisContainer)); } } function bindSpecialPropertyDeclaration(node) { - if (node.expression.kind === 99 /* ThisKeyword */) { + if (node.expression.kind === 99) { bindThisPropertyAssignment(node); } - else if (ts.isPropertyAccessEntityNameExpression(node) && node.parent.parent.kind === 274 /* SourceFile */) { + else if (ts.isPropertyAccessEntityNameExpression(node) && node.parent.parent.kind === 274) { if (ts.isPrototypeAccess(node.expression)) { bindPrototypePropertyAssignment(node, node.parent); } @@ -27558,61 +22375,44 @@ var ts; } } } - /** For `x.prototype = { p, ... }`, declare members p,... if `x` is function/class/{}, or not declared. */ function bindPrototypeAssignment(node) { node.left.parent = node; node.right.parent = node; var lhs = node.left; - bindPropertyAssignment(lhs, lhs, /*isPrototypeProperty*/ false); + bindPropertyAssignment(lhs, lhs, false); } - /** - * For `x.prototype.y = z`, declare a member `y` on `x` if `x` is a function or class, or not declared. - * Note that jsdoc preceding an ExpressionStatement like `x.prototype.y;` is also treated as a declaration. - */ function bindPrototypePropertyAssignment(lhs, parent) { - // Look up the function in the local scope, since prototype assignments should - // follow the function declaration var classPrototype = lhs.expression; var constructorFunction = classPrototype.expression; - // Fix up parent pointers since we're going to use these nodes before we bind into them lhs.parent = parent; constructorFunction.parent = classPrototype; classPrototype.parent = lhs; - bindPropertyAssignment(constructorFunction, lhs, /*isPrototypeProperty*/ true); + bindPropertyAssignment(constructorFunction, lhs, true); } function bindSpecialPropertyAssignment(node) { var lhs = node.left; - // Fix up parent pointers since we're going to use these nodes before we bind into them node.left.parent = node; node.right.parent = node; if (ts.isIdentifier(lhs.expression) && container === file && isNameOfExportsOrModuleExportsAliasDeclaration(file, lhs.expression)) { - // This can be an alias for the 'exports' or 'module.exports' names, e.g. - // var util = module.exports; - // util.property = function ... bindExportsPropertyAssignment(node); } else { bindStaticPropertyAssignment(lhs); } } - /** - * For nodes like `x.y = z`, declare a member 'y' on 'x' if x is a function (or IIFE) or class or {}, or not declared. - * Also works for expression statements preceded by JSDoc, like / ** @type number * / x.y; - */ function bindStaticPropertyAssignment(node) { node.expression.parent = node; - bindPropertyAssignment(node.expression, node, /*isPrototypeProperty*/ false); + bindPropertyAssignment(node.expression, node, false); } function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty) { var namespaceSymbol = lookupSymbolForPropertyAccess(name); var isToplevelNamespaceableInitializer = ts.isBinaryExpression(propertyAccess.parent) - ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 274 /* SourceFile */ && + ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 274 && !!ts.getJavascriptInitializer(ts.getInitializerOfBinaryExpression(propertyAccess.parent), ts.isPrototypeAccess(propertyAccess.parent.left)) - : propertyAccess.parent.parent.kind === 274 /* SourceFile */; - if (!isPrototypeProperty && (!namespaceSymbol || !(namespaceSymbol.flags & 1920 /* Namespace */)) && isToplevelNamespaceableInitializer) { - // make symbols or add declarations for intermediate containers - var flags_1 = 1536 /* Module */ | 67108864 /* JSContainer */; - var excludeFlags_1 = 67215503 /* ValueModuleExcludes */ & ~67108864 /* JSContainer */; + : propertyAccess.parent.parent.kind === 274; + if (!isPrototypeProperty && (!namespaceSymbol || !(namespaceSymbol.flags & 1920)) && isToplevelNamespaceableInitializer) { + var flags_1 = 1536 | 67108864; + var excludeFlags_1 = 67215503 & ~67108864; namespaceSymbol = forEachIdentifierInEntityName(propertyAccess.expression, namespaceSymbol, function (id, symbol, parent) { if (symbol) { addDeclarationToSymbol(symbol, id, flags_1); @@ -27626,29 +22426,17 @@ var ts; if (!namespaceSymbol || !isJavascriptContainer(namespaceSymbol)) { return; } - // Set up the members collection if it doesn't exist already var symbolTable = isPrototypeProperty ? (namespaceSymbol.members || (namespaceSymbol.members = ts.createSymbolTable())) : (namespaceSymbol.exports || (namespaceSymbol.exports = ts.createSymbolTable())); - // Declare the method/property - var jsContainerFlag = isToplevelNamespaceableInitializer ? 67108864 /* JSContainer */ : 0; + var jsContainerFlag = isToplevelNamespaceableInitializer ? 67108864 : 0; var isMethod = ts.isFunctionLikeDeclaration(ts.getAssignedJavascriptInitializer(propertyAccess)); - var symbolFlags = (isMethod ? 8192 /* Method */ : 4 /* Property */) | jsContainerFlag; - var symbolExcludes = (isMethod ? 67208127 /* MethodExcludes */ : 0 /* PropertyExcludes */) & ~jsContainerFlag; + var symbolFlags = (isMethod ? 8192 : 4) | jsContainerFlag; + var symbolExcludes = (isMethod ? 67208127 : 0) & ~jsContainerFlag; declareSymbol(symbolTable, namespaceSymbol, propertyAccess, symbolFlags, symbolExcludes); } - /** - * Javascript containers are: - * - Functions - * - classes - * - namespaces - * - variables initialized with function expressions - * - with class expressions - * - with empty object literals - * - with non-empty object literals if assigned to the prototype property - */ function isJavascriptContainer(symbol) { - if (symbol.flags & (16 /* Function */ | 32 /* Class */ | 1024 /* NamespaceModule */)) { + if (symbol.flags & (16 | 32 | 1024)) { return true; } var node = symbol.valueDeclaration; @@ -27659,7 +22447,7 @@ var ts; undefined; if (init) { var isPrototypeAssignment = ts.isPrototypeAccess(ts.isVariableDeclaration(node) ? node.name : ts.isBinaryExpression(node) ? node.left : node); - return !!ts.getJavascriptInitializer(ts.isBinaryExpression(init) && init.operatorToken.kind === 54 /* BarBarToken */ ? init.right : init, isPrototypeAssignment); + return !!ts.getJavascriptInitializer(ts.isBinaryExpression(init) && init.operatorToken.kind === 54 ? init.right : init, isPrototypeAssignment); } return false; } @@ -27694,35 +22482,23 @@ var ts; } } function bindCallExpression(node) { - // We're only inspecting call expressions to detect CommonJS modules, so we can skip - // this check if we've already seen the module indicator - if (!file.commonJsModuleIndicator && ts.isRequireCall(node, /*checkArgumentIsStringLiteralLike*/ false)) { + if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) { setCommonJsModuleIndicator(node); } } function bindClassLikeDeclaration(node) { - if (node.kind === 235 /* ClassDeclaration */) { - bindBlockScopedDeclaration(node, 32 /* Class */, 68008383 /* ClassExcludes */); + if (node.kind === 235) { + bindBlockScopedDeclaration(node, 32, 68008383); } else { - var bindingName = node.name ? node.name.escapedText : "__class" /* Class */; - bindAnonymousDeclaration(node, 32 /* Class */, bindingName); - // Add name of class expression into the map for semantic classifier + var bindingName = node.name ? node.name.escapedText : "__class"; + bindAnonymousDeclaration(node, 32, bindingName); if (node.name) { classifiableNames.set(node.name.escapedText, true); } } var symbol = node.symbol; - // TypeScript 1.0 spec (April 2014): 8.4 - // Every class automatically contains a static property member named 'prototype', the - // type of which is an instantiation of the class type with type Any supplied as a type - // argument for each type parameter. It is an error to explicitly declare a static - // property member with the name 'prototype'. - // - // Note: we check for this here because this class may be merging into a module. The - // module might have an exported variable called 'prototype'. We can't allow that as - // that would clash with the built-in 'prototype' for the class. - var prototypeSymbol = createSymbol(4 /* Property */ | 4194304 /* Prototype */, "prototype"); + var prototypeSymbol = createSymbol(4 | 4194304, "prototype"); var symbolExport = symbol.exports.get(prototypeSymbol.escapedName); if (symbolExport) { if (node.name) { @@ -27735,8 +22511,8 @@ var ts; } function bindEnumDeclaration(node) { return ts.isConst(node) - ? bindBlockScopedDeclaration(node, 128 /* ConstEnum */, 68008831 /* ConstEnumExcludes */) - : bindBlockScopedDeclaration(node, 256 /* RegularEnum */, 68008191 /* RegularEnumExcludes */); + ? bindBlockScopedDeclaration(node, 128, 68008831) + : bindBlockScopedDeclaration(node, 256, 68008191); } function bindVariableDeclarationOrBindingElement(node) { if (inStrictMode) { @@ -27747,81 +22523,68 @@ var ts; bindBlockScopedVariableDeclaration(node); } else if (ts.isParameterDeclaration(node)) { - // It is safe to walk up parent chain to find whether the node is a destructuring parameter declaration - // because its parent chain has already been set up, since parents are set before descending into children. - // - // If node is a binding element in parameter declaration, we need to use ParameterExcludes. - // Using ParameterExcludes flag allows the compiler to report an error on duplicate identifiers in Parameter Declaration - // For example: - // function foo([a,a]) {} // Duplicate Identifier error - // function bar(a,a) {} // Duplicate Identifier error, parameter declaration in this case is handled in bindParameter - // // which correctly set excluded symbols - declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 67216319 /* ParameterExcludes */); + declareSymbolAndAddToSymbolTable(node, 1, 67216319); } else { - declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 67216318 /* FunctionScopedVariableExcludes */); + declareSymbolAndAddToSymbolTable(node, 1, 67216318); } } } function bindParameter(node) { - if (node.kind === 293 /* JSDocParameterTag */ && container.kind !== 288 /* JSDocSignature */) { + if (node.kind === 293 && container.kind !== 288) { return; } - if (inStrictMode && !(node.flags & 4194304 /* Ambient */)) { - // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a - // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) + if (inStrictMode && !(node.flags & 4194304)) { checkStrictModeEvalOrArguments(node, node.name); } if (ts.isBindingPattern(node.name)) { - bindAnonymousDeclaration(node, 1 /* FunctionScopedVariable */, "__" + node.parent.parameters.indexOf(node)); + bindAnonymousDeclaration(node, 1, "__" + node.parent.parameters.indexOf(node)); } else { - declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 67216319 /* ParameterExcludes */); + declareSymbolAndAddToSymbolTable(node, 1, 67216319); } - // If this is a property-parameter, then also declare the property symbol into the - // containing class. if (ts.isParameterPropertyDeclaration(node)) { var classDeclaration = node.parent.parent; - declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 /* Property */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */); + declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 | (node.questionToken ? 16777216 : 0), 0); } } function bindFunctionDeclaration(node) { - if (!file.isDeclarationFile && !(node.flags & 4194304 /* Ambient */)) { + if (!file.isDeclarationFile && !(node.flags & 4194304)) { if (ts.isAsyncFunction(node)) { - emitFlags |= 1024 /* HasAsyncFunctions */; + emitFlags |= 1024; } } checkStrictModeFunctionName(node); if (inStrictMode) { checkStrictModeFunctionDeclaration(node); - bindBlockScopedDeclaration(node, 16 /* Function */, 67215791 /* FunctionExcludes */); + bindBlockScopedDeclaration(node, 16, 67215791); } else { - declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 67215791 /* FunctionExcludes */); + declareSymbolAndAddToSymbolTable(node, 16, 67215791); } } function bindFunctionExpression(node) { - if (!file.isDeclarationFile && !(node.flags & 4194304 /* Ambient */)) { + if (!file.isDeclarationFile && !(node.flags & 4194304)) { if (ts.isAsyncFunction(node)) { - emitFlags |= 1024 /* HasAsyncFunctions */; + emitFlags |= 1024; } } if (currentFlow) { node.flowNode = currentFlow; } checkStrictModeFunctionName(node); - var bindingName = node.name ? node.name.escapedText : "__function" /* Function */; - return bindAnonymousDeclaration(node, 16 /* Function */, bindingName); + var bindingName = node.name ? node.name.escapedText : "__function"; + return bindAnonymousDeclaration(node, 16, bindingName); } function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) { - if (!file.isDeclarationFile && !(node.flags & 4194304 /* Ambient */) && ts.isAsyncFunction(node)) { - emitFlags |= 1024 /* HasAsyncFunctions */; + if (!file.isDeclarationFile && !(node.flags & 4194304) && ts.isAsyncFunction(node)) { + emitFlags |= 1024; } if (currentFlow && ts.isObjectLiteralOrClassExpressionMethod(node)) { node.flowNode = currentFlow; } return ts.hasDynamicName(node) - ? bindAnonymousDeclaration(node, symbolFlags, "__computed" /* Computed */) + ? bindAnonymousDeclaration(node, symbolFlags, "__computed") : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } function getInferTypeContainer(node) { @@ -27830,68 +22593,53 @@ var ts; } function bindTypeParameter(node) { if (ts.isJSDocTemplateTag(node.parent)) { - var container_1 = ts.find(node.parent.parent.tags, ts.isJSDocTypeAlias) || ts.getHostSignatureFromJSDoc(node.parent); // TODO: GH#18217 + var container_1 = ts.find(node.parent.parent.tags, ts.isJSDocTypeAlias) || ts.getHostSignatureFromJSDoc(node.parent); if (container_1) { if (!container_1.locals) { container_1.locals = ts.createSymbolTable(); } - declareSymbol(container_1.locals, /*parent*/ undefined, node, 262144 /* TypeParameter */, 67639784 /* TypeParameterExcludes */); + declareSymbol(container_1.locals, undefined, node, 262144, 67639784); } else { - declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 67639784 /* TypeParameterExcludes */); + declareSymbolAndAddToSymbolTable(node, 262144, 67639784); } } - else if (node.parent.kind === 172 /* InferType */) { + else if (node.parent.kind === 172) { var container_2 = getInferTypeContainer(node.parent); if (container_2) { if (!container_2.locals) { container_2.locals = ts.createSymbolTable(); } - declareSymbol(container_2.locals, /*parent*/ undefined, node, 262144 /* TypeParameter */, 67639784 /* TypeParameterExcludes */); + declareSymbol(container_2.locals, undefined, node, 262144, 67639784); } else { - bindAnonymousDeclaration(node, 262144 /* TypeParameter */, getDeclarationName(node)); // TODO: GH#18217 + bindAnonymousDeclaration(node, 262144, getDeclarationName(node)); } } else { - declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 67639784 /* TypeParameterExcludes */); + declareSymbolAndAddToSymbolTable(node, 262144, 67639784); } } - // reachability checks function shouldReportErrorOnModuleDeclaration(node) { var instanceState = getModuleInstanceState(node); - return instanceState === 1 /* Instantiated */ || (instanceState === 2 /* ConstEnumOnly */ && !!options.preserveConstEnums); + return instanceState === 1 || (instanceState === 2 && !!options.preserveConstEnums); } function checkUnreachable(node) { - if (!(currentFlow.flags & 1 /* Unreachable */)) { + if (!(currentFlow.flags & 1)) { return false; } if (currentFlow === unreachableFlow) { - var reportError = - // report error on all statements except empty ones - (ts.isStatementButNotDeclaration(node) && node.kind !== 215 /* EmptyStatement */) || - // report error on class declarations - node.kind === 235 /* ClassDeclaration */ || - // report error on instantiated modules or const-enums only modules if preserveConstEnums is set - (node.kind === 239 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)) || - // report error on regular enums and const enums if preserveConstEnums is set - (node.kind === 238 /* EnumDeclaration */ && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + var reportError = (ts.isStatementButNotDeclaration(node) && node.kind !== 215) || + node.kind === 235 || + (node.kind === 239 && shouldReportErrorOnModuleDeclaration(node)) || + (node.kind === 238 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); if (reportError) { currentFlow = reportedUnreachableFlow; if (!options.allowUnreachableCode) { - // unreachable code is reported if - // - user has explicitly asked about it AND - // - statement is in not ambient context (statements in ambient context is already an error - // so we should not report extras) AND - // - node is not variable statement OR - // - node is block scoped variable statement OR - // - node is not block scoped variable statement and at least one variable declaration has initializer - // Rationale: we don't want to report errors on non-initialized var's since they are hoisted - // On the other side we do want to report errors on non-initialized 'lets' because of TDZ var isError = ts.unreachableCodeIsError(options) && - !(node.flags & 4194304 /* Ambient */) && + !(node.flags & 4194304) && (!ts.isVariableStatement(node) || - !!(ts.getCombinedNodeFlags(node.declarationList) & 3 /* BlockScoped */) || + !!(ts.getCombinedNodeFlags(node.declarationList) & 3) || node.declarationList.declarations.some(function (d) { return !!d.initializer; })); errorOrSuggestionOnFirstToken(isError, node, ts.Diagnostics.Unreachable_code_detected); } @@ -27900,7 +22648,6 @@ var ts; return true; } } - /* @internal */ function isExportsOrModuleExportsOrAlias(sourceFile, node) { return ts.isExportsIdentifier(node) || ts.isModuleExportsPropertyAccessExpression(node) || @@ -27914,7 +22661,7 @@ var ts; } function isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node) { return isExportsOrModuleExportsOrAlias(sourceFile, node) || - (ts.isAssignmentExpression(node, /*excludeCompoundAssignment*/ true) && (isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.left) || isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.right))); + (ts.isAssignmentExpression(node, true) && (isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.left) || isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.right))); } function lookupSymbolForNameWorker(container, name) { var local = container.locals && container.locals.get(name); @@ -27923,67 +22670,61 @@ var ts; } return container.symbol && container.symbol.exports && container.symbol.exports.get(name); } - /** - * Computes the transform flags for a node, given the transform flags of its subtree - * - * @param node The node to analyze - * @param subtreeFlags Transform flags computed for this node's subtree - */ function computeTransformFlagsForNode(node, subtreeFlags) { var kind = node.kind; switch (kind) { - case 187 /* CallExpression */: + case 187: return computeCallExpression(node, subtreeFlags); - case 188 /* NewExpression */: + case 188: return computeNewExpression(node, subtreeFlags); - case 239 /* ModuleDeclaration */: + case 239: return computeModuleDeclaration(node, subtreeFlags); - case 191 /* ParenthesizedExpression */: + case 191: return computeParenthesizedExpression(node, subtreeFlags); - case 200 /* BinaryExpression */: + case 200: return computeBinaryExpression(node, subtreeFlags); - case 216 /* ExpressionStatement */: + case 216: return computeExpressionStatement(node, subtreeFlags); - case 149 /* Parameter */: + case 149: return computeParameter(node, subtreeFlags); - case 193 /* ArrowFunction */: + case 193: return computeArrowFunction(node, subtreeFlags); - case 192 /* FunctionExpression */: + case 192: return computeFunctionExpression(node, subtreeFlags); - case 234 /* FunctionDeclaration */: + case 234: return computeFunctionDeclaration(node, subtreeFlags); - case 232 /* VariableDeclaration */: + case 232: return computeVariableDeclaration(node, subtreeFlags); - case 233 /* VariableDeclarationList */: + case 233: return computeVariableDeclarationList(node, subtreeFlags); - case 214 /* VariableStatement */: + case 214: return computeVariableStatement(node, subtreeFlags); - case 228 /* LabeledStatement */: + case 228: return computeLabeledStatement(node, subtreeFlags); - case 235 /* ClassDeclaration */: + case 235: return computeClassDeclaration(node, subtreeFlags); - case 205 /* ClassExpression */: + case 205: return computeClassExpression(node, subtreeFlags); - case 268 /* HeritageClause */: + case 268: return computeHeritageClause(node, subtreeFlags); - case 269 /* CatchClause */: + case 269: return computeCatchClause(node, subtreeFlags); - case 207 /* ExpressionWithTypeArguments */: + case 207: return computeExpressionWithTypeArguments(node, subtreeFlags); - case 155 /* Constructor */: + case 155: return computeConstructor(node, subtreeFlags); - case 152 /* PropertyDeclaration */: + case 152: return computePropertyDeclaration(node, subtreeFlags); - case 154 /* MethodDeclaration */: + case 154: return computeMethod(node, subtreeFlags); - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return computeAccessor(node, subtreeFlags); - case 243 /* ImportEqualsDeclaration */: + case 243: return computeImportEquals(node, subtreeFlags); - case 185 /* PropertyAccessExpression */: + case 185: return computePropertyAccess(node, subtreeFlags); - case 186 /* ElementAccessExpression */: + case 186: return computeElementAccess(node, subtreeFlags); default: return computeOther(node, kind, subtreeFlags); @@ -27994,790 +22735,645 @@ var ts; var transformFlags = subtreeFlags; var expression = node.expression; if (node.typeArguments) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - if (subtreeFlags & 524288 /* ContainsSpread */ - || (expression.transformFlags & (134217728 /* Super */ | 268435456 /* ContainsSuper */))) { - // If the this node contains a SpreadExpression, or is a super call, then it is an ES6 - // node. - transformFlags |= 192 /* AssertES2015 */; - // super property or element accesses could be inside lambdas, etc, and need a captured `this`, - // while super keyword for super calls (indicated by TransformFlags.Super) does not (since it can only be top-level in a constructor) - if (expression.transformFlags & 268435456 /* ContainsSuper */) { - transformFlags |= 16384 /* ContainsLexicalThis */; + if (subtreeFlags & 524288 + || (expression.transformFlags & (134217728 | 268435456))) { + transformFlags |= 192; + if (expression.transformFlags & 268435456) { + transformFlags |= 16384; } } - if (expression.kind === 91 /* ImportKeyword */) { - transformFlags |= 67108864 /* ContainsDynamicImport */; - // A dynamic 'import()' call that contains a lexical 'this' will - // require a captured 'this' when emitting down-level. - if (subtreeFlags & 16384 /* ContainsLexicalThis */) { - transformFlags |= 32768 /* ContainsCapturedLexicalThis */; + if (expression.kind === 91) { + transformFlags |= 67108864; + if (subtreeFlags & 16384) { + transformFlags |= 32768; } } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~940049729 /* ArrayLiteralOrCallOrNewExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~940049729; } function computeNewExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; if (node.typeArguments) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - if (subtreeFlags & 524288 /* ContainsSpread */) { - // If the this node contains a SpreadElementExpression then it is an ES6 - // node. - transformFlags |= 192 /* AssertES2015 */; + if (subtreeFlags & 524288) { + transformFlags |= 192; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~940049729 /* ArrayLiteralOrCallOrNewExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~940049729; } function computeBinaryExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; var operatorTokenKind = node.operatorToken.kind; var leftKind = node.left.kind; - if (operatorTokenKind === 58 /* EqualsToken */ && leftKind === 184 /* ObjectLiteralExpression */) { - // Destructuring object assignments with are ES2015 syntax - // and possibly ESNext if they contain rest - transformFlags |= 8 /* AssertESNext */ | 192 /* AssertES2015 */ | 3072 /* AssertDestructuringAssignment */; + if (operatorTokenKind === 58 && leftKind === 184) { + transformFlags |= 8 | 192 | 3072; } - else if (operatorTokenKind === 58 /* EqualsToken */ && leftKind === 183 /* ArrayLiteralExpression */) { - // Destructuring assignments are ES2015 syntax. - transformFlags |= 192 /* AssertES2015 */ | 3072 /* AssertDestructuringAssignment */; + else if (operatorTokenKind === 58 && leftKind === 183) { + transformFlags |= 192 | 3072; } - else if (operatorTokenKind === 40 /* AsteriskAsteriskToken */ - || operatorTokenKind === 62 /* AsteriskAsteriskEqualsToken */) { - // Exponentiation is ES2016 syntax. - transformFlags |= 32 /* AssertES2016 */; + else if (operatorTokenKind === 40 + || operatorTokenKind === 62) { + transformFlags |= 32; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeParameter(node, subtreeFlags) { var transformFlags = subtreeFlags; var name = node.name; var initializer = node.initializer; var dotDotDotToken = node.dotDotDotToken; - // The '?' token, type annotations, decorators, and 'this' parameters are TypeSCript - // syntax. if (node.questionToken || node.type - || subtreeFlags & 4096 /* ContainsDecorators */ + || subtreeFlags & 4096 || ts.isThisIdentifier(name)) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // If a parameter has an accessibility modifier, then it is TypeScript syntax. - if (ts.hasModifier(node, 92 /* ParameterPropertyModifier */)) { - transformFlags |= 3 /* AssertTypeScript */ | 262144 /* ContainsParameterPropertyAssignments */; + if (ts.hasModifier(node, 92)) { + transformFlags |= 3 | 262144; } - // parameters with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // 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 & 8388608 /* ContainsBindingPattern */ || initializer || dotDotDotToken) { - transformFlags |= 192 /* AssertES2015 */ | 131072 /* ContainsDefaultValueAssignments */; + if (subtreeFlags & 8388608 || initializer || dotDotDotToken) { + transformFlags |= 192 | 131072; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* ParameterExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeParenthesizedExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; var expression = node.expression; var expressionKind = expression.kind; var expressionTransformFlags = expression.transformFlags; - // If the node is synthesized, it means the emitter put the parentheses there, - // not the user. If we didn't want them, the emitter would not have put them - // there. - if (expressionKind === 208 /* AsExpression */ - || expressionKind === 190 /* TypeAssertionExpression */) { - transformFlags |= 3 /* AssertTypeScript */; + if (expressionKind === 208 + || expressionKind === 190) { + transformFlags |= 3; } - // If the expression of a ParenthesizedExpression is a destructuring assignment, - // then the ParenthesizedExpression is a destructuring assignment. - if (expressionTransformFlags & 1024 /* DestructuringAssignment */) { - transformFlags |= 1024 /* DestructuringAssignment */; + if (expressionTransformFlags & 1024) { + transformFlags |= 1024; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~536872257 /* OuterExpressionExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~536872257; } function computeClassDeclaration(node, subtreeFlags) { var transformFlags; - if (ts.hasModifier(node, 2 /* Ambient */)) { - // An ambient declaration is TypeScript syntax. - transformFlags = 3 /* AssertTypeScript */; + if (ts.hasModifier(node, 2)) { + transformFlags = 3; } else { - // A ClassDeclaration is ES6 syntax. - transformFlags = subtreeFlags | 192 /* AssertES2015 */; - // A class with a parameter property assignment, property initializer, computed property name, or decorator is - // TypeScript syntax. - // An exported declaration may be TypeScript syntax, but is handled by the visitor - // for a namespace declaration. - if ((subtreeFlags & 274432 /* TypeScriptClassSyntaxMask */) + transformFlags = subtreeFlags | 192; + if ((subtreeFlags & 274432) || node.typeParameters) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) { - // A computed property name containing `this` might need to be rewritten, - // so propagate the ContainsLexicalThis flag upward. - transformFlags |= 16384 /* ContainsLexicalThis */; + if (subtreeFlags & 65536) { + transformFlags |= 16384; } } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~942011713 /* ClassExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~942011713; } function computeClassExpression(node, subtreeFlags) { - // A ClassExpression is ES6 syntax. - var transformFlags = subtreeFlags | 192 /* AssertES2015 */; - // A class with a parameter property assignment, property initializer, or decorator is - // TypeScript syntax. - if (subtreeFlags & 274432 /* TypeScriptClassSyntaxMask */ + var transformFlags = subtreeFlags | 192; + if (subtreeFlags & 274432 || node.typeParameters) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) { - // A computed property name containing `this` might need to be rewritten, - // so propagate the ContainsLexicalThis flag upward. - transformFlags |= 16384 /* ContainsLexicalThis */; + if (subtreeFlags & 65536) { + transformFlags |= 16384; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~942011713 /* ClassExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~942011713; } function computeHeritageClause(node, subtreeFlags) { var transformFlags = subtreeFlags; switch (node.token) { - case 85 /* ExtendsKeyword */: - // An `extends` HeritageClause is ES6 syntax. - transformFlags |= 192 /* AssertES2015 */; + case 85: + transformFlags |= 192; break; - case 108 /* ImplementsKeyword */: - // An `implements` HeritageClause is TypeScript syntax. - transformFlags |= 3 /* AssertTypeScript */; + case 108: + transformFlags |= 3; break; default: ts.Debug.fail("Unexpected token for heritage clause"); break; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeCatchClause(node, subtreeFlags) { var transformFlags = subtreeFlags; if (!node.variableDeclaration) { - transformFlags |= 8 /* AssertESNext */; + transformFlags |= 8; } else if (ts.isBindingPattern(node.variableDeclaration.name)) { - transformFlags |= 192 /* AssertES2015 */; + transformFlags |= 192; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~940574017 /* CatchClauseExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~940574017; } function computeExpressionWithTypeArguments(node, subtreeFlags) { - // An ExpressionWithTypeArguments is ES6 syntax, as it is used in the - // extends clause of a class. - var transformFlags = subtreeFlags | 192 /* AssertES2015 */; - // If an ExpressionWithTypeArguments contains type arguments, then it - // is TypeScript syntax. + var transformFlags = subtreeFlags | 192; if (node.typeArguments) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeConstructor(node, subtreeFlags) { var transformFlags = subtreeFlags; - // TypeScript-specific modifiers and overloads are TypeScript syntax - if (ts.hasModifier(node, 2270 /* TypeScriptModifier */) + if (ts.hasModifier(node, 2270) || !node.body) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // function declarations with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003668801 /* ConstructorExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003668801; } function computeMethod(node, subtreeFlags) { - // A MethodDeclaration is ES6 syntax. - var transformFlags = subtreeFlags | 192 /* AssertES2015 */; - // Decorators, TypeScript-specific modifiers, type parameters, type annotations, and - // overloads are TypeScript syntax. + var transformFlags = subtreeFlags | 192; if (node.decorators - || ts.hasModifier(node, 2270 /* TypeScriptModifier */) + || ts.hasModifier(node, 2270) || node.typeParameters || node.type - || (node.name && ts.isComputedPropertyName(node.name)) // While computed method names aren't typescript, the TS transform must visit them to emit property declarations correctly + || (node.name && ts.isComputedPropertyName(node.name)) || !node.body) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // function declarations with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // An async method declaration is ES2017 syntax. - if (ts.hasModifier(node, 256 /* Async */)) { - transformFlags |= node.asteriskToken ? 8 /* AssertESNext */ : 16 /* AssertES2017 */; + if (ts.hasModifier(node, 256)) { + transformFlags |= node.asteriskToken ? 8 : 16; } if (node.asteriskToken) { - transformFlags |= 768 /* AssertGenerator */; + transformFlags |= 768; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003668801 /* MethodOrAccessorExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003668801; } function computeAccessor(node, subtreeFlags) { var transformFlags = subtreeFlags; - // Decorators, TypeScript-specific modifiers, type annotations, and overloads are - // TypeScript syntax. if (node.decorators - || ts.hasModifier(node, 2270 /* TypeScriptModifier */) + || ts.hasModifier(node, 2270) || node.type - || (node.name && ts.isComputedPropertyName(node.name)) // While computed accessor names aren't typescript, the TS transform must visit them to emit property declarations correctly + || (node.name && ts.isComputedPropertyName(node.name)) || !node.body) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // function declarations with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003668801 /* MethodOrAccessorExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003668801; } function computePropertyDeclaration(node, subtreeFlags) { - // A PropertyDeclaration is TypeScript syntax. - var transformFlags = subtreeFlags | 3 /* AssertTypeScript */; - // If the PropertyDeclaration has an initializer or a computed name, we need to inform its ancestor - // so that it handle the transformation. + var transformFlags = subtreeFlags | 3; if (node.initializer || ts.isComputedPropertyName(node.name)) { - transformFlags |= 8192 /* ContainsPropertyInitializer */; + transformFlags |= 8192; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeFunctionDeclaration(node, subtreeFlags) { var transformFlags; var modifierFlags = ts.getModifierFlags(node); var body = node.body; - if (!body || (modifierFlags & 2 /* Ambient */)) { - // An ambient declaration is TypeScript syntax. - // A FunctionDeclaration without a body is an overload and is TypeScript syntax. - transformFlags = 3 /* AssertTypeScript */; + if (!body || (modifierFlags & 2)) { + transformFlags = 3; } else { - transformFlags = subtreeFlags | 33554432 /* ContainsHoistedDeclarationOrCompletion */; - // TypeScript-specific modifiers, type parameters, and type annotations are TypeScript - // syntax. - if (modifierFlags & 2270 /* TypeScriptModifier */ + transformFlags = subtreeFlags | 33554432; + if (modifierFlags & 2270 || node.typeParameters || node.type) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // An async function declaration is ES2017 syntax. - if (modifierFlags & 256 /* Async */) { - transformFlags |= node.asteriskToken ? 8 /* AssertESNext */ : 16 /* AssertES2017 */; + if (modifierFlags & 256) { + transformFlags |= node.asteriskToken ? 8 : 16; } - // function declarations with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // 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 & 163840 /* ES2015FunctionSyntaxMask */) { - transformFlags |= 192 /* AssertES2015 */; + if (subtreeFlags & 163840) { + transformFlags |= 192; } - // 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) { - transformFlags |= 768 /* AssertGenerator */; + transformFlags |= 768; } } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003935041 /* FunctionExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003935041; } function computeFunctionExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; - // TypeScript-specific modifiers, type parameters, and type annotations are TypeScript - // syntax. - if (ts.hasModifier(node, 2270 /* TypeScriptModifier */) + if (ts.hasModifier(node, 2270) || node.typeParameters || node.type) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // An async function expression is ES2017 syntax. - if (ts.hasModifier(node, 256 /* Async */)) { - transformFlags |= node.asteriskToken ? 8 /* AssertESNext */ : 16 /* AssertES2017 */; + if (ts.hasModifier(node, 256)) { + transformFlags |= node.asteriskToken ? 8 : 16; } - // function expressions with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // 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 & 163840 /* ES2015FunctionSyntaxMask */) { - transformFlags |= 192 /* AssertES2015 */; + if (subtreeFlags & 163840) { + transformFlags |= 192; } - // 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. if (node.asteriskToken) { - transformFlags |= 768 /* AssertGenerator */; + transformFlags |= 768; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003935041 /* FunctionExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003935041; } function computeArrowFunction(node, subtreeFlags) { - // An ArrowFunction is ES6 syntax, and excludes markers that should not escape the scope of an ArrowFunction. - var transformFlags = subtreeFlags | 192 /* AssertES2015 */; - // TypeScript-specific modifiers, type parameters, and type annotations are TypeScript - // syntax. - if (ts.hasModifier(node, 2270 /* TypeScriptModifier */) + var transformFlags = subtreeFlags | 192; + if (ts.hasModifier(node, 2270) || node.typeParameters || node.type) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - // An async arrow function is ES2017 syntax. - if (ts.hasModifier(node, 256 /* Async */)) { - transformFlags |= 16 /* AssertES2017 */; + if (ts.hasModifier(node, 256)) { + transformFlags |= 16; } - // arrow functions with object rest destructuring are ES Next syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // If an ArrowFunction contains a lexical this, its container must capture the lexical this. - if (subtreeFlags & 16384 /* ContainsLexicalThis */) { - transformFlags |= 32768 /* ContainsCapturedLexicalThis */; + if (subtreeFlags & 16384) { + transformFlags |= 32768; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~1003902273 /* ArrowFunctionExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~1003902273; } function computePropertyAccess(node, subtreeFlags) { var transformFlags = subtreeFlags; - // If a PropertyAccessExpression starts with a super keyword, then it is - // ES6 syntax, and requires a lexical `this` binding. - if (transformFlags & 134217728 /* Super */) { - transformFlags ^= 134217728 /* Super */; - transformFlags |= 268435456 /* ContainsSuper */; + if (transformFlags & 134217728) { + transformFlags ^= 134217728; + transformFlags |= 268435456; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~671089985 /* PropertyAccessExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~671089985; } function computeElementAccess(node, subtreeFlags) { var transformFlags = subtreeFlags; var expression = node.expression; - var expressionFlags = expression.transformFlags; // We do not want to aggregate flags from the argument expression for super/this capturing - // If an ElementAccessExpression starts with a super keyword, then it is - // ES6 syntax, and requires a lexical `this` binding. - if (expressionFlags & 134217728 /* Super */) { - transformFlags &= ~134217728 /* Super */; - transformFlags |= 268435456 /* ContainsSuper */; + var expressionFlags = expression.transformFlags; + if (expressionFlags & 134217728) { + transformFlags &= ~134217728; + transformFlags |= 268435456; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~671089985 /* PropertyAccessExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~671089985; } function computeVariableDeclaration(node, subtreeFlags) { var transformFlags = subtreeFlags; - transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */; - // A VariableDeclaration containing ObjectRest is ESNext syntax - if (subtreeFlags & 1048576 /* ContainsObjectRest */) { - transformFlags |= 8 /* AssertESNext */; + transformFlags |= 192 | 8388608; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } - // Type annotations are TypeScript syntax. if (node.type) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeVariableStatement(node, subtreeFlags) { var transformFlags; var declarationListTransformFlags = node.declarationList.transformFlags; - // An ambient declaration is TypeScript syntax. - if (ts.hasModifier(node, 2 /* Ambient */)) { - transformFlags = 3 /* AssertTypeScript */; + if (ts.hasModifier(node, 2)) { + transformFlags = 3; } else { transformFlags = subtreeFlags; - if (declarationListTransformFlags & 8388608 /* ContainsBindingPattern */) { - transformFlags |= 192 /* AssertES2015 */; + if (declarationListTransformFlags & 8388608) { + transformFlags |= 192; } } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeLabeledStatement(node, subtreeFlags) { var transformFlags = subtreeFlags; - // A labeled statement containing a block scoped binding *may* need to be transformed from ES6. - if (subtreeFlags & 4194304 /* ContainsBlockScopedBinding */ - && ts.isIterationStatement(node, /*lookInLabeledStatements*/ true)) { - transformFlags |= 192 /* AssertES2015 */; + if (subtreeFlags & 4194304 + && ts.isIterationStatement(node, true)) { + transformFlags |= 192; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeImportEquals(node, subtreeFlags) { var transformFlags = subtreeFlags; - // An ImportEqualsDeclaration with a namespace reference is TypeScript. if (!ts.isExternalModuleImportEqualsDeclaration(node)) { - transformFlags |= 3 /* AssertTypeScript */; + transformFlags |= 3; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } 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 & 1024 /* DestructuringAssignment */) { - transformFlags |= 192 /* AssertES2015 */; + if (node.expression.transformFlags & 1024) { + transformFlags |= 192; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~939525441 /* NodeExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~939525441; } function computeModuleDeclaration(node, subtreeFlags) { - var transformFlags = 3 /* AssertTypeScript */; + var transformFlags = 3; var modifierFlags = ts.getModifierFlags(node); - if ((modifierFlags & 2 /* Ambient */) === 0) { + if ((modifierFlags & 2) === 0) { transformFlags |= subtreeFlags; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~977327425 /* ModuleExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~977327425; } function computeVariableDeclarationList(node, subtreeFlags) { - var transformFlags = subtreeFlags | 33554432 /* ContainsHoistedDeclarationOrCompletion */; - if (subtreeFlags & 8388608 /* ContainsBindingPattern */) { - transformFlags |= 192 /* AssertES2015 */; + var transformFlags = subtreeFlags | 33554432; + if (subtreeFlags & 8388608) { + transformFlags |= 192; } - // If a VariableDeclarationList is `let` or `const`, then it is ES6 syntax. - if (node.flags & 3 /* BlockScoped */) { - transformFlags |= 192 /* AssertES2015 */ | 4194304 /* ContainsBlockScopedBinding */; + if (node.flags & 3) { + transformFlags |= 192 | 4194304; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; - return transformFlags & ~948962625 /* VariableDeclarationListExcludes */; + node.transformFlags = transformFlags | 536870912; + return transformFlags & ~948962625; } function computeOther(node, kind, subtreeFlags) { - // Mark transformations needed for each node var transformFlags = subtreeFlags; - var excludeFlags = 939525441 /* NodeExcludes */; + var excludeFlags = 939525441; switch (kind) { - case 120 /* AsyncKeyword */: - case 197 /* AwaitExpression */: - // async/await is ES2017 syntax, but may be ESNext syntax (for async generators) - transformFlags |= 8 /* AssertESNext */ | 16 /* AssertES2017 */; + case 120: + case 197: + transformFlags |= 8 | 16; break; - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: - case 301 /* PartiallyEmittedExpression */: - // These nodes are TypeScript syntax. - transformFlags |= 3 /* AssertTypeScript */; - excludeFlags = 536872257 /* OuterExpressionExcludes */; + case 190: + case 208: + case 301: + transformFlags |= 3; + excludeFlags = 536872257; break; - case 114 /* PublicKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 117 /* AbstractKeyword */: - case 124 /* DeclareKeyword */: - case 76 /* ConstKeyword */: - case 238 /* EnumDeclaration */: - case 273 /* EnumMember */: - case 209 /* NonNullExpression */: - case 132 /* ReadonlyKeyword */: - // These nodes are TypeScript syntax. - transformFlags |= 3 /* AssertTypeScript */; + case 114: + case 112: + case 113: + case 117: + case 124: + case 76: + case 238: + case 273: + case 209: + case 132: + transformFlags |= 3; break; - case 255 /* JsxElement */: - case 256 /* JsxSelfClosingElement */: - case 257 /* JsxOpeningElement */: - case 10 /* JsxText */: - case 258 /* JsxClosingElement */: - case 259 /* JsxFragment */: - case 260 /* JsxOpeningFragment */: - case 261 /* JsxClosingFragment */: - case 262 /* JsxAttribute */: - case 263 /* JsxAttributes */: - case 264 /* JsxSpreadAttribute */: - case 265 /* JsxExpression */: - // These nodes are Jsx syntax. - transformFlags |= 4 /* AssertJsx */; + case 255: + case 256: + case 257: + case 10: + case 258: + case 259: + case 260: + case 261: + case 262: + case 263: + case 264: + case 265: + transformFlags |= 4; break; - case 13 /* NoSubstitutionTemplateLiteral */: - case 14 /* TemplateHead */: - case 15 /* TemplateMiddle */: - case 16 /* TemplateTail */: - case 202 /* TemplateExpression */: - case 189 /* TaggedTemplateExpression */: - case 271 /* ShorthandPropertyAssignment */: - case 115 /* StaticKeyword */: - case 210 /* MetaProperty */: - // These nodes are ES6 syntax. - transformFlags |= 192 /* AssertES2015 */; + case 13: + case 14: + case 15: + case 16: + case 202: + case 189: + case 271: + case 115: + case 210: + transformFlags |= 192; break; - case 9 /* StringLiteral */: + case 9: if (node.hasExtendedUnicodeEscape) { - transformFlags |= 192 /* AssertES2015 */; + transformFlags |= 192; } break; - case 8 /* NumericLiteral */: - if (node.numericLiteralFlags & 384 /* BinaryOrOctalSpecifier */) { - transformFlags |= 192 /* AssertES2015 */; + case 8: + if (node.numericLiteralFlags & 384) { + transformFlags |= 192; } break; - case 222 /* ForOfStatement */: - // This node is either ES2015 syntax or ES2017 syntax (if it is a for-await-of). + case 222: if (node.awaitModifier) { - transformFlags |= 8 /* AssertESNext */; + transformFlags |= 8; } - transformFlags |= 192 /* AssertES2015 */; + transformFlags |= 192; break; - case 203 /* YieldExpression */: - // This node is either ES2015 syntax (in a generator) or ES2017 syntax (in an async - // generator). - transformFlags |= 8 /* AssertESNext */ | 192 /* AssertES2015 */ | 16777216 /* ContainsYield */; + case 203: + transformFlags |= 8 | 192 | 16777216; break; - case 119 /* AnyKeyword */: - case 134 /* NumberKeyword */: - case 131 /* NeverKeyword */: - case 135 /* ObjectKeyword */: - case 137 /* StringKeyword */: - case 122 /* BooleanKeyword */: - case 138 /* SymbolKeyword */: - case 105 /* VoidKeyword */: - case 148 /* TypeParameter */: - case 151 /* PropertySignature */: - case 153 /* MethodSignature */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 161 /* TypePredicate */: - case 162 /* TypeReference */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 165 /* TypeQuery */: - case 166 /* TypeLiteral */: - case 167 /* ArrayType */: - case 168 /* TupleType */: - case 169 /* UnionType */: - case 170 /* IntersectionType */: - case 171 /* ConditionalType */: - case 172 /* InferType */: - case 173 /* ParenthesizedType */: - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 174 /* ThisType */: - case 175 /* TypeOperator */: - case 176 /* IndexedAccessType */: - case 177 /* MappedType */: - case 178 /* LiteralType */: - case 242 /* NamespaceExportDeclaration */: - // Types and signatures are TypeScript syntax, and exclude all other facts. - transformFlags = 3 /* AssertTypeScript */; - excludeFlags = -3 /* TypeExcludes */; + case 119: + case 134: + case 131: + case 135: + case 137: + case 122: + case 138: + case 105: + case 148: + case 151: + case 153: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 236: + case 237: + case 174: + case 175: + case 176: + case 177: + case 178: + case 242: + transformFlags = 3; + excludeFlags = -3; break; - case 147 /* ComputedPropertyName */: - // 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 |= 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`), - // whereas `this` inside a computed name *might* need to be rewritten if the class/object - // is inside an arrow function: - // `_this = this; () => class K { [_this.getName()]() { ... } }` - // To make this distinction, use ContainsLexicalThisInComputedPropertyName - // instead of ContainsLexicalThis for computed property names - transformFlags |= 65536 /* ContainsLexicalThisInComputedPropertyName */; + case 147: + transformFlags |= 2097152; + if (subtreeFlags & 16384) { + transformFlags |= 65536; } break; - case 204 /* SpreadElement */: - transformFlags |= 192 /* AssertES2015 */ | 524288 /* ContainsSpread */; + case 204: + transformFlags |= 192 | 524288; break; - case 272 /* SpreadAssignment */: - transformFlags |= 8 /* AssertESNext */ | 1048576 /* ContainsObjectSpread */; + case 272: + transformFlags |= 8 | 1048576; break; - case 97 /* SuperKeyword */: - // This node is ES6 syntax. - transformFlags |= 192 /* AssertES2015 */ | 134217728 /* Super */; - excludeFlags = 536872257 /* OuterExpressionExcludes */; // must be set to persist `Super` + case 97: + transformFlags |= 192 | 134217728; + excludeFlags = 536872257; break; - case 99 /* ThisKeyword */: - // Mark this node and its ancestors as containing a lexical `this` keyword. - transformFlags |= 16384 /* ContainsLexicalThis */; + case 99: + transformFlags |= 16384; break; - case 180 /* ObjectBindingPattern */: - transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */; - if (subtreeFlags & 524288 /* ContainsRest */) { - transformFlags |= 8 /* AssertESNext */ | 1048576 /* ContainsObjectRest */; + case 180: + transformFlags |= 192 | 8388608; + if (subtreeFlags & 524288) { + transformFlags |= 8 | 1048576; } - excludeFlags = 940049729 /* BindingPatternExcludes */; + excludeFlags = 940049729; break; - case 181 /* ArrayBindingPattern */: - transformFlags |= 192 /* AssertES2015 */ | 8388608 /* ContainsBindingPattern */; - excludeFlags = 940049729 /* BindingPatternExcludes */; + case 181: + transformFlags |= 192 | 8388608; + excludeFlags = 940049729; break; - case 182 /* BindingElement */: - transformFlags |= 192 /* AssertES2015 */; + case 182: + transformFlags |= 192; if (node.dotDotDotToken) { - transformFlags |= 524288 /* ContainsRest */; + transformFlags |= 524288; } break; - case 150 /* Decorator */: - // This node is TypeScript syntax, and marks its container as also being TypeScript syntax. - transformFlags |= 3 /* AssertTypeScript */ | 4096 /* ContainsDecorators */; + case 150: + transformFlags |= 3 | 4096; break; - case 184 /* ObjectLiteralExpression */: - excludeFlags = 942740801 /* ObjectLiteralExcludes */; - if (subtreeFlags & 2097152 /* ContainsComputedPropertyName */) { - // If an ObjectLiteralExpression contains a ComputedPropertyName, then it - // is an ES6 node. - transformFlags |= 192 /* AssertES2015 */; + case 184: + excludeFlags = 942740801; + if (subtreeFlags & 2097152) { + transformFlags |= 192; } - if (subtreeFlags & 65536 /* ContainsLexicalThisInComputedPropertyName */) { - // A computed property name containing `this` might need to be rewritten, - // so propagate the ContainsLexicalThis flag upward. - transformFlags |= 16384 /* ContainsLexicalThis */; + if (subtreeFlags & 65536) { + transformFlags |= 16384; } - if (subtreeFlags & 1048576 /* ContainsObjectSpread */) { - // If an ObjectLiteralExpression contains a spread element, then it - // is an ES next node. - transformFlags |= 8 /* AssertESNext */; + if (subtreeFlags & 1048576) { + transformFlags |= 8; } break; - case 183 /* ArrayLiteralExpression */: - case 188 /* NewExpression */: - excludeFlags = 940049729 /* ArrayLiteralOrCallOrNewExcludes */; - if (subtreeFlags & 524288 /* ContainsSpread */) { - // If the this node contains a SpreadExpression, then it is an ES6 - // node. - transformFlags |= 192 /* AssertES2015 */; + case 183: + case 188: + excludeFlags = 940049729; + if (subtreeFlags & 524288) { + transformFlags |= 192; } break; - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - // A loop containing a block scoped binding *may* need to be transformed from ES6. - if (subtreeFlags & 4194304 /* ContainsBlockScopedBinding */) { - transformFlags |= 192 /* AssertES2015 */; + case 218: + case 219: + case 220: + case 221: + if (subtreeFlags & 4194304) { + transformFlags |= 192; } break; - case 274 /* SourceFile */: - if (subtreeFlags & 32768 /* ContainsCapturedLexicalThis */) { - transformFlags |= 192 /* AssertES2015 */; + case 274: + if (subtreeFlags & 32768) { + transformFlags |= 192; } break; - case 225 /* ReturnStatement */: - // Return statements may require an `await` in ESNext. - transformFlags |= 33554432 /* ContainsHoistedDeclarationOrCompletion */ | 8 /* AssertESNext */; + case 225: + transformFlags |= 33554432 | 8; break; - case 223 /* ContinueStatement */: - case 224 /* BreakStatement */: - transformFlags |= 33554432 /* ContainsHoistedDeclarationOrCompletion */; + case 223: + case 224: + transformFlags |= 33554432; break; } - node.transformFlags = transformFlags | 536870912 /* HasComputedFlags */; + node.transformFlags = transformFlags | 536870912; return transformFlags & ~excludeFlags; } - /** - * Gets the transform flags to exclude when unioning the transform flags of a subtree. - * - * NOTE: This needs to be kept up-to-date with the exclusions used in `computeTransformFlagsForNode`. - * For performance reasons, `computeTransformFlagsForNode` uses local constant values rather - * than calling this function. - */ - /* @internal */ function getTransformFlagsSubtreeExclusions(kind) { - if (kind >= 161 /* FirstTypeNode */ && kind <= 179 /* LastTypeNode */) { - return -3 /* TypeExcludes */; + if (kind >= 161 && kind <= 179) { + return -3; } switch (kind) { - case 187 /* CallExpression */: - case 188 /* NewExpression */: - case 183 /* ArrayLiteralExpression */: - return 940049729 /* ArrayLiteralOrCallOrNewExcludes */; - case 239 /* ModuleDeclaration */: - return 977327425 /* ModuleExcludes */; - case 149 /* Parameter */: - return 939525441 /* ParameterExcludes */; - case 193 /* ArrowFunction */: - return 1003902273 /* ArrowFunctionExcludes */; - case 192 /* FunctionExpression */: - case 234 /* FunctionDeclaration */: - return 1003935041 /* FunctionExcludes */; - case 233 /* VariableDeclarationList */: - return 948962625 /* VariableDeclarationListExcludes */; - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - return 942011713 /* ClassExcludes */; - case 155 /* Constructor */: - return 1003668801 /* ConstructorExcludes */; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - return 1003668801 /* MethodOrAccessorExcludes */; - case 119 /* AnyKeyword */: - case 134 /* NumberKeyword */: - case 131 /* NeverKeyword */: - case 137 /* StringKeyword */: - case 135 /* ObjectKeyword */: - case 122 /* BooleanKeyword */: - case 138 /* SymbolKeyword */: - case 105 /* VoidKeyword */: - case 148 /* TypeParameter */: - case 151 /* PropertySignature */: - case 153 /* MethodSignature */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - return -3 /* TypeExcludes */; - case 184 /* ObjectLiteralExpression */: - return 942740801 /* ObjectLiteralExcludes */; - case 269 /* CatchClause */: - return 940574017 /* CatchClauseExcludes */; - case 180 /* ObjectBindingPattern */: - case 181 /* ArrayBindingPattern */: - return 940049729 /* BindingPatternExcludes */; - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: - case 301 /* PartiallyEmittedExpression */: - case 191 /* ParenthesizedExpression */: - case 97 /* SuperKeyword */: - return 536872257 /* OuterExpressionExcludes */; - case 185 /* PropertyAccessExpression */: - case 186 /* ElementAccessExpression */: - return 671089985 /* PropertyAccessExcludes */; + case 187: + case 188: + case 183: + return 940049729; + case 239: + return 977327425; + case 149: + return 939525441; + case 193: + return 1003902273; + case 192: + case 234: + return 1003935041; + case 233: + return 948962625; + case 235: + case 205: + return 942011713; + case 155: + return 1003668801; + case 154: + case 156: + case 157: + return 1003668801; + case 119: + case 134: + case 131: + case 137: + case 135: + case 122: + case 138: + case 105: + case 148: + case 151: + case 153: + case 158: + case 159: + case 160: + case 236: + case 237: + return -3; + case 184: + return 942740801; + case 269: + return 940574017; + case 180: + case 181: + return 940049729; + case 190: + case 208: + case 301: + case 191: + case 97: + return 536872257; + case 185: + case 186: + return 671089985; default: - return 939525441 /* NodeExcludes */; + return 939525441; } } ts.getTransformFlagsSubtreeExclusions = getTransformFlagsSubtreeExclusions; - /** - * "Binds" JSDoc nodes in TypeScript code. - * Since we will never create symbols for JSDoc, we just set parent pointers instead. - */ function setParentPointers(parent, child) { child.parent = parent; ts.forEachChild(child, function (grandchild) { return setParentPointers(child, grandchild); }); } })(ts || (ts = {})); -/** @internal */ var ts; (function (ts) { function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintFromTypeParameter, getFirstIdentifier) { return getSymbolWalker; function getSymbolWalker(accept) { if (accept === void 0) { accept = function () { return true; }; } - var visitedTypes = []; // Sparse array from id to type - var visitedSymbols = []; // Sparse array from id to symbol + var visitedTypes = []; + var visitedSymbols = []; return { walkType: function (type) { try { @@ -28808,38 +23404,35 @@ var ts; return; } visitedTypes[type.id] = type; - // Reuse visitSymbol to visit the type's symbol, - // but be sure to bail on recuring into the type if accept declines the symbol. var shouldBail = visitSymbol(type.symbol); if (shouldBail) return; - // Visit the type's related types, if any - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var objectType = type; var objectFlags = objectType.objectFlags; - if (objectFlags & 4 /* Reference */) { + if (objectFlags & 4) { visitTypeReference(type); } - if (objectFlags & 32 /* Mapped */) { + if (objectFlags & 32) { visitMappedType(type); } - if (objectFlags & (1 /* Class */ | 2 /* Interface */)) { + if (objectFlags & (1 | 2)) { visitInterfaceType(type); } - if (objectFlags & (8 /* Tuple */ | 16 /* Anonymous */)) { + if (objectFlags & (8 | 16)) { visitObjectType(objectType); } } - if (type.flags & 65536 /* TypeParameter */) { + if (type.flags & 65536) { visitTypeParameter(type); } - if (type.flags & 786432 /* UnionOrIntersection */) { + if (type.flags & 786432) { visitUnionOrIntersectionType(type); } - if (type.flags & 1048576 /* Index */) { + if (type.flags & 1048576) { visitIndexType(type); } - if (type.flags & 2097152 /* IndexedAccess */) { + if (type.flags & 2097152) { visitIndexedAccessType(type); } } @@ -28887,11 +23480,10 @@ var ts; visitType(interfaceT.thisType); } function visitObjectType(type) { - var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */); + var stringIndexType = getIndexTypeOfStructuredType(type, 0); visitType(stringIndexType); - var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */); + var numberIndexType = getIndexTypeOfStructuredType(type, 1); visitType(numberIndexType); - // The two checks above *should* have already resolved the type (if needed), so this should be cached var resolved = resolveStructuredTypeMembers(type); for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) { var signature = _a[_i]; @@ -28919,16 +23511,12 @@ var ts; return true; } var t = getTypeOfSymbol(symbol); - visitType(t); // Should handle members on classes and such - if (symbol.flags & 1955 /* HasExports */) { + visitType(t); + if (symbol.flags & 1955) { symbol.exports.forEach(visitSymbol); } ts.forEach(symbol.declarations, function (d) { - // Type queries are too far resolved when we just visit the symbol's type - // (their type resolved directly to the member deeply referenced) - // So to get the intervening symbols, we need to check if there's a type - // query node on any of the symbol's declarations and get symbols there - if (d.type && d.type.kind === 165 /* TypeQuery */) { + if (d.type && d.type.kind === 165) { var query = d.type; var entity = getResolvedSymbol(getFirstIdentifier(query.exprName)); visitSymbol(entity); @@ -28940,7 +23528,6 @@ var ts; } ts.createGetSymbolWalker = createGetSymbolWalker; })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { var ambientModuleSymbolRegex = /^".+"$/; @@ -28966,28 +23553,17 @@ var ts; ts.getSymbolId = getSymbolId; function isInstantiatedModule(node, preserveConstEnums) { var moduleState = ts.getModuleInstanceState(node); - return moduleState === 1 /* Instantiated */ || - (preserveConstEnums && moduleState === 2 /* ConstEnumOnly */); + return moduleState === 1 || + (preserveConstEnums && moduleState === 2); } ts.isInstantiatedModule = isInstantiatedModule; function createTypeChecker(host, produceDiagnostics) { - // Cancellation that controls whether or not we can cancel in the middle of type checking. - // In general cancelling is *not* safe for the type checker. We might be in the middle of - // computing something, and we will leave our internals in an inconsistent state. Callers - // who set the cancellation token should catch if a cancellation exception occurs, and - // should throw away and create a new TypeChecker. - // - // Currently we only support setting the cancellation token when getting diagnostics. This - // is because diagnostics can be quite expensive, and we want to allow hosts to bail out if - // they no longer need the information (for example, if the user started editing again). var cancellationToken; var requestedExternalEmitHelpers; var externalHelpersModule; - // tslint:disable variable-name var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); var Signature = ts.objectAllocator.getSignatureConstructor(); - // tslint:enable variable-name var typeCount = 0; var symbolCount = 0; var enumCount = 0; @@ -29006,18 +23582,12 @@ var ts; var keyofStringsOnly = !!compilerOptions.keyofStringsOnly; var emitResolver = createResolver(); var nodeBuilder = createNodeBuilder(); - var undefinedSymbol = createSymbol(4 /* Property */, "undefined"); + var undefinedSymbol = createSymbol(4, "undefined"); undefinedSymbol.declarations = []; - var argumentsSymbol = createSymbol(4 /* Property */, "arguments"); - var requireSymbol = createSymbol(4 /* Property */, "require"); - var moduleSymbol = createSymbol(4 /* Property */, "module"); - /** This will be set during calls to `getResolvedSignature` where services determines an apparent number of arguments greater than what is actually provided. */ + var argumentsSymbol = createSymbol(4, "arguments"); + var requireSymbol = createSymbol(4, "require"); + var moduleSymbol = createSymbol(4, "module"); var apparentArgumentCount; - // for public members that accept a Node or one of its subtypes, we must guard against - // synthetic nodes created during transformations by calling `getParseTreeNode`. - // for most of these, we perform the guard only on `checker` to avoid any possible - // extra cost of calling `getParseTreeNode` when calling these functions from inside the - // checker. var checker = { getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); }, getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); }, @@ -29160,13 +23730,13 @@ var ts; return parsed ? isImplementationOfOverload(parsed) : undefined; }, getImmediateAliasedSymbol: function (symbol) { - ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here."); + ts.Debug.assert((symbol.flags & 2097152) !== 0, "Should only get Alias here."); var links = getSymbolLinks(symbol); if (!links.immediateTarget) { var node = getDeclarationOfAliasSymbol(symbol); if (!node) return ts.Debug.fail(); - links.immediateTarget = getTargetOfAliasDeclaration(node, /*dontRecursivelyResolve*/ true); + links.immediateTarget = getTargetOfAliasDeclaration(node, true); } return links.immediateTarget; }, @@ -29188,9 +23758,7 @@ var ts; tryGetMemberInModuleExports: function (name, symbol) { return tryGetMemberInModuleExports(ts.escapeLeadingUnderscores(name), symbol); }, tryGetMemberInModuleExportsAndProperties: function (name, symbol) { return tryGetMemberInModuleExportsAndProperties(ts.escapeLeadingUnderscores(name), symbol); }, tryFindAmbientModuleWithoutAugmentations: function (moduleName) { - // we deliberately exclude augmentations - // since we are only interested in declarations of the module itself - return tryFindAmbientModule(moduleName, /*withAugmentations*/ false); + return tryFindAmbientModule(moduleName, false); }, getApparentType: getApparentType, getUnionType: getUnionType, @@ -29218,9 +23786,9 @@ var ts; getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); }, getSuggestionForNonexistentModule: function (node, target) { return getSuggestionForNonexistentModule(node, target); }, getBaseConstraintOfType: getBaseConstraintOfType, - getDefaultFromTypeParameter: function (type) { return type && type.flags & 65536 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; }, + getDefaultFromTypeParameter: function (type) { return type && type.flags & 65536 ? getDefaultFromTypeParameter(type) : undefined; }, resolveName: function (name, location, meaning, excludeGlobals) { - return resolveName(location, ts.escapeLeadingUnderscores(name), meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false, excludeGlobals); + return resolveName(location, ts.escapeLeadingUnderscores(name), meaning, undefined, undefined, false, excludeGlobals); }, getJsxNamespace: function (n) { return ts.unescapeLeadingUnderscores(getJsxNamespace(n)); }, getAccessibleSymbolChain: getAccessibleSymbolChain, @@ -29237,15 +23805,11 @@ var ts; getSuggestionDiagnostics: function (file, ct) { var diagnostics; try { - // Record the cancellation token so it can be checked later on during checkSourceElement. - // Do this in a finally block so we can ensure that it gets reset back to nothing after - // this call is done. cancellationToken = ct; - // Ensure file is type checked checkSourceFile(file); - ts.Debug.assert(!!(getNodeLinks(file).flags & 1 /* TypeChecked */)); + ts.Debug.assert(!!(getNodeLinks(file).flags & 1)); diagnostics = ts.addRange(diagnostics, suggestionDiagnostics.get(file.fileName)); - if (!file.isDeclarationFile && (!unusedIsError(0 /* Local */) || !unusedIsError(1 /* Parameter */))) { + if (!file.isDeclarationFile && (!unusedIsError(0) || !unusedIsError(1))) { addUnusedDiagnostics(); } return diagnostics || ts.emptyArray; @@ -29278,63 +23842,56 @@ var ts; var indexedAccessTypes = ts.createMap(); var evolvingArrayTypes = []; var undefinedProperties = ts.createMap(); - var unknownSymbol = createSymbol(4 /* Property */, "unknown"); - var resolvingSymbol = createSymbol(0, "__resolving__" /* Resolving */); - var anyType = createIntrinsicType(1 /* Any */, "any"); - var autoType = createIntrinsicType(1 /* Any */, "any"); - var wildcardType = createIntrinsicType(1 /* Any */, "any"); - var errorType = createIntrinsicType(1 /* Any */, "error"); - var unknownType = createIntrinsicType(2 /* Unknown */, "unknown"); - var undefinedType = createIntrinsicType(8192 /* Undefined */, "undefined"); - var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(8192 /* Undefined */ | 134217728 /* ContainsWideningType */, "undefined"); - var nullType = createIntrinsicType(16384 /* Null */, "null"); - var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(16384 /* Null */ | 134217728 /* ContainsWideningType */, "null"); - var stringType = createIntrinsicType(4 /* String */, "string"); - var numberType = createIntrinsicType(8 /* Number */, "number"); - var falseType = createIntrinsicType(256 /* BooleanLiteral */, "false"); - var trueType = createIntrinsicType(256 /* BooleanLiteral */, "true"); + var unknownSymbol = createSymbol(4, "unknown"); + var resolvingSymbol = createSymbol(0, "__resolving__"); + var anyType = createIntrinsicType(1, "any"); + var autoType = createIntrinsicType(1, "any"); + var wildcardType = createIntrinsicType(1, "any"); + var errorType = createIntrinsicType(1, "error"); + var unknownType = createIntrinsicType(2, "unknown"); + var undefinedType = createIntrinsicType(8192, "undefined"); + var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(8192 | 134217728, "undefined"); + var nullType = createIntrinsicType(16384, "null"); + var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(16384 | 134217728, "null"); + var stringType = createIntrinsicType(4, "string"); + var numberType = createIntrinsicType(8, "number"); + var falseType = createIntrinsicType(256, "false"); + var trueType = createIntrinsicType(256, "true"); var booleanType = createBooleanType([falseType, trueType]); - var esSymbolType = createIntrinsicType(1024 /* ESSymbol */, "symbol"); - var voidType = createIntrinsicType(4096 /* Void */, "void"); - var neverType = createIntrinsicType(32768 /* Never */, "never"); - var silentNeverType = createIntrinsicType(32768 /* Never */, "never"); - var implicitNeverType = createIntrinsicType(32768 /* Never */, "never"); - var nonPrimitiveType = createIntrinsicType(16777216 /* NonPrimitive */, "object"); + var esSymbolType = createIntrinsicType(1024, "symbol"); + var voidType = createIntrinsicType(4096, "void"); + var neverType = createIntrinsicType(32768, "never"); + var silentNeverType = createIntrinsicType(32768, "never"); + var implicitNeverType = createIntrinsicType(32768, "never"); + var nonPrimitiveType = createIntrinsicType(16777216, "object"); var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]); var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType; var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); - var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); + var emptyTypeLiteralSymbol = createSymbol(2048, "__type"); emptyTypeLiteralSymbol.members = ts.createSymbolTable(); var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); emptyGenericType.instantiations = ts.createMap(); var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); - // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated - // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes. - anyFunctionType.flags |= 536870912 /* ContainsAnyFunctionType */; + anyFunctionType.flags |= 536870912; var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); - var markerSuperType = createType(65536 /* TypeParameter */); - var markerSubType = createType(65536 /* TypeParameter */); + var markerSuperType = createType(65536); + var markerSubType = createType(65536); markerSubType.constraint = markerSuperType; - var markerOtherType = createType(65536 /* TypeParameter */); + var markerOtherType = createType(65536); var noTypePredicate = createIdentifierTypePredicate("<>", 0, anyType); - var anySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); - var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); - var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); - var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); + var anySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, false, false); + var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, undefined, 0, false, false); + var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, false, false); + var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, undefined, 0, false, false); var resolvingSignaturesArray = [resolvingSignature]; - var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true); - var jsObjectLiteralIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false); + var enumNumberIndexInfo = createIndexInfo(stringType, true); + var jsObjectLiteralIndexInfo = createIndexInfo(anyType, false); var globals = ts.createSymbolTable(); var reverseMappedCache = ts.createMap(); var ambientModulesCache; - /** - * List of every ambient module with a "*" wildcard. - * Unlike other ambient modules, these can't be stored in `globals` because symbol tables only deal with exact matches. - * This is only used if there is no exact match. - */ var patternAmbientModules; var globalObjectType; var globalFunctionType; @@ -29349,9 +23906,6 @@ var ts; var autoArrayType; var anyReadonlyArrayType; var deferredGlobalNonNullableTypeAlias; - // The library files are only loaded when the feature is used. - // This allows users to just specify library files they want to used through --lib - // and they will not get an error from not having unrelated library files var deferredGlobalESSymbolConstructorSymbol; var deferredGlobalESSymbolType; var deferredGlobalTypedPropertyDescriptorType; @@ -29368,7 +23922,7 @@ var ts; var deferredGlobalImportMetaType; var deferredGlobalExtractSymbol; var deferredNodes; - var allPotentiallyUnusedIdentifiers = ts.createMap(); // key is file name + var allPotentiallyUnusedIdentifiers = ts.createMap(); var flowLoopStart = 0; var flowLoopCount = 0; var sharedFlowCount = 0; @@ -29393,87 +23947,24 @@ var ts; var potentialNewTargetCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); - // Suggestion diagnostics must have a file. Keyed by source file name. var suggestionDiagnostics = ts.createMultiMap(); - var TypeFacts; - (function (TypeFacts) { - TypeFacts[TypeFacts["None"] = 0] = "None"; - TypeFacts[TypeFacts["TypeofEQString"] = 1] = "TypeofEQString"; - TypeFacts[TypeFacts["TypeofEQNumber"] = 2] = "TypeofEQNumber"; - TypeFacts[TypeFacts["TypeofEQBoolean"] = 4] = "TypeofEQBoolean"; - TypeFacts[TypeFacts["TypeofEQSymbol"] = 8] = "TypeofEQSymbol"; - TypeFacts[TypeFacts["TypeofEQObject"] = 16] = "TypeofEQObject"; - TypeFacts[TypeFacts["TypeofEQFunction"] = 32] = "TypeofEQFunction"; - TypeFacts[TypeFacts["TypeofEQHostObject"] = 64] = "TypeofEQHostObject"; - TypeFacts[TypeFacts["TypeofNEString"] = 128] = "TypeofNEString"; - TypeFacts[TypeFacts["TypeofNENumber"] = 256] = "TypeofNENumber"; - TypeFacts[TypeFacts["TypeofNEBoolean"] = 512] = "TypeofNEBoolean"; - TypeFacts[TypeFacts["TypeofNESymbol"] = 1024] = "TypeofNESymbol"; - TypeFacts[TypeFacts["TypeofNEObject"] = 2048] = "TypeofNEObject"; - TypeFacts[TypeFacts["TypeofNEFunction"] = 4096] = "TypeofNEFunction"; - TypeFacts[TypeFacts["TypeofNEHostObject"] = 8192] = "TypeofNEHostObject"; - TypeFacts[TypeFacts["EQUndefined"] = 16384] = "EQUndefined"; - TypeFacts[TypeFacts["EQNull"] = 32768] = "EQNull"; - TypeFacts[TypeFacts["EQUndefinedOrNull"] = 65536] = "EQUndefinedOrNull"; - TypeFacts[TypeFacts["NEUndefined"] = 131072] = "NEUndefined"; - TypeFacts[TypeFacts["NENull"] = 262144] = "NENull"; - TypeFacts[TypeFacts["NEUndefinedOrNull"] = 524288] = "NEUndefinedOrNull"; - TypeFacts[TypeFacts["Truthy"] = 1048576] = "Truthy"; - TypeFacts[TypeFacts["Falsy"] = 2097152] = "Falsy"; - TypeFacts[TypeFacts["All"] = 4194303] = "All"; - // The following members encode facts about particular kinds of types for use in the getTypeFacts function. - // The presence of a particular fact means that the given test is true for some (and possibly all) values - // of that kind of type. - TypeFacts[TypeFacts["BaseStringStrictFacts"] = 933633] = "BaseStringStrictFacts"; - TypeFacts[TypeFacts["BaseStringFacts"] = 3145473] = "BaseStringFacts"; - TypeFacts[TypeFacts["StringStrictFacts"] = 4079361] = "StringStrictFacts"; - TypeFacts[TypeFacts["StringFacts"] = 4194049] = "StringFacts"; - TypeFacts[TypeFacts["EmptyStringStrictFacts"] = 3030785] = "EmptyStringStrictFacts"; - TypeFacts[TypeFacts["EmptyStringFacts"] = 3145473] = "EmptyStringFacts"; - TypeFacts[TypeFacts["NonEmptyStringStrictFacts"] = 1982209] = "NonEmptyStringStrictFacts"; - TypeFacts[TypeFacts["NonEmptyStringFacts"] = 4194049] = "NonEmptyStringFacts"; - TypeFacts[TypeFacts["BaseNumberStrictFacts"] = 933506] = "BaseNumberStrictFacts"; - TypeFacts[TypeFacts["BaseNumberFacts"] = 3145346] = "BaseNumberFacts"; - TypeFacts[TypeFacts["NumberStrictFacts"] = 4079234] = "NumberStrictFacts"; - TypeFacts[TypeFacts["NumberFacts"] = 4193922] = "NumberFacts"; - TypeFacts[TypeFacts["ZeroStrictFacts"] = 3030658] = "ZeroStrictFacts"; - TypeFacts[TypeFacts["ZeroFacts"] = 3145346] = "ZeroFacts"; - TypeFacts[TypeFacts["NonZeroStrictFacts"] = 1982082] = "NonZeroStrictFacts"; - TypeFacts[TypeFacts["NonZeroFacts"] = 4193922] = "NonZeroFacts"; - TypeFacts[TypeFacts["BaseBooleanStrictFacts"] = 933252] = "BaseBooleanStrictFacts"; - TypeFacts[TypeFacts["BaseBooleanFacts"] = 3145092] = "BaseBooleanFacts"; - TypeFacts[TypeFacts["BooleanStrictFacts"] = 4078980] = "BooleanStrictFacts"; - TypeFacts[TypeFacts["BooleanFacts"] = 4193668] = "BooleanFacts"; - TypeFacts[TypeFacts["FalseStrictFacts"] = 3030404] = "FalseStrictFacts"; - TypeFacts[TypeFacts["FalseFacts"] = 3145092] = "FalseFacts"; - TypeFacts[TypeFacts["TrueStrictFacts"] = 1981828] = "TrueStrictFacts"; - TypeFacts[TypeFacts["TrueFacts"] = 4193668] = "TrueFacts"; - TypeFacts[TypeFacts["SymbolStrictFacts"] = 1981320] = "SymbolStrictFacts"; - TypeFacts[TypeFacts["SymbolFacts"] = 4193160] = "SymbolFacts"; - TypeFacts[TypeFacts["ObjectStrictFacts"] = 1972176] = "ObjectStrictFacts"; - TypeFacts[TypeFacts["ObjectFacts"] = 4184016] = "ObjectFacts"; - TypeFacts[TypeFacts["FunctionStrictFacts"] = 1970144] = "FunctionStrictFacts"; - TypeFacts[TypeFacts["FunctionFacts"] = 4181984] = "FunctionFacts"; - TypeFacts[TypeFacts["UndefinedFacts"] = 2457472] = "UndefinedFacts"; - TypeFacts[TypeFacts["NullFacts"] = 2340752] = "NullFacts"; - })(TypeFacts || (TypeFacts = {})); var typeofEQFacts = ts.createMapFromTemplate({ - string: 1 /* TypeofEQString */, - number: 2 /* TypeofEQNumber */, - boolean: 4 /* TypeofEQBoolean */, - symbol: 8 /* TypeofEQSymbol */, - undefined: 16384 /* EQUndefined */, - object: 16 /* TypeofEQObject */, - function: 32 /* TypeofEQFunction */ + string: 1, + number: 2, + boolean: 4, + symbol: 8, + undefined: 16384, + object: 16, + function: 32 }); var typeofNEFacts = ts.createMapFromTemplate({ - string: 128 /* TypeofNEString */, - number: 256 /* TypeofNENumber */, - boolean: 512 /* TypeofNEBoolean */, - symbol: 1024 /* TypeofNESymbol */, - undefined: 131072 /* NEUndefined */, - object: 2048 /* TypeofNEObject */, - function: 4096 /* TypeofNEFunction */ + string: 128, + number: 256, + boolean: 512, + symbol: 1024, + undefined: 131072, + object: 2048, + function: 4096 }); var typeofTypesByName = ts.createMapFromTemplate({ string: stringType, @@ -29491,105 +23982,57 @@ var ts; var comparableRelation = ts.createMap(); var identityRelation = ts.createMap(); var enumRelation = ts.createMap(); - var TypeSystemPropertyName; - (function (TypeSystemPropertyName) { - TypeSystemPropertyName[TypeSystemPropertyName["Type"] = 0] = "Type"; - TypeSystemPropertyName[TypeSystemPropertyName["ResolvedBaseConstructorType"] = 1] = "ResolvedBaseConstructorType"; - TypeSystemPropertyName[TypeSystemPropertyName["DeclaredType"] = 2] = "DeclaredType"; - TypeSystemPropertyName[TypeSystemPropertyName["ResolvedReturnType"] = 3] = "ResolvedReturnType"; - TypeSystemPropertyName[TypeSystemPropertyName["ResolvedBaseConstraint"] = 4] = "ResolvedBaseConstraint"; - })(TypeSystemPropertyName || (TypeSystemPropertyName = {})); - var CheckMode; - (function (CheckMode) { - CheckMode[CheckMode["Normal"] = 0] = "Normal"; - CheckMode[CheckMode["SkipContextSensitive"] = 1] = "SkipContextSensitive"; - CheckMode[CheckMode["Inferential"] = 2] = "Inferential"; - CheckMode[CheckMode["Contextual"] = 3] = "Contextual"; - })(CheckMode || (CheckMode = {})); - var CallbackCheck; - (function (CallbackCheck) { - CallbackCheck[CallbackCheck["None"] = 0] = "None"; - CallbackCheck[CallbackCheck["Bivariant"] = 1] = "Bivariant"; - CallbackCheck[CallbackCheck["Strict"] = 2] = "Strict"; - })(CallbackCheck || (CallbackCheck = {})); - var MappedTypeModifiers; - (function (MappedTypeModifiers) { - MappedTypeModifiers[MappedTypeModifiers["IncludeReadonly"] = 1] = "IncludeReadonly"; - MappedTypeModifiers[MappedTypeModifiers["ExcludeReadonly"] = 2] = "ExcludeReadonly"; - MappedTypeModifiers[MappedTypeModifiers["IncludeOptional"] = 4] = "IncludeOptional"; - MappedTypeModifiers[MappedTypeModifiers["ExcludeOptional"] = 8] = "ExcludeOptional"; - })(MappedTypeModifiers || (MappedTypeModifiers = {})); - var ExpandingFlags; - (function (ExpandingFlags) { - ExpandingFlags[ExpandingFlags["None"] = 0] = "None"; - ExpandingFlags[ExpandingFlags["Source"] = 1] = "Source"; - ExpandingFlags[ExpandingFlags["Target"] = 2] = "Target"; - ExpandingFlags[ExpandingFlags["Both"] = 3] = "Both"; - })(ExpandingFlags || (ExpandingFlags = {})); - var MembersOrExportsResolutionKind; - (function (MembersOrExportsResolutionKind) { - MembersOrExportsResolutionKind["resolvedExports"] = "resolvedExports"; - MembersOrExportsResolutionKind["resolvedMembers"] = "resolvedMembers"; - })(MembersOrExportsResolutionKind || (MembersOrExportsResolutionKind = {})); - var UnusedKind; - (function (UnusedKind) { - UnusedKind[UnusedKind["Local"] = 0] = "Local"; - UnusedKind[UnusedKind["Parameter"] = 1] = "Parameter"; - })(UnusedKind || (UnusedKind = {})); var builtinGlobals = ts.createSymbolTable(); builtinGlobals.set(undefinedSymbol.escapedName, undefinedSymbol); var isNotOverloadAndNotAccessor = ts.and(isNotOverload, isNotAccessor); initializeTypeChecker(); return checker; - /** - * @deprecated - */ function getSymbolDisplayBuilder() { return { buildTypeDisplay: function (type, writer, enclosingDeclaration, flags) { typeToString(type, enclosingDeclaration, flags, emitTextWriterWrapper(writer)); }, buildSymbolDisplay: function (symbol, writer, enclosingDeclaration, meaning, flags) { - if (flags === void 0) { flags = 0 /* None */; } - symbolToString(symbol, enclosingDeclaration, meaning, flags | 4 /* AllowAnyNodeKind */, emitTextWriterWrapper(writer)); + if (flags === void 0) { flags = 0; } + symbolToString(symbol, enclosingDeclaration, meaning, flags | 4, emitTextWriterWrapper(writer)); }, buildSignatureDisplay: function (signature, writer, enclosing, flags, kind) { signatureToString(signature, enclosing, flags, kind, emitTextWriterWrapper(writer)); }, buildIndexSignatureDisplay: function (info, writer, kind, enclosing, flags) { - var sig = nodeBuilder.indexInfoToIndexSignatureDeclaration(info, kind, enclosing, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */, writer); + var sig = nodeBuilder.indexInfoToIndexSignatureDeclaration(info, kind, enclosing, toNodeBuilderFlags(flags) | 3112960, writer); var printer = ts.createPrinter({ removeComments: true }); - printer.writeNode(4 /* Unspecified */, sig, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); + printer.writeNode(4, sig, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildParameterDisplay: function (symbol, writer, enclosing, flags) { - var node = nodeBuilder.symbolToParameterDeclaration(symbol, enclosing, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */, writer); + var node = nodeBuilder.symbolToParameterDeclaration(symbol, enclosing, toNodeBuilderFlags(flags) | 3112960, writer); var printer = ts.createPrinter({ removeComments: true }); - printer.writeNode(4 /* Unspecified */, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); // TODO: GH#18217 + printer.writeNode(4, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildTypeParameterDisplay: function (tp, writer, enclosing, flags) { - var node = nodeBuilder.typeParameterToDeclaration(tp, enclosing, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */ | 8192 /* OmitParameterModifiers */, writer); + var node = nodeBuilder.typeParameterToDeclaration(tp, enclosing, toNodeBuilderFlags(flags) | 3112960 | 8192, writer); var printer = ts.createPrinter({ removeComments: true }); - printer.writeNode(4 /* Unspecified */, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); // TODO: GH#18217 + printer.writeNode(4, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildTypePredicateDisplay: function (predicate, writer, enclosing, flags) { typePredicateToString(predicate, enclosing, flags, emitTextWriterWrapper(writer)); }, buildTypeParameterDisplayFromSymbol: function (symbol, writer, enclosing, flags) { - var nodes = nodeBuilder.symbolToTypeParameterDeclarations(symbol, enclosing, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */, writer); + var nodes = nodeBuilder.symbolToTypeParameterDeclarations(symbol, enclosing, toNodeBuilderFlags(flags) | 3112960, writer); var printer = ts.createPrinter({ removeComments: true }); - printer.writeList(26896 /* TypeParameters */, nodes, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); + printer.writeList(26896, nodes, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildDisplayForParametersAndDelimiters: function (thisParameter, parameters, writer, enclosing, originalFlags) { var printer = ts.createPrinter({ removeComments: true }); - var flags = 8192 /* OmitParameterModifiers */ | 3112960 /* IgnoreErrors */ | toNodeBuilderFlags(originalFlags); - var thisParameterArray = thisParameter ? [nodeBuilder.symbolToParameterDeclaration(thisParameter, enclosing, flags)] : []; // TODO: GH#18217 - var params = ts.createNodeArray(thisParameterArray.concat(ts.map(parameters, function (param) { return nodeBuilder.symbolToParameterDeclaration(param, enclosing, flags); }))); // TODO: GH#18217 - printer.writeList(1296 /* CallExpressionArguments */, params, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); + var flags = 8192 | 3112960 | toNodeBuilderFlags(originalFlags); + var thisParameterArray = thisParameter ? [nodeBuilder.symbolToParameterDeclaration(thisParameter, enclosing, flags)] : []; + var params = ts.createNodeArray(thisParameterArray.concat(ts.map(parameters, function (param) { return nodeBuilder.symbolToParameterDeclaration(param, enclosing, flags); }))); + printer.writeList(1296, params, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildDisplayForTypeParametersAndDelimiters: function (typeParameters, writer, enclosing, flags) { var printer = ts.createPrinter({ removeComments: true }); - var args = ts.createNodeArray(ts.map(typeParameters, function (p) { return nodeBuilder.typeParameterToDeclaration(p, enclosing, toNodeBuilderFlags(flags)); })); // TODO: GH#18217 - printer.writeList(26896 /* TypeParameters */, args, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); + var args = ts.createNodeArray(ts.map(typeParameters, function (p) { return nodeBuilder.typeParameterToDeclaration(p, enclosing, toNodeBuilderFlags(flags)); })); + printer.writeList(26896, args, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildReturnTypeDisplay: function (signature, writer, enclosing, flags) { writer.writePunctuation(":"); @@ -29598,9 +24041,9 @@ var ts; if (predicate) { return typePredicateToString(predicate, enclosing, flags, emitTextWriterWrapper(writer)); } - var node = nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosing, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */, writer); + var node = nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosing, toNodeBuilderFlags(flags) | 3112960, writer); var printer = ts.createPrinter({ removeComments: true }); - printer.writeNode(4 /* Unspecified */, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); // TODO: GH#18217 + printer.writeNode(4, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); } }; function emitTextWriterWrapper(underlying) { @@ -29687,7 +24130,7 @@ var ts; } var jsxPragma = file.pragmas.get("jsx"); if (jsxPragma) { - var chosenpragma = ts.isArray(jsxPragma) ? jsxPragma[0] : jsxPragma; // TODO: GH#18217 + var chosenpragma = ts.isArray(jsxPragma) ? jsxPragma[0] : jsxPragma; file.localJsxFactory = ts.parseIsolatedEntityName(chosenpragma.arguments.factory, languageVersion); if (file.localJsxFactory) { return file.localJsxNamespace = getFirstIdentifier(file.localJsxFactory).escapedText; @@ -29710,8 +24153,6 @@ var ts; return _jsxNamespace; } function getEmitResolver(sourceFile, cancellationToken) { - // Ensure we have all the type information in place for this file so that all the - // emitter questions of this resolver will return the right information. getDiagnostics(sourceFile, cancellationToken); return emitResolver; } @@ -29734,47 +24175,47 @@ var ts; } function createSymbol(flags, name, checkFlags) { symbolCount++; - var symbol = (new Symbol(flags | 33554432 /* Transient */, name)); + var symbol = (new Symbol(flags | 33554432, name)); symbol.checkFlags = checkFlags || 0; return symbol; } function isTransientSymbol(symbol) { - return (symbol.flags & 33554432 /* Transient */) !== 0; + return (symbol.flags & 33554432) !== 0; } function getExcludedSymbolFlags(flags) { var result = 0; - if (flags & 2 /* BlockScopedVariable */) - result |= 67216319 /* BlockScopedVariableExcludes */; - if (flags & 1 /* FunctionScopedVariable */) - result |= 67216318 /* FunctionScopedVariableExcludes */; - if (flags & 4 /* Property */) - result |= 0 /* PropertyExcludes */; - if (flags & 8 /* EnumMember */) - result |= 68008959 /* EnumMemberExcludes */; - if (flags & 16 /* Function */) - result |= 67215791 /* FunctionExcludes */; - if (flags & 32 /* Class */) - result |= 68008383 /* ClassExcludes */; - if (flags & 64 /* Interface */) - result |= 67901832 /* InterfaceExcludes */; - if (flags & 256 /* RegularEnum */) - result |= 68008191 /* RegularEnumExcludes */; - if (flags & 128 /* ConstEnum */) - result |= 68008831 /* ConstEnumExcludes */; - if (flags & 512 /* ValueModule */) - result |= 67215503 /* ValueModuleExcludes */; - if (flags & 8192 /* Method */) - result |= 67208127 /* MethodExcludes */; - if (flags & 32768 /* GetAccessor */) - result |= 67150783 /* GetAccessorExcludes */; - if (flags & 65536 /* SetAccessor */) - result |= 67183551 /* SetAccessorExcludes */; - if (flags & 262144 /* TypeParameter */) - result |= 67639784 /* TypeParameterExcludes */; - if (flags & 524288 /* TypeAlias */) - result |= 67901928 /* TypeAliasExcludes */; - if (flags & 2097152 /* Alias */) - result |= 2097152 /* AliasExcludes */; + if (flags & 2) + result |= 67216319; + if (flags & 1) + result |= 67216318; + if (flags & 4) + result |= 0; + if (flags & 8) + result |= 68008959; + if (flags & 16) + result |= 67215791; + if (flags & 32) + result |= 68008383; + if (flags & 64) + result |= 67901832; + if (flags & 256) + result |= 68008191; + if (flags & 128) + result |= 68008831; + if (flags & 512) + result |= 67215503; + if (flags & 8192) + result |= 67208127; + if (flags & 32768) + result |= 67150783; + if (flags & 65536) + result |= 67183551; + if (flags & 262144) + result |= 67639784; + if (flags & 524288) + result |= 67901928; + if (flags & 2097152) + result |= 2097152; return result; } function recordMergedSymbol(target, source) { @@ -29799,27 +24240,20 @@ var ts; recordMergedSymbol(result, symbol); return result; } - /** - * Note: if target is transient, then it is mutable, and mergeSymbol with both mutate and return it. - * If target is not transient, mergeSymbol will produce a transient clone, mutate that and return it. - */ function mergeSymbol(target, source) { if (!(target.flags & getExcludedSymbolFlags(source.flags)) || - (source.flags | target.flags) & 67108864 /* JSContainer */) { + (source.flags | target.flags) & 67108864) { ts.Debug.assert(source !== target); - if (!(target.flags & 33554432 /* Transient */)) { + if (!(target.flags & 33554432)) { target = cloneSymbol(target); } - // Javascript static-property-assignment declarations always merge, even though they are also values - if (source.flags & 512 /* ValueModule */ && target.flags & 512 /* ValueModule */ && target.constEnumOnlyModule && !source.constEnumOnlyModule) { - // reset flag when merging instantiated module into value module that has only const enums + if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) { target.constEnumOnlyModule = false; } target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || ts.isEffectiveModuleDeclaration(target.valueDeclaration) && !ts.isEffectiveModuleDeclaration(source.valueDeclaration))) { - // other kinds of value declarations take precedence over modules target.valueDeclaration = source.valueDeclaration; } ts.addRange(target.declarations, source.declarations); @@ -29835,21 +24269,21 @@ var ts; } recordMergedSymbol(target, source); } - else if (target.flags & 1024 /* NamespaceModule */) { + else if (target.flags & 1024) { error(ts.getNameOfDeclaration(source.declarations[0]), ts.Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity, symbolToString(target)); } else { - var message_2 = target.flags & 384 /* Enum */ || source.flags & 384 /* Enum */ + var message_2 = target.flags & 384 || source.flags & 384 ? ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations - : target.flags & 2 /* BlockScopedVariable */ || source.flags & 2 /* BlockScopedVariable */ + : target.flags & 2 || source.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; ts.forEach(source.declarations, function (node) { - var errorNode = (ts.getJavascriptInitializer(node, /*isPrototypeAssignment*/ false) ? ts.getOuterNameOfJsInitializer(node) : ts.getNameOfDeclaration(node)) || node; + var errorNode = (ts.getJavascriptInitializer(node, false) ? ts.getOuterNameOfJsInitializer(node) : ts.getNameOfDeclaration(node)) || node; error(errorNode, message_2, symbolToString(source)); }); ts.forEach(target.declarations, function (node) { - var errorNode = (ts.getJavascriptInitializer(node, /*isPrototypeAssignment*/ false) ? ts.getOuterNameOfJsInitializer(node) : ts.getNameOfDeclaration(node)) || node; + var errorNode = (ts.getJavascriptInitializer(node, false) ? ts.getOuterNameOfJsInitializer(node) : ts.getNameOfDeclaration(node)) || node; error(errorNode, message_2, symbolToString(source)); }); } @@ -29873,9 +24307,6 @@ var ts; function mergeModuleAugmentation(moduleName) { var moduleAugmentation = moduleName.parent; if (moduleAugmentation.symbol.declarations[0] !== moduleAugmentation) { - // this is a combined symbol for multiple augmentations within the same file. - // its symbol already has accumulated information for all declarations - // so we need to add it just once - do the work only for first declaration ts.Debug.assert(moduleAugmentation.symbol.declarations.length > 1); return; } @@ -29883,22 +24314,18 @@ var ts; mergeSymbolTable(globals, moduleAugmentation.symbol.exports); } else { - // find a module that about to be augmented - // do not validate names of augmentations that are defined in ambient context - var moduleNotFoundError = !(moduleName.parent.parent.flags & 4194304 /* Ambient */) + var moduleNotFoundError = !(moduleName.parent.parent.flags & 4194304) ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found : undefined; - var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, /*isForAugmentation*/ true); + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, true); if (!mainModule) { return; } - // obtain item referenced by 'export=' mainModule = resolveExternalModuleSymbol(mainModule); - if (mainModule.flags & 1920 /* Namespace */) { + if (mainModule.flags & 1920) { mainModule = mergeSymbol(mainModule, moduleAugmentation.symbol); } else { - // moduleName will be a StringLiteral since this is not `declare global`. error(moduleName, ts.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); } } @@ -29907,7 +24334,6 @@ var ts; source.forEach(function (sourceSymbol, id) { var targetSymbol = target.get(id); if (targetSymbol) { - // Error on redeclarations ts.forEach(targetSymbol.declarations, addDeclarationDiagnostic(ts.unescapeLeadingUnderscores(id), message)); } else { @@ -29919,7 +24345,7 @@ var ts; } } function getSymbolLinks(symbol) { - if (symbol.flags & 33554432 /* Transient */) + if (symbol.flags & 33554432) return symbol; var id = getSymbolId(symbol); return symbolLinks[id] || (symbolLinks[id] = {}); @@ -29929,38 +24355,30 @@ var ts; return nodeLinks[nodeId] || (nodeLinks[nodeId] = { flags: 0 }); } function isGlobalSourceFile(node) { - return node.kind === 274 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node); + return node.kind === 274 && !ts.isExternalOrCommonJsModule(node); } function getSymbol(symbols, name, meaning) { if (meaning) { var symbol = symbols.get(name); if (symbol) { - ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here."); if (symbol.flags & meaning) { return symbol; } - if (symbol.flags & 2097152 /* Alias */) { + if (symbol.flags & 2097152) { var target = resolveAlias(symbol); - // Unknown symbol means an error occurred in alias resolution, treat it as positive answer to avoid cascading errors if (target === unknownSymbol || target.flags & meaning) { return symbol; } } } } - // return undefined if we can't find a symbol. } - /** - * Get symbols that represent parameter-property-declaration as parameter and as property declaration - * @param parameter a parameterDeclaration node - * @param parameterName a name of the parameter to get the symbols for. - * @return a tuple of two symbols - */ function getSymbolsOfParameterPropertyDeclaration(parameter, parameterName) { var constructorDeclaration = parameter.parent; var classDeclaration = parameter.parent.parent; - var parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, 67216319 /* Value */); - var propertySymbol = getSymbol(getMembersOfSymbol(classDeclaration.symbol), parameterName, 67216319 /* Value */); + var parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, 67216319); + var propertySymbol = getSymbol(getMembersOfSymbol(classDeclaration.symbol), parameterName, 67216319); if (parameterSymbol && propertySymbol) { return [parameterSymbol, propertySymbol]; } @@ -29973,12 +24391,9 @@ var ts; if ((moduleKind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || (!compilerOptions.outFile && !compilerOptions.out) || isInTypeQuery(usage) || - declaration.flags & 4194304 /* Ambient */) { - // nodes are in different files and order cannot be determined + declaration.flags & 4194304) { return true; } - // declaration is after usage - // can be legal if usage is deferred (i.e. inside function or in initializer of instance property) if (isUsedInFunctionOrInstanceProperty(usage, declaration)) { return true; } @@ -29986,41 +24401,26 @@ var ts; return sourceFiles.indexOf(declarationFile) <= sourceFiles.indexOf(useFile); } if (declaration.pos <= usage.pos) { - // declaration is before usage - if (declaration.kind === 182 /* BindingElement */) { - // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2]) - var errorBindingElement = ts.getAncestor(usage, 182 /* BindingElement */); + if (declaration.kind === 182) { + var errorBindingElement = ts.getAncestor(usage, 182); if (errorBindingElement) { return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) || declaration.pos < errorBindingElement.pos; } - // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a) - return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 232 /* VariableDeclaration */), usage); + return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 232), usage); } - else if (declaration.kind === 232 /* VariableDeclaration */) { - // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a) + else if (declaration.kind === 232) { return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } else if (ts.isClassDeclaration(declaration)) { - // still might be illegal if the usage is within a computed property name in the class (eg class A { static p = "a"; [A.p]() {} }) return !ts.findAncestor(usage, function (n) { return ts.isComputedPropertyName(n) && n.parent.parent === declaration; }); } return true; } - // declaration is after usage, but it can still be legal if usage is deferred: - // 1. inside an export specifier - // 2. inside a function - // 3. inside an instance property initializer, a reference to a non-instance property - // 4. inside a static property initializer, a reference to a static method in the same class - // 5. inside a TS export= declaration (since we will move the export statement during emit to avoid TDZ) - // or if usage is in a type context: - // 1. inside a type query (typeof in type position) - if (usage.parent.kind === 252 /* ExportSpecifier */ || (usage.parent.kind === 249 /* ExportAssignment */ && usage.parent.isExportEquals)) { - // export specifiers do not use the variable, they only make it available for use + if (usage.parent.kind === 252 || (usage.parent.kind === 249 && usage.parent.isExportEquals)) { return true; } - // When resolving symbols for exports, the `usage` location passed in can be the export site directly - if (usage.kind === 249 /* ExportAssignment */ && usage.isExportEquals) { + if (usage.kind === 249 && usage.isExportEquals) { return true; } var container = ts.getEnclosingBlockScopeContainer(declaration); @@ -30028,17 +24428,14 @@ var ts; function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); switch (declaration.parent.parent.kind) { - case 214 /* VariableStatement */: - case 220 /* ForStatement */: - case 222 /* ForOfStatement */: - // variable statement/for/for-of statement case, - // use site should not be inside variable declaration (initializer of declaration or binding element) + case 214: + case 220: + case 222: if (isSameScopeDescendentOf(usage, declaration, container)) { return true; } break; } - // ForIn/ForOf case - use site should not be used in expression part var grandparent = declaration.parent.parent; return ts.isForInOrOfStatement(grandparent) && isSameScopeDescendentOf(usage, grandparent.expression, container); } @@ -30051,16 +24448,16 @@ var ts; return true; } var initializerOfProperty = current.parent && - current.parent.kind === 152 /* PropertyDeclaration */ && + current.parent.kind === 152 && current.parent.initializer === current; if (initializerOfProperty) { - if (ts.hasModifier(current.parent, 32 /* Static */)) { - if (declaration.kind === 154 /* MethodDeclaration */) { + if (ts.hasModifier(current.parent, 32)) { + if (declaration.kind === 154) { return true; } } else { - var isDeclarationInstanceProperty = declaration.kind === 152 /* PropertyDeclaration */ && !ts.hasModifier(declaration, 32 /* Static */); + var isDeclarationInstanceProperty = declaration.kind === 152 && !ts.hasModifier(declaration, 32); if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) { return true; } @@ -30070,19 +24467,12 @@ var ts; }); } } - /** - * Resolve a given name for a given meaning at a given location. An error is reported if the name was not found and - * the nameNotFoundMessage argument is not undefined. Returns the resolved symbol, or undefined if no symbol with - * the given name can be found. - * - * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters. - */ function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) { if (excludeGlobals === void 0) { excludeGlobals = false; } return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage); } function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) { - var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location + var originalLocation = location; var result; var lastLocation; var lastSelfReferenceLocation; @@ -30091,40 +24481,25 @@ var ts; var grandparent; var isInExternalModule = false; loop: while (location) { - // Locals of a source file are not in scope (because they get merged into the global symbol table) if (location.locals && !isGlobalSourceFile(location)) { if (result = lookup(location.locals, name, meaning)) { var useResult = true; if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { - // symbol lookup restrictions for function-like declarations - // - Type parameters of a function are in scope in the entire function declaration, including the parameter - // list and return type. However, local types are only in scope in the function body. - // - parameters are only in the scope of function body - // This restriction does not apply to JSDoc comment types because they are parented - // at a higher level than type parameters would normally be - if (meaning & result.flags & 67901928 /* Type */ && lastLocation.kind !== 286 /* JSDocComment */) { - useResult = result.flags & 262144 /* TypeParameter */ - // type parameters are visible in parameter list, return type and type parameter list + if (meaning & result.flags & 67901928 && lastLocation.kind !== 286) { + useResult = result.flags & 262144 ? lastLocation === location.type || - lastLocation.kind === 149 /* Parameter */ || - lastLocation.kind === 148 /* TypeParameter */ - // local types not visible outside the function body + lastLocation.kind === 149 || + lastLocation.kind === 148 : false; } - if (meaning & 67216319 /* Value */ && result.flags & 1 /* FunctionScopedVariable */) { - // parameters are visible only inside function body, parameter list and return type - // technically for parameter list case here we might mix parameters and variables declared in function, - // however it is detected separately when checking initializers of parameters - // to make sure that they reference no variables declared after them. + if (meaning & 67216319 && result.flags & 1) { useResult = - lastLocation.kind === 149 /* Parameter */ || + lastLocation.kind === 149 || (lastLocation === location.type && !!ts.findAncestor(result.valueDeclaration, ts.isParameter)); } } - else if (location.kind === 171 /* ConditionalType */) { - // A type parameter declared using 'infer T' in a conditional type is visible only in - // the true branch of the conditional type. + else if (location.kind === 171) { useResult = lastLocation === location.trueType; } if (useResult) { @@ -30136,43 +24511,28 @@ var ts; } } switch (location.kind) { - case 274 /* SourceFile */: + case 274: if (!ts.isExternalOrCommonJsModule(location)) break; isInExternalModule = true; - // falls through - case 239 /* ModuleDeclaration */: + case 239: var moduleExports = getSymbolOfNode(location).exports; - if (location.kind === 274 /* SourceFile */ || ts.isAmbientModule(location)) { - // It's an external module. First see if the module has an export default and if the local - // name of that export default matches. - if (result = moduleExports.get("default" /* Default */)) { + if (location.kind === 274 || ts.isAmbientModule(location)) { + if (result = moduleExports.get("default")) { var localSymbol = ts.getLocalSymbolForExportDefault(result); if (localSymbol && (result.flags & meaning) && localSymbol.escapedName === name) { break loop; } result = undefined; } - // Because of module/namespace merging, a module's exports are in scope, - // yet we never want to treat an export specifier as putting a member in scope. - // Therefore, if the name we find is purely an export specifier, it is not actually considered in scope. - // Two things to note about this: - // 1. We have to check this without calling getSymbol. The problem with calling getSymbol - // on an export specifier is that it might find the export specifier itself, and try to - // resolve it as an alias. This will cause the checker to consider the export specifier - // a circular alias reference when it might not be. - // 2. We check === SymbolFlags.Alias in order to check that the symbol is *purely* - // an alias. If we used &, we'd be throwing out symbols that have non alias aspects, - // which is not the desired behavior. var moduleExport = moduleExports.get(name); if (moduleExport && - moduleExport.flags === 2097152 /* Alias */ && - ts.getDeclarationOfKind(moduleExport, 252 /* ExportSpecifier */)) { + moduleExport.flags === 2097152 && + ts.getDeclarationOfKind(moduleExport, 252)) { break; } } - // ES6 exports are also visible locally (except for 'default'), but commonjs exports are not (except typedefs) - if (name !== "default" /* Default */ && (result = lookup(moduleExports, name, meaning & 2623475 /* ModuleMember */))) { + if (name !== "default" && (result = lookup(moduleExports, name, meaning & 2623475))) { if (ts.isSourceFile(location) && location.commonJsModuleIndicator && !result.declarations.some(ts.isJSDocTypeAlias)) { result = undefined; } @@ -30181,48 +24541,37 @@ var ts; } } break; - case 238 /* EnumDeclaration */: - if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) { + case 238: + if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8)) { break loop; } break; - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - // TypeScript 1.0 spec (April 2014): 8.4.1 - // Initializer expressions for instance member variables are evaluated in the scope - // of the class constructor body but are not permitted to reference parameters or - // local variables of the constructor. This effectively means that entities from outer scopes - // by the same name as a constructor parameter or local variable are inaccessible - // in initializer expressions for instance member variables. - if (ts.isClassLike(location.parent) && !ts.hasModifier(location, 32 /* Static */)) { + case 152: + case 151: + if (ts.isClassLike(location.parent) && !ts.hasModifier(location, 32)) { var ctor = findConstructorDeclaration(location.parent); if (ctor && ctor.locals) { - if (lookup(ctor.locals, name, meaning & 67216319 /* Value */)) { - // Remember the property node, it will be used later to report appropriate error + if (lookup(ctor.locals, name, meaning & 67216319)) { propertyWithInvalidInitializer = location; } } } break; - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 236 /* InterfaceDeclaration */: - if (result = lookup(getMembersOfSymbol(getSymbolOfNode(location)), name, meaning & 67901928 /* Type */)) { + case 235: + case 205: + case 236: + if (result = lookup(getMembersOfSymbol(getSymbolOfNode(location)), name, meaning & 67901928)) { if (!isTypeParameterSymbolDeclaredInContainer(result, location)) { - // ignore type parameters not declared in this container result = undefined; break; } - if (lastLocation && ts.hasModifier(lastLocation, 32 /* Static */)) { - // TypeScript 1.0 spec (April 2014): 3.4.1 - // The scope of a type parameter extends over the entire declaration with which the type - // parameter list is associated, with the exception of static member declarations in classes. + if (lastLocation && ts.hasModifier(lastLocation, 32)) { error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); return undefined; } break loop; } - if (location.kind === 205 /* ClassExpression */ && meaning & 32 /* Class */) { + if (location.kind === 205 && meaning & 32) { var className = location.name; if (className && name === className.escapedText) { result = location.symbol; @@ -30230,11 +24579,10 @@ var ts; } } break; - case 207 /* ExpressionWithTypeArguments */: - // The type parameters of a class are not in scope in the base class expression. - if (lastLocation === location.expression && location.parent.token === 85 /* ExtendsKeyword */) { + case 207: + if (lastLocation === location.expression && location.parent.token === 85) { var container = location.parent.parent; - if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 67901928 /* Type */))) { + if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 67901928))) { if (nameNotFoundMessage) { error(errorLocation, ts.Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters); } @@ -30242,42 +24590,33 @@ var ts; } } break; - // It is not legal to reference a class's own type parameters from a computed property name that - // belongs to the class. For example: - // - // function foo() { return '' } - // class C { // <-- Class's own type parameter T - // [foo()]() { } // <-- Reference to T from class's own computed property - // } - // - case 147 /* ComputedPropertyName */: + case 147: grandparent = location.parent.parent; - if (ts.isClassLike(grandparent) || grandparent.kind === 236 /* InterfaceDeclaration */) { - // A reference to this grandparent's type parameters would be an error - if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 67901928 /* Type */)) { + if (ts.isClassLike(grandparent) || grandparent.kind === 236) { + if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 67901928)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); return undefined; } } break; - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 234 /* FunctionDeclaration */: - case 193 /* ArrowFunction */: - if (meaning & 3 /* Variable */ && name === "arguments") { + case 154: + case 153: + case 155: + case 156: + case 157: + case 234: + case 193: + if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } break; - case 192 /* FunctionExpression */: - if (meaning & 3 /* Variable */ && name === "arguments") { + case 192: + if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } - if (meaning & 16 /* Function */) { + if (meaning & 16) { var functionName = location.name; if (functionName && name === functionName.escapedText) { result = location.symbol; @@ -30285,31 +24624,16 @@ var ts; } } break; - case 150 /* Decorator */: - // Decorators are resolved at the class declaration. Resolving at the parameter - // or member would result in looking up locals in the method. - // - // function y() {} - // class C { - // method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter. - // } - // - if (location.parent && location.parent.kind === 149 /* Parameter */) { + case 150: + if (location.parent && location.parent.kind === 149) { location = location.parent; } - // - // function y() {} - // class C { - // @y method(x, y) {} // <-- decorator y should be resolved at the class declaration, not the method. - // } - // if (location.parent && ts.isClassElement(location.parent)) { location = location.parent; } break; - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: - // js type aliases do not resolve names from their host, so skip past it + case 297: + case 292: location = ts.getJSDocHost(location); break; } @@ -30319,15 +24643,12 @@ var ts; lastLocation = location; location = location.parent; } - // We just climbed up parents looking for the name, meaning that we started in a descendant node of `lastLocation`. - // If `result === lastSelfReferenceLocation.symbol`, that means that we are somewhere inside `lastSelfReferenceLocation` looking up a name, and resolving to `lastLocation` itself. - // That means that this is a self-reference of `lastLocation`, and shouldn't count this when considering whether `lastLocation` is used. if (isUse && result && (!lastSelfReferenceLocation || result !== lastSelfReferenceLocation.symbol)) { result.isReferenced |= meaning; } if (!result) { if (lastLocation) { - ts.Debug.assert(lastLocation.kind === 274 /* SourceFile */); + ts.Debug.assert(lastLocation.kind === 274); if (lastLocation.commonJsModuleIndicator && name === "exports") { return lastLocation.symbol; } @@ -30338,7 +24659,7 @@ var ts; } if (!result) { if (originalLocation && ts.isInJavaScriptFile(originalLocation) && originalLocation.parent) { - if (ts.isRequireCall(originalLocation.parent, /*checkArgumentIsStringLiteralLike*/ false)) { + if (ts.isRequireCall(originalLocation.parent, false)) { return requireSymbol; } if (ts.isIdentifier(originalLocation) && ts.isPropertyAccessExpression(originalLocation.parent) && @@ -30350,7 +24671,7 @@ var ts; if (!result) { if (nameNotFoundMessage) { if (!errorLocation || - !checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && // TODO: GH#18217 + !checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && !checkAndReportErrorForExtendingInterface(errorLocation) && !checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) && !checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) && @@ -30370,39 +24691,24 @@ var ts; } return undefined; } - // Perform extra checks only if error reporting was requested if (nameNotFoundMessage) { if (propertyWithInvalidInitializer) { - // We have a match, but the reference occurred within a property initializer and the identifier also binds - // to a local variable in the constructor where the code will be emitted. var propertyName = propertyWithInvalidInitializer.name; error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), diagnosticName(nameArg)); return undefined; } - // Only check for block-scoped variable if we have an error location and are looking for the - // name with variable meaning - // For example, - // declare module foo { - // interface bar {} - // } - // const foo/*1*/: foo/*2*/.bar; - // The foo at /*1*/ and /*2*/ will share same symbol with two meanings: - // block-scoped variable and namespace module. However, only when we - // try to resolve name in /*1*/ which is used in variable position, - // we want to check for block-scoped if (errorLocation && - (meaning & 2 /* BlockScopedVariable */ || - ((meaning & 32 /* Class */ || meaning & 384 /* Enum */) && (meaning & 67216319 /* Value */) === 67216319 /* Value */))) { + (meaning & 2 || + ((meaning & 32 || meaning & 384) && (meaning & 67216319) === 67216319))) { var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result); - if (exportOrLocalSymbol.flags & 2 /* BlockScopedVariable */ || exportOrLocalSymbol.flags & 32 /* Class */ || exportOrLocalSymbol.flags & 384 /* Enum */) { + if (exportOrLocalSymbol.flags & 2 || exportOrLocalSymbol.flags & 32 || exportOrLocalSymbol.flags & 384) { checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); } } - // If we're in an external module, we can't reference value symbols created from UMD export declarations - if (result && isInExternalModule && (meaning & 67216319 /* Value */) === 67216319 /* Value */ && !(originalLocation.flags & 2097152 /* JSDoc */)) { + if (result && isInExternalModule && (meaning & 67216319) === 67216319 && !(originalLocation.flags & 2097152)) { var decls = result.declarations; - if (decls && decls.length === 1 && decls[0].kind === 242 /* NamespaceExportDeclaration */) { - error(errorLocation, ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, ts.unescapeLeadingUnderscores(name)); // TODO: GH#18217 + if (decls && decls.length === 1 && decls[0].kind === 242) { + error(errorLocation, ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, ts.unescapeLeadingUnderscores(name)); } } } @@ -30410,12 +24716,12 @@ var ts; } function isSelfReferenceLocation(node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 238 /* EnumDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 239 /* ModuleDeclaration */: // For `namespace N { N; }` + case 234: + case 235: + case 236: + case 238: + case 237: + case 239: return true; default: return false; @@ -30427,10 +24733,10 @@ var ts; function isTypeParameterSymbolDeclaredInContainer(symbol, container) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; - if (decl.kind === 148 /* TypeParameter */) { + if (decl.kind === 148) { var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent; if (parent === container) { - return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217 + return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); } } } @@ -30440,7 +24746,7 @@ var ts; if (!ts.isIdentifier(errorLocation) || errorLocation.escapedText !== name || isTypeReferenceIdentifier(errorLocation) || isInTypeQuery(errorLocation)) { return false; } - var container = ts.getThisContainer(errorLocation, /*includeArrowFunctions*/ false); + var container = ts.getThisContainer(errorLocation, false); var location = container; while (location) { if (ts.isClassLike(location.parent)) { @@ -30448,16 +24754,13 @@ var ts; if (!classSymbol) { break; } - // Check to see if a static member exists. var constructorType = getTypeOfSymbol(classSymbol); if (getPropertyOfType(constructorType, name)) { error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0, diagnosticName(nameArg), symbolToString(classSymbol)); return true; } - // No static member is present. - // Check if we're in an instance method and look for a relevant instance member. - if (location === container && !ts.hasModifier(location, 32 /* Static */)) { - var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217 + if (location === container && !ts.hasModifier(location, 32)) { + var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; if (getPropertyOfType(instanceType, name)) { error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg)); return true; @@ -30470,34 +24773,29 @@ var ts; } function checkAndReportErrorForExtendingInterface(errorLocation) { var expression = getEntityNameForExtendingInterface(errorLocation); - if (expression && resolveEntityName(expression, 64 /* Interface */, /*ignoreErrors*/ true)) { + if (expression && resolveEntityName(expression, 64, true)) { error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); return true; } return false; } - /** - * Climbs up parents to an ExpressionWithTypeArguments, and returns its expression, - * but returns undefined if that expression is not an EntityNameExpression. - */ function getEntityNameForExtendingInterface(node) { switch (node.kind) { - case 71 /* Identifier */: - case 185 /* PropertyAccessExpression */: + case 71: + case 185: return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined; - case 207 /* ExpressionWithTypeArguments */: + case 207: if (ts.isEntityNameExpression(node.expression)) { return node.expression; } - // falls through default: return undefined; } } function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) { - var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJavaScriptFile(errorLocation) ? 67216319 /* Value */ : 0); + var namespaceMeaning = 1920 | (ts.isInJavaScriptFile(errorLocation) ? 67216319 : 0); if (meaning === namespaceMeaning) { - var symbol = resolveSymbol(resolveName(errorLocation, name, 67901928 /* Type */ & ~namespaceMeaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)); + var symbol = resolveSymbol(resolveName(errorLocation, name, 67901928 & ~namespaceMeaning, undefined, undefined, false)); var parent = errorLocation.parent; if (symbol) { if (ts.isQualifiedName(parent)) { @@ -30516,13 +24814,13 @@ var ts; return false; } function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) { - if (meaning & (67216319 /* Value */ & ~1024 /* NamespaceModule */)) { + if (meaning & (67216319 & ~1024)) { if (name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never") { error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, ts.unescapeLeadingUnderscores(name)); return true; } - var symbol = resolveSymbol(resolveName(errorLocation, name, 67901928 /* Type */ & ~67216319 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)); - if (symbol && !(symbol.flags & 1024 /* NamespaceModule */)) { + var symbol = resolveSymbol(resolveName(errorLocation, name, 67901928 & ~67216319, undefined, undefined, false)); + if (symbol && !(symbol.flags & 1024)) { error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, ts.unescapeLeadingUnderscores(name)); return true; } @@ -30530,15 +24828,15 @@ var ts; return false; } function checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) { - if (meaning & (67216319 /* Value */ & ~1024 /* NamespaceModule */ & ~67901928 /* Type */)) { - var symbol = resolveSymbol(resolveName(errorLocation, name, 1024 /* NamespaceModule */ & ~67216319 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)); + if (meaning & (67216319 & ~1024 & ~67901928)) { + var symbol = resolveSymbol(resolveName(errorLocation, name, 1024 & ~67216319, undefined, undefined, false)); if (symbol) { error(errorLocation, ts.Diagnostics.Cannot_use_namespace_0_as_a_value, ts.unescapeLeadingUnderscores(name)); return true; } } - else if (meaning & (67901928 /* Type */ & ~1024 /* NamespaceModule */ & ~67216319 /* Value */)) { - var symbol = resolveSymbol(resolveName(errorLocation, name, (512 /* ValueModule */ | 1024 /* NamespaceModule */) & ~67901928 /* Type */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)); + else if (meaning & (67901928 & ~1024 & ~67216319)) { + var symbol = resolveSymbol(resolveName(errorLocation, name, (512 | 1024) & ~67901928, undefined, undefined, false)); if (symbol) { error(errorLocation, ts.Diagnostics.Cannot_use_namespace_0_as_a_type, ts.unescapeLeadingUnderscores(name)); return true; @@ -30547,39 +24845,34 @@ var ts; return false; } function checkResolvedBlockScopedVariable(result, errorLocation) { - ts.Debug.assert(!!(result.flags & 2 /* BlockScopedVariable */ || result.flags & 32 /* Class */ || result.flags & 384 /* Enum */)); - // Block-scoped variables cannot be used before their definition - var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 238 /* EnumDeclaration */) ? d : undefined; }); + ts.Debug.assert(!!(result.flags & 2 || result.flags & 32 || result.flags & 384)); + var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 238) ? d : undefined; }); if (declaration === undefined) return ts.Debug.fail("Declaration to checkResolvedBlockScopedVariable is undefined"); - if (!(declaration.flags & 4194304 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) { - if (result.flags & 2 /* BlockScopedVariable */) { + if (!(declaration.flags & 4194304) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) { + if (result.flags & 2) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration))); } - else if (result.flags & 32 /* Class */) { + else if (result.flags & 32) { error(errorLocation, ts.Diagnostics.Class_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration))); } - else if (result.flags & 256 /* RegularEnum */) { + else if (result.flags & 256) { error(errorLocation, ts.Diagnostics.Enum_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration))); } } } - /* Starting from 'initial' node walk up the parent chain until 'stopAt' node is reached. - * If at any point current node is equal to 'parent' node - return true. - * Return false if 'stopAt' node is reached or isFunctionLike(current) === true. - */ function isSameScopeDescendentOf(initial, parent, stopAt) { return !!parent && !!ts.findAncestor(initial, function (n) { return n === stopAt || ts.isFunctionLike(n) ? "quit" : n === parent; }); } function getAnyImportSyntax(node) { switch (node.kind) { - case 243 /* ImportEqualsDeclaration */: + case 243: return node; - case 245 /* ImportClause */: + case 245: return node.parent; - case 246 /* NamespaceImport */: + case 246: return node.parent.parent; - case 248 /* ImportSpecifier */: + case 248: return node.parent.parent.parent; default: return undefined; @@ -30589,48 +24882,37 @@ var ts; return ts.find(symbol.declarations, ts.isAliasSymbolDeclaration); } function getTargetOfImportEqualsDeclaration(node, dontResolveAlias) { - if (node.moduleReference.kind === 254 /* ExternalModuleReference */) { + if (node.moduleReference.kind === 254) { return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); } return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, dontResolveAlias); } function resolveExportByName(moduleSymbol, name, dontResolveAlias) { - var exportValue = moduleSymbol.exports.get("export=" /* ExportEquals */); + var exportValue = moduleSymbol.exports.get("export="); return exportValue ? getPropertyOfType(getTypeOfSymbol(exportValue), name) : resolveSymbol(moduleSymbol.exports.get(name), dontResolveAlias); } function isSyntacticDefault(node) { - return ((ts.isExportAssignment(node) && !node.isExportEquals) || ts.hasModifier(node, 512 /* Default */) || ts.isExportSpecifier(node)); + return ((ts.isExportAssignment(node) && !node.isExportEquals) || ts.hasModifier(node, 512) || ts.isExportSpecifier(node)); } function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias) { if (!allowSyntheticDefaultImports) { return false; } - // Declaration files (and ambient modules) if (!file || file.isDeclarationFile) { - // Definitely cannot have a synthetic default if they have a syntactic default member specified - var defaultExportSymbol = resolveExportByName(moduleSymbol, "default" /* Default */, /*dontResolveAlias*/ true); // Dont resolve alias because we want the immediately exported symbol's declaration + var defaultExportSymbol = resolveExportByName(moduleSymbol, "default", true); if (defaultExportSymbol && ts.some(defaultExportSymbol.declarations, isSyntacticDefault)) { return false; } - // It _might_ still be incorrect to assume there is no __esModule marker on the import at runtime, even if there is no `default` member - // So we check a bit more, if (resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), dontResolveAlias)) { - // If there is an `__esModule` specified in the declaration (meaning someone explicitly added it or wrote it in their code), - // it definitely is a module and does not have a synthetic default return false; } - // There are _many_ declaration files not written with esmodules in mind that still get compiled into a format with __esModule set - // Meaning there may be no default at runtime - however to be on the permissive side, we allow access to a synthetic default member - // as there is no marker to indicate if the accompanying JS has `__esModule` or not, or is even native esm return true; } - // TypeScript files never have a synthetic default (as they are always emitted with an __esModule marker) _unless_ they contain an export= statement if (!ts.isSourceFileJavaScript(file)) { return hasExportAssignmentSymbol(moduleSymbol); } - // JS files have a synthetic default if they do not contain ES2015+ module syntax (export = is not valid in js) _and_ do not have an __esModule marker return !file.externalModuleIndicator && !resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), dontResolveAlias); } function getTargetOfImportClause(node, dontResolveAlias) { @@ -30641,7 +24923,7 @@ var ts; exportDefaultSymbol = moduleSymbol; } else { - exportDefaultSymbol = resolveExportByName(moduleSymbol, "default" /* Default */, dontResolveAlias); + exportDefaultSymbol = resolveExportByName(moduleSymbol, "default", dontResolveAlias); } var file = ts.find(moduleSymbol.declarations, ts.isSourceFile); var hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias); @@ -30649,7 +24931,6 @@ var ts; error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); } else if (hasSyntheticDefault) { - // per emit behavior, a synthetic default overrides a "real" .default member if `__esModule` is not present return resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } return exportDefaultSymbol; @@ -30659,29 +24940,11 @@ var ts; var moduleSpecifier = node.parent.parent.moduleSpecifier; return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias); } - // This function creates a synthetic symbol that combines the value side of one symbol with the - // type/namespace side of another symbol. Consider this example: - // - // declare module graphics { - // interface Point { - // x: number; - // y: number; - // } - // } - // declare var graphics: { - // Point: new (x: number, y: number) => graphics.Point; - // } - // declare module "graphics" { - // export = graphics; - // } - // - // An 'import { Point } from "graphics"' needs to create a symbol that combines the value side 'Point' - // property with the type/namespace side interface 'Point'. function combineValueAndTypeSymbols(valueSymbol, typeSymbol) { if (valueSymbol === unknownSymbol && typeSymbol === unknownSymbol) { return unknownSymbol; } - if (valueSymbol.flags & (67901928 /* Type */ | 1920 /* Namespace */)) { + if (valueSymbol.flags & (67901928 | 1920)) { return valueSymbol; } var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.escapedName); @@ -30696,21 +24959,21 @@ var ts; return result; } function getExportOfModule(symbol, name, dontResolveAlias) { - if (symbol.flags & 1536 /* Module */) { + if (symbol.flags & 1536) { return resolveSymbol(getExportsOfSymbol(symbol).get(name), dontResolveAlias); } } function getPropertyOfVariable(symbol, name) { - if (symbol.flags & 3 /* Variable */) { + if (symbol.flags & 3) { var typeAnnotation = symbol.valueDeclaration.type; if (typeAnnotation) { - return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name)); // TODO: GH#18217 + return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name)); } } } function getExternalModuleMember(node, specifier, dontResolveAlias) { if (dontResolveAlias === void 0) { dontResolveAlias = false; } - var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); // TODO: GH#18217 + var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier, dontResolveAlias); if (targetSymbol) { var name = specifier.propertyName || specifier.name; @@ -30719,18 +24982,15 @@ var ts; 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.get("export=" /* ExportEquals */)) { + if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=")) { symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name.escapedText); } else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText); } - // if symbolFromVariable is export - get its final target symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias); var symbolFromModule = getExportOfModule(targetSymbol, name.escapedText, dontResolveAlias); - // 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.escapedText === "default" /* Default */) { + if (!symbolFromModule && allowSyntheticDefaultImports && name.escapedText === "default") { symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } var symbol = symbolFromModule && symbolFromVariable && symbolFromModule !== symbolFromVariable ? @@ -30760,14 +25020,14 @@ var ts; function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) { return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : - resolveEntityName(node.propertyName || node.name, meaning, /*ignoreErrors*/ false, dontResolveAlias); + resolveEntityName(node.propertyName || node.name, meaning, false, dontResolveAlias); } function getTargetOfExportAssignment(node, dontResolveAlias) { var expression = (ts.isExportAssignment(node) ? node.expression : node.right); if (ts.isClassExpression(expression)) { return checkExpression(expression).symbol; } - var aliasLike = resolveEntityName(expression, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontResolveAlias); + var aliasLike = resolveEntityName(expression, 67216319 | 67901928 | 1920, true, dontResolveAlias); if (aliasLike) { return aliasLike; } @@ -30777,40 +25037,36 @@ var ts; function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) { if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; } switch (node.kind) { - case 243 /* ImportEqualsDeclaration */: + case 243: return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve); - case 245 /* ImportClause */: + case 245: return getTargetOfImportClause(node, dontRecursivelyResolve); - case 246 /* NamespaceImport */: + case 246: return getTargetOfNamespaceImport(node, dontRecursivelyResolve); - case 248 /* ImportSpecifier */: + case 248: return getTargetOfImportSpecifier(node, dontRecursivelyResolve); - case 252 /* ExportSpecifier */: - return getTargetOfExportSpecifier(node, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve); - case 249 /* ExportAssignment */: - case 200 /* BinaryExpression */: + case 252: + return getTargetOfExportSpecifier(node, 67216319 | 67901928 | 1920, dontRecursivelyResolve); + case 249: + case 200: return getTargetOfExportAssignment(node, dontRecursivelyResolve); - case 242 /* NamespaceExportDeclaration */: + case 242: return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve); default: return ts.Debug.fail(); } } - /** - * Indicates that a symbol is an alias that does not merge with a local declaration. - * OR Is a JSContainer which may merge an alias with a local declaration - */ function isNonLocalAlias(symbol, excludes) { - if (excludes === void 0) { excludes = 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */; } + if (excludes === void 0) { excludes = 67216319 | 67901928 | 1920; } if (!symbol) return false; - return (symbol.flags & (2097152 /* Alias */ | excludes)) === 2097152 /* Alias */ || !!(symbol.flags & 2097152 /* Alias */ && symbol.flags & 67108864 /* JSContainer */); + return (symbol.flags & (2097152 | excludes)) === 2097152 || !!(symbol.flags & 2097152 && symbol.flags & 67108864); } function resolveSymbol(symbol, dontResolveAlias) { return !dontResolveAlias && isNonLocalAlias(symbol) ? resolveAlias(symbol) : symbol; } function resolveAlias(symbol) { - ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here."); + ts.Debug.assert((symbol.flags & 2097152) !== 0, "Should only get Alias here."); var links = getSymbolLinks(symbol); if (!links.target) { links.target = resolvingSymbol; @@ -30835,15 +25091,12 @@ var ts; var target = resolveAlias(symbol); if (target) { var markAlias = target === unknownSymbol || - ((target.flags & 67216319 /* Value */) && !isConstEnumOrConstEnumOnlyModule(target)); + ((target.flags & 67216319) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } } } - // When an alias symbol is referenced, we need to mark the entity it references as referenced and in turn repeat that until - // we reach a non-alias or an exported entity (which is always considered referenced). We do this by checking the target of - // the alias as an expression (which recursively takes us back here if the target references another alias). function markAliasSymbolAsReferenced(symbol) { var links = getSymbolLinks(symbol); if (!links.referenced) { @@ -30851,66 +25104,50 @@ var ts; var node = getDeclarationOfAliasSymbol(symbol); if (!node) return ts.Debug.fail(); - if (node.kind === 249 /* ExportAssignment */) { - // export default + if (node.kind === 249) { checkExpressionCached(node.expression); } - else if (node.kind === 252 /* ExportSpecifier */) { - // export { } or export { as foo } + else if (node.kind === 252) { checkExpressionCached(node.propertyName || node.name); } else if (ts.isInternalModuleImportEqualsDeclaration(node)) { - // import foo = checkExpressionCached(node.moduleReference); } } } - // This function is only for imports with entity names function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) { - // There are three things we might try to look for. In the following examples, - // the search term is enclosed in |...|: - // - // import a = |b|; // Namespace - // import a = |b.c|; // Value, type, namespace - // import a = |b.c|.d; // Namespace - if (entityName.kind === 71 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + if (entityName.kind === 71 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } - // Check for case 1 and 3 in the above example - if (entityName.kind === 71 /* Identifier */ || entityName.parent.kind === 146 /* QualifiedName */) { - return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias); + if (entityName.kind === 71 || entityName.parent.kind === 146) { + return resolveEntityName(entityName, 1920, false, dontResolveAlias); } else { - // Case 2 in above example - // entityName.kind could be a QualifiedName or a Missing identifier - ts.Debug.assert(entityName.parent.kind === 243 /* ImportEqualsDeclaration */); - return resolveEntityName(entityName, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias); + ts.Debug.assert(entityName.parent.kind === 243); + return resolveEntityName(entityName, 67216319 | 67901928 | 1920, false, dontResolveAlias); } } function getFullyQualifiedName(symbol) { return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); } - /** - * Resolves a qualified name and any involved aliases. - */ function resolveEntityName(name, meaning, ignoreErrors, dontResolveAlias, location) { if (ts.nodeIsMissing(name)) { return undefined; } - var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJavaScriptFile(name) ? meaning & 67216319 /* Value */ : 0); + var namespaceMeaning = 1920 | (ts.isInJavaScriptFile(name) ? meaning & 67216319 : 0); var symbol; - if (name.kind === 71 /* Identifier */) { + if (name.kind === 71) { var message = meaning === namespaceMeaning ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0; var symbolFromJSPrototype = ts.isInJavaScriptFile(name) ? resolveEntityNameFromJSSpecialAssignment(name, meaning) : undefined; - symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true); + symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, true); if (!symbol) { return symbolFromJSPrototype; } } - else if (name.kind === 146 /* QualifiedName */ || name.kind === 185 /* PropertyAccessExpression */) { - var left = name.kind === 146 /* QualifiedName */ ? name.left : name.expression; - var right = name.kind === 146 /* QualifiedName */ ? name.right : name.name; - var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location); + else if (name.kind === 146 || name.kind === 185) { + var left = name.kind === 146 ? name.left : name.expression; + var right = name.kind === 146 ? name.right : name.name; + var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, false, location); if (!namespace || ts.nodeIsMissing(right)) { return undefined; } @@ -30943,32 +25180,26 @@ var ts; else { throw ts.Debug.assertNever(name, "Unknown entity name kind."); } - ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here."); return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol); } - /** - * 1. For prototype-property methods like `A.prototype.m = function () ...`, try to resolve names in the scope of `A` too. - * Note that prototype-property assignment to locations outside the current file (eg globals) doesn't work, so - * name resolution won't work either. - * 2. For property assignments like `{ x: function f () { } }`, try to resolve names in the scope of `f` too. - */ function resolveEntityNameFromJSSpecialAssignment(name, meaning) { if (isJSDocTypeReference(name.parent)) { var secondaryLocation = getJSSpecialAssignmentLocation(name.parent); if (secondaryLocation) { - return resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); + return resolveName(secondaryLocation, name.escapedText, meaning, undefined, name, true); } } } function getJSSpecialAssignmentLocation(node) { - var typeAlias = ts.findAncestor(node, function (node) { return !(ts.isJSDocNode(node) || node.flags & 2097152 /* JSDoc */) ? "quit" : ts.isJSDocTypeAlias(node); }); + var typeAlias = ts.findAncestor(node, function (node) { return !(ts.isJSDocNode(node) || node.flags & 2097152) ? "quit" : ts.isJSDocTypeAlias(node); }); if (typeAlias) { return; } var host = ts.getJSDocHost(node); if (ts.isExpressionStatement(host) && ts.isBinaryExpression(host.expression) && - ts.getSpecialPropertyAssignmentKind(host.expression) === 3 /* PrototypeProperty */) { + ts.getSpecialPropertyAssignmentKind(host.expression) === 3) { var symbol = getSymbolOfNode(host.expression.left); return symbol && symbol.parent.valueDeclaration; } @@ -30997,24 +25228,22 @@ var ts; var withoutAtTypePrefix = ts.removePrefix(moduleReference, "@types/"); error(errorNode, diag, withoutAtTypePrefix, moduleReference); } - var ambientModule = tryFindAmbientModule(moduleReference, /*withAugmentations*/ true); + var ambientModule = tryFindAmbientModule(moduleReference, true); if (ambientModule) { return ambientModule; } var currentSourceFile = ts.getSourceFileOfNode(location); - var resolvedModule = ts.getResolvedModule(currentSourceFile, moduleReference); // TODO: GH#18217 + var resolvedModule = ts.getResolvedModule(currentSourceFile, moduleReference); var resolutionDiagnostic = resolvedModule && ts.getResolutionDiagnostic(compilerOptions, resolvedModule); var sourceFile = resolvedModule && !resolutionDiagnostic && host.getSourceFile(resolvedModule.resolvedFileName); if (sourceFile) { if (sourceFile.symbol) { if (resolvedModule.isExternalLibraryImport && !ts.extensionIsTypeScript(resolvedModule.extension)) { - errorOnImplicitAnyModule(/*isError*/ false, errorNode, resolvedModule, moduleReference); + errorOnImplicitAnyModule(false, errorNode, resolvedModule, moduleReference); } - // merged symbol is module declaration symbol combined with all augmentations return getMergedSymbol(sourceFile.symbol); } if (moduleNotFoundError) { - // report errors only if it was requested error(errorNode, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName); } return undefined; @@ -31025,26 +25254,23 @@ var ts; return getMergedSymbol(pattern.symbol); } } - // May be an untyped module. If so, ignore resolutionDiagnostic. if (resolvedModule && !ts.resolutionExtensionIsTypeScriptOrJson(resolvedModule.extension) && resolutionDiagnostic === undefined || resolutionDiagnostic === ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { if (isForAugmentation) { var diag = ts.Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName); } else { - errorOnImplicitAnyModule(/*isError*/ noImplicitAny && !!moduleNotFoundError, errorNode, resolvedModule, moduleReference); + errorOnImplicitAnyModule(noImplicitAny && !!moduleNotFoundError, errorNode, resolvedModule, moduleReference); } - // Failed imports and untyped modules are both treated in an untyped manner; only difference is whether we give a diagnostic first. return undefined; } if (moduleNotFoundError) { - // For relative paths, see if this was possibly a projectReference redirect if (ts.pathIsRelative(moduleReference)) { var sourceFile_1 = ts.getSourceFileOfNode(location); var redirects = sourceFile_1.redirectedReferences; if (redirects) { var normalizedTargetPath = ts.getNormalizedAbsolutePath(moduleReference, ts.getDirectoryPath(sourceFile_1.fileName)); - for (var _i = 0, _a = [".ts" /* Ts */, ".tsx" /* Tsx */]; _i < _a.length; _i++) { + for (var _i = 0, _a = [".ts", ".tsx"]; _i < _a.length; _i++) { var ext = _a[_i]; var probePath = normalizedTargetPath + ext; if (redirects.indexOf(probePath) >= 0) { @@ -31072,12 +25298,11 @@ var ts; } function errorOnImplicitAnyModule(isError, errorNode, _a, moduleReference) { var packageId = _a.packageId, resolvedFileName = _a.resolvedFileName; - var errorInfo = packageId && ts.chainDiagnosticMessages( - /*details*/ undefined, ts.Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, ts.getMangledNameForScopedPackage(packageId.name)); + var errorInfo = packageId && ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, ts.getMangledNameForScopedPackage(packageId.name)); errorOrSuggestion(isError, errorNode, ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, moduleReference, resolvedFileName)); } function resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) { - return moduleSymbol && getMergedSymbol(getCommonJsExportEquals(resolveSymbol(moduleSymbol.exports.get("export=" /* ExportEquals */), dontResolveAlias), moduleSymbol)) || moduleSymbol; + return moduleSymbol && getMergedSymbol(getCommonJsExportEquals(resolveSymbol(moduleSymbol.exports.get("export="), dontResolveAlias), moduleSymbol)) || moduleSymbol; } function getCommonJsExportEquals(exported, moduleSymbol) { if (!exported || moduleSymbol.exports.size === 1) { @@ -31085,23 +25310,20 @@ var ts; } var merged = cloneSymbol(exported); if (merged.exports === undefined) { - merged.flags = merged.flags | 512 /* ValueModule */; + merged.flags = merged.flags | 512; merged.exports = ts.createSymbolTable(); } moduleSymbol.exports.forEach(function (s, name) { - if (name === "export=" /* ExportEquals */) + if (name === "export=") return; merged.exports.set(name, merged.exports.has(name) ? mergeSymbol(merged.exports.get(name), s) : s); }); return merged; } - // An external module with an 'export =' declaration may be referenced as an ES6 module provided the 'export =' - // references a symbol that is at least declared as a module or a variable. The target of the 'export =' may - // combine other declarations with the module or variable (e.g. a class/module, function/module, interface/variable). function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias) { var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias); if (!dontResolveAlias && symbol) { - if (!(symbol.flags & (1536 /* Module */ | 3 /* Variable */))) { + if (!(symbol.flags & (1536 | 3))) { error(referencingLocation, ts.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol)); return symbol; } @@ -31110,13 +25332,12 @@ var ts; if ((ts.isImportDeclaration(referenceParent) && ts.getNamespaceDeclarationNode(referenceParent)) || ts.isImportCall(referenceParent)) { var type = getTypeOfSymbol(symbol); - var sigs = getSignaturesOfStructuredType(type, 0 /* Call */); + var sigs = getSignaturesOfStructuredType(type, 0); if (!sigs || !sigs.length) { - sigs = getSignaturesOfStructuredType(type, 1 /* Construct */); + sigs = getSignaturesOfStructuredType(type, 1); } if (sigs && sigs.length) { var moduleType = getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol); - // Create a new symbol which has the module's type less the call and construct signatures var result = createSymbol(symbol.flags, symbol.escapedName); result.declarations = symbol.declarations ? symbol.declarations.slice() : []; result.parent = symbol.parent; @@ -31130,7 +25351,7 @@ var ts; result.members = ts.cloneMap(symbol.members); if (symbol.exports) result.exports = ts.cloneMap(symbol.exports); - var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above + var resolvedModuleType = resolveStructuredTypeMembers(moduleType); result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo); return result; } @@ -31140,7 +25361,7 @@ var ts; return symbol; } function hasExportAssignmentSymbol(moduleSymbol) { - return moduleSymbol.exports.get("export=" /* ExportEquals */) !== undefined; + return moduleSymbol.exports.get("export=") !== undefined; } function getExportsOfModuleAsArray(moduleSymbol) { return symbolsToArray(getExportsOfModule(moduleSymbol)); @@ -31169,26 +25390,22 @@ var ts; return undefined; } var type = getTypeOfSymbol(exportEquals); - return type.flags & 32764 /* Primitive */ ? undefined : getPropertyOfType(type, memberName); + return type.flags & 32764 ? undefined : getPropertyOfType(type, memberName); } function getExportsOfSymbol(symbol) { - return symbol.flags & 32 /* Class */ ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedExports" /* resolvedExports */) : - symbol.flags & 1536 /* Module */ ? getExportsOfModule(symbol) : + return symbol.flags & 32 ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedExports") : + symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; } function getExportsOfModule(moduleSymbol) { var links = getSymbolLinks(moduleSymbol); return links.resolvedExports || (links.resolvedExports = getExportsOfModuleWorker(moduleSymbol)); } - /** - * Extends one symbol table with another while collecting information on name collisions for error message generation into the `lookupTable` argument - * Not passing `lookupTable` and `exportNode` disables this collection, and just extends the tables - */ function extendExportSymbols(target, source, lookupTable, exportNode) { if (!source) return; source.forEach(function (sourceSymbol, id) { - if (id === "default" /* Default */) + if (id === "default") return; var targetSymbol = target.get(id); if (!targetSymbol) { @@ -31212,18 +25429,14 @@ var ts; } function getExportsOfModuleWorker(moduleSymbol) { var visitedSymbols = []; - // A module defined by an 'export=' consists on one export that needs to be resolved moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); return visit(moduleSymbol) || emptySymbols; - // The ES6 spec permits export * declarations in a module to circularly reference the module itself. For example, - // module 'a' can 'export * from "b"' and 'b' can 'export * from "a"' without error. function visit(symbol) { - if (!(symbol && symbol.flags & 1955 /* HasExports */ && ts.pushIfUnique(visitedSymbols, symbol))) { + if (!(symbol && symbol.flags & 1955 && ts.pushIfUnique(visitedSymbols, symbol))) { return; } var symbols = ts.cloneMap(symbol.exports); - // All export * declarations are collected in an __export symbol by the binder - var exportStars = symbol.exports.get("__export" /* ExportStar */); + var exportStars = symbol.exports.get("__export"); if (exportStars) { var nestedSymbols = ts.createSymbolTable(); var lookupTable_1 = ts.createMap(); @@ -31235,7 +25448,6 @@ var ts; } lookupTable_1.forEach(function (_a, id) { var exportsWithDuplicate = _a.exportsWithDuplicate; - // It's not an error if the file with multiple `export *`s with duplicate names exports a member with that name itself if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || symbols.has(id)) { return; } @@ -31259,10 +25471,6 @@ var ts; function getParentOfSymbol(symbol) { return getMergedSymbol(symbol.parent && getLateBoundSymbol(symbol.parent)); } - /** - * Attempts to find the symbol corresponding to the container a symbol is in - usually this - * is just its' `.parent`, but for locals, this value is `undefined` - */ function getContainerOfSymbol(symbol) { var container = getParentOfSymbol(symbol); if (container) { @@ -31277,7 +25485,6 @@ var ts; } function getAliasForSymbolInContainer(container, symbol) { if (container === getParentOfSymbol(symbol)) { - // fast path, `symbol` is either already the alias or isn't aliased return symbol; } var exports = getExportsOfSymbol(container); @@ -31297,18 +25504,18 @@ var ts; } } function getExportSymbolOfValueSymbolIfExported(symbol) { - return symbol && (symbol.flags & 1048576 /* ExportValue */) !== 0 + return symbol && (symbol.flags & 1048576) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; } function symbolIsValue(symbol) { - return !!(symbol.flags & 67216319 /* Value */ || symbol.flags & 2097152 /* Alias */ && resolveAlias(symbol).flags & 67216319 /* Value */); + return !!(symbol.flags & 67216319 || symbol.flags & 2097152 && resolveAlias(symbol).flags & 67216319); } function findConstructorDeclaration(node) { var members = node.members; for (var _i = 0, members_2 = members; _i < members_2.length; _i++) { var member = members_2[_i]; - if (member.kind === 155 /* Constructor */ && ts.nodeIsPresent(member.body)) { + if (member.kind === 155 && ts.nodeIsPresent(member.body)) { return member; } } @@ -31326,12 +25533,12 @@ var ts; } function createBooleanType(trueFalseTypes) { var type = getUnionType(trueFalseTypes); - type.flags |= 16 /* Boolean */; + type.flags |= 16; type.intrinsicName = "boolean"; return type; } function createObjectType(objectFlags, symbol) { - var type = createType(131072 /* Object */); + var type = createType(131072); type.objectFlags = objectFlags; type.symbol = symbol; return type; @@ -31339,15 +25546,11 @@ var ts; function createTypeofType() { return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType)); } - // A reserved member name starts with two underscores, but the third character cannot be an underscore - // or the @ symbol. A third underscore indicates an escaped form of an identifer that started - // with at least two underscores. The @ character indicates that the name is denoted by a well known ES - // Symbol instance. function isReservedMemberName(name) { - return name.charCodeAt(0) === 95 /* _ */ && - name.charCodeAt(1) === 95 /* _ */ && - name.charCodeAt(2) !== 95 /* _ */ && - name.charCodeAt(2) !== 64 /* at */; + return name.charCodeAt(0) === 95 && + name.charCodeAt(1) === 95 && + name.charCodeAt(2) !== 95 && + name.charCodeAt(2) !== 64; } function getNamedMembers(members) { var result; @@ -31374,24 +25577,22 @@ var ts; return type; } function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { - return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + return setStructuredTypeMembers(createObjectType(16, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } function forEachSymbolTableInScope(enclosingDeclaration, callback) { var result; for (var location = enclosingDeclaration; location; location = location.parent) { - // Locals of a source file are not in scope (because they get merged into the global symbol table) if (location.locals && !isGlobalSourceFile(location)) { if (result = callback(location.locals)) { return result; } } switch (location.kind) { - case 274 /* SourceFile */: + case 274: if (!ts.isExternalOrCommonJsModule(location)) { break; } - // falls through - case 239 /* ModuleDeclaration */: + case 239: if (result = callback(getSymbolOfNode(location).exports)) { return result; } @@ -31401,8 +25602,7 @@ var ts; return callback(globals); } function getQualifiedLeftMeaning(rightMeaning) { - // If we are looking in value space, the parent meaning is value, other wise it is namespace - return rightMeaning === 67216319 /* Value */ ? 67216319 /* Value */ : 1920 /* Namespace */; + return rightMeaning === 67216319 ? 67216319 : 1920; } function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing, visitedSymbolTablesMap) { if (visitedSymbolTablesMap === void 0) { visitedSymbolTablesMap = ts.createMap(); } @@ -31415,9 +25615,6 @@ var ts; visitedSymbolTablesMap.set(id, visitedSymbolTables = []); } return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); - /** - * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already) - */ function getAccessibleSymbolChainFromSymbolTable(symbols, ignoreQualification) { if (!ts.pushIfUnique(visitedSymbolTables, symbols)) { return undefined; @@ -31427,46 +25624,36 @@ var ts; return result; } function canQualifySymbol(symbolFromSymbolTable, meaning) { - // If the symbol is equivalent and doesn't need further qualification, this symbol is accessible return !needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning) || - // If symbol needs qualification, make sure that parent is accessible, if it is then this symbol is accessible too !!getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing, visitedSymbolTablesMap); } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol, ignoreQualification) { return symbol === (resolvedAliasSymbol || symbolFromSymbolTable) && - // if the symbolFromSymbolTable is not external module (it could be if it was determined as ambient external module and would be in globals table) - // and if symbolFromSymbolTable or alias resolution matches the symbol, - // check the symbol can be qualified, it is only then this symbol is accessible !ts.some(symbolFromSymbolTable.declarations, hasNonGlobalAugmentationExternalModuleSymbol) && (ignoreQualification || canQualifySymbol(symbolFromSymbolTable, meaning)); } function trySymbolTable(symbols, ignoreQualification) { - // If symbol is directly available by its name in the symbol table - if (isAccessible(symbols.get(symbol.escapedName), /*resolvedAliasSymbol*/ undefined, ignoreQualification)) { + if (isAccessible(symbols.get(symbol.escapedName), undefined, ignoreQualification)) { return [symbol]; } - // Check if symbol is any of the alias return ts.forEachEntry(symbols, function (symbolFromSymbolTable) { - if (symbolFromSymbolTable.flags & 2097152 /* Alias */ - && symbolFromSymbolTable.escapedName !== "export=" /* ExportEquals */ - && symbolFromSymbolTable.escapedName !== "default" /* Default */ + if (symbolFromSymbolTable.flags & 2097152 + && symbolFromSymbolTable.escapedName !== "export=" + && symbolFromSymbolTable.escapedName !== "default" && !(ts.isUMDExportSymbol(symbolFromSymbolTable) && enclosingDeclaration && ts.isExternalModule(ts.getSourceFileOfNode(enclosingDeclaration))) - // If `!useOnlyExternalAliasing`, we can use any type of alias to get the name && (!useOnlyExternalAliasing || ts.some(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration))) { var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification)) { return [symbolFromSymbolTable]; } - // Look in the exported members, if we can find accessibleSymbolChain, symbol is accessible using this chain - // but only if the symbolFromSymbolTable can be qualified var candidateTable = getExportsOfSymbol(resolvedImportedSymbol); - var accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable(candidateTable, /*ignoreQualification*/ true); + var accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable(candidateTable, true); if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); } } if (symbolFromSymbolTable.escapedName === symbol.escapedName && symbolFromSymbolTable.exportSymbol) { - if (isAccessible(getMergedSymbol(symbolFromSymbolTable.exportSymbol), /*aliasSymbol*/ undefined, ignoreQualification)) { + if (isAccessible(getMergedSymbol(symbolFromSymbolTable.exportSymbol), undefined, ignoreQualification)) { return [symbol]; } } @@ -31476,24 +25663,18 @@ var ts; function needsQualification(symbol, enclosingDeclaration, meaning) { var qualify = false; forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { - // If symbol of this name is not available in the symbol table we are ok var symbolFromSymbolTable = getMergedSymbol(symbolTable.get(symbol.escapedName)); if (!symbolFromSymbolTable) { - // Continue to the next symbol table return false; } - // If the symbol with this name is present it should refer to the symbol if (symbolFromSymbolTable === symbol) { - // No need to qualify return true; } - // Qualify if the symbol from symbol table has same meaning as expected - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 252 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 252)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; } - // Continue to the next symbol table return false; }); return qualify; @@ -31503,10 +25684,10 @@ var ts; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { - case 152 /* PropertyDeclaration */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 152: + case 154: + case 156: + case 157: continue; default: return false; @@ -31517,129 +25698,97 @@ var ts; return false; } function isTypeSymbolAccessible(typeSymbol, enclosingDeclaration) { - var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67901928 /* Type */, /*shouldComputeAliasesToMakeVisible*/ false); - return access.accessibility === 0 /* Accessible */; + var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67901928, false); + return access.accessibility === 0; } function isValueSymbolAccessible(typeSymbol, enclosingDeclaration) { - var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67216319 /* Value */, /*shouldComputeAliasesToMakeVisible*/ false); - return access.accessibility === 0 /* Accessible */; + var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67216319, false); + return access.accessibility === 0; } - /** - * Check if the given symbol in given enclosing declaration is accessible and mark all associated alias to be visible if requested - * - * @param symbol a Symbol to check if accessible - * @param enclosingDeclaration a Node containing reference to the symbol - * @param meaning a SymbolFlags to check if such meaning of the symbol is accessible - * @param shouldComputeAliasToMakeVisible a boolean value to indicate whether to return aliases to be mark visible in case the symbol is accessible - */ function isSymbolAccessible(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible) { if (symbol && enclosingDeclaration) { var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { - // Symbol is accessible if it by itself is accessible - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, /*useOnlyExternalAliasing*/ false); + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); if (accessibleSymbolChain) { var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible); if (!hasAccessibleDeclarations) { return { - accessibility: 1 /* NotAccessible */, + accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), - errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1920 /* Namespace */) : undefined, + errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1920) : undefined, }; } return hasAccessibleDeclarations; } else { if (ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { - // Any meaning of a module symbol is always accessible via an `import` type return { - accessibility: 0 /* Accessible */ + accessibility: 0 }; } } - // If we haven't got the accessible symbol, it doesn't mean the symbol is actually inaccessible. - // It could be a qualified symbol and hence verify the path - // e.g.: - // module m { - // export class c { - // } - // } - // const x: typeof m.c - // In the above example when we start with checking if typeof m.c symbol is accessible, - // we are going to see if c can be accessed in scope directly. - // But it can't, hence the accessible is going to be undefined, but that doesn't mean m.c is inaccessible - // It is accessible if the parent m is accessible because then m.c can be accessed through qualification meaningToLook = getQualifiedLeftMeaning(meaning); symbol = getContainerOfSymbol(symbol); } - // This could be a symbol that is not exported in the external module - // or it could be a symbol from different external module that is not aliased and hence cannot be named var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer); if (symbolExternalModule) { var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); if (symbolExternalModule !== enclosingExternalModule) { - // name from different external module that is not visible return { - accessibility: 2 /* CannotBeNamed */, + accessibility: 2, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbolToString(symbolExternalModule) }; } } - // Just a local name that is not accessible return { - accessibility: 1 /* NotAccessible */, + accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), }; } - return { accessibility: 0 /* Accessible */ }; + return { accessibility: 0 }; function getExternalModuleContainer(declaration) { var node = ts.findAncestor(declaration, hasExternalModuleSymbol); return node && getSymbolOfNode(node); } } function hasExternalModuleSymbol(declaration) { - return ts.isAmbientModule(declaration) || (declaration.kind === 274 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); + return ts.isAmbientModule(declaration) || (declaration.kind === 274 && ts.isExternalOrCommonJsModule(declaration)); } function hasNonGlobalAugmentationExternalModuleSymbol(declaration) { - return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 274 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); + return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 274 && ts.isExternalOrCommonJsModule(declaration)); } function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) { var aliasesToMakeVisible; if (!ts.every(symbol.declarations, getIsDeclarationVisible)) { return undefined; } - return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible }; + return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible }; function getIsDeclarationVisible(declaration) { if (!isDeclarationVisible(declaration)) { - // Mark the unexported alias as visible if its parent is visible - // because these kind of aliases can be used to name types in declaration file var anyImportSyntax = getAnyImportSyntax(declaration); if (anyImportSyntax && - !ts.hasModifier(anyImportSyntax, 1 /* Export */) && // import clause without export + !ts.hasModifier(anyImportSyntax, 1) && isDeclarationVisible(anyImportSyntax.parent)) { return addVisibleAlias(declaration, anyImportSyntax); } else if (ts.isVariableDeclaration(declaration) && ts.isVariableStatement(declaration.parent.parent) && - !ts.hasModifier(declaration.parent.parent, 1 /* Export */) && // unexported variable statement + !ts.hasModifier(declaration.parent.parent, 1) && isDeclarationVisible(declaration.parent.parent.parent)) { return addVisibleAlias(declaration, declaration.parent.parent); } - else if (ts.isLateVisibilityPaintedStatement(declaration) // unexported top-level statement - && !ts.hasModifier(declaration, 1 /* Export */) + else if (ts.isLateVisibilityPaintedStatement(declaration) + && !ts.hasModifier(declaration, 1) && isDeclarationVisible(declaration.parent)) { return addVisibleAlias(declaration, declaration); } - // Declaration is not visible return false; } return true; } function addVisibleAlias(declaration, aliasingStatement) { - // In function "buildTypeDisplay" where we decide whether to write type-alias or serialize types, - // we want to just check if type- alias is accessible or not but we don't care about emitting those alias at that time - // since we will do the emitting later in trackSymbol. if (shouldComputeAliasToMakeVisible) { getNodeLinks(declaration).isVisible = true; aliasesToMakeVisible = ts.appendIfUnique(aliasesToMakeVisible, aliasingStatement); @@ -31648,147 +25797,141 @@ var ts; } } function isEntityNameVisible(entityName, enclosingDeclaration) { - // get symbol of the first identifier of the entityName var meaning; - if (entityName.parent.kind === 165 /* TypeQuery */ || + if (entityName.parent.kind === 165 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) || - entityName.parent.kind === 147 /* ComputedPropertyName */) { - // Typeof value - meaning = 67216319 /* Value */ | 1048576 /* ExportValue */; + entityName.parent.kind === 147) { + meaning = 67216319 | 1048576; } - else if (entityName.kind === 146 /* QualifiedName */ || entityName.kind === 185 /* PropertyAccessExpression */ || - entityName.parent.kind === 243 /* ImportEqualsDeclaration */) { - // Left identifier from type reference or TypeAlias - // Entity name of the import declaration - meaning = 1920 /* Namespace */; + else if (entityName.kind === 146 || entityName.kind === 185 || + entityName.parent.kind === 243) { + meaning = 1920; } else { - // Type Reference or TypeAlias entity = Identifier - meaning = 67901928 /* Type */; + meaning = 67901928; } var firstIdentifier = getFirstIdentifier(entityName); - var symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); - // Verify if the symbol is accessible - return (symbol && hasVisibleDeclarations(symbol, /*shouldComputeAliasToMakeVisible*/ true)) || { - accessibility: 1 /* NotAccessible */, + var symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, undefined, undefined, false); + return (symbol && hasVisibleDeclarations(symbol, true)) || { + accessibility: 1, errorSymbolName: ts.getTextOfNode(firstIdentifier), errorNode: firstIdentifier }; } function symbolToString(symbol, enclosingDeclaration, meaning, flags, writer) { - if (flags === void 0) { flags = 4 /* AllowAnyNodeKind */; } - var nodeFlags = 3112960 /* IgnoreErrors */; - if (flags & 2 /* UseOnlyExternalAliasing */) { - nodeFlags |= 128 /* UseOnlyExternalAliasing */; + if (flags === void 0) { flags = 4; } + var nodeFlags = 3112960; + if (flags & 2) { + nodeFlags |= 128; } - if (flags & 1 /* WriteTypeParametersOrArguments */) { - nodeFlags |= 512 /* WriteTypeParametersInQualifiedName */; + if (flags & 1) { + nodeFlags |= 512; } - if (flags & 8 /* UseAliasDefinedOutsideCurrentScope */) { - nodeFlags |= 16384 /* UseAliasDefinedOutsideCurrentScope */; + if (flags & 8) { + nodeFlags |= 16384; } - var builder = flags & 4 /* AllowAnyNodeKind */ ? nodeBuilder.symbolToExpression : nodeBuilder.symbolToEntityName; + var builder = flags & 4 ? nodeBuilder.symbolToExpression : nodeBuilder.symbolToEntityName; return writer ? symbolToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(symbolToStringWorker); function symbolToStringWorker(writer) { - var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217 + var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); var printer = ts.createPrinter({ removeComments: true }); var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration); - printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer); + printer.writeNode(4, entity, sourceFile, writer); return writer; } } function signatureToString(signature, enclosingDeclaration, flags, kind, writer) { - if (flags === void 0) { flags = 0 /* None */; } + if (flags === void 0) { flags = 0; } return writer ? signatureToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(signatureToStringWorker); function signatureToStringWorker(writer) { var sigOutput; - if (flags & 262144 /* WriteArrowStyleSignature */) { - sigOutput = kind === 1 /* Construct */ ? 164 /* ConstructorType */ : 163 /* FunctionType */; + if (flags & 262144) { + sigOutput = kind === 1 ? 164 : 163; } else { - sigOutput = kind === 1 /* Construct */ ? 159 /* ConstructSignature */ : 158 /* CallSignature */; + sigOutput = kind === 1 ? 159 : 158; } - var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */); + var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960 | 512); var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true }); var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration); - printer.writeNode(4 /* Unspecified */, sig, /*sourceFile*/ sourceFile, writer); // TODO: GH#18217 + printer.writeNode(4, sig, sourceFile, writer); return writer; } } function typeToString(type, enclosingDeclaration, flags, writer) { - if (flags === void 0) { flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; } + if (flags === void 0) { flags = 1048576 | 16384; } if (writer === void 0) { writer = ts.createTextWriter(""); } - var typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */, writer); + var typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960, writer); if (typeNode === undefined) return ts.Debug.fail("should always get typenode"); var options = { removeComments: true }; var printer = ts.createPrinter(options); var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration); - printer.writeNode(4 /* Unspecified */, typeNode, /*sourceFile*/ sourceFile, writer); + printer.writeNode(4, typeNode, sourceFile, writer); var result = writer.getText(); - var maxLength = compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */ ? undefined : 100; + var maxLength = compilerOptions.noErrorTruncation || flags & 1 ? undefined : 100; if (maxLength && result && result.length >= maxLength) { return result.substr(0, maxLength - "...".length) + "..."; } return result; } function toNodeBuilderFlags(flags) { - if (flags === void 0) { flags = 0 /* None */; } - return flags & 9469291 /* NodeBuilderFlagsMask */; + if (flags === void 0) { flags = 0; } + return flags & 9469291; } function createNodeBuilder() { return { typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = typeToTypeNodeHelper(type, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context); var result = context.encounteredError ? undefined : resultingNode; - return result; // TODO: GH#18217 + return result; }, signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = signatureToSignatureDeclarationHelper(signature, kind, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, symbolToEntityName: function (symbol, meaning, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); - var resultingNode = symbolToName(symbol, context, meaning, /*expectsIdentifier*/ false); + var resultingNode = symbolToName(symbol, context, meaning, false); var result = context.encounteredError ? undefined : resultingNode; return result; }, symbolToExpression: function (symbol, meaning, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = symbolToExpression(symbol, context, meaning); var result = context.encounteredError ? undefined : resultingNode; return result; }, symbolToTypeParameterDeclarations: function (symbol, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = typeParametersToTypeParameterDeclarations(symbol, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, symbolToParameterDeclaration: function (symbol, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = symbolToParameterDeclaration(symbol, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, typeParameterToDeclaration: function (parameter, enclosingDeclaration, flags, tracker) { - ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8 /* Synthesized */) === 0); + ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = typeParameterToDeclaration(parameter, context); var result = context.encounteredError ? undefined : resultingNode; @@ -31798,7 +25941,7 @@ var ts; function createNodeBuilderContext(enclosingDeclaration, flags, tracker) { return { enclosingDeclaration: enclosingDeclaration, - flags: flags || 0 /* None */, + flags: flags || 0, tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop }, encounteredError: false, visitedSymbols: undefined, @@ -31809,78 +25952,78 @@ var ts; if (cancellationToken && cancellationToken.throwIfCancellationRequested) { cancellationToken.throwIfCancellationRequested(); } - var inTypeAlias = context.flags & 8388608 /* InTypeAlias */; - context.flags &= ~8388608 /* InTypeAlias */; + var inTypeAlias = context.flags & 8388608; + context.flags &= ~8388608; if (!type) { context.encounteredError = true; - return undefined; // TODO: GH#18217 + return undefined; } - if (type.flags & 1 /* Any */) { - return ts.createKeywordTypeNode(119 /* AnyKeyword */); + if (type.flags & 1) { + return ts.createKeywordTypeNode(119); } - if (type.flags & 2 /* Unknown */) { - return ts.createKeywordTypeNode(142 /* UnknownKeyword */); + if (type.flags & 2) { + return ts.createKeywordTypeNode(142); } - if (type.flags & 4 /* String */) { - return ts.createKeywordTypeNode(137 /* StringKeyword */); + if (type.flags & 4) { + return ts.createKeywordTypeNode(137); } - if (type.flags & 8 /* Number */) { - return ts.createKeywordTypeNode(134 /* NumberKeyword */); + if (type.flags & 8) { + return ts.createKeywordTypeNode(134); } - if (type.flags & 16 /* Boolean */) { - return ts.createKeywordTypeNode(122 /* BooleanKeyword */); + if (type.flags & 16) { + return ts.createKeywordTypeNode(122); } - if (type.flags & 512 /* EnumLiteral */ && !(type.flags & 262144 /* Union */)) { + if (type.flags & 512 && !(type.flags & 262144)) { var parentSymbol = getParentOfSymbol(type.symbol); - var parentName = symbolToName(parentSymbol, context, 67901928 /* Type */, /*expectsIdentifier*/ false); + var parentName = symbolToName(parentSymbol, context, 67901928, false); var enumLiteralName = getDeclaredTypeOfSymbol(parentSymbol) === type ? parentName : ts.createQualifiedName(parentName, ts.symbolName(type.symbol)); - return ts.createTypeReferenceNode(enumLiteralName, /*typeArguments*/ undefined); + return ts.createTypeReferenceNode(enumLiteralName, undefined); } - if (type.flags & 544 /* EnumLike */) { - var name = symbolToName(type.symbol, context, 67901928 /* Type */, /*expectsIdentifier*/ false); - return ts.createTypeReferenceNode(name, /*typeArguments*/ undefined); + if (type.flags & 544) { + var name = symbolToName(type.symbol, context, 67901928, false); + return ts.createTypeReferenceNode(name, undefined); } - if (type.flags & (64 /* StringLiteral */)) { - return ts.createLiteralTypeNode(ts.setEmitFlags(ts.createLiteral(type.value), 16777216 /* NoAsciiEscaping */)); + if (type.flags & (64)) { + return ts.createLiteralTypeNode(ts.setEmitFlags(ts.createLiteral(type.value), 16777216)); } - if (type.flags & (128 /* NumberLiteral */)) { + if (type.flags & (128)) { return ts.createLiteralTypeNode((ts.createLiteral(type.value))); } - if (type.flags & 256 /* BooleanLiteral */) { + if (type.flags & 256) { return type.intrinsicName === "true" ? ts.createTrue() : ts.createFalse(); } - if (type.flags & 2048 /* UniqueESSymbol */) { - if (!(context.flags & 1048576 /* AllowUniqueESSymbolType */)) { + if (type.flags & 2048) { + if (!(context.flags & 1048576)) { if (isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { - return symbolToTypeNode(type.symbol, context, 67216319 /* Value */); + return symbolToTypeNode(type.symbol, context, 67216319); } if (context.tracker.reportInaccessibleUniqueSymbolError) { context.tracker.reportInaccessibleUniqueSymbolError(); } } - return ts.createTypeOperatorNode(141 /* UniqueKeyword */, ts.createKeywordTypeNode(138 /* SymbolKeyword */)); + return ts.createTypeOperatorNode(141, ts.createKeywordTypeNode(138)); } - if (type.flags & 4096 /* Void */) { - return ts.createKeywordTypeNode(105 /* VoidKeyword */); + if (type.flags & 4096) { + return ts.createKeywordTypeNode(105); } - if (type.flags & 8192 /* Undefined */) { - return ts.createKeywordTypeNode(140 /* UndefinedKeyword */); + if (type.flags & 8192) { + return ts.createKeywordTypeNode(140); } - if (type.flags & 16384 /* Null */) { - return ts.createKeywordTypeNode(95 /* NullKeyword */); + if (type.flags & 16384) { + return ts.createKeywordTypeNode(95); } - if (type.flags & 32768 /* Never */) { - return ts.createKeywordTypeNode(131 /* NeverKeyword */); + if (type.flags & 32768) { + return ts.createKeywordTypeNode(131); } - if (type.flags & 1024 /* ESSymbol */) { - return ts.createKeywordTypeNode(138 /* SymbolKeyword */); + if (type.flags & 1024) { + return ts.createKeywordTypeNode(138); } - if (type.flags & 16777216 /* NonPrimitive */) { - return ts.createKeywordTypeNode(135 /* ObjectKeyword */); + if (type.flags & 16777216) { + return ts.createKeywordTypeNode(135); } - if (type.flags & 65536 /* TypeParameter */ && type.isThisType) { - if (context.flags & 4194304 /* InObjectTypeLiteral */) { - if (!context.encounteredError && !(context.flags & 32768 /* AllowThisInObjectLiteral */)) { + if (type.flags & 65536 && type.isThisType) { + if (context.flags & 4194304) { + if (!context.encounteredError && !(context.flags & 32768)) { context.encounteredError = true; } if (context.tracker.reportInaccessibleThisError) { @@ -31890,63 +26033,61 @@ var ts; return ts.createThis(); } var objectFlags = ts.getObjectFlags(type); - if (objectFlags & 4 /* Reference */) { - ts.Debug.assert(!!(type.flags & 131072 /* Object */)); + if (objectFlags & 4) { + ts.Debug.assert(!!(type.flags & 131072)); return typeReferenceToTypeNode(type); } - if (type.flags & 65536 /* TypeParameter */ || objectFlags & 3 /* ClassOrInterface */) { - if (type.flags & 65536 /* TypeParameter */ && ts.contains(context.inferTypeParameters, type)) { - return ts.createInferTypeNode(typeParameterToDeclarationWithConstraint(type, context, /*constraintNode*/ undefined)); + if (type.flags & 65536 || objectFlags & 3) { + if (type.flags & 65536 && ts.contains(context.inferTypeParameters, type)) { + return ts.createInferTypeNode(typeParameterToDeclarationWithConstraint(type, context, undefined)); } - if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && - type.flags & 65536 /* TypeParameter */ && + if (context.flags & 4 && + type.flags & 65536 && ts.length(type.symbol.declarations) && ts.isTypeParameterDeclaration(type.symbol.declarations[0]) && typeParameterShadowsNameInScope(type, context) && !isTypeSymbolAccessible(type.symbol, context.enclosingDeclaration)) { - return ts.createTypeReferenceNode(ts.getGeneratedNameForNode(type.symbol.declarations[0].name, 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */), /*typeArguments*/ undefined); + return ts.createTypeReferenceNode(ts.getGeneratedNameForNode(type.symbol.declarations[0].name, 16 | 8), undefined); } - // Ignore constraint/default when creating a usage (as opposed to declaration) of a type parameter. return type.symbol - ? symbolToTypeNode(type.symbol, context, 67901928 /* Type */) - : ts.createTypeReferenceNode(ts.createIdentifier("?"), /*typeArguments*/ undefined); + ? symbolToTypeNode(type.symbol, context, 67901928) + : ts.createTypeReferenceNode(ts.createIdentifier("?"), undefined); } - if (!inTypeAlias && type.aliasSymbol && (context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */ || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) { + if (!inTypeAlias && type.aliasSymbol && (context.flags & 16384 || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) { var typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context); - if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & 32 /* Class */)) + if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & 32)) return ts.createTypeReferenceNode(ts.createIdentifier(""), typeArgumentNodes); - return symbolToTypeNode(type.aliasSymbol, context, 67901928 /* Type */, typeArgumentNodes); + return symbolToTypeNode(type.aliasSymbol, context, 67901928, typeArgumentNodes); } - if (type.flags & (262144 /* Union */ | 524288 /* Intersection */)) { - var types = type.flags & 262144 /* Union */ ? formatUnionTypes(type.types) : type.types; + if (type.flags & (262144 | 524288)) { + var types = type.flags & 262144 ? formatUnionTypes(type.types) : type.types; var typeNodes = mapToTypeNodes(types, context); if (typeNodes && typeNodes.length > 0) { - var unionOrIntersectionTypeNode = ts.createUnionOrIntersectionTypeNode(type.flags & 262144 /* Union */ ? 169 /* UnionType */ : 170 /* IntersectionType */, typeNodes); + var unionOrIntersectionTypeNode = ts.createUnionOrIntersectionTypeNode(type.flags & 262144 ? 169 : 170, typeNodes); return unionOrIntersectionTypeNode; } else { - if (!context.encounteredError && !(context.flags & 262144 /* AllowEmptyUnionOrIntersection */)) { + if (!context.encounteredError && !(context.flags & 262144)) { context.encounteredError = true; } - return undefined; // TODO: GH#18217 + return undefined; } } - if (objectFlags & (16 /* Anonymous */ | 32 /* Mapped */)) { - ts.Debug.assert(!!(type.flags & 131072 /* Object */)); - // The type is an object literal type. + if (objectFlags & (16 | 32)) { + ts.Debug.assert(!!(type.flags & 131072)); return createAnonymousTypeNode(type); } - if (type.flags & 1048576 /* Index */) { + if (type.flags & 1048576) { var indexedType = type.type; var indexTypeNode = typeToTypeNodeHelper(indexedType, context); return ts.createTypeOperatorNode(indexTypeNode); } - if (type.flags & 2097152 /* IndexedAccess */) { + if (type.flags & 2097152) { var objectTypeNode = typeToTypeNodeHelper(type.objectType, context); var indexTypeNode = typeToTypeNodeHelper(type.indexType, context); return ts.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode); } - if (type.flags & 4194304 /* Conditional */) { + if (type.flags & 4194304) { var checkTypeNode = typeToTypeNodeHelper(type.checkType, context); var saveInferTypeParameters = context.inferTypeParameters; context.inferTypeParameters = type.root.inferTypeParameters; @@ -31956,18 +26097,16 @@ var ts; var falseTypeNode = typeToTypeNodeHelper(getFalseTypeFromConditionalType(type), context); return ts.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode); } - if (type.flags & 8388608 /* Substitution */) { + if (type.flags & 8388608) { return typeToTypeNodeHelper(type.typeVariable, context); } return ts.Debug.fail("Should be unreachable."); function createMappedTypeNodeFromType(type) { - ts.Debug.assert(!!(type.flags & 131072 /* Object */)); + ts.Debug.assert(!!(type.flags & 131072)); var readonlyToken = type.declaration.readonlyToken ? ts.createToken(type.declaration.readonlyToken.kind) : undefined; var questionToken = type.declaration.questionToken ? ts.createToken(type.declaration.questionToken.kind) : undefined; var appropriateConstraintTypeNode; if (isMappedTypeWithKeyofConstraintDeclaration(type)) { - // We have a { [P in keyof T]: X } - // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType` appropriateConstraintTypeNode = ts.createTypeOperatorNode(typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context)); } else { @@ -31976,39 +26115,33 @@ var ts; var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode); var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context); var mappedTypeNode = ts.createMappedTypeNode(readonlyToken, typeParameterNode, questionToken, templateTypeNode); - return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */); + return ts.setEmitFlags(mappedTypeNode, 1); } function createAnonymousTypeNode(type) { var symbol = type.symbol; var id; if (symbol) { - var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */; + var isConstructorObject = ts.getObjectFlags(type) & 16 && type.symbol && type.symbol.flags & 32; id = (isConstructorObject ? "+" : "") + getSymbolId(symbol); if (isJavaScriptConstructor(symbol.valueDeclaration)) { - // Instance and static types share the same symbol; only add 'typeof' for the static side. - var isInstanceType = type === getInferredClassType(symbol) ? 67901928 /* Type */ : 67216319 /* Value */; + var isInstanceType = type === getInferredClassType(symbol) ? 67901928 : 67216319; return symbolToTypeNode(symbol, context, isInstanceType); } - // Always use 'typeof T' for type of class, enum, and module objects - else if (symbol.flags & 32 /* Class */ && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration.kind === 205 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) || - symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) || + else if (symbol.flags & 32 && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration.kind === 205 && context.flags & 2048) || + symbol.flags & (384 | 512) || shouldWriteTypeOfFunctionSymbol()) { - return symbolToTypeNode(symbol, context, 67216319 /* Value */); + return symbolToTypeNode(symbol, context, 67216319); } else if (context.visitedSymbols && context.visitedSymbols.has(id)) { - // If type is an anonymous type literal in a type alias declaration, use type alias name var typeAlias = getTypeAliasForTypeLiteral(type); if (typeAlias) { - // The specified symbol flags need to be reinterpreted as type flags - return symbolToTypeNode(typeAlias, context, 67901928 /* Type */); + return symbolToTypeNode(typeAlias, context, 67901928); } else { - return ts.createKeywordTypeNode(119 /* AnyKeyword */); + return ts.createKeywordTypeNode(119); } } else { - // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead - // of types allows us to catch circular references to instantiations of the same anonymous type if (!context.visitedSymbols) { context.visitedSymbols = ts.createMap(); } @@ -32019,21 +26152,19 @@ var ts; } } else { - // Anonymous types without a symbol are never circular. return createTypeNodeFromObjectType(type); } function shouldWriteTypeOfFunctionSymbol() { - var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method - ts.some(symbol.declarations, function (declaration) { return ts.hasModifier(declaration, 32 /* Static */); }); - var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) && - (symbol.parent || // is exported function symbol + var isStaticMethodSymbol = !!(symbol.flags & 8192) && + ts.some(symbol.declarations, function (declaration) { return ts.hasModifier(declaration, 32); }); + var isNonLocalFunctionSymbol = !!(symbol.flags & 16) && + (symbol.parent || ts.forEach(symbol.declarations, function (declaration) { - return declaration.parent.kind === 274 /* SourceFile */ || declaration.parent.kind === 240 /* ModuleBlock */; + return declaration.parent.kind === 274 || declaration.parent.kind === 240; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { - // typeof is allowed only for static/non local functions - return (!!(context.flags & 4096 /* UseTypeOfFunction */) || (context.visitedSymbols && context.visitedSymbols.has(id))) && // it is type of the symbol uses itself recursively - (!(context.flags & 8 /* UseStructuralFallback */) || isValueSymbolAccessible(symbol, context.enclosingDeclaration)); // TODO: GH#18217 // And the build is going to succeed without visibility error or there is no structural fallback allowed + return (!!(context.flags & 4096) || (context.visitedSymbols && context.visitedSymbols.has(id))) && + (!(context.flags & 8) || isValueSymbolAccessible(symbol, context.enclosingDeclaration)); } } } @@ -32044,50 +26175,50 @@ var ts; var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { - return ts.setEmitFlags(ts.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */); + return ts.setEmitFlags(ts.createTypeLiteralNode(undefined), 1); } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { var signature = resolved.callSignatures[0]; - var signatureNode = signatureToSignatureDeclarationHelper(signature, 163 /* FunctionType */, context); + var signatureNode = signatureToSignatureDeclarationHelper(signature, 163, context); return signatureNode; } if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { var signature = resolved.constructSignatures[0]; - var signatureNode = signatureToSignatureDeclarationHelper(signature, 164 /* ConstructorType */, context); + var signatureNode = signatureToSignatureDeclarationHelper(signature, 164, context); return signatureNode; } } var savedFlags = context.flags; - context.flags |= 4194304 /* InObjectTypeLiteral */; + context.flags |= 4194304; var members = createTypeNodesFromResolvedType(resolved); context.flags = savedFlags; var typeLiteralNode = ts.createTypeLiteralNode(members); - return ts.setEmitFlags(typeLiteralNode, (context.flags & 1024 /* MultilineObjectLiterals */) ? 0 : 1 /* SingleLine */); + return ts.setEmitFlags(typeLiteralNode, (context.flags & 1024) ? 0 : 1); } function typeReferenceToTypeNode(type) { var typeArguments = type.typeArguments || ts.emptyArray; if (type.target === globalArrayType) { - if (context.flags & 2 /* WriteArrayAsGenericType */) { + if (context.flags & 2) { var typeArgumentNode = typeToTypeNodeHelper(typeArguments[0], context); return ts.createTypeReferenceNode("Array", [typeArgumentNode]); } var elementType = typeToTypeNodeHelper(typeArguments[0], context); return ts.createArrayTypeNode(elementType); } - else if (type.target.objectFlags & 8 /* Tuple */) { + else if (type.target.objectFlags & 8) { if (typeArguments.length > 0) { var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, getTypeReferenceArity(type)), context); if (tupleConstituentNodes && tupleConstituentNodes.length > 0) { return ts.createTupleTypeNode(tupleConstituentNodes); } } - if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) { + if (context.encounteredError || (context.flags & 524288)) { return ts.createTupleTypeNode([]); } context.encounteredError = true; - return undefined; // TODO: GH#18217 + return undefined; } - else if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ && + else if (context.flags & 2048 && type.symbol.valueDeclaration && ts.isClassLike(type.symbol.valueDeclaration) && !isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { @@ -32100,19 +26231,16 @@ var ts; if (outerTypeParameters) { var length_1 = outerTypeParameters.length; while (i < length_1) { - // Find group of type arguments for type parameters with the same declaring container. var start = i; var parent = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent); - // 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)) { var typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context); var flags_2 = context.flags; - context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; - var ref = symbolToTypeNode(parent, context, 67901928 /* Type */, typeArgumentSlice); + context.flags |= 16; + var ref = symbolToTypeNode(parent, context, 67901928, typeArgumentSlice); context.flags = flags_2; resultType = !resultType ? ref : appendReferenceToType(resultType, ref); } @@ -32124,21 +26252,19 @@ var ts; typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); } var flags = context.flags; - context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; - var finalRef = symbolToTypeNode(type.symbol, context, 67901928 /* Type */, typeArgumentNodes); + context.flags |= 16; + var finalRef = symbolToTypeNode(type.symbol, context, 67901928, typeArgumentNodes); context.flags = flags; return !resultType ? finalRef : appendReferenceToType(resultType, finalRef); } } function appendReferenceToType(root, ref) { if (ts.isImportTypeNode(root)) { - // first shift type arguments var innerParams = root.typeArguments; if (root.qualifier) { (ts.isIdentifier(root.qualifier) ? root.qualifier : root.qualifier.right).typeArguments = innerParams; } root.typeArguments = ref.typeArguments; - // then move qualifiers var ids = getAccessStack(ref); for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { var id = ids_1[_i]; @@ -32147,11 +26273,9 @@ var ts; return root; } else { - // first shift type arguments var innerParams = root.typeArguments; (ts.isIdentifier(root.typeName) ? root.typeName : root.typeName.right).typeArguments = innerParams; root.typeArguments = ref.typeArguments; - // then move qualifiers var ids = getAccessStack(ref); for (var _a = 0, ids_2 = ids; _a < ids_2.length; _a++) { var id = ids_2[_a]; @@ -32174,20 +26298,20 @@ var ts; var typeElements = []; for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) { var signature = _a[_i]; - typeElements.push(signatureToSignatureDeclarationHelper(signature, 158 /* CallSignature */, context)); + typeElements.push(signatureToSignatureDeclarationHelper(signature, 158, context)); } for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) { var signature = _c[_b]; - typeElements.push(signatureToSignatureDeclarationHelper(signature, 159 /* ConstructSignature */, context)); + typeElements.push(signatureToSignatureDeclarationHelper(signature, 159, context)); } if (resolvedType.stringIndexInfo) { - var indexInfo = resolvedType.objectFlags & 2048 /* ReverseMapped */ ? + var indexInfo = resolvedType.objectFlags & 2048 ? createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration) : resolvedType.stringIndexInfo; - typeElements.push(indexInfoToIndexSignatureDeclarationHelper(indexInfo, 0 /* String */, context)); + typeElements.push(indexInfoToIndexSignatureDeclarationHelper(indexInfo, 0, context)); } if (resolvedType.numberIndexInfo) { - typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context)); + typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1, context)); } var properties = resolvedType.properties; if (!properties) { @@ -32195,41 +26319,39 @@ var ts; } for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) { var propertySymbol = properties_1[_d]; - if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) { - if (propertySymbol.flags & 4194304 /* Prototype */) { + if (context.flags & 2048) { + if (propertySymbol.flags & 4194304) { continue; } - if (ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & (8 /* Private */ | 16 /* Protected */) && context.tracker.reportPrivateInBaseOfClassExpression) { + if (ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & (8 | 16) && context.tracker.reportPrivateInBaseOfClassExpression) { context.tracker.reportPrivateInBaseOfClassExpression(ts.unescapeLeadingUnderscores(propertySymbol.escapedName)); } } - var propertyType = ts.getCheckFlags(propertySymbol) & 2048 /* ReverseMapped */ && context.flags & 33554432 /* InReverseMappedType */ ? + var propertyType = ts.getCheckFlags(propertySymbol) & 2048 && context.flags & 33554432 ? anyType : getTypeOfSymbol(propertySymbol); var saveEnclosingDeclaration = context.enclosingDeclaration; context.enclosingDeclaration = undefined; - if (ts.getCheckFlags(propertySymbol) & 1024 /* Late */) { + if (ts.getCheckFlags(propertySymbol) & 1024) { var decl = ts.first(propertySymbol.declarations); if (context.tracker.trackSymbol && hasLateBindableName(decl)) { - // get symbol of the first identifier of the entityName var firstIdentifier = getFirstIdentifier(decl.name.expression); - var name = resolveName(firstIdentifier, firstIdentifier.escapedText, 67216319 /* Value */ | 1048576 /* ExportValue */, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true); + var name = resolveName(firstIdentifier, firstIdentifier.escapedText, 67216319 | 1048576, undefined, undefined, true); if (name) { - context.tracker.trackSymbol(name, saveEnclosingDeclaration, 67216319 /* Value */); + context.tracker.trackSymbol(name, saveEnclosingDeclaration, 67216319); } } } - var propertyName = symbolToName(propertySymbol, context, 67216319 /* Value */, /*expectsIdentifier*/ true); + var propertyName = symbolToName(propertySymbol, context, 67216319, true); context.enclosingDeclaration = saveEnclosingDeclaration; - var optionalToken = propertySymbol.flags & 16777216 /* Optional */ ? ts.createToken(55 /* QuestionToken */) : undefined; - if (propertySymbol.flags & (16 /* Function */ | 8192 /* Method */) && !getPropertiesOfObjectType(propertyType).length) { - var signatures = getSignaturesOfType(propertyType, 0 /* Call */); + var optionalToken = propertySymbol.flags & 16777216 ? ts.createToken(55) : undefined; + if (propertySymbol.flags & (16 | 8192) && !getPropertiesOfObjectType(propertyType).length) { + var signatures = getSignaturesOfType(propertyType, 0); for (var _e = 0, signatures_1 = signatures; _e < signatures_1.length; _e++) { var signature = signatures_1[_e]; - var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 153 /* MethodSignature */, context); + var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 153, context); methodDeclaration.name = propertyName; methodDeclaration.questionToken = optionalToken; if (propertySymbol.valueDeclaration) { - // Copy comments to node for declaration emit ts.setCommentRange(methodDeclaration, propertySymbol.valueDeclaration); } typeElements.push(methodDeclaration); @@ -32237,14 +26359,12 @@ var ts; } else { var savedFlags = context.flags; - context.flags |= !!(ts.getCheckFlags(propertySymbol) & 2048 /* ReverseMapped */) ? 33554432 /* InReverseMappedType */ : 0; - var propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : ts.createKeywordTypeNode(119 /* AnyKeyword */); + context.flags |= !!(ts.getCheckFlags(propertySymbol) & 2048) ? 33554432 : 0; + var propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : ts.createKeywordTypeNode(119); context.flags = savedFlags; - var modifiers = isReadonlySymbol(propertySymbol) ? [ts.createToken(132 /* ReadonlyKeyword */)] : undefined; - var propertySignature = ts.createPropertySignature(modifiers, propertyName, optionalToken, propertyTypeNode, - /*initializer*/ undefined); + var modifiers = isReadonlySymbol(propertySymbol) ? [ts.createToken(132)] : undefined; + var propertySignature = ts.createPropertySignature(modifiers, propertyName, optionalToken, propertyTypeNode, undefined); if (propertySymbol.valueDeclaration) { - // Copy comments to node for declaration emit ts.setCommentRange(propertySignature, propertySymbol.valueDeclaration); } typeElements.push(propertySignature); @@ -32268,30 +26388,24 @@ var ts; } function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context) { var name = ts.getNameFromIndexInfo(indexInfo) || "x"; - var indexerTypeNode = ts.createKeywordTypeNode(kind === 0 /* String */ ? 137 /* StringKeyword */ : 134 /* NumberKeyword */); - var indexingParameter = ts.createParameter( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*dotDotDotToken*/ undefined, name, - /*questionToken*/ undefined, indexerTypeNode, - /*initializer*/ undefined); + var indexerTypeNode = ts.createKeywordTypeNode(kind === 0 ? 137 : 134); + var indexingParameter = ts.createParameter(undefined, undefined, undefined, name, undefined, indexerTypeNode, undefined); var typeNode = typeToTypeNodeHelper(indexInfo.type || anyType, context); - if (!indexInfo.type && !(context.flags & 2097152 /* AllowEmptyIndexInfoType */)) { + if (!indexInfo.type && !(context.flags & 2097152)) { context.encounteredError = true; } - return ts.createIndexSignature( - /*decorators*/ undefined, indexInfo.isReadonly ? [ts.createToken(132 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode); + return ts.createIndexSignature(undefined, indexInfo.isReadonly ? [ts.createToken(132)] : undefined, [indexingParameter], typeNode); } function signatureToSignatureDeclarationHelper(signature, kind, context) { var typeParameters; var typeArguments; - if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) { + if (context.flags & 32 && signature.target && signature.mapper && signature.target.typeParameters) { typeArguments = signature.target.typeParameters.map(function (parameter) { return typeToTypeNodeHelper(instantiateType(parameter, signature.mapper), context); }); } else { typeParameters = signature.typeParameters && signature.typeParameters.map(function (parameter) { return typeParameterToDeclaration(parameter, context); }); } - var parameters = signature.parameters.map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 155 /* Constructor */); }); + var parameters = signature.parameters.map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 155); }); if (signature.thisParameter) { var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context); parameters.unshift(thisParameter); @@ -32299,8 +26413,8 @@ var ts; var returnTypeNode; var typePredicate = getTypePredicateOfSignature(signature); if (typePredicate) { - var parameterName = typePredicate.kind === 1 /* Identifier */ ? - ts.setEmitFlags(ts.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) : + var parameterName = typePredicate.kind === 1 ? + ts.setEmitFlags(ts.createIdentifier(typePredicate.parameterName), 16777216) : ts.createThisTypeNode(); var typeNode = typeToTypeNodeHelper(typePredicate.type, context); returnTypeNode = ts.createTypePredicateNode(parameterName, typeNode); @@ -32309,29 +26423,29 @@ var ts; var returnType = getReturnTypeOfSignature(signature); returnTypeNode = returnType && typeToTypeNodeHelper(returnType, context); } - if (context.flags & 256 /* SuppressAnyReturnType */) { - if (returnTypeNode && returnTypeNode.kind === 119 /* AnyKeyword */) { + if (context.flags & 256) { + if (returnTypeNode && returnTypeNode.kind === 119) { returnTypeNode = undefined; } } else if (!returnTypeNode) { - returnTypeNode = ts.createKeywordTypeNode(119 /* AnyKeyword */); + returnTypeNode = ts.createKeywordTypeNode(119); } return ts.createSignatureDeclaration(kind, typeParameters, parameters, returnTypeNode, typeArguments); } function typeParameterShadowsNameInScope(type, context) { - return !!resolveName(context.enclosingDeclaration, type.symbol.escapedName, 67901928 /* Type */, /*nameNotFoundArg*/ undefined, type.symbol.escapedName, /*isUse*/ false); + return !!resolveName(context.enclosingDeclaration, type.symbol.escapedName, 67901928, undefined, type.symbol.escapedName, false); } function typeParameterToDeclarationWithConstraint(type, context, constraintNode) { var savedContextFlags = context.flags; - context.flags &= ~512 /* WriteTypeParametersInQualifiedName */; // Avoids potential infinite loop when building for a claimspace with a generic - var shouldUseGeneratedName = context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && + context.flags &= ~512; + var shouldUseGeneratedName = context.flags & 4 && type.symbol.declarations[0] && ts.isTypeParameterDeclaration(type.symbol.declarations[0]) && typeParameterShadowsNameInScope(type, context); var name = shouldUseGeneratedName - ? ts.getGeneratedNameForNode(type.symbol.declarations[0].name, 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */) - : symbolToName(type.symbol, context, 67901928 /* Type */, /*expectsIdentifier*/ true); + ? ts.getGeneratedNameForNode(type.symbol.declarations[0].name, 16 | 8) + : symbolToName(type.symbol, context, 67901928, true); var defaultParameter = getDefaultFromTypeParameter(type); var defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context); context.flags = savedContextFlags; @@ -32343,65 +26457,60 @@ var ts; return typeParameterToDeclarationWithConstraint(type, context, constraintNode); } function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) { - var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 149 /* Parameter */); + var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 149); if (!parameterDeclaration && !isTransientSymbol(parameterSymbol)) { - parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 293 /* JSDocParameterTag */); + parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 293); } var parameterType = getTypeOfSymbol(parameterSymbol); if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { parameterType = getOptionalType(parameterType); } var parameterTypeNode = typeToTypeNodeHelper(parameterType, context); - var modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers ? parameterDeclaration.modifiers.map(ts.getSynthesizedClone) : undefined; + var modifiers = !(context.flags & 8192) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers ? parameterDeclaration.modifiers.map(ts.getSynthesizedClone) : undefined; var isRest = parameterDeclaration ? ts.isRestParameter(parameterDeclaration) : parameterSymbol.isRestParameter; - var dotDotDotToken = isRest ? ts.createToken(24 /* DotDotDotToken */) : undefined; + var dotDotDotToken = isRest ? ts.createToken(24) : undefined; var name = parameterDeclaration ? parameterDeclaration.name ? - parameterDeclaration.name.kind === 71 /* Identifier */ ? ts.setEmitFlags(ts.getSynthesizedClone(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) : - parameterDeclaration.name.kind === 146 /* QualifiedName */ ? ts.setEmitFlags(ts.getSynthesizedClone(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) : + parameterDeclaration.name.kind === 71 ? ts.setEmitFlags(ts.getSynthesizedClone(parameterDeclaration.name), 16777216) : + parameterDeclaration.name.kind === 146 ? ts.setEmitFlags(ts.getSynthesizedClone(parameterDeclaration.name.right), 16777216) : cloneBindingName(parameterDeclaration.name) : ts.symbolName(parameterSymbol) : ts.symbolName(parameterSymbol); - var questionToken = parameterDeclaration && isOptionalParameter(parameterDeclaration) ? ts.createToken(55 /* QuestionToken */) : undefined; - var parameterNode = ts.createParameter( - /*decorators*/ undefined, modifiers, dotDotDotToken, name, questionToken, parameterTypeNode, - /*initializer*/ undefined); + var questionToken = parameterDeclaration && isOptionalParameter(parameterDeclaration) ? ts.createToken(55) : undefined; + var parameterNode = ts.createParameter(undefined, modifiers, dotDotDotToken, name, questionToken, parameterTypeNode, undefined); return parameterNode; function cloneBindingName(node) { return elideInitializerAndSetEmitFlags(node); function elideInitializerAndSetEmitFlags(node) { - var visited = ts.visitEachChild(node, elideInitializerAndSetEmitFlags, ts.nullTransformationContext, /*nodesVisitor*/ undefined, elideInitializerAndSetEmitFlags); + var visited = ts.visitEachChild(node, elideInitializerAndSetEmitFlags, ts.nullTransformationContext, undefined, elideInitializerAndSetEmitFlags); var clone = ts.nodeIsSynthesized(visited) ? visited : ts.getSynthesizedClone(visited); - if (clone.kind === 182 /* BindingElement */) { + if (clone.kind === 182) { clone.initializer = undefined; } - return ts.setEmitFlags(clone, 1 /* SingleLine */ | 16777216 /* NoAsciiEscaping */); + return ts.setEmitFlags(clone, 1 | 16777216); } } } function lookupSymbolChain(symbol, context, meaning, yieldModuleSymbol) { - context.tracker.trackSymbol(symbol, context.enclosingDeclaration, meaning); // TODO: GH#18217 - // Try to get qualified name if the symbol is not a type parameter and there is an enclosing declaration. + context.tracker.trackSymbol(symbol, context.enclosingDeclaration, meaning); var chain; - var isTypeParameter = symbol.flags & 262144 /* TypeParameter */; - if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */)) { - chain = ts.Debug.assertDefined(getSymbolChain(symbol, meaning, /*endOfChain*/ true)); + var isTypeParameter = symbol.flags & 262144; + if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64)) { + chain = ts.Debug.assertDefined(getSymbolChain(symbol, meaning, true)); ts.Debug.assert(chain && chain.length > 0); } else { chain = [symbol]; } return chain; - /** @param endOfChain Set to false for recursive calls; non-recursive calls should always output something. */ function getSymbolChain(symbol, meaning, endOfChain) { - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, context.enclosingDeclaration, meaning, !!(context.flags & 128 /* UseOnlyExternalAliasing */)); + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, context.enclosingDeclaration, meaning, !!(context.flags & 128)); var parentSymbol; if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { - // Go up and add our parent. var parent = getContainerOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); if (parent) { - var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), /*endOfChain*/ false); + var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), false); if (parentChain) { parentSymbol = parent; accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent, symbol) || symbol]); @@ -32411,13 +26520,9 @@ var ts; if (accessibleSymbolChain) { return accessibleSymbolChain; } - if ( - // If this is the last part of outputting the symbol, always output. The cases apply only to parent symbols. - endOfChain || - // If a parent symbol is an external module, don't write it. (We prefer just `x` vs `"foo/bar".x`.) + if (endOfChain || (yieldModuleSymbol || !(!parentSymbol && ts.forEach(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol))) && - // If a parent symbol is an anonymous type, don't write it. - !(symbol.flags & (2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */))) { + !(symbol.flags & (2048 | 4096))) { return [symbol]; } } @@ -32425,7 +26530,7 @@ var ts; function typeParametersToTypeParameterDeclarations(symbol, context) { var typeParameterNodes; var targetSymbol = getTargetSymbol(symbol); - if (targetSymbol.flags & (32 /* Class */ | 64 /* Interface */ | 524288 /* TypeAlias */)) { + if (targetSymbol.flags & (32 | 64 | 524288)) { typeParameterNodes = ts.createNodeArray(ts.map(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), function (tp) { return typeParameterToDeclaration(tp, context); })); } return typeParameterNodes; @@ -32434,11 +26539,11 @@ var ts; ts.Debug.assert(chain && 0 <= index && index < chain.length); var symbol = chain[index]; var typeParameterNodes; - if (context.flags & 512 /* WriteTypeParametersInQualifiedName */ && index < (chain.length - 1)) { + if (context.flags & 512 && index < (chain.length - 1)) { var parentSymbol = symbol; var nextSymbol = chain[index + 1]; - if (ts.getCheckFlags(nextSymbol) & 1 /* Instantiated */) { - var params = getTypeParametersOfClassOrInterface(parentSymbol.flags & 2097152 /* Alias */ ? resolveAlias(parentSymbol) : parentSymbol); + if (ts.getCheckFlags(nextSymbol) & 1) { + var params = getTypeParametersOfClassOrInterface(parentSymbol.flags & 2097152 ? resolveAlias(parentSymbol) : parentSymbol); typeParameterNodes = mapToTypeNodes(ts.map(params, nextSymbol.mapper), context); } else { @@ -32447,9 +26552,6 @@ var ts; } return typeParameterNodes; } - /** - * Given A[B][C][D], finds A[B] - */ function getTopmostIndexedAccessType(top) { if (ts.isIndexedAccessTypeNode(top.objectType)) { return getTopmostIndexedAccessType(top.objectType); @@ -32457,13 +26559,12 @@ var ts; return top; } function symbolToTypeNode(symbol, context, meaning, overrideTypeArguments) { - var chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */)); // If we're using aliases outside the current scope, dont bother with the module - context.flags |= 16777216 /* InInitialEntityName */; + var chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & 16384)); + context.flags |= 16777216; var rootName = getNameOfSymbolAsWritten(chain[0], context); - context.flags ^= 16777216 /* InInitialEntityName */; - var isTypeOf = meaning === 67216319 /* Value */; + context.flags ^= 16777216; + var isTypeOf = meaning === 67216319; if (ambientModuleSymbolRegex.test(rootName)) { - // module is root, must use `ImportTypeNode` var nonRootParts = chain.length > 1 ? createAccessFromSymbolChain(chain, chain.length - 1, 1) : undefined; var typeParameterNodes = overrideTypeArguments || lookupTypeParameterNodes(chain, 0, context); var lit = ts.createLiteralTypeNode(ts.createLiteral(rootName.substring(1, rootName.length - 1))); @@ -32482,7 +26583,7 @@ var ts; } var entityName = createAccessFromSymbolChain(chain, chain.length - 1, 0); if (ts.isIndexedAccessTypeNode(entityName)) { - return entityName; // Indexed accesses can never be `typeof` + return entityName; } if (isTypeOf) { return ts.createTypeQueryNode(entityName); @@ -32497,15 +26598,14 @@ var ts; var typeParameterNodes = index === (chain.length - 1) ? overrideTypeArguments : lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { - context.flags |= 16777216 /* InInitialEntityName */; + context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { - context.flags ^= 16777216 /* InInitialEntityName */; + context.flags ^= 16777216; } var parent = chain[index - 1]; - if (!(context.flags & 16 /* ForbidIndexedAccessSymbolReferences */) && parent && getMembersOfSymbol(parent) && getMembersOfSymbol(parent).get(symbol.escapedName) === symbol) { - // Should use an indexed access + if (!(context.flags & 16) && parent && getMembersOfSymbol(parent) && getMembersOfSymbol(parent).get(symbol.escapedName) === symbol) { var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); if (ts.isIndexedAccessTypeNode(LHS)) { return ts.createIndexedAccessTypeNode(LHS, ts.createLiteralTypeNode(ts.createLiteral(symbolName))); @@ -32514,7 +26614,7 @@ var ts; return ts.createIndexedAccessTypeNode(ts.createTypeReferenceNode(LHS, typeParameterNodes), ts.createLiteralTypeNode(ts.createLiteral(symbolName))); } } - var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216 /* NoAsciiEscaping */); + var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); identifier.symbol = symbol; if (index > stopper) { var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); @@ -32530,7 +26630,7 @@ var ts; var chain = lookupSymbolChain(symbol, context, meaning); if (expectsIdentifier && chain.length !== 1 && !context.encounteredError - && !(context.flags & 65536 /* AllowQualifedNameInPlaceOfIdentifier */)) { + && !(context.flags & 65536)) { context.encounteredError = true; } return createEntityNameFromSymbolChain(chain, chain.length - 1); @@ -32538,13 +26638,13 @@ var ts; var typeParameterNodes = lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { - context.flags |= 16777216 /* InInitialEntityName */; + context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { - context.flags ^= 16777216 /* InInitialEntityName */; + context.flags ^= 16777216; } - var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216 /* NoAsciiEscaping */); + var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); identifier.symbol = symbol; return index > 0 ? ts.createQualifiedName(createEntityNameFromSymbolChain(chain, index - 1), identifier) : identifier; } @@ -32556,34 +26656,34 @@ var ts; var typeParameterNodes = lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { - context.flags |= 16777216 /* InInitialEntityName */; + context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { - context.flags ^= 16777216 /* InInitialEntityName */; + context.flags ^= 16777216; } var firstChar = symbolName.charCodeAt(0); var canUsePropertyAccess = ts.isIdentifierStart(firstChar, languageVersion); if (index === 0 || canUsePropertyAccess) { - var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216 /* NoAsciiEscaping */); + var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); identifier.symbol = symbol; return index > 0 ? ts.createPropertyAccess(createExpressionFromSymbolChain(chain, index - 1), identifier) : identifier; } else { - if (firstChar === 91 /* openBracket */) { + if (firstChar === 91) { symbolName = symbolName.substring(1, symbolName.length - 1); firstChar = symbolName.charCodeAt(0); } var expression = void 0; if (ts.isSingleOrDoubleQuote(firstChar)) { expression = ts.createLiteral(symbolName.substring(1, symbolName.length - 1).replace(/\\./g, function (s) { return s.substring(1); })); - expression.singleQuote = firstChar === 39 /* singleQuote */; + expression.singleQuote = firstChar === 39; } else if (("" + +symbolName) === symbolName) { expression = ts.createLiteral(+symbolName); } if (!expression) { - expression = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216 /* NoAsciiEscaping */); + expression = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); expression.symbol = symbol; } return ts.createElementAccess(createExpressionFromSymbolChain(chain, index - 1), expression); @@ -32592,13 +26692,13 @@ var ts; } } function typePredicateToString(typePredicate, enclosingDeclaration, flags, writer) { - if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; } + if (flags === void 0) { flags = 16384; } return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker); function typePredicateToStringWorker(writer) { - var predicate = ts.createTypePredicateNode(typePredicate.kind === 1 /* Identifier */ ? ts.createIdentifier(typePredicate.parameterName) : ts.createThisTypeNode(), nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */)); + var predicate = ts.createTypePredicateNode(typePredicate.kind === 1 ? ts.createIdentifier(typePredicate.parameterName) : ts.createThisTypeNode(), nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 3112960 | 512)); var printer = ts.createPrinter({ removeComments: true }); var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration); - printer.writeNode(4 /* Unspecified */, predicate, /*sourceFile*/ sourceFile, writer); + printer.writeNode(4, predicate, sourceFile, writer); return writer; } } @@ -32608,10 +26708,10 @@ var ts; for (var i = 0; i < types.length; i++) { var t = types[i]; flags |= t.flags; - if (!(t.flags & 24576 /* Nullable */)) { - if (t.flags & (256 /* BooleanLiteral */ | 512 /* EnumLiteral */)) { - var baseType = t.flags & 256 /* BooleanLiteral */ ? booleanType : getBaseTypeOfEnumLiteralType(t); - if (baseType.flags & 262144 /* Union */) { + if (!(t.flags & 24576)) { + if (t.flags & (256 | 512)) { + var baseType = t.flags & 256 ? booleanType : getBaseTypeOfEnumLiteralType(t); + if (baseType.flags & 262144) { var count = baseType.types.length; if (i + count <= types.length && types[i + count - 1] === baseType.types[count - 1]) { result.push(baseType); @@ -32623,25 +26723,25 @@ var ts; result.push(t); } } - if (flags & 16384 /* Null */) + if (flags & 16384) result.push(nullType); - if (flags & 8192 /* Undefined */) + if (flags & 8192) result.push(undefinedType); return result || types; } function visibilityToString(flags) { - if (flags === 8 /* Private */) { + if (flags === 8) { return "private"; } - if (flags === 16 /* Protected */) { + if (flags === 16) { return "protected"; } return "public"; } function getTypeAliasForTypeLiteral(type) { - if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */) { - var node = ts.findAncestor(type.symbol.declarations[0].parent, function (n) { return n.kind !== 173 /* ParenthesizedType */; }); - if (node.kind === 237 /* TypeAliasDeclaration */) { + if (type.symbol && type.symbol.flags & 2048) { + var node = ts.findAncestor(type.symbol.declarations[0].parent, function (n) { return n.kind !== 173; }); + if (node.kind === 237) { return getSymbolOfNode(node); } } @@ -32649,43 +26749,32 @@ var ts; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && - node.parent.kind === 240 /* ModuleBlock */ && + node.parent.kind === 240 && ts.isExternalModuleAugmentation(node.parent.parent); } function isDefaultBindingContext(location) { - return location.kind === 274 /* SourceFile */ || ts.isAmbientModule(location); + return location.kind === 274 || ts.isAmbientModule(location); } - /** - * Gets a human-readable name for a symbol. - * Should *not* be used for the right-hand side of a `.` -- use `symbolName(symbol)` for that instead. - * - * Unlike `symbolName(symbol)`, this will include quotes if the name is from a string literal. - * It will also use a representation of a number as written instead of a decimal form, e.g. `0o11` instead of `9`. - */ function getNameOfSymbolAsWritten(symbol, context) { - if (context && symbol.escapedName === "default" /* Default */ && !(context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */) && - // If it's not the first part of an entity name, it must print as `default` - (!(context.flags & 16777216 /* InInitialEntityName */) || - // if the symbol is synthesized, it will only be referenced externally it must print as `default` + if (context && symbol.escapedName === "default" && !(context.flags & 16384) && + (!(context.flags & 16777216) || !symbol.declarations || - // if not in the same binding context (source file, module declaration), it must print as `default` (context.enclosingDeclaration && ts.findAncestor(symbol.declarations[0], isDefaultBindingContext) !== ts.findAncestor(context.enclosingDeclaration, isDefaultBindingContext)))) { return "default"; } if (symbol.declarations && symbol.declarations.length) { - if (ts.some(symbol.declarations, hasExternalModuleSymbol) && context.enclosingDeclaration) { // TODO: GH#18217 - var file = ts.getDeclarationOfKind(symbol, 274 /* SourceFile */); + if (ts.some(symbol.declarations, hasExternalModuleSymbol) && context.enclosingDeclaration) { + var file = ts.getDeclarationOfKind(symbol, 274); if (!file || !context.tracker.moduleResolverHost) { if (context.tracker.trackReferencedAmbientModule) { var ambientDecls = ts.filter(symbol.declarations, ts.isAmbientModule); if (ts.length(ambientDecls)) { for (var _i = 0, ambientDecls_1 = ambientDecls; _i < ambientDecls_1.length; _i++) { var decl = ambientDecls_1[_i]; - context.tracker.trackReferencedAmbientModule(decl); // TODO: GH#18217 + context.tracker.trackReferencedAmbientModule(decl); } } } - // ambient module, just use declaration/symbol name (fallthrough) } else { var contextFile = ts.getSourceFileOfNode(ts.getOriginalNode(context.enclosingDeclaration)); @@ -32697,26 +26786,26 @@ var ts; if (name) { return ts.declarationNameToString(name); } - if (declaration.parent && declaration.parent.kind === 232 /* VariableDeclaration */) { + if (declaration.parent && declaration.parent.kind === 232) { return ts.declarationNameToString(declaration.parent.name); } - if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) { + if (context && !context.encounteredError && !(context.flags & 131072)) { context.encounteredError = true; } switch (declaration.kind) { - case 205 /* ClassExpression */: + case 205: return "(Anonymous class)"; - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 192: + case 193: return "(Anonymous function)"; } } var nameType = symbol.nameType; if (nameType) { - if (nameType.flags & 64 /* StringLiteral */ && !ts.isIdentifierText(nameType.value, compilerOptions.target)) { - return "\"" + ts.escapeString(nameType.value, 34 /* doubleQuote */) + "\""; + if (nameType.flags & 64 && !ts.isIdentifierText(nameType.value, compilerOptions.target)) { + return "\"" + ts.escapeString(nameType.value, 34) + "\""; } - if (nameType && nameType.flags & 2048 /* UniqueESSymbol */) { + if (nameType && nameType.flags & 2048) { return "[" + getNameOfSymbolAsWritten(nameType.symbol, context) + "]"; } } @@ -32733,81 +26822,66 @@ var ts; return false; function determineIfDeclarationIsVisible() { switch (node.kind) { - case 292 /* JSDocCallbackTag */: - case 297 /* JSDocTypedefTag */: - // Top-level jsdoc type aliases are considered exported - // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file + case 292: + case 297: return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent)); - case 182 /* BindingElement */: + case 182: return isDeclarationVisible(node.parent.parent); - case 232 /* VariableDeclaration */: + case 232: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { - // If the binding pattern is empty, this variable declaration is not visible return false; } - // falls through - case 239 /* ModuleDeclaration */: - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 234 /* FunctionDeclaration */: - case 238 /* EnumDeclaration */: - case 243 /* ImportEqualsDeclaration */: - // external module augmentation is always visible + case 239: + case 235: + case 236: + case 237: + case 234: + case 238: + case 243: if (ts.isExternalModuleAugmentation(node)) { return true; } var parent = 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 !== 243 /* ImportEqualsDeclaration */ && parent.kind !== 274 /* SourceFile */ && parent.flags & 4194304 /* Ambient */)) { + if (!(ts.getCombinedModifierFlags(node) & 1) && + !(node.kind !== 243 && parent.kind !== 274 && parent.flags & 4194304)) { return isGlobalSourceFile(parent); } - // Exported members/ambient module elements (exception import declaration) are visible if parent is visible return isDeclarationVisible(parent); - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - if (ts.hasModifier(node, 8 /* Private */ | 16 /* Protected */)) { - // Private/protected properties/methods are not visible + case 152: + case 151: + case 156: + case 157: + case 154: + case 153: + if (ts.hasModifier(node, 8 | 16)) { return false; } - // Public properties/methods are visible if its parents are visible, so: - // falls through - case 155 /* Constructor */: - case 159 /* ConstructSignature */: - case 158 /* CallSignature */: - case 160 /* IndexSignature */: - case 149 /* Parameter */: - case 240 /* ModuleBlock */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 166 /* TypeLiteral */: - case 162 /* TypeReference */: - case 167 /* ArrayType */: - case 168 /* TupleType */: - case 169 /* UnionType */: - case 170 /* IntersectionType */: - case 173 /* ParenthesizedType */: + case 155: + case 159: + case 158: + case 160: + case 149: + case 240: + case 163: + case 164: + case 166: + case 162: + case 167: + case 168: + case 169: + case 170: + case 173: return isDeclarationVisible(node.parent); - // Default binding, import specifier and namespace import is visible - // only on demand so by default it is not visible - case 245 /* ImportClause */: - case 246 /* NamespaceImport */: - case 248 /* ImportSpecifier */: + case 245: + case 246: + case 248: return false; - // Type parameters are always visible - case 148 /* TypeParameter */: - // Source file and namespace export are always visible - case 274 /* SourceFile */: - case 242 /* NamespaceExportDeclaration */: + case 148: + case 274: + case 242: return true; - // Export assignments do not create name bindings outside the module - case 249 /* ExportAssignment */: + case 249: return false; default: return false; @@ -32816,11 +26890,11 @@ var ts; } function collectLinkedAliases(node, setVisibility) { var exportSymbol; - if (node.parent && node.parent.kind === 249 /* ExportAssignment */) { - exportSymbol = resolveName(node, node.escapedText, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false); + if (node.parent && node.parent.kind === 249) { + exportSymbol = resolveName(node, node.escapedText, 67216319 | 67901928 | 1920 | 2097152, undefined, node, false); } - else if (node.parent.kind === 252 /* ExportSpecifier */) { - exportSymbol = getTargetOfExportSpecifier(node.parent, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); + else if (node.parent.kind === 252) { + exportSymbol = getTargetOfExportSpecifier(node.parent, 67216319 | 67901928 | 1920 | 2097152); } var result; if (exportSymbol) { @@ -32838,10 +26912,9 @@ var ts; ts.pushIfUnique(result, resultNode); } if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { - // Add the referenced top container visible var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); - var importSymbol = resolveName(declaration, firstIdentifier.escapedText, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */, undefined, undefined, /*isUse*/ false); + var importSymbol = resolveName(declaration, firstIdentifier.escapedText, 67216319 | 67901928 | 1920, undefined, undefined, false); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } @@ -32849,21 +26922,9 @@ var ts; }); } } - /** - * Push an entry on the type resolution stack. If an entry with the given target and the given property name - * is already on the stack, and no entries in between already have a type, then a circularity has occurred. - * In this case, the result values of the existing entry and all entries pushed after it are changed to false, - * and the value false is returned. Otherwise, the new entry is just pushed onto the stack, and true is returned. - * In order to see if the same query has already been done before, the target object and the propertyName both - * must match the one passed in. - * - * @param target The symbol, type, or signature whose type is being queried - * @param propertyName The property name that should be used to query the target for its type - */ function pushTypeResolution(target, propertyName) { var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName); if (resolutionCycleStartIndex >= 0) { - // A cycle was found var length_2 = resolutionTargets.length; for (var i = resolutionCycleStartIndex; i < length_2; i++) { resolutionResults[i] = false; @@ -32871,7 +26932,7 @@ var ts; return false; } resolutionTargets.push(target); - resolutionResults.push(/*items*/ true); + resolutionResults.push(true); resolutionPropertyNames.push(propertyName); return true; } @@ -32887,26 +26948,24 @@ var ts; return -1; } function hasType(target, propertyName) { - if (propertyName === 0 /* Type */) { + if (propertyName === 0) { return !!getSymbolLinks(target).type; } - if (propertyName === 2 /* DeclaredType */) { + if (propertyName === 2) { return !!getSymbolLinks(target).declaredType; } - if (propertyName === 1 /* ResolvedBaseConstructorType */) { + if (propertyName === 1) { return !!target.resolvedBaseConstructorType; } - if (propertyName === 3 /* ResolvedReturnType */) { + if (propertyName === 3) { return !!target.resolvedReturnType; } - if (propertyName === 4 /* ResolvedBaseConstraint */) { + if (propertyName === 4) { var bc = target.resolvedBaseConstraint; return !!bc && bc !== circularConstraintType; } return ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName); } - // Pop an entry from the type resolution stack and return its associated result value. The result value will - // be true if no circularities were detected, or false if a circularity was found. function popTypeResolution() { resolutionTargets.pop(); resolutionPropertyNames.pop(); @@ -32915,12 +26974,12 @@ var ts; function getDeclarationContainer(node) { return ts.findAncestor(ts.getRootDeclaration(node), function (node) { switch (node.kind) { - case 232 /* VariableDeclaration */: - case 233 /* VariableDeclarationList */: - case 248 /* ImportSpecifier */: - case 247 /* NamedImports */: - case 246 /* NamespaceImport */: - case 245 /* ImportClause */: + case 232: + case 233: + case 248: + case 247: + case 246: + case 245: return false; default: return true; @@ -32928,36 +26987,29 @@ var ts; }).parent; } function getTypeOfPrototypeProperty(prototype) { - // TypeScript 1.0 spec (April 2014): 8.4 - // Every class automatically contains a static property member named 'prototype', - // the type of which is an instantiation of the class type with type Any supplied as a type argument for each type parameter. - // It is an error to explicitly declare a static property member with the name 'prototype'. var classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; } - // Return the type of the given property in the given type, or undefined if no such property exists function getTypeOfPropertyOfType(type, name) { var prop = getPropertyOfType(type, name); return prop ? getTypeOfSymbol(prop) : undefined; } function isTypeAny(type) { - return type && (type.flags & 1 /* Any */) !== 0; + return type && (type.flags & 1) !== 0; } - // Return the type of a binding element parent. We check SymbolLinks first to see if a type has been - // assigned by contextual typing. function getTypeForBindingElementParent(node) { var symbol = getSymbolOfNode(node); - return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false); + return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false); } function isComputedNonLiteralName(name) { - return name.kind === 147 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression); + return name.kind === 147 && !ts.isStringOrNumericLiteral(name.expression); } function getRestType(source, properties, symbol) { - source = filterType(source, function (t) { return !(t.flags & 24576 /* Nullable */); }); - if (source.flags & 32768 /* Never */) { + source = filterType(source, function (t) { return !(t.flags & 24576); }); + if (source.flags & 32768) { return emptyObjectType; } - if (source.flags & 262144 /* Union */) { + if (source.flags & 262144) { return mapType(source, function (t) { return getRestType(t, properties, symbol); }); } var members = ts.createSymbolTable(); @@ -32969,27 +27021,22 @@ var ts; for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) { var prop = _b[_a]; var inNamesToRemove = names.has(prop.escapedName); - var isPrivate = ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 /* Private */ | 16 /* Protected */); - var isSetOnlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */); + var isPrivate = ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 | 16); + var isSetOnlyAccessor = prop.flags & 65536 && !(prop.flags & 32768); if (!inNamesToRemove && !isPrivate && !isClassMethod(prop) && !isSetOnlyAccessor) { members.set(prop.escapedName, getNonReadonlySymbol(prop)); } } - var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */); - var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */); + var stringIndexInfo = getIndexInfoOfType(source, 0); + var numberIndexInfo = getIndexInfoOfType(source, 1); return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); } - /** Return the inferred type for a binding element */ function getTypeForBindingElement(declaration) { var pattern = declaration.parent; var parentType = getTypeForBindingElementParent(pattern.parent); - // If parent has the unknown (error) type, then so does this binding element if (parentType === errorType) { return errorType; } - // If no type was specified or inferred for parent, - // infer from the initializer of the binding element if one is present. - // Otherwise, go with the undefined type of the parent. if (!parentType) { return declaration.initializer ? checkDeclarationInitializer(declaration) : parentType; } @@ -32997,9 +27044,9 @@ var ts; return parentType; } var type; - if (pattern.kind === 180 /* ObjectBindingPattern */) { + if (pattern.kind === 180) { if (declaration.dotDotDotToken) { - if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) { + if (parentType.flags & 2 || !isValidSpreadType(parentType)) { error(declaration, ts.Diagnostics.Rest_types_may_only_be_created_from_object_types); return errorType; } @@ -33013,21 +27060,20 @@ var ts; type = getRestType(parentType, literalMembers, declaration.symbol); } else { - // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form) var name = declaration.propertyName || declaration.name; var isLate = isLateBindableName(name); var isWellKnown = ts.isComputedPropertyName(name) && ts.isWellKnownSymbolSyntactically(name.expression); if (!isLate && !isWellKnown && isComputedNonLiteralName(name)) { var exprType = checkExpression(name.expression); - if (isTypeAssignableToKind(exprType, 3072 /* ESSymbolLike */)) { + if (isTypeAssignableToKind(exprType, 3072)) { if (noImplicitAny) { error(declaration, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(exprType), typeToString(parentType)); } return anyType; } - var indexerType = isTypeAssignableToKind(exprType, 168 /* NumberLike */) && getIndexTypeOfType(parentType, 1 /* Number */) || getIndexTypeOfType(parentType, 0 /* String */); + var indexerType = isTypeAssignableToKind(exprType, 168) && getIndexTypeOfType(parentType, 1) || getIndexTypeOfType(parentType, 0); if (!indexerType && noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors) { - if (getIndexTypeOfType(parentType, 1 /* Number */)) { + if (getIndexTypeOfType(parentType, 1)) { error(declaration, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number); } else { @@ -33036,17 +27082,14 @@ var ts; } return indexerType || anyType; } - // 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 nameType = isLate ? checkComputedPropertyName(name) : undefined; var text = isLate ? getLateBoundNameFromType(nameType) : isWellKnown ? ts.getPropertyNameForKnownSymbolName(ts.idText(name.expression.name)) : ts.getTextOfPropertyName(name); - // Relax null check on ambient destructuring parameters, since the parameters have no implementation and are just documentation - if (strictNullChecks && declaration.flags & 4194304 /* Ambient */ && ts.isParameterDeclaration(declaration)) { + if (strictNullChecks && declaration.flags & 4194304 && ts.isParameterDeclaration(declaration)) { parentType = getNonNullableType(parentType); } - if (isLate && nameType && !getPropertyOfType(parentType, text) && isTypeAssignableToKind(nameType, 3072 /* ESSymbolLike */)) { + if (isLate && nameType && !getPropertyOfType(parentType, text) && isTypeAssignableToKind(nameType, 3072)) { if (noImplicitAny) { error(declaration, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(nameType), typeToString(parentType)); } @@ -33054,8 +27097,8 @@ var ts; } var declaredType = getConstraintForLocation(getTypeOfPropertyOfType(parentType, text), declaration.name); type = declaredType && getFlowTypeOfReference(declaration, declaredType) || - isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1 /* Number */) || - getIndexTypeOfType(parentType, 0 /* String */); + isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) || + getIndexTypeOfType(parentType, 0); if (!type) { error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name)); return errorType; @@ -33063,16 +27106,11 @@ var ts; } } else { - // This elementType will be used if the specific property corresponding to this index is not - // present (aka the tuple element property). This call also checks that the parentType is in - // fact an iterable or array (depending on target language). - var elementType = checkIteratedTypeOrElementType(parentType, pattern, /*allowStringInput*/ false, /*allowAsyncIterables*/ false); + var elementType = checkIteratedTypeOrElementType(parentType, pattern, false, false); if (declaration.dotDotDotToken) { - // Rest element has an array type with the same element type as the parent type type = createArrayType(elementType); } else { - // Use specific property type when parent is a tuple or numeric index type when parent is an array var propName = "" + pattern.elements.indexOf(declaration); type = isTupleLikeType(parentType) ? getTypeOfPropertyOfType(parentType, propName) @@ -33088,13 +27126,11 @@ var ts; } } } - // In strict null checking mode, if a default value of a non-undefined type is specified, remove - // undefined from the final type. - if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkExpressionCached(declaration.initializer)) & 8192 /* Undefined */)) { - type = getTypeWithFacts(type, 131072 /* NEUndefined */); + if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkExpressionCached(declaration.initializer)) & 8192)) { + type = getTypeWithFacts(type, 131072); } return declaration.initializer ? - getUnionType([type, checkExpressionCached(declaration.initializer)], 2 /* Subtype */) : + getUnionType([type, checkExpressionCached(declaration.initializer)], 2) : type; } function getTypeForDeclarationFromJSDocComment(declaration) { @@ -33106,29 +27142,22 @@ var ts; } function isNullOrUndefined(node) { var expr = ts.skipParentheses(node); - return expr.kind === 95 /* NullKeyword */ || expr.kind === 71 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol; + return expr.kind === 95 || expr.kind === 71 && getResolvedSymbol(expr) === undefinedSymbol; } function isEmptyArrayLiteral(node) { var expr = ts.skipParentheses(node); - return expr.kind === 183 /* ArrayLiteralExpression */ && expr.elements.length === 0; + return expr.kind === 183 && expr.elements.length === 0; } function addOptionality(type, optional) { if (optional === void 0) { optional = true; } return strictNullChecks && optional ? getOptionalType(type) : type; } - // Return the inferred type for a variable, parameter, or property declaration function getTypeForVariableLikeDeclaration(declaration, includeOptionality) { - // 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 (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 221 /* ForInStatement */) { + if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 221) { var indexType = getIndexType(checkNonNullExpression(declaration.parent.parent.expression)); - return indexType.flags & (65536 /* TypeParameter */ | 1048576 /* Index */) ? getExtractStringType(indexType) : stringType; + return indexType.flags & (65536 | 1048576) ? getExtractStringType(indexType) : stringType; } - if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 222 /* ForOfStatement */) { - // checkRightHandSideOfForOf will return undefined if the for-of expression type was - // missing properties/signatures required to get its iteratedType (like - // [Symbol.iterator] or next). This may be because we accessed properties from anyType, - // or it may have led to an error inside getElementTypeOfIterable. + if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 222) { var forOfStatement = declaration.parent.parent; return checkRightHandSideOfForOf(forOfStatement.expression, forOfStatement.awaitModifier) || anyType; } @@ -33137,43 +27166,34 @@ var ts; } var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration) || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken); - // Use type from type annotation if one is present var declaredType = tryGetTypeFromEffectiveTypeNode(declaration); if (declaredType) { return addOptionality(declaredType, isOptional); } if ((noImplicitAny || ts.isInJavaScriptFile(declaration)) && - declaration.kind === 232 /* VariableDeclaration */ && !ts.isBindingPattern(declaration.name) && - !(ts.getCombinedModifierFlags(declaration) & 1 /* Export */) && !(declaration.flags & 4194304 /* Ambient */)) { - // 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))) { + declaration.kind === 232 && !ts.isBindingPattern(declaration.name) && + !(ts.getCombinedModifierFlags(declaration) & 1) && !(declaration.flags & 4194304)) { + if (!(ts.getCombinedNodeFlags(declaration) & 2) && (!declaration.initializer || isNullOrUndefined(declaration.initializer))) { return autoType; } - // Use control flow tracked 'any[]' type for non-ambient, non-exported variables with an empty array - // literal initializer. if (declaration.initializer && isEmptyArrayLiteral(declaration.initializer)) { return autoArrayType; } } - if (declaration.kind === 149 /* Parameter */) { + if (declaration.kind === 149) { var func = declaration.parent; - // For a parameter of a set accessor, use the type of the get accessor if one is present - if (func.kind === 157 /* SetAccessor */ && !hasNonBindableDynamicName(func)) { - var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 156 /* GetAccessor */); + if (func.kind === 157 && !hasNonBindableDynamicName(func)) { + var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 156); if (getter) { var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - // Use the type from the *getter* ts.Debug.assert(!thisParameter.type); return getTypeOfSymbol(getterSignature.thisParameter); } return getReturnTypeOfSignature(getterSignature); } } - // Use contextual parameter type if one is available var type = void 0; if (declaration.symbol.escapedName === "this") { type = getContextualThisParameterType(func); @@ -33185,25 +27205,19 @@ var ts; return addOptionality(type, isOptional); } } - // Use the type of the initializer expression if one is present if (declaration.initializer) { var type = checkDeclarationInitializer(declaration); return addOptionality(type, isOptional); } if (ts.isJsxAttribute(declaration)) { - // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true. - // I.e is sugar for return trueType; } - // If the declaration specifies a binding pattern, use the type implied by the binding pattern if (ts.isBindingPattern(declaration.name)) { - return getTypeFromBindingPattern(declaration.name, /*includePatternInType*/ false, /*reportErrors*/ true); + return getTypeFromBindingPattern(declaration.name, false, true); } - // No type specified and nothing can be inferred return undefined; } function getWidenedTypeFromJSSpecialPropertyDeclarations(symbol) { - // function/class/{} assignments are fresh declarations, not property assignments, so only add prototype assignments var specialDeclaration = ts.getAssignedJavascriptInitializer(symbol.valueDeclaration); if (specialDeclaration) { return getWidenedLiteralType(checkExpressionCached(specialDeclaration)); @@ -33215,20 +27229,18 @@ var ts; var jsDocType; var _loop_4 = function (declaration) { var declarationInConstructor = false; - var expression = declaration.kind === 200 /* BinaryExpression */ ? declaration : - declaration.kind === 185 /* PropertyAccessExpression */ ? ts.cast(declaration.parent, ts.isBinaryExpression) : + var expression = declaration.kind === 200 ? declaration : + declaration.kind === 185 ? ts.cast(declaration.parent, ts.isBinaryExpression) : undefined; if (!expression) { return { value: errorType }; } var special = ts.getSpecialPropertyAssignmentKind(expression); - if (special === 4 /* ThisProperty */) { - var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false); - // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added. - // Function expressions that are assigned to the prototype count as methods. - declarationInConstructor = thisContainer.kind === 155 /* Constructor */ || - thisContainer.kind === 234 /* FunctionDeclaration */ || - (thisContainer.kind === 192 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent)); + if (special === 4) { + var thisContainer = ts.getThisContainer(expression, false); + declarationInConstructor = thisContainer.kind === 155 || + thisContainer.kind === 234 || + (thisContainer.kind === 192 && !ts.isPrototypePropertyAssignment(thisContainer.parent)); if (declarationInConstructor) { definedInConstructor = true; } @@ -33236,7 +27248,6 @@ var ts; definedInMethod = true; } } - // If there is a JSDoc type, use it var type_1 = getTypeForDeclarationFromJSDocComment(expression.parent); if (type_1) { var declarationType = getWidenedType(type_1); @@ -33245,16 +27256,15 @@ var ts; } else if (jsDocType !== errorType && declarationType !== errorType && !isTypeIdenticalTo(jsDocType, declarationType) && - !(symbol.flags & 67108864 /* JSContainer */)) { + !(symbol.flags & 67108864)) { errorNextVariableOrPropertyDeclarationMustHaveSameType(jsDocType, declaration, declarationType); } } else if (!jsDocType) { - // If we don't have an explicit JSDoc type, get the type from the expression. var type_2 = getWidenedLiteralType(checkExpressionCached(expression.right)); - if (ts.getObjectFlags(type_2) & 16 /* Anonymous */ && - special === 2 /* ModuleExports */ && - symbol.escapedName === "export=" /* ExportEquals */) { + if (ts.getObjectFlags(type_2) & 16 && + special === 2 && + symbol.escapedName === "export=") { var exportedType_1 = resolveStructuredTypeMembers(type_2); var members_3 = ts.createSymbolTable(); ts.copyEntries(exportedType_1.members, members_3); @@ -33292,7 +27302,6 @@ var ts; } var type = jsDocType; if (!type) { - // use only the constructor types unless they were only assigned null | undefined (including widening variants) if (definedInMethod) { var propType = getTypeOfSpecialPropertyOfBaseType(symbol); if (propType) { @@ -33300,11 +27309,11 @@ var ts; definedInConstructor = true; } } - var sourceTypes = ts.some(constructorTypes, function (t) { return !!(t.flags & ~(24576 /* Nullable */ | 134217728 /* ContainsWideningType */)); }) ? constructorTypes : types; // TODO: GH#18217 - type = getUnionType(sourceTypes, 2 /* Subtype */); + var sourceTypes = ts.some(constructorTypes, function (t) { return !!(t.flags & ~(24576 | 134217728)); }) ? constructorTypes : types; + type = getUnionType(sourceTypes, 2); } var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor)); - if (filterType(widened, function (t) { return !!(t.flags & ~24576 /* Nullable */); }) === neverType) { + if (filterType(widened, function (t) { return !!(t.flags & ~24576); }) === neverType) { if (noImplicitAny) { reportImplicitAnyError(symbol.valueDeclaration, anyType); } @@ -33312,10 +27321,9 @@ var ts; } return widened; } - /** check for definition in base class if any declaration is in a class */ function getTypeOfSpecialPropertyOfBaseType(specialProperty) { var parentDeclaration = ts.forEach(specialProperty.declarations, function (d) { - var parent = ts.getThisContainer(d, /*includeArrowFunctions*/ false).parent; + var parent = ts.getThisContainer(d, false).parent; return ts.isClassLike(parent) && parent; }); if (parentDeclaration) { @@ -33326,9 +27334,6 @@ var ts; } } } - // Return the type implied by a binding pattern element. This is the type of the initializer of the element if - // one is present. Otherwise, if the element is itself a binding pattern, it is the type implied by the binding - // pattern. Otherwise, it is the type any. function getTypeFromBindingElement(element, includePatternInType, reportErrors) { if (element.initializer) { return checkDeclarationInitializer(element); @@ -33341,45 +27346,41 @@ var ts; } return anyType; } - // Return the type implied by an object binding pattern function getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) { var members = ts.createSymbolTable(); var stringIndexInfo; - var objectFlags = 128 /* ObjectLiteral */; + var objectFlags = 128; ts.forEach(pattern.elements, function (e) { var name = e.propertyName || e.name; if (isComputedNonLiteralName(name)) { - // do not include computed properties in the implied type - objectFlags |= 512 /* ObjectLiteralPatternWithComputedProperties */; + objectFlags |= 512; return; } if (e.dotDotDotToken) { - stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false); + stringIndexInfo = createIndexInfo(anyType, false); return; } var text = ts.getTextOfPropertyName(name); - var flags = 4 /* Property */ | (e.initializer ? 16777216 /* Optional */ : 0); + var flags = 4 | (e.initializer ? 16777216 : 0); var symbol = createSymbol(flags, text); symbol.type = getTypeFromBindingElement(e, includePatternInType, reportErrors); symbol.bindingElement = e; members.set(symbol.escapedName, symbol); }); var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined); - result.flags |= 268435456 /* ContainsObjectLiteral */; + result.flags |= 268435456; result.objectFlags |= objectFlags; if (includePatternInType) { result.pattern = pattern; } return result; } - // Return the type implied by an array binding pattern function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) { var elements = pattern.elements; var lastElement = ts.lastOrUndefined(elements); if (!lastElement || (!ts.isOmittedExpression(lastElement) && lastElement.dotDotDotToken)) { - return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType; + return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; } - // If the pattern has at least one element, and no rest element, then it should imply a tuple type. var elementTypes = ts.map(elements, function (e) { return ts.isOmittedExpression(e) ? anyType : getTypeFromBindingElement(e, includePatternInType, reportErrors); }); var result = createTupleType(elementTypes); if (includePatternInType) { @@ -33388,44 +27389,25 @@ var ts; } return result; } - // Return the type implied by a binding pattern. This is the type implied purely by the binding pattern itself - // and without regard to its context (i.e. without regard any type annotation or initializer associated with the - // declaration in which the binding pattern is contained). For example, the implied type of [x, y] is [any, any] - // and the implied type of { x, y: z = 1 } is { x: any; y: number; }. The type implied by a binding pattern is - // used as the contextual type of an initializer associated with the binding pattern. Also, for a destructuring - // parameter with no type annotation or initializer, the type implied by the binding pattern becomes the type of - // the parameter. function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) { if (includePatternInType === void 0) { includePatternInType = false; } if (reportErrors === void 0) { reportErrors = false; } - return pattern.kind === 180 /* ObjectBindingPattern */ + return pattern.kind === 180 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors); } - // Return the type associated with a variable, parameter, or property declaration. In the simple case this is the type - // specified in a type annotation or inferred from an initializer. However, in the case of a destructuring declaration it - // is a bit more involved. For example: - // - // var [x, s = ""] = [1, "one"]; - // - // Here, the array literal [1, "one"] is contextually typed by the type [any, string], which is the implied type of the - // binding pattern [x, s = ""]. Because the contextual type is a tuple type, the resulting type of [1, "one"] is the - // tuple type [number, string]. Thus, the type inferred for 'x' is number and the type inferred for 's' is string. function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) { - var type = getTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true); + var type = getTypeForVariableLikeDeclaration(declaration, true); if (type) { if (reportErrors) { reportErrorsFromWidening(declaration, type); } - // always widen a 'unique symbol' type if the type was created for a different declaration. - if (type.flags & 2048 /* UniqueESSymbol */ && (ts.isBindingElement(declaration) || !declaration.type) && type.symbol !== getSymbolOfNode(declaration)) { + if (type.flags & 2048 && (ts.isBindingElement(declaration) || !declaration.type) && type.symbol !== getSymbolOfNode(declaration)) { type = esSymbolType; } return getWidenedType(type); } - // Rest parameters default to type any[], other parameters default to type any type = ts.isParameter(declaration) && declaration.dotDotDotToken ? anyArrayType : anyType; - // Report implicit any errors unless this is a private property within an ambient declaration if (reportErrors && noImplicitAny) { if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); @@ -33435,7 +27417,7 @@ var ts; } function declarationBelongsToPrivateAmbientMember(declaration) { var root = ts.getRootDeclaration(declaration); - var memberDeclaration = root.kind === 149 /* Parameter */ ? root.parent : root; + var memberDeclaration = root.kind === 149 ? root.parent : root; return isPrivateWithinAmbient(memberDeclaration); } function tryGetTypeFromEffectiveTypeNode(declaration) { @@ -33447,42 +27429,32 @@ var ts; function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - // Handle prototype property - if (symbol.flags & 4194304 /* Prototype */) { + if (symbol.flags & 4194304) { return links.type = getTypeOfPrototypeProperty(symbol); } - // CommonsJS require and module both have type any. if (symbol === requireSymbol || symbol === moduleSymbol) { return links.type = anyType; } - // Handle catch clause variables var declaration = symbol.valueDeclaration; if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) { return links.type = anyType; } - // Handle export default expressions if (ts.isSourceFile(declaration)) { var jsonSourceFile = ts.cast(declaration, ts.isJsonSourceFile); return links.type = jsonSourceFile.statements.length ? checkExpression(jsonSourceFile.statements[0].expression) : emptyObjectType; } - if (declaration.kind === 249 /* ExportAssignment */) { + if (declaration.kind === 249) { return links.type = checkExpression(declaration.expression); } if (ts.isInJavaScriptFile(declaration) && ts.isJSDocPropertyLikeTag(declaration) && declaration.typeExpression) { return links.type = getTypeFromTypeNode(declaration.typeExpression.type); } - // Handle variable, parameter or property - if (!pushTypeResolution(symbol, 0 /* Type */)) { + if (!pushTypeResolution(symbol, 0)) { return errorType; } var type = void 0; - // Handle certain special assignment kinds, which happen to union across multiple declarations: - // * module.exports = expr - // * exports.p = expr - // * this.p = expr - // * className.prototype.method = expr - if (declaration.kind === 200 /* BinaryExpression */ || - declaration.kind === 185 /* PropertyAccessExpression */ && declaration.parent.kind === 200 /* BinaryExpression */) { + if (declaration.kind === 200 || + declaration.kind === 185 && declaration.parent.kind === 200) { type = getWidenedTypeFromJSSpecialPropertyDeclarations(symbol); } else if (ts.isJSDocPropertyLikeTag(declaration) @@ -33492,8 +27464,7 @@ var ts; || ts.isFunctionDeclaration(declaration) || (ts.isMethodDeclaration(declaration) && !ts.isObjectLiteralMethod(declaration)) || ts.isMethodSignature(declaration)) { - // Symbol is property of some kind that is merged with something - should use `getTypeOfFuncClassEnumModule` and not `getTypeOfVariableOrParameterOrProperty` - if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { + if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { return getTypeOfFuncClassEnumModule(symbol); } type = tryGetTypeFromEffectiveTypeNode(declaration) || anyType; @@ -33505,17 +27476,17 @@ var ts; type = tryGetTypeFromEffectiveTypeNode(declaration) || checkJsxAttribute(declaration); } else if (ts.isShorthandPropertyAssignment(declaration)) { - type = tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionForMutableLocation(declaration.name, 0 /* Normal */); + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionForMutableLocation(declaration.name, 0); } else if (ts.isObjectLiteralMethod(declaration)) { - type = tryGetTypeFromEffectiveTypeNode(declaration) || checkObjectLiteralMethod(declaration, 0 /* Normal */); + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkObjectLiteralMethod(declaration, 0); } else if (ts.isParameter(declaration) || ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration) || ts.isVariableDeclaration(declaration) || ts.isBindingElement(declaration)) { - type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + type = getWidenedTypeForVariableLikeDeclaration(declaration, true); } else { return ts.Debug.fail("Unhandled declaration kind! " + ts.Debug.showSyntaxKind(declaration) + " for " + ts.Debug.showSymbol(symbol)); @@ -33529,7 +27500,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 156 /* GetAccessor */) { + if (accessor.kind === 156) { var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor); return getterTypeAnnotation && getTypeFromTypeNode(getterTypeAnnotation); } @@ -33550,35 +27521,31 @@ var ts; function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var getter = ts.getDeclarationOfKind(symbol, 156 /* GetAccessor */); - var setter = ts.getDeclarationOfKind(symbol, 157 /* SetAccessor */); + var getter = ts.getDeclarationOfKind(symbol, 156); + var setter = ts.getDeclarationOfKind(symbol, 157); if (getter && ts.isInJavaScriptFile(getter)) { var jsDocType = getTypeForDeclarationFromJSDocComment(getter); if (jsDocType) { return links.type = jsDocType; } } - if (!pushTypeResolution(symbol, 0 /* Type */)) { + if (!pushTypeResolution(symbol, 0)) { return errorType; } var type = void 0; - // First try to see if the user specified a return type on the get-accessor. var getterReturnType = getAnnotatedAccessorType(getter); if (getterReturnType) { type = getterReturnType; } else { - // If the user didn't specify a return type, try to use the set-accessor's parameter type. var setterParameterType = getAnnotatedAccessorType(setter); if (setterParameterType) { type = setterParameterType; } else { - // If there are no specified types, try to infer it from the body of the get accessor if it exists. if (getter && getter.body) { type = getReturnTypeFromBody(getter); } - // Otherwise, fall back to 'any'. else { if (noImplicitAny) { if (setter) { @@ -33596,7 +27563,7 @@ var ts; if (!popTypeResolution()) { type = anyType; if (noImplicitAny) { - var getter_1 = ts.getDeclarationOfKind(symbol, 156 /* GetAccessor */); + var getter_1 = ts.getDeclarationOfKind(symbol, 156); error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol)); } } @@ -33606,7 +27573,7 @@ var ts; } function getBaseTypeVariableOfClass(symbol) { var baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol)); - return baseConstructorType.flags & 2162688 /* TypeVariable */ ? baseConstructorType : undefined; + return baseConstructorType.flags & 2162688 ? baseConstructorType : undefined; } function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); @@ -33616,7 +27583,6 @@ var ts; var jsSymbol = getSymbolOfNode(jsDeclaration); if (jsSymbol && (ts.hasEntries(jsSymbol.exports) || ts.hasEntries(jsSymbol.members))) { symbol = cloneSymbol(symbol); - // note:we overwrite links because we just cloned the symbol links = symbol; if (ts.hasEntries(jsSymbol.exports)) { symbol.exports = symbol.exports || ts.createSymbolTable(); @@ -33628,21 +27594,21 @@ var ts; } } } - if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) { + if (symbol.flags & 1536 && ts.isShorthandAmbientModuleSymbol(symbol)) { links.type = anyType; } - else if (symbol.valueDeclaration.kind === 200 /* BinaryExpression */ || - symbol.valueDeclaration.kind === 185 /* PropertyAccessExpression */ && symbol.valueDeclaration.parent.kind === 200 /* BinaryExpression */) { + else if (symbol.valueDeclaration.kind === 200 || + symbol.valueDeclaration.kind === 185 && symbol.valueDeclaration.parent.kind === 200) { links.type = getWidenedTypeFromJSSpecialPropertyDeclarations(symbol); } else { - var type = createObjectType(16 /* Anonymous */, symbol); - if (symbol.flags & 32 /* Class */) { + var type = createObjectType(16, symbol); + if (symbol.flags & 32) { var baseTypeVariable = getBaseTypeVariableOfClass(symbol); links.type = baseTypeVariable ? getIntersectionType([type, baseTypeVariable]) : type; } else { - links.type = strictNullChecks && symbol.flags & 16777216 /* Optional */ ? getOptionalType(type) : type; + links.type = strictNullChecks && symbol.flags & 16777216 ? getOptionalType(type) : type; } } } @@ -33659,12 +27625,7 @@ var ts; var links = getSymbolLinks(symbol); if (!links.type) { var targetSymbol = resolveAlias(symbol); - // It only makes sense to get the type of a value symbol. If the result of resolving - // the alias is not a value, then it has no type. To get the type associated with a - // type symbol, call getDeclaredTypeOfSymbol. - // This check is important because without it, a call to getTypeOfSymbol could end - // up recursively calling getTypeOfAlias, causing a stack overflow. - links.type = targetSymbol.flags & 67216319 /* Value */ + links.type = targetSymbol.flags & 67216319 ? getTypeOfSymbol(targetSymbol) : errorType; } @@ -33678,7 +27639,7 @@ var ts; links.type = errorType; } else { - if (!pushTypeResolution(symbol, 0 /* Type */)) { + if (!pushTypeResolution(symbol, 0)) { return errorType; } symbolInstantiationDepth++; @@ -33693,37 +27654,35 @@ var ts; return links.type; } function reportCircularityError(symbol) { - // Check if variable has type annotation that circularly references the variable itself if (ts.getEffectiveTypeAnnotationNode(symbol.valueDeclaration)) { error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); return errorType; } - // Otherwise variable has initializer that circularly references the variable itself if (noImplicitAny) { error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol)); } return anyType; } function getTypeOfSymbol(symbol) { - if (ts.getCheckFlags(symbol) & 1 /* Instantiated */) { + if (ts.getCheckFlags(symbol) & 1) { return getTypeOfInstantiatedSymbol(symbol); } - if (ts.getCheckFlags(symbol) & 2048 /* ReverseMapped */) { + if (ts.getCheckFlags(symbol) & 2048) { return getTypeOfReverseMappedSymbol(symbol); } - if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { + if (symbol.flags & (3 | 4)) { return getTypeOfVariableOrParameterOrProperty(symbol); } - if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { + if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { return getTypeOfFuncClassEnumModule(symbol); } - if (symbol.flags & 8 /* EnumMember */) { + if (symbol.flags & 8) { return getTypeOfEnumMember(symbol); } - if (symbol.flags & 98304 /* Accessor */) { + if (symbol.flags & 98304) { return getTypeOfAccessors(symbol); } - if (symbol.flags & 2097152 /* Alias */) { + if (symbol.flags & 2097152) { return getTypeOfAlias(symbol); } return errorType; @@ -33731,29 +27690,25 @@ var ts; function isReferenceToType(type, target) { return type !== undefined && target !== undefined - && (ts.getObjectFlags(type) & 4 /* Reference */) !== 0 + && (ts.getObjectFlags(type) & 4) !== 0 && type.target === target; } function getTargetType(type) { - return ts.getObjectFlags(type) & 4 /* Reference */ ? type.target : type; + return ts.getObjectFlags(type) & 4 ? type.target : type; } - // TODO: GH#18217 If `checkBase` is undefined, we should not call this because this will always return false. function hasBaseType(type, checkBase) { return check(type); function check(type) { - if (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { + if (ts.getObjectFlags(type) & (3 | 4)) { var target = getTargetType(type); return target === checkBase || ts.some(getBaseTypes(target), check); } - else if (type.flags & 524288 /* Intersection */) { + else if (type.flags & 524288) { return ts.some(type.types, check); } return false; } } - // Appends the type parameters given by a list of declarations to a set of type parameters and returns the resulting set. - // The function allocates a new array if the input type parameter set is undefined, but otherwise it modifies the set - // in-place and returns the same array. function appendTypeParameters(typeParameters, declarations) { for (var _i = 0, declarations_2 = declarations; _i < declarations_2.length; _i++) { var declaration = declarations_2[_i]; @@ -33761,62 +27716,58 @@ var ts; } return typeParameters; } - // Return the outer type parameters of a node or undefined if the node has no outer type parameters. function getOuterTypeParameters(node, includeThisTypes) { while (true) { - node = node.parent; // TODO: GH#18217 Use SourceFile kind check instead + node = node.parent; if (!node) { return undefined; } switch (node.kind) { - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 236 /* InterfaceDeclaration */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 153 /* MethodSignature */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 284 /* JSDocFunctionType */: - case 234 /* FunctionDeclaration */: - case 154 /* MethodDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 237 /* TypeAliasDeclaration */: - case 296 /* JSDocTemplateTag */: - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: - case 177 /* MappedType */: - case 171 /* ConditionalType */: + case 235: + case 205: + case 236: + case 158: + case 159: + case 153: + case 163: + case 164: + case 284: + case 234: + case 154: + case 192: + case 193: + case 237: + case 296: + case 297: + case 292: + case 177: + case 171: var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); - if (node.kind === 177 /* MappedType */) { + if (node.kind === 177) { return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter))); } - else if (node.kind === 171 /* ConditionalType */) { + else if (node.kind === 171) { return ts.concatenate(outerTypeParameters, getInferTypeParameters(node)); } var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node)); var thisType = includeThisTypes && - (node.kind === 235 /* ClassDeclaration */ || node.kind === 205 /* ClassExpression */ || node.kind === 236 /* InterfaceDeclaration */) && + (node.kind === 235 || node.kind === 205 || node.kind === 236) && getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters; } } } - // The outer type parameters are those defined by enclosing generic classes, methods, or functions. function getOuterTypeParametersOfClassOrInterface(symbol) { - var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 236 /* InterfaceDeclaration */); + var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 236); return getOuterTypeParameters(declaration); } - // The local type parameters are the combined set of type parameters from all declarations of the class, - // interface, or type alias. function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; - if (node.kind === 236 /* InterfaceDeclaration */ || - node.kind === 235 /* ClassDeclaration */ || - node.kind === 205 /* ClassExpression */ || + if (node.kind === 236 || + node.kind === 235 || + node.kind === 205 || ts.isTypeAlias(node)) { var declaration = node; result = appendTypeParameters(result, ts.getEffectiveTypeParameterDeclarations(declaration)); @@ -33824,15 +27775,11 @@ var ts; } return result; } - // The full set of type parameters for a generic class or interface type consists of its outer type parameters plus - // its locally declared type parameters. function getTypeParametersOfClassOrInterface(symbol) { return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); } - // A type is a mixin constructor if it has a single construct signature taking no type parameters and a single - // rest parameter of type any[]. function isMixinConstructorType(type) { - var signatures = getSignaturesOfType(type, 1 /* Construct */); + var signatures = getSignaturesOfType(type, 1); if (signatures.length === 1) { var s = signatures[0]; return !s.typeParameters && s.parameters.length === 1 && s.hasRestParameter && getTypeOfParameter(s.parameters[0]) === anyArrayType; @@ -33840,10 +27787,10 @@ var ts; return false; } function isConstructorType(type) { - if (isValidBaseType(type) && getSignaturesOfType(type, 1 /* Construct */).length > 0) { + if (isValidBaseType(type) && getSignaturesOfType(type, 1).length > 0) { return true; } - if (type.flags & 2162688 /* TypeVariable */) { + if (type.flags & 2162688) { var constraint = getBaseConstraintOfType(type); return !!constraint && isValidBaseType(constraint) && isMixinConstructorType(constraint); } @@ -33852,7 +27799,6 @@ var ts; function getBaseTypeNodeOfClass(type) { var decl = type.symbol.valueDeclaration; if (ts.isInJavaScriptFile(decl)) { - // Prefer an @augments tag because it may have type parameters. var tag = ts.getJSDocAugmentsTag(decl); if (tag) { return tag.class; @@ -33863,21 +27809,13 @@ var ts; function getConstructorsForTypeArguments(type, typeArgumentNodes, location) { var typeArgCount = ts.length(typeArgumentNodes); var isJavaScript = ts.isInJavaScriptFile(location); - return ts.filter(getSignaturesOfType(type, 1 /* Construct */), function (sig) { return (isJavaScript || typeArgCount >= getMinTypeArgumentCount(sig.typeParameters)) && typeArgCount <= ts.length(sig.typeParameters); }); + return ts.filter(getSignaturesOfType(type, 1), function (sig) { return (isJavaScript || typeArgCount >= getMinTypeArgumentCount(sig.typeParameters)) && typeArgCount <= ts.length(sig.typeParameters); }); } function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes, location) { var signatures = getConstructorsForTypeArguments(type, typeArgumentNodes, location); var typeArguments = ts.map(typeArgumentNodes, getTypeFromTypeNode); return ts.sameMap(signatures, function (sig) { return ts.some(sig.typeParameters) ? getSignatureInstantiation(sig, typeArguments, ts.isInJavaScriptFile(location)) : sig; }); } - /** - * The base constructor of a class can resolve to - * * undefinedType if the class has no extends clause, - * * unknownType if an error occurred during resolution of the extends expression, - * * nullType if the extends expression is the null value, - * * anyType if the extends expression has type any, or - * * an object type with at least one construct signature. - */ function getBaseConstructorTypeOfClass(type) { if (!type.resolvedBaseConstructorType) { var decl = type.symbol.valueDeclaration; @@ -33886,24 +27824,22 @@ var ts; if (!baseTypeNode) { return type.resolvedBaseConstructorType = undefinedType; } - if (!pushTypeResolution(type, 1 /* ResolvedBaseConstructorType */)) { + if (!pushTypeResolution(type, 1)) { return errorType; } var baseConstructorType = checkExpression(baseTypeNode.expression); if (extended && baseTypeNode !== extended) { - ts.Debug.assert(!extended.typeArguments); // Because this is in a JS file, and baseTypeNode is in an @extends tag + ts.Debug.assert(!extended.typeArguments); checkExpression(extended.expression); } - if (baseConstructorType.flags & (131072 /* Object */ | 524288 /* Intersection */)) { - // Resolving the members of a class requires us to resolve the base class of that class. - // We force resolution here such that we catch circularities now. + if (baseConstructorType.flags & (131072 | 524288)) { resolveStructuredTypeMembers(baseConstructorType); } if (!popTypeResolution()) { error(type.symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); return type.resolvedBaseConstructorType = errorType; } - if (!(baseConstructorType.flags & 1 /* Any */) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) { + if (!(baseConstructorType.flags & 1) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) { error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); return type.resolvedBaseConstructorType = errorType; } @@ -33913,14 +27849,14 @@ var ts; } function getBaseTypes(type) { if (!type.resolvedBaseTypes) { - if (type.objectFlags & 8 /* Tuple */) { + if (type.objectFlags & 8) { type.resolvedBaseTypes = [createArrayType(getUnionType(type.typeParameters))]; } - else if (type.symbol.flags & (32 /* Class */ | 64 /* Interface */)) { - if (type.symbol.flags & 32 /* Class */) { + else if (type.symbol.flags & (32 | 64)) { + if (type.symbol.flags & 32) { resolveBaseTypesOfClass(type); } - if (type.symbol.flags & 64 /* Interface */) { + if (type.symbol.flags & 64) { resolveBaseTypesOfInterface(type); } } @@ -33933,27 +27869,21 @@ var ts; function resolveBaseTypesOfClass(type) { type.resolvedBaseTypes = ts.resolvingEmptyArray; var baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type)); - if (!(baseConstructorType.flags & (131072 /* Object */ | 524288 /* Intersection */ | 1 /* Any */))) { + if (!(baseConstructorType.flags & (131072 | 524288 | 1))) { return type.resolvedBaseTypes = ts.emptyArray; } var baseTypeNode = getBaseTypeNodeOfClass(type); var typeArgs = typeArgumentsFromTypeReferenceNode(baseTypeNode); var baseType; var originalBaseType = baseConstructorType && baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : undefined; - if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 /* Class */ && + if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 && areAllOuterTypeParametersApplied(originalBaseType)) { - // When base constructor type is a class with no captured type arguments we know that the constructors all have the same type parameters as the - // class and all return the instance type of the class. There is no need for further checks and we can apply the - // type arguments in the same manner as a type reference to get the same error reporting experience. baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol, typeArgs); } - else if (baseConstructorType.flags & 1 /* Any */) { + else if (baseConstructorType.flags & 1) { baseType = baseConstructorType; } else { - // The class derives from a "class-like" constructor function, check that we have at least one construct signature - // with a matching number of type parameters and use the return type of the first instantiated signature. Elsewhere - // we check that all instantiated signatures return the same type. var constructors = getInstantiatedConstructorsForTypeArguments(baseConstructorType, baseTypeNode.typeArguments, baseTypeNode); if (!constructors.length) { error(baseTypeNode.expression, ts.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); @@ -33969,21 +27899,15 @@ var ts; return type.resolvedBaseTypes = ts.emptyArray; } 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, 2 /* WriteArrayAsGenericType */)); + error(type.symbol.valueDeclaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 2)); return type.resolvedBaseTypes = ts.emptyArray; } if (type.resolvedBaseTypes === ts.resolvingEmptyArray) { - // Circular reference, likely through instantiation of default parameters - // (otherwise there'd be an error from hasBaseType) - this is fine, but `.members` should be reset - // as `getIndexedAccessType` via `instantiateType` via `getTypeFromClassOrInterfaceReference` forces a - // partial instantiation of the members without the base types fully resolved - type.members = undefined; // TODO: GH#18217 + type.members = undefined; } return type.resolvedBaseTypes = [baseType]; } function areAllOuterTypeParametersApplied(type) { - // An unapplied type parameter has its symbol still the same as the matching argument symbol. - // Since parameters are applied outer-to-inner, only the last outer parameter needs to be checked. var outerTypeParameters = type.outerTypeParameters; if (outerTypeParameters) { var last_1 = outerTypeParameters.length - 1; @@ -33992,17 +27916,15 @@ var ts; } return true; } - // A valid base type is `any`, any non-generic object type or intersection of non-generic - // object types. function isValidBaseType(type) { - return !!(type.flags & (131072 /* Object */ | 16777216 /* NonPrimitive */ | 1 /* Any */)) && !isGenericMappedType(type) || - !!(type.flags & 524288 /* Intersection */) && ts.every(type.types, isValidBaseType); + return !!(type.flags & (131072 | 16777216 | 1)) && !isGenericMappedType(type) || + !!(type.flags & 524288) && ts.every(type.types, isValidBaseType); } function resolveBaseTypesOfInterface(type) { type.resolvedBaseTypes = type.resolvedBaseTypes || ts.emptyArray; for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 236 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 236 && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); @@ -34017,7 +27939,7 @@ var ts; } } else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, 2 /* WriteArrayAsGenericType */)); + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 2)); } } else { @@ -34028,18 +27950,11 @@ var ts; } } } - /** - * Returns true if the interface given by the symbol is free of "this" references. - * - * Specifically, the result is true if the interface itself contains no references - * to "this" in its body, if all base types are interfaces, - * and if none of the base interfaces have a "this" type. - */ function isThislessInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 236 /* InterfaceDeclaration */) { - if (declaration.flags & 64 /* ContainsThis */) { + if (declaration.kind === 236) { + if (declaration.flags & 64) { return false; } var baseTypeNodes = ts.getInterfaceBaseTypeNodes(declaration); @@ -34047,8 +27962,8 @@ var ts; for (var _b = 0, baseTypeNodes_1 = baseTypeNodes; _b < baseTypeNodes_1.length; _b++) { var node = baseTypeNodes_1[_b]; if (ts.isEntityNameExpression(node.expression)) { - var baseSymbol = resolveEntityName(node.expression, 67901928 /* Type */, /*ignoreErrors*/ true); - if (!baseSymbol || !(baseSymbol.flags & 64 /* Interface */) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { + var baseSymbol = resolveEntityName(node.expression, 67901928, true); + if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { return false; } } @@ -34061,17 +27976,12 @@ var ts; function getDeclaredTypeOfClassOrInterface(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var kind = symbol.flags & 32 /* Class */ ? 1 /* Class */ : 2 /* Interface */; + var kind = symbol.flags & 32 ? 1 : 2; var type = links.declaredType = createObjectType(kind, symbol); var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol); var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); - // A class or interface is generic if it has type parameters or a "this" type. We always give classes a "this" type - // because it is not feasible to analyze all members to determine if the "this" type escapes the class (in particular, - // property types inferred from initializers and method return types inferred from return statements are very hard - // to exhaustively analyze). We give interfaces a "this" type if we can't definitely determine that they are free of - // "this" references. - if (outerTypeParameters || localTypeParameters || kind === 1 /* Class */ || !isThislessInterface(symbol)) { - type.objectFlags |= 4 /* Reference */; + if (outerTypeParameters || localTypeParameters || kind === 1 || !isThislessInterface(symbol)) { + type.objectFlags |= 4; type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters); type.outerTypeParameters = outerTypeParameters; type.localTypeParameters = localTypeParameters; @@ -34079,7 +27989,7 @@ var ts; type.instantiations.set(getTypeListId(type.typeParameters), type); type.target = type; type.typeArguments = type.typeParameters; - type.thisType = createType(65536 /* TypeParameter */); + type.thisType = createType(65536); type.thisType.isThisType = true; type.thisType.symbol = symbol; type.thisType.constraint = type; @@ -34090,22 +28000,17 @@ var ts; function getDeclaredTypeOfTypeAlias(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - // Note that we use the links object as the target here because the symbol object is used as the unique - // identity for resolution of the 'type' property in SymbolLinks. - if (!pushTypeResolution(symbol, 2 /* DeclaredType */)) { + if (!pushTypeResolution(symbol, 2)) { return errorType; } var declaration = ts.find(symbol.declarations, function (d) { - return ts.isJSDocTypeAlias(d) || d.kind === 237 /* TypeAliasDeclaration */; + return ts.isJSDocTypeAlias(d) || d.kind === 237; }); var typeNode = ts.isJSDocTypeAlias(declaration) ? declaration.typeExpression : declaration.type; - // If typeNode is missing, we will error in checkJSDocTypedefTag. var type = typeNode ? getTypeFromTypeNode(typeNode) : errorType; if (popTypeResolution()) { var typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); if (typeParameters) { - // Initialize the instantiation cache for generic type aliases. The declared type corresponds to - // an instantiation of the type alias with the type parameters supplied as type arguments. links.typeParameters = typeParameters; links.instantiations = ts.createMap(); links.instantiations.set(getTypeListId(typeParameters), type); @@ -34120,10 +28025,10 @@ var ts; return links.declaredType; } function isStringConcatExpression(expr) { - if (expr.kind === 9 /* StringLiteral */) { + if (expr.kind === 9) { return true; } - else if (expr.kind === 200 /* BinaryExpression */) { + else if (expr.kind === 200) { return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right); } return false; @@ -34131,18 +28036,18 @@ var ts; function isLiteralEnumMember(member) { var expr = member.initializer; if (!expr) { - return !(member.flags & 4194304 /* Ambient */); + return !(member.flags & 4194304); } switch (expr.kind) { - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: + case 9: + case 8: return true; - case 198 /* PrefixUnaryExpression */: - return expr.operator === 38 /* MinusToken */ && - expr.operand.kind === 8 /* NumericLiteral */; - case 71 /* Identifier */: + case 198: + return expr.operator === 38 && + expr.operand.kind === 8; + case 71: return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText); - case 200 /* BinaryExpression */: + case 200: return isStringConcatExpression(expr); default: return false; @@ -34156,11 +28061,11 @@ var ts; var hasNonLiteralMember = false; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 238 /* EnumDeclaration */) { + if (declaration.kind === 238) { for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) { var member = _c[_b]; - if (member.initializer && member.initializer.kind === 9 /* StringLiteral */) { - return links.enumKind = 1 /* Literal */; + if (member.initializer && member.initializer.kind === 9) { + return links.enumKind = 1; } if (!isLiteralEnumMember(member)) { hasNonLiteralMember = true; @@ -34168,40 +28073,40 @@ var ts; } } } - return links.enumKind = hasNonLiteralMember ? 0 /* Numeric */ : 1 /* Literal */; + return links.enumKind = hasNonLiteralMember ? 0 : 1; } function getBaseTypeOfEnumLiteralType(type) { - return type.flags & 512 /* EnumLiteral */ && !(type.flags & 262144 /* Union */) ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type; + return type.flags & 512 && !(type.flags & 262144) ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type; } function getDeclaredTypeOfEnum(symbol) { var links = getSymbolLinks(symbol); if (links.declaredType) { return links.declaredType; } - if (getEnumKind(symbol) === 1 /* Literal */) { + if (getEnumKind(symbol) === 1) { enumCount++; var memberTypeList = []; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 238 /* EnumDeclaration */) { + if (declaration.kind === 238) { for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) { var member = _c[_b]; - var memberType = getLiteralType(getEnumMemberValue(member), enumCount, getSymbolOfNode(member)); // TODO: GH#18217 + var memberType = getLiteralType(getEnumMemberValue(member), enumCount, getSymbolOfNode(member)); getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType; memberTypeList.push(memberType); } } } if (memberTypeList.length) { - var enumType_1 = getUnionType(memberTypeList, 1 /* Literal */, symbol, /*aliasTypeArguments*/ undefined); - if (enumType_1.flags & 262144 /* Union */) { - enumType_1.flags |= 512 /* EnumLiteral */; + var enumType_1 = getUnionType(memberTypeList, 1, symbol, undefined); + if (enumType_1.flags & 262144) { + enumType_1.flags |= 512; enumType_1.symbol = symbol; } return links.declaredType = enumType_1; } } - var enumType = createType(32 /* Enum */); + var enumType = createType(32); enumType.symbol = symbol; return links.declaredType = enumType; } @@ -34218,7 +28123,7 @@ var ts; function getDeclaredTypeOfTypeParameter(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var type = createType(65536 /* TypeParameter */); + var type = createType(65536); type.symbol = symbol; links.declaredType = type; } @@ -34235,103 +28140,79 @@ var ts; return tryGetDeclaredTypeOfSymbol(symbol) || errorType; } function tryGetDeclaredTypeOfSymbol(symbol) { - if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + if (symbol.flags & (32 | 64)) { return getDeclaredTypeOfClassOrInterface(symbol); } - if (symbol.flags & 524288 /* TypeAlias */) { + if (symbol.flags & 524288) { return getDeclaredTypeOfTypeAlias(symbol); } - if (symbol.flags & 262144 /* TypeParameter */) { + if (symbol.flags & 262144) { return getDeclaredTypeOfTypeParameter(symbol); } - if (symbol.flags & 384 /* Enum */) { + if (symbol.flags & 384) { return getDeclaredTypeOfEnum(symbol); } - if (symbol.flags & 8 /* EnumMember */) { + if (symbol.flags & 8) { return getDeclaredTypeOfEnumMember(symbol); } - if (symbol.flags & 2097152 /* Alias */) { + if (symbol.flags & 2097152) { return getDeclaredTypeOfAlias(symbol); } return undefined; } - /** - * A type is free of this references if it's the any, string, number, boolean, symbol, or void keyword, a string - * literal type, an array with an element type that is free of this references, or a type reference that is - * free of this references. - */ function isThislessType(node) { switch (node.kind) { - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 137 /* StringKeyword */: - case 134 /* NumberKeyword */: - case 122 /* BooleanKeyword */: - case 138 /* SymbolKeyword */: - case 135 /* ObjectKeyword */: - case 105 /* VoidKeyword */: - case 140 /* UndefinedKeyword */: - case 95 /* NullKeyword */: - case 131 /* NeverKeyword */: - case 178 /* LiteralType */: + case 119: + case 142: + case 137: + case 134: + case 122: + case 138: + case 135: + case 105: + case 140: + case 95: + case 131: + case 178: return true; - case 167 /* ArrayType */: + case 167: return isThislessType(node.elementType); - case 162 /* TypeReference */: + case 162: return !node.typeArguments || node.typeArguments.every(isThislessType); } return false; } - /** A type parameter is thisless if its contraint is thisless, or if it has no constraint. */ function isThislessTypeParameter(node) { return !node.constraint || isThislessType(node.constraint); } - /** - * A variable-like declaration is free of this references if it has a type annotation - * that is thisless, or if it has no type annotation and no initializer (and is thus of type any). - */ function isThislessVariableLikeDeclaration(node) { var typeNode = ts.getEffectiveTypeAnnotationNode(node); return typeNode ? isThislessType(typeNode) : !ts.hasInitializer(node); } - /** - * A function-like declaration is considered free of `this` references if it has a return type - * annotation that is free of this references and if each parameter is thisless and if - * each type parameter (if present) is thisless. - */ function isThislessFunctionLikeDeclaration(node) { var returnType = ts.getEffectiveReturnTypeNode(node); var typeParameters = ts.getEffectiveTypeParameterDeclarations(node); - return (node.kind === 155 /* Constructor */ || (!!returnType && isThislessType(returnType))) && + return (node.kind === 155 || (!!returnType && isThislessType(returnType))) && node.parameters.every(isThislessVariableLikeDeclaration) && typeParameters.every(isThislessTypeParameter); } - /** - * Returns true if the class or interface member given by the symbol is free of "this" references. The - * function may return false for symbols that are actually free of "this" references because it is not - * feasible to perform a complete analysis in all cases. In particular, property members with types - * inferred from their initializers and function members with inferred return types are conservatively - * assumed not to be free of "this" references. - */ function isThisless(symbol) { if (symbol.declarations && symbol.declarations.length === 1) { var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 152: + case 151: return isThislessVariableLikeDeclaration(declaration); - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: + case 154: + case 153: + case 155: return isThislessFunctionLikeDeclaration(declaration); } } } return false; } - // The mappingThisOnly flag indicates that the only type parameter being mapped is "this". When the flag is true, - // we check symbols to see if we can quickly conclude they are free of "this" references, thus needing no instantiation. function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) { var result = ts.createSymbolTable(); for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) { @@ -34353,73 +28234,44 @@ var ts; var symbol = type.symbol; var members = getMembersOfSymbol(symbol); type.declaredProperties = getNamedMembers(members); - // Start with signatures at empty array in case of recursive types type.declaredCallSignatures = ts.emptyArray; type.declaredConstructSignatures = ts.emptyArray; - type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */)); - type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */)); - type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */); - type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */); + type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call")); + type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new")); + type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0); + type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1); } return type; } - /** - * Indicates whether a type can be used as a late-bound name. - */ function isTypeUsableAsLateBoundName(type) { - return !!(type.flags & 2240 /* StringOrNumberLiteralOrUnique */); + return !!(type.flags & 2240); } - /** - * Indicates whether a declaration name is definitely late-bindable. - * A declaration name is only late-bindable if: - * - It is a `ComputedPropertyName`. - * - Its expression is an `Identifier` or either a `PropertyAccessExpression` an - * `ElementAccessExpression` consisting only of these same three types of nodes. - * - The type of its expression is a string or numeric literal type, or is a `unique symbol` type. - */ function isLateBindableName(node) { return ts.isComputedPropertyName(node) && ts.isEntityNameExpression(node.expression) && isTypeUsableAsLateBoundName(checkComputedPropertyName(node)); } - /** - * Indicates whether a declaration has a late-bindable dynamic name. - */ function hasLateBindableName(node) { var name = ts.getNameOfDeclaration(node); return !!name && isLateBindableName(name); } - /** - * Indicates whether a declaration has a dynamic name that cannot be late-bound. - */ function hasNonBindableDynamicName(node) { return ts.hasDynamicName(node) && !hasLateBindableName(node); } - /** - * Indicates whether a declaration name is a dynamic name that cannot be late-bound. - */ function isNonBindableDynamicName(node) { return ts.isDynamicName(node) && !isLateBindableName(node); } - /** - * Gets the symbolic name for a late-bound member from its type. - */ function getLateBoundNameFromType(type) { - if (type.flags & 2048 /* UniqueESSymbol */) { + if (type.flags & 2048) { return "__@" + type.symbol.escapedName + "@" + getSymbolId(type.symbol); } - if (type.flags & 192 /* StringOrNumberLiteral */) { + if (type.flags & 192) { return ts.escapeLeadingUnderscores("" + type.value); } return ts.Debug.fail(); } - /** - * Adds a declaration to a late-bound dynamic member. This performs the same function for - * late-bound members that `addDeclarationToSymbol` in binder.ts performs for early-bound - * members. - */ function addDeclarationToLateBoundSymbol(symbol, member, symbolFlags) { - ts.Debug.assert(!!(ts.getCheckFlags(symbol) & 1024 /* Late */), "Expected a late-bound symbol."); + ts.Debug.assert(!!(ts.getCheckFlags(symbol) & 1024), "Expected a late-bound symbol."); symbol.flags |= symbolFlags; getSymbolLinks(member.symbol).lateSymbol = symbol; if (!symbol.declarations) { @@ -34428,67 +28280,31 @@ var ts; else { symbol.declarations.push(member); } - if (symbolFlags & 67216319 /* Value */) { + if (symbolFlags & 67216319) { if (!symbol.valueDeclaration || symbol.valueDeclaration.kind !== member.kind) { symbol.valueDeclaration = member; } } } - /** - * Performs late-binding of a dynamic member. This performs the same function for - * late-bound members that `declareSymbol` in binder.ts performs for early-bound - * members. - * - * If a symbol is a dynamic name from a computed property, we perform an additional "late" - * binding phase to attempt to resolve the name for the symbol from the type of the computed - * property's expression. If the type of the expression is a string-literal, numeric-literal, - * or unique symbol type, we can use that type as the name of the symbol. - * - * For example, given: - * - * const x = Symbol(); - * - * interface I { - * [x]: number; - * } - * - * The binder gives the property `[x]: number` a special symbol with the name "__computed". - * In the late-binding phase we can type-check the expression `x` and see that it has a - * unique symbol type which we can then use as the name of the member. This allows users - * to define custom symbols that can be used in the members of an object type. - * - * @param parent The containing symbol for the member. - * @param earlySymbols The early-bound symbols of the parent. - * @param lateSymbols The late-bound symbols of the parent. - * @param decl The member to bind. - */ function lateBindMember(parent, earlySymbols, lateSymbols, decl) { ts.Debug.assert(!!decl.symbol, "The member is expected to have a symbol."); var links = getNodeLinks(decl); if (!links.resolvedSymbol) { - // In the event we attempt to resolve the late-bound name of this member recursively, - // fall back to the early-bound name of this member. links.resolvedSymbol = decl.symbol; var type = checkComputedPropertyName(decl.name); if (isTypeUsableAsLateBoundName(type)) { var memberName = getLateBoundNameFromType(type); var symbolFlags = decl.symbol.flags; - // Get or add a late-bound symbol for the member. This allows us to merge late-bound accessor declarations. var lateSymbol = lateSymbols.get(memberName); if (!lateSymbol) - lateSymbols.set(memberName, lateSymbol = createSymbol(0 /* None */, memberName, 1024 /* Late */)); - // Report an error if a late-bound member has the same name as an early-bound member, - // or if we have another early-bound symbol declaration with the same name and - // conflicting flags. + lateSymbols.set(memberName, lateSymbol = createSymbol(0, memberName, 1024)); var earlySymbol = earlySymbols && earlySymbols.get(memberName); if (lateSymbol.flags & getExcludedSymbolFlags(symbolFlags) || earlySymbol) { - // If we have an existing early-bound member, combine its declarations so that we can - // report an error at each declaration. var declarations = earlySymbol ? ts.concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; var name_2 = ts.declarationNameToString(decl.name); ts.forEach(declarations, function (declaration) { return error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_declaration_0, name_2); }); error(decl.name || decl, ts.Diagnostics.Duplicate_declaration_0, name_2); - lateSymbol = createSymbol(0 /* None */, memberName, 1024 /* Late */); + lateSymbol = createSymbol(0, memberName, 1024); } lateSymbol.nameType = type; addDeclarationToLateBoundSymbol(lateSymbol, decl, symbolFlags); @@ -34506,15 +28322,11 @@ var ts; function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) { var links = getSymbolLinks(symbol); if (!links[resolutionKind]) { - var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */; + var isStatic = resolutionKind === "resolvedExports"; var earlySymbols = !isStatic ? symbol.members : - symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) : + symbol.flags & 1536 ? getExportsOfModuleWorker(symbol) : symbol.exports; - // In the event we recursively resolve the members/exports of the symbol, we - // set the initial value of resolvedMembers/resolvedExports to the early-bound - // members/exports of the symbol. links[resolutionKind] = earlySymbols || emptySymbols; - // fill in any as-yet-unresolved late-bound members. var lateSymbols = ts.createSymbolTable(); for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; @@ -34532,27 +28344,15 @@ var ts; } return links[resolutionKind]; } - /** - * Gets a SymbolTable containing both the early- and late-bound members of a symbol. - * - * For a description of late-binding, see `lateBindMember`. - */ function getMembersOfSymbol(symbol) { - return symbol.flags & 6240 /* LateBindingContainer */ - ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedMembers" /* resolvedMembers */) + return symbol.flags & 6240 + ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedMembers") : symbol.members || emptySymbols; } - /** - * If a symbol is the dynamic name of the member of an object type, get the late-bound - * symbol of the member. - * - * For a description of late-binding, see `lateBindMember`. - */ function getLateBoundSymbol(symbol) { - if (symbol.flags & 106500 /* ClassMember */ && symbol.escapedName === "__computed" /* Computed */) { + if (symbol.flags & 106500 && symbol.escapedName === "__computed") { var links = getSymbolLinks(symbol); if (!links.lateSymbol && ts.some(symbol.declarations, hasLateBindableName)) { - // force late binding of members/exports. This will set the late-bound symbol if (ts.some(symbol.declarations, ts.hasStaticModifier)) { getExportsOfSymbol(symbol.parent); } @@ -34565,7 +28365,7 @@ var ts; return symbol; } function getTypeWithThisArgument(type, thisArgument, needApparentType) { - if (ts.getObjectFlags(type) & 4 /* Reference */) { + if (ts.getObjectFlags(type) & 4) { var target = type.target; var typeArguments = type.typeArguments; if (ts.length(target.typeParameters) === ts.length(typeArguments)) { @@ -34573,7 +28373,7 @@ var ts; return needApparentType ? getApparentType(ref) : ref; } } - else if (type.flags & 524288 /* Intersection */) { + else if (type.flags & 524288) { return getIntersectionType(ts.map(type.types, function (t) { return getTypeWithThisArgument(t, thisArgument, needApparentType); })); } return needApparentType ? getApparentType(type) : type; @@ -34595,7 +28395,7 @@ var ts; } else { mapper = createTypeMapper(typeParameters, typeArguments); - members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1); + members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1); callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper); constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper); stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper); @@ -34612,14 +28412,14 @@ var ts; var baseType = baseTypes_1[_i]; var instantiatedBaseType = thisArgument ? getTypeWithThisArgument(instantiateType(baseType, mapper), thisArgument) : baseType; addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); - constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1)); if (!stringIndexInfo) { stringIndexInfo = instantiatedBaseType === anyType ? - createIndexInfo(anyType, /*isReadonly*/ false) : - getIndexInfoOfType(instantiatedBaseType, 0 /* String */); + createIndexInfo(anyType, false) : + getIndexInfoOfType(instantiatedBaseType, 0); } - numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */); + numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1); } } setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); @@ -34650,14 +28450,13 @@ var ts; return sig; } function cloneSignature(sig) { - return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, /*resolvedReturnType*/ undefined, - /*resolvedTypePredicate*/ undefined, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, undefined, undefined, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); - var baseSignatures = getSignaturesOfType(baseConstructorType, 1 /* Construct */); + var baseSignatures = getSignaturesOfType(baseConstructorType, 1); if (baseSignatures.length === 0) { - return [createSignature(undefined, classType.localTypeParameters, undefined, ts.emptyArray, classType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false)]; // TODO: GH#18217 + return [createSignature(undefined, classType.localTypeParameters, undefined, ts.emptyArray, classType, undefined, 0, false, false)]; } var baseTypeNode = getBaseTypeNodeOfClass(classType); var isJavaScript = ts.isInJavaScriptFile(baseTypeNode); @@ -34687,13 +28486,11 @@ var ts; } function findMatchingSignatures(signatureLists, signature, listIndex) { if (signature.typeParameters) { - // We require an exact match for generic signatures, so we only return signatures from the first - // signature list and only if they have exact matches in the other signature lists. if (listIndex > 0) { return undefined; } for (var i = 1; i < signatureLists.length; i++) { - if (!findMatchingSignature(signatureLists[i], signature, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false)) { + if (!findMatchingSignature(signatureLists[i], signature, false, false, false)) { return undefined; } } @@ -34701,8 +28498,7 @@ var ts; } var result; for (var i = 0; i < signatureLists.length; i++) { - // Allow matching non-generic signatures to have excess parameters and different return types - var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, /*partialMatch*/ true, /*ignoreThisTypes*/ true, /*ignoreReturnTypes*/ true); + var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, true, true, true); if (!match) { return undefined; } @@ -34710,27 +28506,20 @@ var ts; } return result; } - // The signatures of a union type are those signatures that are present in each of the constituent types. - // Generic signatures must match exactly, but non-generic signatures are allowed to have extra optional - // parameters and may differ in return types. When signatures differ in return types, the resulting return - // type is the union of the constituent return types. function getUnionSignatures(types, kind) { var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); }); var result; for (var i = 0; i < signatureLists.length; i++) { for (var _i = 0, _a = signatureLists[i]; _i < _a.length; _i++) { var signature = _a[_i]; - // Only process signatures with parameter lists that aren't already in the result list - if (!result || !findMatchingSignature(result, signature, /*partialMatch*/ false, /*ignoreThisTypes*/ true, /*ignoreReturnTypes*/ true)) { + if (!result || !findMatchingSignature(result, signature, false, true, true)) { var unionSignatures = findMatchingSignatures(signatureLists, signature, i); if (unionSignatures) { var s = signature; - // Union the result types when more than one signature matches if (unionSignatures.length > 1) { var thisParameter = signature.thisParameter; if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { - // TODO: GH#18217 We tested that *some* has thisParameter and now act as if *all* do - var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType; }), 2 /* Subtype */); + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType; }), 2); thisParameter = createSymbolWithType(signature.thisParameter, thisType); } s = cloneSignature(signature); @@ -34756,15 +28545,13 @@ var ts; indexTypes.push(indexInfo.type); isAnyReadonly = isAnyReadonly || indexInfo.isReadonly; } - return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly); + return createIndexInfo(getUnionType(indexTypes, 2), isAnyReadonly); } function resolveUnionTypeMembers(type) { - // The members and properties collections are empty for union types. To get all properties of a union - // type use getPropertiesOfType (only the language service uses this). - var callSignatures = getUnionSignatures(type.types, 0 /* Call */); - var constructSignatures = getUnionSignatures(type.types, 1 /* Construct */); - var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */); - var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */); + var callSignatures = getUnionSignatures(type.types, 0); + var constructSignatures = getUnionSignatures(type.types, 1); + var stringIndexInfo = getUnionIndexInfo(type.types, 0); + var numberIndexInfo = getUnionIndexInfo(type.types, 1); setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } function intersectTypes(type1, type2) { @@ -34783,14 +28570,12 @@ var ts; mixedTypes.push(type); } else if (isMixinConstructorType(types[i])) { - mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); + mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1)[0])); } } return getIntersectionType(mixedTypes); } function resolveIntersectionTypeMembers(type) { - // The members and properties collections are empty for intersection types. To get all properties of an - // intersection type use getPropertiesOfType (only the language service uses this). var callSignatures = ts.emptyArray; var constructSignatures = ts.emptyArray; var stringIndexInfo; @@ -34799,13 +28584,8 @@ var ts; var mixinCount = ts.countWhere(types, isMixinConstructorType); var _loop_5 = function (i) { var t = type.types[i]; - // When an intersection type contains mixin constructor types, the construct signatures from - // those types are discarded and their return types are mixed into the return types of all - // other construct signatures in the intersection type. For example, the intersection type - // '{ new(...args: any[]) => A } & { new(s: string) => B }' has a single construct signature - // 'new(s: string) => A & B'. if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { - var signatures = getSignaturesOfType(t, 1 /* Construct */); + var signatures = getSignaturesOfType(t, 1); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); @@ -34815,68 +28595,59 @@ var ts; } constructSignatures = ts.concatenate(constructSignatures, signatures); } - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0 /* Call */)); - stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */)); - numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0)); + stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0)); + numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1)); }; for (var i = 0; i < types.length; i++) { _loop_5(i); } setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } - /** - * Converts an AnonymousType to a ResolvedType. - */ function resolveAnonymousTypeMembers(type) { var symbol = type.symbol; if (type.target) { - var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false); - var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper); - var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper); - var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper); - var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper); + var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false); + var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0), type.mapper); + var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1), type.mapper); + var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0), type.mapper); + var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1), type.mapper); setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } - else if (symbol.flags & 2048 /* TypeLiteral */) { + else if (symbol.flags & 2048) { var members = getMembersOfSymbol(symbol); - var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */)); - var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */)); - var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */); - var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */); + var callSignatures = getSignaturesOfSymbol(members.get("__call")); + var constructSignatures = getSignaturesOfSymbol(members.get("__new")); + var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0); + var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1); setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } else { - // Combinations of function, class, enum and module var members = emptySymbols; var stringIndexInfo = void 0; if (symbol.exports) { members = getExportsOfSymbol(symbol); } setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined); - if (symbol.flags & 32 /* Class */) { + if (symbol.flags & 32) { var classType = getDeclaredTypeOfClassOrInterface(symbol); var baseConstructorType = getBaseConstructorTypeOfClass(classType); - if (baseConstructorType.flags & (131072 /* Object */ | 524288 /* Intersection */ | 2162688 /* TypeVariable */)) { + if (baseConstructorType.flags & (131072 | 524288 | 2162688)) { members = ts.createSymbolTable(getNamedMembers(members)); addInheritedMembers(members, getPropertiesOfType(baseConstructorType)); } else if (baseConstructorType === anyType) { - stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false); + stringIndexInfo = createIndexInfo(anyType, false); } } - var numberIndexInfo = symbol.flags & 384 /* Enum */ ? enumNumberIndexInfo : undefined; + var numberIndexInfo = symbol.flags & 384 ? enumNumberIndexInfo : undefined; setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); - // We resolve the members before computing the signatures because a signature may use - // typeof with a qualified name expression that circularly references the type we are - // in the process of resolving (see issue #6072). The temporarily empty signature list - // will never be observed because a qualified name can't reference signatures. - if (symbol.flags & (16 /* Function */ | 8192 /* Method */)) { + if (symbol.flags & (16 | 8192)) { type.callSignatures = getSignaturesOfSymbol(symbol); } - // And likewise for construct signatures for classes - if (symbol.flags & 32 /* Class */) { + if (symbol.flags & 32) { var classType = getDeclaredTypeOfClassOrInterface(symbol); - var constructSignatures = getSignaturesOfSymbol(symbol.members.get("__constructor" /* Constructor */)); + var constructSignatures = getSignaturesOfSymbol(symbol.members.get("__constructor")); if (!constructSignatures.length) { constructSignatures = getDefaultConstructSignatures(classType); } @@ -34885,16 +28656,16 @@ var ts; } } function resolveReverseMappedTypeMembers(type) { - var indexInfo = getIndexInfoOfType(type.source, 0 /* String */); + var indexInfo = getIndexInfoOfType(type.source, 0); var modifiers = getMappedTypeModifiers(type.mappedType); - var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true; - var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */; + var readonlyMask = modifiers & 1 ? false : true; + var optionalMask = modifiers & 4 ? 0 : 16777216; var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType), readonlyMask && indexInfo.isReadonly); var members = ts.createSymbolTable(); for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) { var prop = _a[_i]; - var checkFlags = 2048 /* ReverseMapped */ | (readonlyMask && isReadonlySymbol(prop) ? 8 /* Readonly */ : 0); - var inferredProp = createSymbol(4 /* Property */ | prop.flags & optionalMask, prop.escapedName, checkFlags); + var checkFlags = 2048 | (readonlyMask && isReadonlySymbol(prop) ? 8 : 0); + var inferredProp = createSymbol(4 | prop.flags & optionalMask, prop.escapedName, checkFlags); inferredProp.declarations = prop.declarations; inferredProp.nameType = prop.nameType; inferredProp.propertyType = getTypeOfSymbol(prop); @@ -34903,64 +28674,48 @@ var ts; } setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined); } - /** Resolve the members of a mapped type { [P in K]: T } */ function resolveMappedTypeMembers(type) { var members = ts.createSymbolTable(); var stringIndexInfo; var numberIndexInfo; - // Resolve upfront such that recursive references see an empty object type. setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.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); var constraintType = getConstraintTypeFromMappedType(type); var templateType = getTemplateTypeFromMappedType(type.target || type); - var modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); // The 'T' in 'keyof T' + var modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); var templateModifiers = getMappedTypeModifiers(type); - var include = keyofStringsOnly ? 64 /* StringLiteral */ : 2240 /* StringOrNumberLiteralOrUnique */; + var include = keyofStringsOnly ? 64 : 2240; if (isMappedTypeWithKeyofConstraintDeclaration(type)) { - // We have a { [P in keyof T]: X } for (var _i = 0, _a = getPropertiesOfType(modifiersType); _i < _a.length; _i++) { var prop = _a[_i]; - addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include), /*_index*/ undefined, prop); + addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include), undefined, prop); } - if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) { + if (modifiersType.flags & 1 || getIndexInfoOfType(modifiersType, 0)) { addMemberForKeyType(stringType); } - if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) { + if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1)) { addMemberForKeyType(numberType); } } else { - // First, if the constraint type is a type parameter, obtain the base constraint. Then, - // if the key type is a 'keyof X', obtain 'keyof C' where C is the base constraint of X. - // Finally, iterate over the constituents of the resulting iteration type. - var keyType = constraintType.flags & 14745600 /* InstantiableNonPrimitive */ ? getApparentType(constraintType) : constraintType; - var iterationType = keyType.flags & 1048576 /* Index */ ? getIndexType(getApparentType(keyType.type)) : keyType; + var keyType = constraintType.flags & 14745600 ? getApparentType(constraintType) : constraintType; + var iterationType = keyType.flags & 1048576 ? getIndexType(getApparentType(keyType.type)) : keyType; forEachType(iterationType, addMemberForKeyType); } setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); function addMemberForKeyType(t, _index, origin) { - // Create a mapper from T to the current iteration type constituent. Then, if the - // mapped type is itself an instantiated type, combine the iteration mapper with the - // instantiation mapper. var templateMapper = combineTypeMappers(type.mapper, createTypeMapper([typeParameter], [t])); var propType = instantiateType(templateType, templateMapper); - // If the current iteration type constituent is a string literal type, create a property. - // Otherwise, for type string create a string index signature. - if (t.flags & 2240 /* StringOrNumberLiteralOrUnique */) { + if (t.flags & 2240) { var propName = getLateBoundNameFromType(t); var modifiersProp = getPropertyOfType(modifiersType, propName); - var isOptional = !!(templateModifiers & 4 /* IncludeOptional */ || - !(templateModifiers & 8 /* ExcludeOptional */) && modifiersProp && modifiersProp.flags & 16777216 /* Optional */); - var isReadonly = !!(templateModifiers & 1 /* IncludeReadonly */ || - !(templateModifiers & 2 /* ExcludeReadonly */) && modifiersProp && isReadonlySymbol(modifiersProp)); - var prop = createSymbol(4 /* Property */ | (isOptional ? 16777216 /* Optional */ : 0), propName, isReadonly ? 8 /* Readonly */ : 0); - // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the - // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks - // mode, if the underlying property is optional we remove 'undefined' from the type. + var isOptional = !!(templateModifiers & 4 || + !(templateModifiers & 8) && modifiersProp && modifiersProp.flags & 16777216); + var isReadonly = !!(templateModifiers & 1 || + !(templateModifiers & 2) && modifiersProp && isReadonlySymbol(modifiersProp)); + var prop = createSymbol(4 | (isOptional ? 16777216 : 0), propName, isReadonly ? 8 : 0); prop.type = strictNullChecks && isOptional && !isTypeAssignableTo(undefinedType, propType) ? getOptionalType(propType) : - strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 131072 /* NEUndefined */) : + strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & 16777216 ? getTypeWithFacts(propType, 131072) : propType; if (origin) { prop.syntheticOrigin = origin; @@ -34969,11 +28724,11 @@ var ts; prop.nameType = t; members.set(propName, prop); } - else if (t.flags & (1 /* Any */ | 4 /* String */)) { - stringIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1 /* IncludeReadonly */)); + else if (t.flags & (1 | 4)) { + stringIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1)); } - else if (t.flags & 8 /* Number */) { - numberIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1 /* IncludeReadonly */)); + else if (t.flags & 8) { + numberIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1)); } } } @@ -34988,45 +28743,39 @@ var ts; function getTemplateTypeFromMappedType(type) { return type.templateType || (type.templateType = type.declaration.type ? - instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper || identityMapper) : + instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4)), type.mapper || identityMapper) : errorType); } function getConstraintDeclarationForMappedType(type) { return type.declaration.typeParameter.constraint; } function isMappedTypeWithKeyofConstraintDeclaration(type) { - var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217 - return constraintDeclaration.kind === 175 /* TypeOperator */ && - constraintDeclaration.operator === 128 /* KeyOfKeyword */; + var constraintDeclaration = getConstraintDeclarationForMappedType(type); + return constraintDeclaration.kind === 175 && + constraintDeclaration.operator === 128; } function getModifiersTypeFromMappedType(type) { if (!type.modifiersType) { if (isMappedTypeWithKeyofConstraintDeclaration(type)) { - // If the constraint declaration is a 'keyof T' node, the modifiers type is T. We check - // AST nodes here because, when T is a non-generic type, the logic below eagerly resolves - // 'keyof T' to a literal union type and we can't recover T from that type. type.modifiersType = instantiateType(getTypeFromTypeNode(getConstraintDeclarationForMappedType(type).type), type.mapper || identityMapper); } else { - // Otherwise, get the declared constraint type, and if the constraint type is a type parameter, - // get the constraint of that type parameter. If the resulting type is an indexed type 'keyof T', - // the modifiers type is T. Otherwise, the modifiers type is {}. var declaredType = getTypeFromMappedTypeNode(type.declaration); var constraint = getConstraintTypeFromMappedType(declaredType); - var extendedConstraint = constraint && constraint.flags & 65536 /* TypeParameter */ ? getConstraintOfTypeParameter(constraint) : constraint; - type.modifiersType = extendedConstraint && extendedConstraint.flags & 1048576 /* Index */ ? instantiateType(extendedConstraint.type, type.mapper || identityMapper) : emptyObjectType; + var extendedConstraint = constraint && constraint.flags & 65536 ? getConstraintOfTypeParameter(constraint) : constraint; + type.modifiersType = extendedConstraint && extendedConstraint.flags & 1048576 ? instantiateType(extendedConstraint.type, type.mapper || identityMapper) : emptyObjectType; } } return type.modifiersType; } function getMappedTypeModifiers(type) { var declaration = type.declaration; - return (declaration.readonlyToken ? declaration.readonlyToken.kind === 38 /* MinusToken */ ? 2 /* ExcludeReadonly */ : 1 /* IncludeReadonly */ : 0) | - (declaration.questionToken ? declaration.questionToken.kind === 38 /* MinusToken */ ? 8 /* ExcludeOptional */ : 4 /* IncludeOptional */ : 0); + return (declaration.readonlyToken ? declaration.readonlyToken.kind === 38 ? 2 : 1 : 0) | + (declaration.questionToken ? declaration.questionToken.kind === 38 ? 8 : 4 : 0); } function getMappedTypeOptionality(type) { var modifiers = getMappedTypeModifiers(type); - return modifiers & 8 /* ExcludeOptional */ ? -1 : modifiers & 4 /* IncludeOptional */ ? 1 : 0; + return modifiers & 8 ? -1 : modifiers & 4 ? 1 : 0; } function getCombinedMappedTypeOptionality(type) { var optionality = getMappedTypeOptionality(type); @@ -35034,51 +28783,47 @@ var ts; return optionality || (isGenericMappedType(modifiersType) ? getMappedTypeOptionality(modifiersType) : 0); } function isPartialMappedType(type) { - return !!(ts.getObjectFlags(type) & 32 /* Mapped */ && getMappedTypeModifiers(type) & 4 /* IncludeOptional */); + return !!(ts.getObjectFlags(type) & 32 && getMappedTypeModifiers(type) & 4); } function isGenericMappedType(type) { - return !!(ts.getObjectFlags(type) & 32 /* Mapped */) && isGenericIndexType(getConstraintTypeFromMappedType(type)); + return !!(ts.getObjectFlags(type) & 32) && isGenericIndexType(getConstraintTypeFromMappedType(type)); } function resolveStructuredTypeMembers(type) { if (!type.members) { - if (type.flags & 131072 /* Object */) { - if (type.objectFlags & 4 /* Reference */) { + if (type.flags & 131072) { + if (type.objectFlags & 4) { resolveTypeReferenceMembers(type); } - else if (type.objectFlags & 3 /* ClassOrInterface */) { + else if (type.objectFlags & 3) { resolveClassOrInterfaceMembers(type); } - else if (type.objectFlags & 2048 /* ReverseMapped */) { + else if (type.objectFlags & 2048) { resolveReverseMappedTypeMembers(type); } - else if (type.objectFlags & 16 /* Anonymous */) { + else if (type.objectFlags & 16) { resolveAnonymousTypeMembers(type); } - else if (type.objectFlags & 32 /* Mapped */) { + else if (type.objectFlags & 32) { resolveMappedTypeMembers(type); } } - else if (type.flags & 262144 /* Union */) { + else if (type.flags & 262144) { resolveUnionTypeMembers(type); } - else if (type.flags & 524288 /* Intersection */) { + else if (type.flags & 524288) { resolveIntersectionTypeMembers(type); } } return type; } - /** Return properties of an object type or an empty array for other types */ function getPropertiesOfObjectType(type) { - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { return resolveStructuredTypeMembers(type).properties; } return ts.emptyArray; } - /** If the given type is an object type and that type has a property by the given name, - * return the symbol for that property. Otherwise return undefined. - */ function getPropertyOfObjectType(type, name) { - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); var symbol = resolved.members.get(name); if (symbol && symbolIsValue(symbol)) { @@ -35100,9 +28845,7 @@ var ts; } } } - // The properties of a union type are those that are present in all constituent types, so - // we only need to check the properties of the first type - if (type.flags & 262144 /* Union */) { + if (type.flags & 262144) { break; } } @@ -35112,13 +28855,13 @@ var ts; } function getPropertiesOfType(type) { type = getApparentType(type); - return type.flags & 786432 /* UnionOrIntersection */ ? + return type.flags & 786432 ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); } function getAllPossiblePropertiesOfTypes(types) { var unionType = getUnionType(types); - if (!(unionType.flags & 262144 /* Union */)) { + if (!(unionType.flags & 262144)) { return getAugmentedPropertiesOfType(unionType); } var props = ts.createSymbolTable(); @@ -35128,7 +28871,6 @@ var ts; var escapedName = _b[_a].escapedName; if (!props.has(escapedName)) { var prop = createUnionOrIntersectionProperty(unionType, escapedName); - // May be undefined if the property is private if (prop) props.set(escapedName, prop); } @@ -35137,9 +28879,9 @@ var ts; return ts.arrayFrom(props.values()); } function getConstraintOfType(type) { - return type.flags & 65536 /* TypeParameter */ ? getConstraintOfTypeParameter(type) : - type.flags & 2097152 /* IndexedAccess */ ? getConstraintOfIndexedAccess(type) : - type.flags & 4194304 /* Conditional */ ? getConstraintOfConditionalType(type) : + return type.flags & 65536 ? getConstraintOfTypeParameter(type) : + type.flags & 2097152 ? getConstraintOfIndexedAccess(type) : + type.flags & 4194304 ? getConstraintOfConditionalType(type) : getBaseConstraintOfType(type); } function getConstraintOfTypeParameter(typeParameter) { @@ -35154,23 +28896,18 @@ var ts; function getDefaultConstraintOfConditionalType(type) { if (!type.resolvedDefaultConstraint) { var rootTrueType = type.root.trueType; - var rootTrueConstraint = rootTrueType.flags & 8388608 /* Substitution */ ? rootTrueType.substitute : rootTrueType; + var rootTrueConstraint = rootTrueType.flags & 8388608 ? rootTrueType.substitute : rootTrueType; type.resolvedDefaultConstraint = getUnionType([instantiateType(rootTrueConstraint, type.combinedMapper || type.mapper), getFalseTypeFromConditionalType(type)]); } return type.resolvedDefaultConstraint; } function getConstraintOfDistributiveConditionalType(type) { - // Check if we have a conditional type of the form 'T extends U ? X : Y', where T is a constrained - // type parameter. If so, create an instantiation of the conditional type where T is replaced - // with its constraint. We do this because if the constraint is a union type it will be distributed - // over the conditional type and possibly reduced. For example, 'T extends undefined ? never : T' - // removes 'undefined' from T. if (type.root.isDistributive) { var constraint = getConstraintOfType(getSimplifiedType(type.checkType)); if (constraint) { var mapper = makeUnaryTypeMapper(type.root.checkType, constraint); var instantiated = getConditionalTypeInstantiation(type, combineTypeMappers(mapper, type.mapper)); - if (!(instantiated.flags & 32768 /* Never */)) { + if (!(instantiated.flags & 32768)) { return instantiated; } } @@ -35185,35 +28922,27 @@ var ts; var hasDisjointDomainType = false; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; - if (t.flags & 15794176 /* Instantiable */) { - // We keep following constraints as long as we have an instantiable type that is known - // not to be circular or infinite (hence we stop on index access types). + if (t.flags & 15794176) { var constraint = getConstraintOfType(t); - while (constraint && constraint.flags & (65536 /* TypeParameter */ | 1048576 /* Index */ | 4194304 /* Conditional */)) { + while (constraint && constraint.flags & (65536 | 1048576 | 4194304)) { constraint = getConstraintOfType(constraint); } if (constraint) { - // A constraint that isn't a union type implies that the final type would be a non-union - // type as well. Since non-union constraints are of no interest, we can exit here. - if (!(constraint.flags & 262144 /* Union */)) { + if (!(constraint.flags & 262144)) { return undefined; } constraints = ts.append(constraints, constraint); } } - else if (t.flags & 16809468 /* DisjointDomains */) { + else if (t.flags & 16809468) { hasDisjointDomainType = true; } } - // If the target is a union type or if we are intersecting with types belonging to one of the - // disjoint domans, we may end up producing a constraint that hasn't been examined before. if (constraints && (targetIsUnion || hasDisjointDomainType)) { if (hasDisjointDomainType) { - // We add any types belong to one of the disjoint domans because they might cause the final - // intersection operation to reduce the union constraints. for (var _b = 0, _c = type.types; _b < _c.length; _b++) { var t = _c[_b]; - if (t.flags & 16809468 /* DisjointDomains */) { + if (t.flags & 16809468) { constraints = ts.append(constraints, t); } } @@ -35223,7 +28952,7 @@ var ts; return undefined; } function getBaseConstraintOfInstantiableNonPrimitiveUnionOrIntersection(type) { - if (type.flags & (14745600 /* InstantiableNonPrimitive */ | 786432 /* UnionOrIntersection */)) { + if (type.flags & (14745600 | 786432)) { var constraint = getResolvedBaseConstraint(type); if (constraint !== noConstraintType && constraint !== circularConstraintType) { return constraint; @@ -35232,26 +28961,17 @@ var ts; } function getBaseConstraintOfType(type) { var constraint = getBaseConstraintOfInstantiableNonPrimitiveUnionOrIntersection(type); - if (!constraint && type.flags & 1048576 /* Index */) { + if (!constraint && type.flags & 1048576) { return keyofConstraintType; } return constraint; } - /** - * This is similar to `getBaseConstraintOfType` except it returns the input type if there's no base constraint, instead of `undefined` - * It also doesn't map indexes to `string`, as where this is used this would be unneeded (and likely undesirable) - */ function getBaseConstraintOrType(type) { return getBaseConstraintOfType(type) || type; } function hasNonCircularBaseConstraint(type) { return getResolvedBaseConstraint(type) !== circularConstraintType; } - /** - * Return the resolved base constraint of a type variable. The noConstraintType singleton is returned if the - * type variable has no constraint, and the circularConstraintType singleton is returned if the constraint - * circularly references the type variable. - */ function getResolvedBaseConstraint(type) { var circular; if (!type.resolvedBaseConstraint) { @@ -35260,7 +28980,7 @@ var ts; } return type.resolvedBaseConstraint; function getBaseConstraint(t) { - if (!pushTypeResolution(t, 4 /* ResolvedBaseConstraint */)) { + if (!pushTypeResolution(t, 4)) { circular = true; return undefined; } @@ -35272,13 +28992,13 @@ var ts; return result; } function computeBaseConstraint(t) { - if (t.flags & 65536 /* TypeParameter */) { + if (t.flags & 65536) { var constraint = getConstraintFromTypeParameter(t); return t.isThisType || !constraint ? constraint : getBaseConstraint(constraint); } - if (t.flags & 786432 /* UnionOrIntersection */) { + if (t.flags & 786432) { var types = t.types; var baseTypes = []; for (var _i = 0, types_4 = types; _i < types_4.length; _i++) { @@ -35288,24 +29008,24 @@ var ts; baseTypes.push(baseType); } } - return t.flags & 262144 /* Union */ && baseTypes.length === types.length ? getUnionType(baseTypes) : - t.flags & 524288 /* Intersection */ && baseTypes.length ? getIntersectionType(baseTypes) : + return t.flags & 262144 && baseTypes.length === types.length ? getUnionType(baseTypes) : + t.flags & 524288 && baseTypes.length ? getIntersectionType(baseTypes) : undefined; } - if (t.flags & 1048576 /* Index */) { + if (t.flags & 1048576) { return keyofConstraintType; } - if (t.flags & 2097152 /* IndexedAccess */) { + if (t.flags & 2097152) { var baseObjectType = getBaseConstraint(t.objectType); var baseIndexType = getBaseConstraint(t.indexType); var baseIndexedAccess = baseObjectType && baseIndexType ? getIndexedAccessType(baseObjectType, baseIndexType) : undefined; return baseIndexedAccess && baseIndexedAccess !== errorType ? getBaseConstraint(baseIndexedAccess) : undefined; } - if (t.flags & 4194304 /* Conditional */) { + if (t.flags & 4194304) { var constraint = getConstraintOfConditionalType(t); return constraint && getBaseConstraint(constraint); } - if (t.flags & 8388608 /* Substitution */) { + if (t.flags & 8388608) { return getBaseConstraint(t.substitute); } if (isGenericMappedType(t)) { @@ -35315,7 +29035,7 @@ var ts; } } function getApparentTypeOfIntersectionType(type) { - return type.resolvedApparentType || (type.resolvedApparentType = getTypeWithThisArgument(type, type, /*apparentType*/ true)); + return type.resolvedApparentType || (type.resolvedApparentType = getTypeWithThisArgument(type, type, true)); } function getResolvedTypeParameterDefault(typeParameter) { if (!typeParameter.default) { @@ -35324,29 +29044,19 @@ var ts; typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper) : noConstraintType; } else { - // To block recursion, set the initial value to the resolvingDefaultType. typeParameter.default = resolvingDefaultType; var defaultDeclaration = typeParameter.symbol && ts.forEach(typeParameter.symbol.declarations, function (decl) { return ts.isTypeParameterDeclaration(decl) && decl.default; }); var defaultType = defaultDeclaration ? getTypeFromTypeNode(defaultDeclaration) : noConstraintType; if (typeParameter.default === resolvingDefaultType) { - // If we have not been called recursively, set the correct default type. typeParameter.default = defaultType; } } } else if (typeParameter.default === resolvingDefaultType) { - // If we are called recursively for this type parameter, mark the default as circular. typeParameter.default = circularConstraintType; } return typeParameter.default; } - /** - * Gets the default type for a type parameter. - * - * If the type parameter is the result of an instantiation, this gets the instantiated - * default type of its target. If the type parameter has no default type or the default is - * circular, `undefined` is returned. - */ function getDefaultFromTypeParameter(typeParameter) { var defaultType = getResolvedTypeParameterDefault(typeParameter); return defaultType !== noConstraintType && defaultType !== circularConstraintType ? defaultType : undefined; @@ -35354,35 +29064,26 @@ var ts; function hasNonCircularTypeParameterDefault(typeParameter) { return getResolvedTypeParameterDefault(typeParameter) !== circularConstraintType; } - /** - * Indicates whether the declaration of a typeParameter has a default type. - */ function hasTypeParameterDefault(typeParameter) { return !!(typeParameter.symbol && ts.forEach(typeParameter.symbol.declarations, function (decl) { return ts.isTypeParameterDeclaration(decl) && decl.default; })); } - /** - * 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 & 15794176 /* Instantiable */ ? getBaseConstraintOfType(type) || emptyObjectType : type; - return t.flags & 524288 /* Intersection */ ? getApparentTypeOfIntersectionType(t) : - t.flags & 68 /* StringLike */ ? globalStringType : - t.flags & 168 /* NumberLike */ ? globalNumberType : - t.flags & 272 /* BooleanLike */ ? globalBooleanType : - t.flags & 3072 /* ESSymbolLike */ ? getGlobalESSymbolType(/*reportErrors*/ languageVersion >= 2 /* ES2015 */) : - t.flags & 16777216 /* NonPrimitive */ ? emptyObjectType : - t.flags & 1048576 /* Index */ ? keyofConstraintType : + var t = type.flags & 15794176 ? getBaseConstraintOfType(type) || emptyObjectType : type; + return t.flags & 524288 ? getApparentTypeOfIntersectionType(t) : + t.flags & 68 ? globalStringType : + t.flags & 168 ? globalNumberType : + t.flags & 272 ? globalBooleanType : + t.flags & 3072 ? getGlobalESSymbolType(languageVersion >= 2) : + t.flags & 16777216 ? emptyObjectType : + t.flags & 1048576 ? keyofConstraintType : t; } function createUnionOrIntersectionProperty(containingType, name) { var props; - var isUnion = containingType.flags & 262144 /* Union */; - var excludeModifiers = isUnion ? 24 /* NonPublicAccessibilityModifier */ : 0; - // Flags we want to propagate to the result if they exist in all source symbols - var commonFlags = isUnion ? 0 /* None */ : 16777216 /* Optional */; - var syntheticFlag = 4 /* SyntheticMethod */; + var isUnion = containingType.flags & 262144; + var excludeModifiers = isUnion ? 24 : 0; + var commonFlags = isUnion ? 0 : 16777216; + var syntheticFlag = 4; var checkFlags = 0; for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) { var current = _a[_i]; @@ -35393,24 +29094,24 @@ var ts; if (prop && !(modifiers & excludeModifiers)) { commonFlags &= prop.flags; props = ts.appendIfUnique(props, prop); - checkFlags |= (isReadonlySymbol(prop) ? 8 /* Readonly */ : 0) | - (!(modifiers & 24 /* NonPublicAccessibilityModifier */) ? 64 /* ContainsPublic */ : 0) | - (modifiers & 16 /* Protected */ ? 128 /* ContainsProtected */ : 0) | - (modifiers & 8 /* Private */ ? 256 /* ContainsPrivate */ : 0) | - (modifiers & 32 /* Static */ ? 512 /* ContainsStatic */ : 0); + checkFlags |= (isReadonlySymbol(prop) ? 8 : 0) | + (!(modifiers & 24) ? 64 : 0) | + (modifiers & 16 ? 128 : 0) | + (modifiers & 8 ? 256 : 0) | + (modifiers & 32 ? 512 : 0); if (!isPrototypeProperty(prop)) { - syntheticFlag = 2 /* SyntheticProperty */; + syntheticFlag = 2; } } else if (isUnion) { - checkFlags |= 16 /* Partial */; + checkFlags |= 16; } } } if (!props) { return undefined; } - if (props.length === 1 && !(checkFlags & 16 /* Partial */)) { + if (props.length === 1 && !(checkFlags & 16)) { return props[0]; } var declarations; @@ -35437,12 +29138,12 @@ var ts; } else { if (type !== commonType) { - checkFlags |= 32 /* HasNonUniformType */; + checkFlags |= 32; } } propTypes.push(type); } - var result = createSymbol(4 /* Property */ | commonFlags, name, syntheticFlag | checkFlags); + var result = createSymbol(4 | commonFlags, name, syntheticFlag | checkFlags); result.containingType = containingType; if (!hasNonUniformValueDeclaration && commonValueDeclaration) { result.valueDeclaration = commonValueDeclaration; @@ -35452,11 +29153,6 @@ var ts; result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } - // Return the symbol for a given property in a union or intersection type, or undefined if the property - // does not exist in any constituent type. Note that the returned property may only be present in some - // constituents, in which case the isPartial flag is set when the containing type is union type. We need - // these partial properties when identifying discriminant properties, but otherwise they are filtered out - // and do not appear to be present in the union type. function getUnionOrIntersectionProperty(type, name) { var properties = type.propertyCache || (type.propertyCache = ts.createSymbolTable()); var property = properties.get(name); @@ -35470,20 +29166,11 @@ var ts; } function getPropertyOfUnionOrIntersectionType(type, name) { var property = getUnionOrIntersectionProperty(type, name); - // We need to filter out partial properties in union types - return property && !(ts.getCheckFlags(property) & 16 /* Partial */) ? property : undefined; + return property && !(ts.getCheckFlags(property) & 16) ? property : undefined; } - /** - * Return the symbol for the property with the given name in the given type. Creates synthetic union properties when - * necessary, maps primitive types and type parameters are to their apparent types, and augments with properties from - * Object and Function as appropriate. - * - * @param type a type to look up property from - * @param name a name of property to look up in a given type - */ function getPropertyOfType(type, name) { type = getApparentType(type); - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); var symbol = resolved.members.get(name); if (symbol && symbolIsValue(symbol)) { @@ -35497,42 +29184,34 @@ var ts; } return getPropertyOfObjectType(globalObjectType, name); } - if (type.flags & 786432 /* UnionOrIntersection */) { + if (type.flags & 786432) { return getPropertyOfUnionOrIntersectionType(type, name); } return undefined; } function getSignaturesOfStructuredType(type, kind) { - if (type.flags & 917504 /* StructuredType */) { + if (type.flags & 917504) { var resolved = resolveStructuredTypeMembers(type); - return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; + return kind === 0 ? resolved.callSignatures : resolved.constructSignatures; } return ts.emptyArray; } - /** - * Return the signatures of the given kind in the given type. Creates synthetic union signatures when necessary and - * maps primitive types and type parameters are to their apparent types. - */ function getSignaturesOfType(type, kind) { return getSignaturesOfStructuredType(getApparentType(type), kind); } function getIndexInfoOfStructuredType(type, kind) { - if (type.flags & 917504 /* StructuredType */) { + if (type.flags & 917504) { var resolved = resolveStructuredTypeMembers(type); - return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo; + return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo; } } function getIndexTypeOfStructuredType(type, kind) { var info = getIndexInfoOfStructuredType(type, kind); return info && info.type; } - // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and - // maps primitive types and type parameters are to their apparent types. function getIndexInfoOfType(type, kind) { return getIndexInfoOfStructuredType(getApparentType(type), kind); } - // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and - // maps primitive types and type parameters are to their apparent types. function getIndexTypeOfType(type, kind) { return getIndexTypeOfStructuredType(getApparentType(type), kind); } @@ -35541,18 +29220,16 @@ var ts; var propTypes = []; for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) { var prop = _a[_i]; - if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) { + if (kind === 0 || isNumericLiteralName(prop.escapedName)) { propTypes.push(getTypeOfSymbol(prop)); } } if (propTypes.length) { - return getUnionType(propTypes, 2 /* Subtype */); + return getUnionType(propTypes, 2); } } return undefined; } - // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual - // type checking functions). function getTypeParametersFromDeclaration(declaration) { var result; for (var _i = 0, _a = ts.getEffectiveTypeParameterDeclarations(declaration); _i < _a.length; _i++) { @@ -35571,20 +29248,17 @@ var ts; return result; } function isJSDocOptionalParameter(node) { - return ts.isInJavaScriptFile(node) && ( - // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType - node.type && node.type.kind === 283 /* JSDocOptionalType */ + return ts.isInJavaScriptFile(node) && (node.type && node.type.kind === 283 || ts.getJSDocParameterTags(node).some(function (_a) { var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression; - return isBracketed || !!typeExpression && typeExpression.type.kind === 283 /* JSDocOptionalType */; + return isBracketed || !!typeExpression && typeExpression.type.kind === 283; })); } function tryFindAmbientModule(moduleName, withAugmentations) { if (ts.isExternalModuleNameRelative(moduleName)) { return undefined; } - var symbol = getSymbol(globals, '"' + moduleName + '"', 512 /* ValueModule */); - // merged symbol is module declaration symbol combined with all augmentations + var symbol = getSymbol(globals, '"' + moduleName + '"', 512); return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol; } function isOptionalParameter(node) { @@ -35610,29 +29284,24 @@ var ts; return false; } var isBracketed = node.isBracketed, typeExpression = node.typeExpression; - return isBracketed || !!typeExpression && typeExpression.type.kind === 283 /* JSDocOptionalType */; + return isBracketed || !!typeExpression && typeExpression.type.kind === 283; } function createTypePredicateFromTypePredicateNode(node) { var parameterName = node.parameterName; var type = getTypeFromTypeNode(node.type); - if (parameterName.kind === 71 /* Identifier */) { - return createIdentifierTypePredicate(parameterName && parameterName.escapedText, // TODO: GH#18217 - parameterName && getTypePredicateParameterIndex(node.parent.parameters, parameterName), type); + if (parameterName.kind === 71) { + return createIdentifierTypePredicate(parameterName && parameterName.escapedText, parameterName && getTypePredicateParameterIndex(node.parent.parameters, parameterName), type); } else { return createThisTypePredicate(type); } } function createIdentifierTypePredicate(parameterName, parameterIndex, type) { - return { kind: 1 /* Identifier */, parameterName: parameterName, parameterIndex: parameterIndex, type: type }; + return { kind: 1, parameterName: parameterName, parameterIndex: parameterIndex, type: type }; } function createThisTypePredicate(type) { - return { kind: 0 /* This */, type: type }; + return { kind: 0, type: type }; } - /** - * Gets the minimum number of type arguments needed to satisfy all non-optional type - * parameters. - */ function getMinTypeArgumentCount(typeParameters) { var minTypeArgumentCount = 0; if (typeParameters) { @@ -35652,9 +29321,6 @@ var ts; if (!typeArguments) { typeArguments = []; } - // Map an unsatisfied type parameter with a default type. - // If a type parameter does not have a default type, or if the default type - // is a forward reference, the empty object type is used. for (var i = numTypeArguments; i < numTypeParameters; i++) { typeArguments[i] = getDefaultTypeArgumentType(isJavaScriptImplicitAny); } @@ -35686,16 +29352,12 @@ var ts; ts.isValueSignatureDeclaration(declaration) && !ts.hasJSDocParameterTags(declaration) && !ts.getJSDocType(declaration); - // If this is a JSDoc construct signature, then skip the first parameter in the - // parameter list. The first parameter represents the return type of the construct - // signature. for (var i = isJSConstructSignature ? 1 : 0; i < declaration.parameters.length; i++) { var param = declaration.parameters[i]; var paramSymbol = param.symbol; var type = ts.isJSDocParameterTag(param) ? (param.typeExpression && param.typeExpression.type) : param.type; - // Include parameter symbol instead of property symbol in the signature - if (paramSymbol && !!(paramSymbol.flags & 4 /* Property */) && !ts.isBindingPattern(param.name)) { - var resolvedSymbol = resolveName(param, paramSymbol.escapedName, 67216319 /* Value */, undefined, undefined, /*isUse*/ false); + if (paramSymbol && !!(paramSymbol.flags & 4) && !ts.isBindingPattern(param.name)) { + var resolvedSymbol = resolveName(param, paramSymbol.escapedName, 67216319, undefined, undefined, false); paramSymbol = resolvedSymbol; } if (i === 0 && paramSymbol.escapedName === "this") { @@ -35705,10 +29367,9 @@ var ts; else { parameters.push(paramSymbol); } - if (type && type.kind === 178 /* LiteralType */) { + if (type && type.kind === 178) { hasLiteralTypes = true; } - // Record a new minimum argument count if this is not an optional parameter var isOptionalParameter_1 = isOptionalJSDocParameterTag(param) || param.initializer || param.questionToken || param.dotDotDotToken || iife && parameters.length > iife.arguments.length && !type || @@ -35718,32 +29379,25 @@ var ts; minArgumentCount = parameters.length; } } - // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation - if ((declaration.kind === 156 /* GetAccessor */ || declaration.kind === 157 /* SetAccessor */) && + if ((declaration.kind === 156 || declaration.kind === 157) && !hasNonBindableDynamicName(declaration) && (!hasThisParameter || !thisParameter)) { - var otherKind = declaration.kind === 156 /* GetAccessor */ ? 157 /* SetAccessor */ : 156 /* GetAccessor */; + var otherKind = declaration.kind === 156 ? 157 : 156; var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind); if (other) { thisParameter = getAnnotatedAccessorThisParameter(other); } } - var classType = declaration.kind === 155 /* Constructor */ ? + var classType = declaration.kind === 155 ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) : undefined; var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration); var returnType = getSignatureReturnTypeFromDeclaration(declaration, isJSConstructSignature, classType); var hasRestLikeParameter = ts.hasRestParameter(declaration) || ts.isInJavaScriptFile(declaration) && maybeAddJsSyntheticRestParameter(declaration, parameters); - links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, /*resolvedTypePredicate*/ undefined, minArgumentCount, hasRestLikeParameter, hasLiteralTypes); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, undefined, minArgumentCount, hasRestLikeParameter, hasLiteralTypes); } return links.resolvedSignature; } - /** - * A JS function gets a synthetic rest parameter if it references `arguments` AND: - * 1. It has no parameters but at least one `@param` with a type that starts with `...` - * OR - * 2. It has at least one parameter, and the last parameter has a matching `@param` with a type that starts with `...` - */ function maybeAddJsSyntheticRestParameter(declaration, parameters) { if (ts.isJSDocSignature(declaration) || !containsArgumentsReference(declaration)) { return false; @@ -35753,11 +29407,10 @@ var ts; var lastParamVariadicType = ts.firstDefined(lastParamTags, function (p) { return p.typeExpression && ts.isJSDocVariadicType(p.typeExpression.type) ? p.typeExpression.type : undefined; }); - var syntheticArgsSymbol = createSymbol(3 /* Variable */, "args"); + var syntheticArgsSymbol = createSymbol(3, "args"); syntheticArgsSymbol.type = lastParamVariadicType ? createArrayType(getTypeFromTypeNode(lastParamVariadicType.type)) : anyArrayType; syntheticArgsSymbol.isRestParameter = true; if (lastParamVariadicType) { - // Replace the last parameter with a rest parameter. parameters.pop(); } parameters.push(syntheticArgsSymbol); @@ -35765,7 +29418,7 @@ var ts; } function getSignatureReturnTypeFromDeclaration(declaration, isJSConstructSignature, classType) { if (isJSConstructSignature) { - return getTypeFromTypeNode(declaration.parameters[0].type); // TODO: GH#18217 + return getTypeFromTypeNode(declaration.parameters[0].type); } else if (classType) { return classType; @@ -35774,10 +29427,8 @@ var ts; if (typeNode) { return getTypeFromTypeNode(typeNode); } - // TypeScript 1.0 spec (April 2014): - // If only one accessor includes a type annotation, the other behaves as if it had the same type annotation. - if (declaration.kind === 156 /* GetAccessor */ && !hasNonBindableDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 157 /* SetAccessor */); + if (declaration.kind === 156 && !hasNonBindableDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 157); return getAnnotatedAccessorType(setter); } if (ts.nodeIsMissing(declaration.body)) { @@ -35787,7 +29438,7 @@ var ts; function containsArgumentsReference(declaration) { var links = getNodeLinks(declaration); if (links.containsArgumentsReference === undefined) { - if (links.flags & 8192 /* CaptureArguments */) { + if (links.flags & 8192) { links.containsArgumentsReference = true; } else { @@ -35799,13 +29450,13 @@ var ts; if (!node) return false; switch (node.kind) { - case 71 /* Identifier */: + case 71: return node.escapedText === "arguments" && ts.isExpressionNode(node); - case 152 /* PropertyDeclaration */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - return node.name.kind === 147 /* ComputedPropertyName */ + case 152: + case 154: + case 156: + case 157: + return node.name.kind === 147 && traverse(node.name); default: return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse); @@ -35820,9 +29471,6 @@ var ts; var decl = symbol.declarations[i]; if (!ts.isFunctionLike(decl)) continue; - // Don't include signature if node is the implementation of an overloaded function. A node is considered - // an implementation node if it has a body and the previous node is of the same kind and immediately - // precedes the implementation node (i.e. has the same parent and ends where the implementation starts). if (i > 0 && decl.body) { var previous = symbol.declarations[i - 1]; if (decl.parent === previous.parent && decl.kind === previous.kind && decl.pos === previous.end) { @@ -35862,7 +29510,7 @@ var ts; } else { var declaration = signature.declaration; - signature.resolvedTypePredicate = declaration && declaration.type && declaration.type.kind === 161 /* TypePredicate */ ? + signature.resolvedTypePredicate = declaration && declaration.type && declaration.type.kind === 161 ? createTypePredicateFromTypePredicateNode(declaration.type) : noTypePredicate; } @@ -35872,7 +29520,7 @@ var ts; } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { - if (!pushTypeResolution(signature, 3 /* ResolvedReturnType */)) { + if (!pushTypeResolution(signature, 3)) { return errorType; } var type = void 0; @@ -35880,7 +29528,7 @@ var ts; type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); } else if (signature.unionSignatures) { - type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature), 2 /* Subtype */); + type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature), 2); } else { type = getReturnTypeFromBody(signature.declaration); @@ -35903,12 +29551,12 @@ var ts; return signature.resolvedReturnType; } function isResolvingReturnTypeOfSignature(signature) { - return !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, 3 /* ResolvedReturnType */) >= 0; + return !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, 3) >= 0; } function getRestTypeOfSignature(signature) { if (signature.hasRestParameter) { var type = getTypeOfSymbol(ts.last(signature.parameters)); - if (ts.getObjectFlags(type) & 4 /* Reference */ && type.target === globalArrayType) { + if (ts.getObjectFlags(type) & 4 && type.target === globalArrayType) { return type.typeArguments[0]; } } @@ -35925,7 +29573,7 @@ var ts; return instantiation; } function createSignatureInstantiation(signature, typeArguments) { - return instantiateSignature(signature, createSignatureTypeMapper(signature, typeArguments), /*eraseTypeParameters*/ true); + return instantiateSignature(signature, createSignatureTypeMapper(signature, typeArguments), true); } function createSignatureTypeMapper(signature, typeArguments) { return createTypeMapper(signature.typeParameters, typeArguments); @@ -35936,8 +29584,7 @@ var ts; signature; } function createErasedSignature(signature) { - // Create an instantiation of the signature where all type arguments are the any type. - return instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); + return instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); } function getCanonicalSignature(signature) { return signature.typeParameters ? @@ -35945,12 +29592,6 @@ var ts; signature; } function createCanonicalSignature(signature) { - // Create an instantiation of the signature where each unconstrained type parameter is replaced with - // its original. When a generic class or interface is instantiated, each generic method in the class or - // interface is instantiated with a fresh set of cloned type parameters (which we need to handle scenarios - // where different generations of the same type parameter are in scope). This leads to a lot of new type - // identities, and potentially a lot of work comparing those identities, so here we create an instantiation - // that uses the original type identities for all unconstrained type parameters. return getSignatureInstantiation(signature, ts.map(signature.typeParameters, function (tp) { return tp.target && !getConstraintOfTypeParameter(tp.target) ? tp.target : tp; }), ts.isInJavaScriptFile(signature.declaration)); } function getBaseSignature(signature) { @@ -35958,18 +29599,14 @@ var ts; if (typeParameters) { var typeEraser_1 = createTypeEraser(typeParameters); var baseConstraints = ts.map(typeParameters, function (tp) { return instantiateType(getBaseConstraintOfType(tp), typeEraser_1) || emptyObjectType; }); - return instantiateSignature(signature, createTypeMapper(typeParameters, baseConstraints), /*eraseTypeParameters*/ true); + return instantiateSignature(signature, createTypeMapper(typeParameters, baseConstraints), true); } return signature; } function getOrCreateTypeFromSignature(signature) { - // There are two ways to declare a construct signature, one is by declaring a class constructor - // using the constructor keyword, and the other is declaring a bare construct signature in an - // object type literal or interface (using the new keyword). Each way of declaring a constructor - // will result in a different declaration kind. if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 155 /* Constructor */ || signature.declaration.kind === 159 /* ConstructSignature */; // TODO: GH#18217 - var type = createObjectType(16 /* Anonymous */); + var isConstructor = signature.declaration.kind === 155 || signature.declaration.kind === 159; + var type = createObjectType(16); type.members = emptySymbols; type.properties = ts.emptyArray; type.callSignatures = !isConstructor ? [signature] : ts.emptyArray; @@ -35979,10 +29616,10 @@ var ts; return signature.isolatedSignatureType; } function getIndexSymbol(symbol) { - return symbol.members.get("__index" /* Index */); + return symbol.members.get("__index"); } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 /* Number */ ? 134 /* NumberKeyword */ : 137 /* StringKeyword */; + var syntaxKind = kind === 1 ? 134 : 137; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { @@ -36004,12 +29641,12 @@ var ts; function getIndexInfoOfSymbol(symbol, kind) { var declaration = getIndexDeclarationOfSymbol(symbol, kind); if (declaration) { - return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasModifier(declaration, 64 /* Readonly */), declaration); + return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasModifier(declaration, 64), declaration); } return undefined; } function getConstraintDeclaration(type) { - var decl = type.symbol && ts.getDeclarationOfKind(type.symbol, 148 /* TypeParameter */); + var decl = type.symbol && ts.getDeclarationOfKind(type.symbol, 148); return decl && decl.constraint; } function getInferredTypeParameterConstraint(typeParameter) { @@ -36017,11 +29654,7 @@ var ts; if (typeParameter.symbol) { for (var _i = 0, _a = typeParameter.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - // When an 'infer T' declaration is immediately contained in a type reference node - // (such as 'Foo'), T's constraint is inferred from the constraint of the - // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are - // present, we form an intersection of the inferred constraint types. - if (declaration.parent.kind === 172 /* InferType */ && declaration.parent.parent.kind === 162 /* TypeReference */) { + if (declaration.parent.kind === 172 && declaration.parent.parent.kind === 162) { var typeReference = declaration.parent.parent; var typeParameters = getTypeParametersForTypeReference(typeReference); if (typeParameters) { @@ -36029,12 +29662,6 @@ var ts; if (index < typeParameters.length) { var declaredConstraint = getConstraintOfTypeParameter(typeParameters[index]); if (declaredConstraint) { - // Type parameter constraints can reference other type parameters so - // constraints need to be instantiated. If instantiation produces the - // type parameter itself, we discard that inference. For example, in - // type Foo = [T, U]; - // type Bar = T extends Foo ? Foo : T; - // the instantiated constraint for U is X, so we discard that inference. var mapper = createTypeMapper(typeParameters, getEffectiveTypeArguments(typeReference, typeParameters)); var constraint = instantiateType(declaredConstraint, mapper); if (constraint !== typeParameter) { @@ -36063,7 +29690,7 @@ var ts; return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { - return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 148 /* TypeParameter */).parent); + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 148).parent); } function getTypeListId(types) { var result = ""; @@ -36088,10 +29715,6 @@ var ts; } return result; } - // This function is used to propagate certain flags when creating new object type references and union types. - // It is only necessary to do so if a constituent type might be the undefined type, the null type, the type - // of an object literal or the anyFunctionType. This is because there are operations in the type checker - // that care about the presence of such types at arbitrary depth in a containing type. function getPropagatingFlagsOfTypes(types, excludeKinds) { var result = 0; for (var _i = 0, types_5 = types; _i < types_5.length; _i++) { @@ -36100,15 +29723,15 @@ var ts; result |= type.flags; } } - return result & 939524096 /* PropagatingFlags */; + return result & 939524096; } function createTypeReference(target, typeArguments) { var id = getTypeListId(typeArguments); var type = target.instantiations.get(id); if (!type) { - type = createObjectType(4 /* Reference */, target.symbol); + type = createObjectType(4, target.symbol); target.instantiations.set(id, type); - type.flags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments, /*excludeKinds*/ 0) : 0; + type.flags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments, 0) : 0; type.target = target; type.typeArguments = typeArguments; } @@ -36125,9 +29748,6 @@ var ts; function getTypeReferenceArity(type) { return ts.length(type.target.typeParameters); } - /** - * Get type from type-reference that reference to class or interface - */ function getTypeFromClassOrInterfaceReference(node, symbol, typeArgs) { var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); var typeParameters = type.localTypeParameters; @@ -36137,7 +29757,7 @@ var ts; var isJs = ts.isInJavaScriptFile(node); var isJsImplicitAny = !noImplicitAny && isJs; if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) { - var missingAugmentsTag = isJs && node.parent.kind !== 290 /* JSDocAugmentsTag */; + var missingAugmentsTag = isJs && node.parent.kind !== 290; var diag = minTypeArgumentCount === typeParameters.length ? missingAugmentsTag ? ts.Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag @@ -36145,16 +29765,12 @@ var ts; : missingAugmentsTag ? ts.Diagnostics.Expected_0_1_type_arguments_provide_these_with_an_extends_tag : ts.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments; - var typeStr = typeToString(type, /*enclosingDeclaration*/ undefined, 2 /* WriteArrayAsGenericType */); + var typeStr = typeToString(type, undefined, 2); error(node, diag, typeStr, minTypeArgumentCount, typeParameters.length); if (!isJs) { - // TODO: Adopt same permissive behavior in TS as in JS to reduce follow-on editing experience failures (requires editing fillMissingTypeArguments) return errorType; } } - // In a type reference, the outer type parameters of the referenced class or interface are automatically - // supplied as type arguments and the type reference only specifies arguments for the local type parameters - // of the class or interface. var typeArguments = ts.concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgs, typeParameters, minTypeArgumentCount, isJs)); return createTypeReference(type, typeArguments); } @@ -36171,11 +29787,6 @@ var ts; } return instantiation; } - /** - * Get type from reference to type alias. When a type alias is generic, the declared type of the type alias may include - * references to the type parameters of the alias. We replace those with the actual type arguments by instantiating the - * declared type. Instantiations are cached using the type identities of the type arguments as the key. - */ function getTypeFromTypeAliasReference(node, symbol, typeArguments) { var type = getDeclaredTypeOfSymbol(symbol); var typeParameters = getSymbolLinks(symbol).typeParameters; @@ -36194,16 +29805,13 @@ var ts; } function getTypeReferenceName(node) { switch (node.kind) { - case 162 /* TypeReference */: + case 162: return node.typeName; - case 207 /* ExpressionWithTypeArguments */: - // We only support expressions that are simple qualified names. For other - // expressions this produces undefined. + case 207: var expr = node.expression; if (ts.isEntityNameExpression(expr)) { return expr; } - // fall through; } return undefined; } @@ -36214,7 +29822,7 @@ var ts; return resolveEntityName(typeReferenceName, meaning) || unknownSymbol; } function getTypeReferenceType(node, symbol) { - var typeArguments = typeArgumentsFromTypeReferenceNode(node); // Do unconditionally so we mark type arguments as referenced. + var typeArguments = typeArgumentsFromTypeReferenceNode(node); if (symbol === unknownSymbol) { return errorType; } @@ -36222,40 +29830,32 @@ var ts; if (type) { return type; } - // Get type from reference to named type that cannot be generic (enum or type parameter) var res = tryGetDeclaredTypeOfSymbol(symbol); if (res) { return checkNoTypeArguments(node, symbol) ? - res.flags & 65536 /* TypeParameter */ ? getConstrainedTypeVariable(res, node) : res : + res.flags & 65536 ? getConstrainedTypeVariable(res, node) : res : errorType; } - if (!(symbol.flags & 67216319 /* Value */ && isJSDocTypeReference(node))) { + if (!(symbol.flags & 67216319 && isJSDocTypeReference(node))) { return errorType; } var jsdocType = getJSDocTypeReference(node, symbol, typeArguments); if (jsdocType) { return jsdocType; } - // Resolve the type reference as a Type for the purpose of reporting errors. - resolveTypeReferenceName(getTypeReferenceName(node), 67901928 /* Type */); + resolveTypeReferenceName(getTypeReferenceName(node), 67901928); return getTypeOfSymbol(symbol); } - /** - * A jsdoc TypeReference may have resolved to a value (as opposed to a type). If - * the symbol is a constructor function, return the inferred class type; otherwise, - * the type of this reference is just the type of the value we resolved to. - */ function getJSDocTypeReference(node, symbol, typeArguments) { var assignedType = getAssignedClassType(symbol); var valueType = getTypeOfSymbol(symbol); var referenceType = valueType.symbol && valueType.symbol !== symbol && !isInferredClassType(valueType) && getTypeReferenceTypeWorker(node, valueType.symbol, typeArguments); if (referenceType || assignedType) { - // TODO: GH#18217 (should the `|| assignedType` be at a lower precedence?) return (referenceType && assignedType ? getIntersectionType([assignedType, referenceType]) : referenceType || assignedType); } } function getTypeReferenceTypeWorker(node, symbol, typeArguments) { - if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + if (symbol.flags & (32 | 64)) { if (symbol.valueDeclaration && ts.isBinaryExpression(symbol.valueDeclaration.parent)) { var jsdocType = getJSDocTypeReference(node, symbol, typeArguments); if (jsdocType) { @@ -36264,23 +29864,23 @@ var ts; } return getTypeFromClassOrInterfaceReference(node, symbol, typeArguments); } - if (symbol.flags & 524288 /* TypeAlias */) { + if (symbol.flags & 524288) { return getTypeFromTypeAliasReference(node, symbol, typeArguments); } - if (symbol.flags & 16 /* Function */ && + if (symbol.flags & 16 && isJSDocTypeReference(node) && (symbol.members || ts.getJSDocClassTag(symbol.valueDeclaration))) { return getInferredClassType(symbol); } } function getSubstitutionType(typeVariable, substitute) { - var result = createType(8388608 /* Substitution */); + var result = createType(8388608); result.typeVariable = typeVariable; result.substitute = substitute; return result; } function isUnaryTupleTypeNode(node) { - return node.kind === 168 /* TupleType */ && node.elementTypes.length === 1; + return node.kind === 168 && node.elementTypes.length === 1; } function getImpliedConstraint(typeVariable, checkNode, extendsNode) { return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(typeVariable, checkNode.elementTypes[0], extendsNode.elementTypes[0]) : @@ -36289,9 +29889,9 @@ var ts; } function getConstrainedTypeVariable(typeVariable, node) { var constraints; - while (node && !ts.isStatement(node) && node.kind !== 286 /* JSDocComment */) { + while (node && !ts.isStatement(node) && node.kind !== 286) { var parent = node.parent; - if (parent.kind === 171 /* ConditionalType */ && node === parent.trueType) { + if (parent.kind === 171 && node === parent.trueType) { var constraint = getImpliedConstraint(typeVariable, parent.checkType, parent.extendsType); if (constraint) { constraints = ts.append(constraints, constraint); @@ -36302,7 +29902,7 @@ var ts; return constraints ? getSubstitutionType(typeVariable, getIntersectionType(ts.append(constraints, typeVariable))) : typeVariable; } function isJSDocTypeReference(node) { - return !!(node.flags & 2097152 /* JSDoc */) && node.kind === 162 /* TypeReference */; + return !!(node.flags & 2097152) && node.kind === 162; } function checkNoTypeArguments(node, symbol) { if (node.typeArguments) { @@ -36348,7 +29948,7 @@ var ts; if (ts.isJSDocIndexSignature(node)) { var indexed = getTypeFromTypeNode(typeArgs[0]); var target = getTypeFromTypeNode(typeArgs[1]); - var index = createIndexInfo(target, /*isReadonly*/ false); + var index = createIndexInfo(target, false); return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined); } return anyType; @@ -36360,24 +29960,22 @@ var ts; } function getTypeFromJSDocNullableTypeNode(node) { var type = getTypeFromTypeNode(node.type); - return strictNullChecks ? getNullableType(type, 16384 /* Null */) : type; + return strictNullChecks ? getNullableType(type, 16384) : type; } function getTypeFromTypeReference(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var symbol = void 0; var type = void 0; - var meaning = 67901928 /* Type */; + var meaning = 67901928; if (isJSDocTypeReference(node)) { type = getIntendedTypeFromJSDocTypeReference(node); - meaning |= 67216319 /* Value */; + meaning |= 67216319; } if (!type) { symbol = resolveTypeReferenceName(getTypeReferenceName(node), meaning); type = getTypeReferenceType(node, symbol); } - // Cache both the resolved symbol and the resolved type. The resolved symbol is needed in when we check the - // type reference in checkTypeReferenceNode. links.resolvedSymbol = symbol; links.resolvedType = type; } @@ -36389,10 +29987,6 @@ var ts; function getTypeFromTypeQueryNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - // TypeScript 1.0 spec (April 2014): 3.6.3 - // The expression is processed as an identifier expression (section 4.3) - // or property access expression(section 4.10), - // the widened type(section 3.9) of which becomes the result. links.resolvedType = getWidenedType(checkExpression(node.exprName)); } return links.resolvedType; @@ -36403,9 +29997,9 @@ var ts; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 238 /* EnumDeclaration */: + case 235: + case 236: + case 238: return declaration; } } @@ -36414,7 +30008,7 @@ var ts; return arity ? emptyGenericType : emptyObjectType; } var type = getDeclaredTypeOfSymbol(symbol); - if (!(type.flags & 131072 /* Object */)) { + if (!(type.flags & 131072)) { error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, ts.symbolName(symbol)); return arity ? emptyGenericType : emptyObjectType; } @@ -36425,72 +30019,68 @@ var ts; return type; } function getGlobalValueSymbol(name, reportErrors) { - return getGlobalSymbol(name, 67216319 /* Value */, reportErrors ? ts.Diagnostics.Cannot_find_global_value_0 : undefined); + return getGlobalSymbol(name, 67216319, reportErrors ? ts.Diagnostics.Cannot_find_global_value_0 : undefined); } function getGlobalTypeSymbol(name, reportErrors) { - return getGlobalSymbol(name, 67901928 /* Type */, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined); + return getGlobalSymbol(name, 67901928, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined); } function getGlobalSymbol(name, meaning, diagnostic) { - // Don't track references for global symbols anyway, so value if `isReference` is arbitrary - return resolveName(undefined, name, meaning, diagnostic, name, /*isUse*/ false); + return resolveName(undefined, name, meaning, diagnostic, name, false); } function getGlobalType(name, arity, reportErrors) { var symbol = getGlobalTypeSymbol(name, reportErrors); return symbol || reportErrors ? getTypeOfGlobalSymbol(symbol, arity) : undefined; } function getGlobalTypedPropertyDescriptorType() { - return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType("TypedPropertyDescriptor", /*arity*/ 1, /*reportErrors*/ true)) || emptyGenericType; + return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType("TypedPropertyDescriptor", 1, true)) || emptyGenericType; } function getGlobalTemplateStringsArrayType() { - return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType; + return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray", 0, true)) || emptyObjectType; } function getGlobalImportMetaType() { - return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType; + return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", 0, true)) || emptyObjectType; } function getGlobalESSymbolConstructorSymbol(reportErrors) { return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors)); } function getGlobalESSymbolType(reportErrors) { - return deferredGlobalESSymbolType || (deferredGlobalESSymbolType = getGlobalType("Symbol", /*arity*/ 0, reportErrors)) || emptyObjectType; + return deferredGlobalESSymbolType || (deferredGlobalESSymbolType = getGlobalType("Symbol", 0, reportErrors)) || emptyObjectType; } function getGlobalPromiseType(reportErrors) { - return deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType("Promise", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType("Promise", 1, reportErrors)) || emptyGenericType; } function getGlobalPromiseConstructorSymbol(reportErrors) { return deferredGlobalPromiseConstructorSymbol || (deferredGlobalPromiseConstructorSymbol = getGlobalValueSymbol("Promise", reportErrors)); } function getGlobalPromiseConstructorLikeType(reportErrors) { - return deferredGlobalPromiseConstructorLikeType || (deferredGlobalPromiseConstructorLikeType = getGlobalType("PromiseConstructorLike", /*arity*/ 0, reportErrors)) || emptyObjectType; + return deferredGlobalPromiseConstructorLikeType || (deferredGlobalPromiseConstructorLikeType = getGlobalType("PromiseConstructorLike", 0, reportErrors)) || emptyObjectType; } function getGlobalAsyncIterableType(reportErrors) { - return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType("AsyncIterable", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType("AsyncIterable", 1, reportErrors)) || emptyGenericType; } function getGlobalAsyncIteratorType(reportErrors) { - return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalAsyncIterableIteratorType(reportErrors) { - return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalIterableType(reportErrors) { - return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable", 1, reportErrors)) || emptyGenericType; } function getGlobalIteratorType(reportErrors) { - return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator", 1, reportErrors)) || emptyGenericType; } function getGlobalIterableIteratorType(reportErrors) { - return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator", /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalTypeOrUndefined(name, arity) { if (arity === void 0) { arity = 0; } - var symbol = getGlobalSymbol(name, 67901928 /* Type */, /*diagnostic*/ undefined); + var symbol = getGlobalSymbol(name, 67901928, undefined); return symbol && getTypeOfGlobalSymbol(symbol, arity); } function getGlobalExtractSymbol() { - return deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalSymbol("Extract", 524288 /* TypeAlias */, ts.Diagnostics.Cannot_find_global_type_0)); // TODO: GH#18217 + return deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalSymbol("Extract", 524288, ts.Diagnostics.Cannot_find_global_type_0)); } - /** - * Instantiates a global type that is generic with some element type, and returns that instantiation. - */ function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) { return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType; } @@ -36498,16 +30088,16 @@ var ts; return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]); } function createAsyncIterableType(iteratedType) { - return createTypeFromGenericGlobalType(getGlobalAsyncIterableType(/*reportErrors*/ true), [iteratedType]); + return createTypeFromGenericGlobalType(getGlobalAsyncIterableType(true), [iteratedType]); } function createAsyncIterableIteratorType(iteratedType) { - return createTypeFromGenericGlobalType(getGlobalAsyncIterableIteratorType(/*reportErrors*/ true), [iteratedType]); + return createTypeFromGenericGlobalType(getGlobalAsyncIterableIteratorType(true), [iteratedType]); } function createIterableType(iteratedType) { - return createTypeFromGenericGlobalType(getGlobalIterableType(/*reportErrors*/ true), [iteratedType]); + return createTypeFromGenericGlobalType(getGlobalIterableType(true), [iteratedType]); } function createIterableIteratorType(iteratedType) { - return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(/*reportErrors*/ true), [iteratedType]); + return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(true), [iteratedType]); } function createArrayType(elementType) { return createTypeFromGenericGlobalType(globalArrayType, [elementType]); @@ -36519,27 +30109,20 @@ var ts; } return links.resolvedType; } - // We represent tuple types as type references to synthesized generic interface types created by - // this function. The types are of the form: - // - // interface Tuple extends Array { 0: T0, 1: T1, 2: T2, ... } - // - // Note that the generic type created by this function has no symbol associated with it. The same - // is true for each of the synthesized type parameters. function createTupleTypeOfArity(arity) { var typeParameters = []; var properties = []; for (var i = 0; i < arity; i++) { - var typeParameter = createType(65536 /* TypeParameter */); + var typeParameter = createType(65536); typeParameters.push(typeParameter); - var property = createSymbol(4 /* Property */, "" + i); + var property = createSymbol(4, "" + i); property.type = typeParameter; properties.push(property); } - var lengthSymbol = createSymbol(4 /* Property */, "length"); + var lengthSymbol = createSymbol(4, "length"); lengthSymbol.type = getLiteralType(arity); properties.push(lengthSymbol); - var type = createObjectType(8 /* Tuple */ | 4 /* Reference */); + var type = createObjectType(8 | 4); type.typeParameters = typeParameters; type.outerTypeParameters = undefined; type.localTypeParameters = typeParameters; @@ -36547,7 +30130,7 @@ var ts; type.instantiations.set(getTypeListId(type.typeParameters), type); type.target = type; type.typeArguments = type.typeParameters; - type.thisType = createType(65536 /* TypeParameter */); + type.thisType = createType(65536); type.thisType.isThisType = true; type.thisType.constraint = type; type.declaredProperties = properties; @@ -36576,28 +30159,20 @@ var ts; function containsType(types, type) { return ts.binarySearch(types, type, getTypeId, ts.compareValues) >= 0; } - // Return true if the given intersection type contains - // more than one unit type or, - // an object type and a nullable type (null or undefined), or - // a string-like type and a type known to be non-string-like, or - // a number-like type and a type known to be non-number-like, or - // a symbol-like type and a type known to be non-symbol-like, or - // a void-like type and a type known to be non-void-like, or - // a non-primitive type and a type known to be primitive. function isEmptyIntersectionType(type) { var combined = 0; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; - if (t.flags & 27072 /* Unit */ && combined & 27072 /* Unit */) { + if (t.flags & 27072 && combined & 27072) { return true; } combined |= t.flags; - if (combined & 24576 /* Nullable */ && combined & (131072 /* Object */ | 16777216 /* NonPrimitive */) || - combined & 16777216 /* NonPrimitive */ && combined & (16809468 /* DisjointDomains */ & ~16777216 /* NonPrimitive */) || - combined & 68 /* StringLike */ && combined & (16809468 /* DisjointDomains */ & ~68 /* StringLike */) || - combined & 168 /* NumberLike */ && combined & (16809468 /* DisjointDomains */ & ~168 /* NumberLike */) || - combined & 3072 /* ESSymbolLike */ && combined & (16809468 /* DisjointDomains */ & ~3072 /* ESSymbolLike */) || - combined & 12288 /* VoidLike */ && combined & (16809468 /* DisjointDomains */ & ~12288 /* VoidLike */)) { + if (combined & 24576 && combined & (131072 | 16777216) || + combined & 16777216 && combined & (16809468 & ~16777216) || + combined & 68 && combined & (16809468 & ~68) || + combined & 168 && combined & (16809468 & ~168) || + combined & 3072 && combined & (16809468 & ~3072) || + combined & 12288 && combined & (16809468 & ~12288)) { return true; } } @@ -36605,29 +30180,25 @@ var ts; } function addTypeToUnion(typeSet, includes, type) { var flags = type.flags; - if (flags & 262144 /* Union */) { + if (flags & 262144) { return addTypesToUnion(typeSet, includes, type.types); } - // We ignore 'never' types in unions. Likewise, we ignore intersections of unit types as they are - // another form of 'never' (in that they have an empty value domain). We could in theory turn - // intersections of unit types into 'never' upon construction, but deferring the reduction makes it - // easier to reason about their origin. - if (!(flags & 32768 /* Never */ || flags & 524288 /* Intersection */ && isEmptyIntersectionType(type))) { - includes |= flags & ~939524096 /* ConstructionFlags */; - if (flags & 3 /* AnyOrUnknown */) { + if (!(flags & 32768 || flags & 524288 && isEmptyIntersectionType(type))) { + includes |= flags & ~939524096; + if (flags & 3) { if (type === wildcardType) - includes |= 268435456 /* Wildcard */; + includes |= 268435456; } - else if (!strictNullChecks && flags & 24576 /* Nullable */) { - if (!(flags & 134217728 /* ContainsWideningType */)) - includes |= 134217728 /* NonWideningType */; + else if (!strictNullChecks && flags & 24576) { + if (!(flags & 134217728)) + includes |= 134217728; } else { var len = typeSet.length; var index = len && type.id > typeSet[len - 1].id ? ~len : ts.binarySearch(typeSet, type, getTypeId, ts.compareValues); if (index < 0) { - if (!(flags & 131072 /* Object */ && type.objectFlags & 16 /* Anonymous */ && - type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */) && containsIdenticalType(typeSet, type))) { + if (!(flags & 131072 && type.objectFlags & 16 && + type.symbol && type.symbol.flags & (16 | 8192) && containsIdenticalType(typeSet, type))) { typeSet.splice(~index, 0, type); } } @@ -36635,8 +30206,6 @@ var ts; } return includes; } - // Add the given types to the given type set. Order is preserved, duplicates are removed, - // and nested types of the given kind are flattened into the set. function addTypesToUnion(typeSet, includes, types) { for (var _i = 0, types_6 = types; _i < types_6.length; _i++) { var type = types_6[_i]; @@ -36656,8 +30225,8 @@ var ts; function isSubtypeOfAny(source, targets) { for (var _i = 0, targets_1 = targets; _i < targets_1.length; _i++) { var target = targets_1[_i]; - if (source !== target && isTypeSubtypeOf(source, target) && (!(ts.getObjectFlags(getTargetType(source)) & 1 /* Class */) || - !(ts.getObjectFlags(getTargetType(target)) & 1 /* Class */) || + if (source !== target && isTypeSubtypeOf(source, target) && (!(ts.getObjectFlags(getTargetType(source)) & 1) || + !(ts.getObjectFlags(getTargetType(target)) & 1) || isTypeDerivedFrom(source, target))) { return true; } @@ -36666,11 +30235,11 @@ var ts; } function isSetOfLiteralsFromSameEnum(types) { var first = types[0]; - if (first.flags & 512 /* EnumLiteral */) { + if (first.flags & 512) { var firstEnum = getParentOfSymbol(first.symbol); for (var i = 1; i < types.length; i++) { var other = types[i]; - if (!(other.flags & 512 /* EnumLiteral */) || (firstEnum !== getParentOfSymbol(other.symbol))) { + if (!(other.flags & 512) || (firstEnum !== getParentOfSymbol(other.symbol))) { return false; } } @@ -36695,24 +30264,17 @@ var ts; while (i > 0) { i--; var t = types[i]; - var remove = t.flags & 64 /* StringLiteral */ && includes & 4 /* String */ || - t.flags & 128 /* NumberLiteral */ && includes & 8 /* Number */ || - t.flags & 2048 /* UniqueESSymbol */ && includes & 1024 /* ESSymbol */ || - t.flags & 192 /* StringOrNumberLiteral */ && t.flags & 33554432 /* FreshLiteral */ && containsType(types, t.regularType); + var remove = t.flags & 64 && includes & 4 || + t.flags & 128 && includes & 8 || + t.flags & 2048 && includes & 1024 || + t.flags & 192 && t.flags & 33554432 && containsType(types, t.regularType); if (remove) { ts.orderedRemoveItemAt(types, i); } } } - // We sort and deduplicate the constituent types based on object identity. If the subtypeReduction - // flag is specified we also reduce the constituent type set to only include types that aren't subtypes - // of other types. Subtype reduction is expensive for large union types and is possible only when union - // types are known not to circularly reference themselves (as is the case with union types created by - // expression constructs such as array literals and the || and ?: operators). Named types can - // circularly reference themselves and therefore cannot be subtype reduced during their declaration. - // For example, "type Item = string | (() => Item" is a named type that circularly references itself. function getUnionType(types, unionReduction, aliasSymbol, aliasTypeArguments) { - if (unionReduction === void 0) { unionReduction = 1 /* Literal */; } + if (unionReduction === void 0) { unionReduction = 1; } if (types.length === 0) { return neverType; } @@ -36721,25 +30283,25 @@ var ts; } var typeSet = []; var includes = addTypesToUnion(typeSet, 0, types); - if (includes & 3 /* AnyOrUnknown */) { - return includes & 1 /* Any */ ? includes & 268435456 /* Wildcard */ ? wildcardType : anyType : unknownType; + if (includes & 3) { + return includes & 1 ? includes & 268435456 ? wildcardType : anyType : unknownType; } switch (unionReduction) { - case 1 /* Literal */: - if (includes & 2240 /* StringOrNumberLiteralOrUnique */) { + case 1: + if (includes & 2240) { removeRedundantLiteralTypes(typeSet, includes); } break; - case 2 /* Subtype */: + case 2: removeSubtypes(typeSet); break; } if (typeSet.length === 0) { - return includes & 16384 /* Null */ ? includes & 134217728 /* NonWideningType */ ? nullType : nullWideningType : - includes & 8192 /* Undefined */ ? includes & 134217728 /* NonWideningType */ ? undefinedType : undefinedWideningType : + return includes & 16384 ? includes & 134217728 ? nullType : nullWideningType : + includes & 8192 ? includes & 134217728 ? undefinedType : undefinedWideningType : neverType; } - return getUnionTypeFromSortedList(typeSet, includes & 16749629 /* NotUnit */ ? 0 : 67108864 /* UnionOfUnitTypes */, aliasSymbol, aliasTypeArguments); + return getUnionTypeFromSortedList(typeSet, includes & 16749629 ? 0 : 67108864, aliasSymbol, aliasTypeArguments); } function getUnionTypePredicate(signatures) { var first; @@ -36752,7 +30314,6 @@ var ts; } if (first) { if (!typePredicateKindsMatch(first, pred)) { - // No common type predicate. return undefined; } } @@ -36762,7 +30323,6 @@ var ts; types.push(pred.type); } if (!first) { - // No union signatures had a type predicate. return undefined; } var unionType = getUnionType(types); @@ -36775,7 +30335,6 @@ var ts; ? ts.isIdentifierTypePredicate(b) && a.parameterIndex === b.parameterIndex : !ts.isIdentifierTypePredicate(b); } - // This function assumes the constituent type list is sorted and deduplicated. function getUnionTypeFromSortedList(types, unionOfUnitTypes, aliasSymbol, aliasTypeArguments) { if (types.length === 0) { return neverType; @@ -36786,16 +30345,10 @@ var ts; var id = getTypeListId(types); var type = unionTypes.get(id); if (!type) { - var propagatedFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 24576 /* Nullable */); - type = createType(262144 /* Union */ | propagatedFlags | unionOfUnitTypes); + var propagatedFlags = getPropagatingFlagsOfTypes(types, 24576); + type = createType(262144 | propagatedFlags | unionOfUnitTypes); unionTypes.set(id, type); type.types = types; - /* - Note: This is the alias symbol (or lack thereof) that we see when we first encounter this union type. - For aliases of identical unions, eg `type T = A | B; type U = A | B`, the symbol of the first alias encountered is the aliasSymbol. - (In the language service, the order may depend on the order in which a user takes actions, such as hovering over symbols.) - It's important that we create equivalent union types only once, so that's an unfortunate side effect. - */ type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = aliasTypeArguments; } @@ -36805,35 +30358,33 @@ var ts; var links = getNodeLinks(node); if (!links.resolvedType) { var aliasSymbol = getAliasSymbolForTypeNode(node); - links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), 1 /* Literal */, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); + links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), 1, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); } return links.resolvedType; } function addTypeToIntersection(typeSet, includes, type) { var flags = type.flags; - if (flags & 524288 /* Intersection */) { + if (flags & 524288) { return addTypesToIntersection(typeSet, includes, type.types); } - if (ts.getObjectFlags(type) & 16 /* Anonymous */ && isEmptyObjectType(type)) { - includes |= 536870912 /* EmptyObject */; + if (ts.getObjectFlags(type) & 16 && isEmptyObjectType(type)) { + includes |= 536870912; } else { - includes |= flags & ~939524096 /* ConstructionFlags */; - if (flags & 3 /* AnyOrUnknown */) { + includes |= flags & ~939524096; + if (flags & 3) { if (type === wildcardType) - includes |= 268435456 /* Wildcard */; + includes |= 268435456; } - else if ((strictNullChecks || !(flags & 24576 /* Nullable */)) && !ts.contains(typeSet, type) && - !(flags & 131072 /* Object */ && type.objectFlags & 16 /* Anonymous */ && - type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */) && + else if ((strictNullChecks || !(flags & 24576)) && !ts.contains(typeSet, type) && + !(flags & 131072 && type.objectFlags & 16 && + type.symbol && type.symbol.flags & (16 | 8192) && containsIdenticalType(typeSet, type))) { typeSet.push(type); } } return includes; } - // Add the given types to the given type set. Order is preserved, freshness is removed from literal - // types, duplicates are removed, and nested types of the given kind are flattened into the set. function addTypesToIntersection(typeSet, includes, types) { for (var _i = 0, types_8 = types; _i < types_8.length; _i++) { var type = types_8[_i]; @@ -36846,25 +30397,22 @@ var ts; while (i > 0) { i--; var t = types[i]; - var remove = t.flags & 4 /* String */ && includes & 64 /* StringLiteral */ || - t.flags & 8 /* Number */ && includes & 128 /* NumberLiteral */ || - t.flags & 1024 /* ESSymbol */ && includes & 2048 /* UniqueESSymbol */; + var remove = t.flags & 4 && includes & 64 || + t.flags & 8 && includes & 128 || + t.flags & 1024 && includes & 2048; if (remove) { ts.orderedRemoveItemAt(types, i); } } } - // When intersecting unions of unit types we can simply intersect based on type identity. - // Here we remove all unions of unit types from the given list and replace them with a - // a single union containing an intersection of the unit types. function intersectUnionsOfUnitTypes(types) { - var unionIndex = ts.findIndex(types, function (t) { return (t.flags & 67108864 /* UnionOfUnitTypes */) !== 0; }); + var unionIndex = ts.findIndex(types, function (t) { return (t.flags & 67108864) !== 0; }); var unionType = types[unionIndex]; var intersection = unionType.types; var i = types.length - 1; var _loop_6 = function () { var t = types[i]; - if (t.flags & 67108864 /* UnionOfUnitTypes */) { + if (t.flags & 67108864) { intersection = ts.filter(intersection, function (u) { return containsType(t.types, u); }); ts.orderedRemoveItemAt(types, i); } @@ -36876,37 +30424,27 @@ var ts; if (intersection === unionType.types) { return false; } - types[unionIndex] = getUnionTypeFromSortedList(intersection, unionType.flags & 67108864 /* UnionOfUnitTypes */); + types[unionIndex] = getUnionTypeFromSortedList(intersection, unionType.flags & 67108864); return true; } - // We normalize combinations of intersection and union types based on the distributive property of the '&' - // operator. Specifically, because X & (A | B) is equivalent to X & A | X & B, we can transform intersection - // types with union type constituents into equivalent union types with intersection type constituents and - // effectively ensure that union types are always at the top level in type representations. - // - // We do not perform structural deduplication on intersection types. Intersection types are created only by the & - // type operator and we can't reduce those because we want to support recursive intersection types. For example, - // a type alias of the form "type List = T & { next: List }" cannot be reduced during its declaration. - // Also, unlike union types, the order of the constituent types is preserved in order that overload resolution - // for intersections of types with signatures can be deterministic. function getIntersectionType(types, aliasSymbol, aliasTypeArguments) { var typeSet = []; var includes = addTypesToIntersection(typeSet, 0, types); - if (includes & 32768 /* Never */) { + if (includes & 32768) { return neverType; } - if (includes & 1 /* Any */) { - return includes & 268435456 /* Wildcard */ ? wildcardType : anyType; + if (includes & 1) { + return includes & 268435456 ? wildcardType : anyType; } - if (!strictNullChecks && includes & 24576 /* Nullable */) { - return includes & 8192 /* Undefined */ ? undefinedType : nullType; + if (!strictNullChecks && includes & 24576) { + return includes & 8192 ? undefinedType : nullType; } - if (includes & 4 /* String */ && includes & 64 /* StringLiteral */ || - includes & 8 /* Number */ && includes & 128 /* NumberLiteral */ || - includes & 1024 /* ESSymbol */ && includes & 2048 /* UniqueESSymbol */) { + if (includes & 4 && includes & 64 || + includes & 8 && includes & 128 || + includes & 1024 && includes & 2048) { removeRedundantPrimitiveTypes(typeSet, includes); } - if (includes & 536870912 /* EmptyObject */ && !(includes & 131072 /* Object */)) { + if (includes & 536870912 && !(includes & 131072)) { typeSet.push(emptyObjectType); } if (typeSet.length === 0) { @@ -36915,27 +30453,22 @@ var ts; if (typeSet.length === 1) { return typeSet[0]; } - if (includes & 262144 /* Union */) { - if (includes & 67108864 /* UnionOfUnitTypes */ && intersectUnionsOfUnitTypes(typeSet)) { - // When the intersection creates a reduced set (which might mean that *all* union types have - // disappeared), we restart the operation to get a new set of combined flags. Once we have - // reduced we'll never reduce again, so this occurs at most once. + if (includes & 262144) { + if (includes & 67108864 && intersectUnionsOfUnitTypes(typeSet)) { return getIntersectionType(typeSet, aliasSymbol, aliasTypeArguments); } - // We are attempting to construct a type of the form X & (A | B) & Y. Transform this into a type of - // the form X & A & Y | X & B & Y and recursively reduce until no union type constituents remain. - var unionIndex_1 = ts.findIndex(typeSet, function (t) { return (t.flags & 262144 /* Union */) !== 0; }); + var unionIndex_1 = ts.findIndex(typeSet, function (t) { return (t.flags & 262144) !== 0; }); var unionType = typeSet[unionIndex_1]; - return getUnionType(ts.map(unionType.types, function (t) { return getIntersectionType(ts.replaceElement(typeSet, unionIndex_1, t)); }), 1 /* Literal */, aliasSymbol, aliasTypeArguments); + return getUnionType(ts.map(unionType.types, function (t) { return getIntersectionType(ts.replaceElement(typeSet, unionIndex_1, t)); }), 1, aliasSymbol, aliasTypeArguments); } var id = getTypeListId(typeSet); var type = intersectionTypes.get(id); if (!type) { - var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, /*excludeKinds*/ 24576 /* Nullable */); - type = createType(524288 /* Intersection */ | propagatedFlags); + var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 24576); + type = createType(524288 | propagatedFlags); intersectionTypes.set(id, type); type.types = typeSet; - type.aliasSymbol = aliasSymbol; // See comment in `getUnionTypeFromSortedList`. + type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = aliasTypeArguments; } return type; @@ -36949,23 +30482,23 @@ var ts; return links.resolvedType; } function createIndexType(type, stringsOnly) { - var result = createType(1048576 /* Index */); + var result = createType(1048576); result.type = type; result.stringsOnly = stringsOnly; return result; } function getIndexTypeForGenericType(type, stringsOnly) { return stringsOnly ? - type.resolvedStringIndexType || (type.resolvedStringIndexType = createIndexType(type, /*stringsOnly*/ true)) : - type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, /*stringsOnly*/ false)); + type.resolvedStringIndexType || (type.resolvedStringIndexType = createIndexType(type, true)) : + type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, false)); } function getLiteralTypeFromPropertyName(prop, include) { - if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) { + if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24)) { var type = getLateBoundSymbol(prop).nameType; if (!type && !ts.isKnownSymbol(prop)) { var name = ts.getNameOfDeclaration(prop.valueDeclaration); type = name && ts.isNumericLiteral(name) ? getLiteralType(+name.text) : - name && name.kind === 147 /* ComputedPropertyName */ && ts.isNumericLiteral(name.expression) ? getLiteralType(+name.expression.text) : + name && name.kind === 147 && ts.isNumericLiteral(name.expression) ? getLiteralType(+name.expression.text) : getLiteralType(ts.symbolName(prop)); } if (type && type.flags & include) { @@ -36978,21 +30511,21 @@ var ts; return getUnionType(ts.map(getPropertiesOfType(type), function (t) { return getLiteralTypeFromPropertyName(t, include); })); } function getNonEnumNumberIndexInfo(type) { - var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */); + var numberIndexInfo = getIndexInfoOfType(type, 1); return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined; } function getIndexType(type, stringsOnly) { if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; } - return type.flags & 262144 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly); })) : - type.flags & 524288 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly); })) : - maybeTypeOfKind(type, 14745600 /* InstantiableNonPrimitive */) ? getIndexTypeForGenericType(type, stringsOnly) : - ts.getObjectFlags(type) & 32 /* Mapped */ ? getConstraintTypeFromMappedType(type) : + return type.flags & 262144 ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly); })) : + type.flags & 524288 ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly); })) : + maybeTypeOfKind(type, 14745600) ? getIndexTypeForGenericType(type, stringsOnly) : + ts.getObjectFlags(type) & 32 ? getConstraintTypeFromMappedType(type) : type === wildcardType ? wildcardType : - type.flags & 1 /* Any */ ? keyofConstraintType : - stringsOnly ? getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromPropertyNames(type, 64 /* StringLiteral */) : - getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromPropertyNames(type, 2048 /* UniqueESSymbol */)]) : - getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, 64 /* StringLiteral */ | 2048 /* UniqueESSymbol */)]) : - getLiteralTypeFromPropertyNames(type, 2240 /* StringOrNumberLiteralOrUnique */); + type.flags & 1 ? keyofConstraintType : + stringsOnly ? getIndexInfoOfType(type, 0) ? stringType : getLiteralTypeFromPropertyNames(type, 64) : + getIndexInfoOfType(type, 0) ? getUnionType([stringType, numberType, getLiteralTypeFromPropertyNames(type, 2048)]) : + getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, 64 | 2048)]) : + getLiteralTypeFromPropertyNames(type, 2240); } function getExtractStringType(type) { if (keyofStringsOnly) { @@ -37003,41 +30536,41 @@ var ts; } function getIndexTypeOrString(type) { var indexType = getExtractStringType(getIndexType(type)); - return indexType.flags & 32768 /* Never */ ? stringType : indexType; + return indexType.flags & 32768 ? stringType : indexType; } function getTypeFromTypeOperatorNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { switch (node.operator) { - case 128 /* KeyOfKeyword */: + case 128: links.resolvedType = getIndexType(getTypeFromTypeNode(node.type)); break; - case 141 /* UniqueKeyword */: - links.resolvedType = node.type.kind === 138 /* SymbolKeyword */ + case 141: + links.resolvedType = node.type.kind === 138 ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent)) : errorType; break; } } - return links.resolvedType; // TODO: GH#18217 + return links.resolvedType; } function createIndexedAccessType(objectType, indexType) { - var type = createType(2097152 /* IndexedAccess */); + var type = createType(2097152); type.objectType = objectType; type.indexType = indexType; return type; } function getPropertyTypeForIndexType(objectType, indexType, accessNode, cacheSymbol) { - var accessExpression = accessNode && accessNode.kind === 186 /* ElementAccessExpression */ ? accessNode : undefined; + var accessExpression = accessNode && accessNode.kind === 186 ? accessNode : undefined; var propName = isTypeUsableAsLateBoundName(indexType) ? getLateBoundNameFromType(indexType) : - accessExpression && checkThatExpressionIsProperSymbolReference(accessExpression.argumentExpression, indexType, /*reportError*/ false) ? + accessExpression && checkThatExpressionIsProperSymbolReference(accessExpression.argumentExpression, indexType, false) ? ts.getPropertyNameForKnownSymbolName(ts.idText(accessExpression.argumentExpression.name)) : undefined; if (propName !== undefined) { var prop = getPropertyOfType(objectType, propName); if (prop) { if (accessExpression) { - markPropertyAsReferenced(prop, accessExpression, /*isThisAccess*/ accessExpression.expression.kind === 99 /* ThisKeyword */); + markPropertyAsReferenced(prop, accessExpression, accessExpression.expression.kind === 99); if (ts.isAssignmentTarget(accessExpression) && (isReferenceToReadonlyEntity(accessExpression, prop) || isReferenceThroughNamespaceImport(accessExpression))) { error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, symbolToString(prop)); return errorType; @@ -37049,16 +30582,16 @@ var ts; return getTypeOfSymbol(prop); } } - if (!(indexType.flags & 24576 /* Nullable */) && isTypeAssignableToKind(indexType, 68 /* StringLike */ | 168 /* NumberLike */ | 3072 /* ESSymbolLike */)) { + if (!(indexType.flags & 24576) && isTypeAssignableToKind(indexType, 68 | 168 | 3072)) { if (isTypeAny(objectType)) { return objectType; } - var indexInfo = isTypeAssignableToKind(indexType, 168 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || - getIndexInfoOfType(objectType, 0 /* String */) || + var indexInfo = isTypeAssignableToKind(indexType, 168) && getIndexInfoOfType(objectType, 1) || + getIndexInfoOfType(objectType, 0) || undefined; if (indexInfo) { - if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) { - var indexNode = accessNode.kind === 186 /* ElementAccessExpression */ ? accessNode.argumentExpression : accessNode.indexType; + if (accessNode && !isTypeAssignableToKind(indexType, 4 | 8)) { + var indexNode = accessNode.kind === 186 ? accessNode.argumentExpression : accessNode.indexType; error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); } else if (accessExpression && indexInfo.isReadonly && (ts.isAssignmentTarget(accessExpression) || ts.isDeleteTarget(accessExpression))) { @@ -37066,12 +30599,12 @@ var ts; } return indexInfo.type; } - if (indexType.flags & 32768 /* Never */) { + if (indexType.flags & 32768) { return neverType; } if (accessExpression && !isConstEnumObjectType(objectType)) { if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors) { - if (getIndexTypeOfType(objectType, 1 /* Number */)) { + if (getIndexTypeOfType(objectType, 1)) { error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number); } else { @@ -37082,11 +30615,11 @@ var ts; } } if (accessNode) { - var indexNode = accessNode.kind === 186 /* ElementAccessExpression */ ? accessNode.argumentExpression : accessNode.indexType; - if (indexType.flags & (64 /* StringLiteral */ | 128 /* NumberLiteral */)) { + var indexNode = accessNode.kind === 186 ? accessNode.argumentExpression : accessNode.indexType; + if (indexType.flags & (64 | 128)) { error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType)); } - else if (indexType.flags & (4 /* String */ | 8 /* Number */)) { + else if (indexType.flags & (4 | 8)) { error(indexNode, ts.Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); } else { @@ -37096,15 +30629,13 @@ var ts; return errorType; } function isGenericObjectType(type) { - return maybeTypeOfKind(type, 14745600 /* InstantiableNonPrimitive */ | 134217728 /* GenericMappedType */); + return maybeTypeOfKind(type, 14745600 | 134217728); } function isGenericIndexType(type) { - return maybeTypeOfKind(type, 14745600 /* InstantiableNonPrimitive */ | 1048576 /* Index */); + return maybeTypeOfKind(type, 14745600 | 1048576); } - // Return true if the given type is a non-generic object type with a string index signature and no - // other members. function isStringIndexOnlyType(type) { - if (type.flags & 131072 /* Object */ && !isGenericMappedType(type)) { + if (type.flags & 131072 && !isGenericMappedType(type)) { var t = resolveStructuredTypeMembers(type); return t.properties.length === 0 && t.callSignatures.length === 0 && t.constructSignatures.length === 0 && @@ -37113,33 +30644,25 @@ var ts; return false; } function isMappedTypeToNever(type) { - return !!(ts.getObjectFlags(type) & 32 /* Mapped */) && getTemplateTypeFromMappedType(type) === neverType; + return !!(ts.getObjectFlags(type) & 32) && getTemplateTypeFromMappedType(type) === neverType; } function getSimplifiedType(type) { - return type.flags & 2097152 /* IndexedAccess */ ? getSimplifiedIndexedAccessType(type) : type; + return type.flags & 2097152 ? getSimplifiedIndexedAccessType(type) : type; } - // Transform an indexed access to a simpler form, if possible. Return the simpler form, or return - // the type itself if no transformation is possible. function getSimplifiedIndexedAccessType(type) { if (type.simplified) { return type.simplified === circularConstraintType ? type : type.simplified; } type.simplified = circularConstraintType; - // We recursively simplify the object type as it may in turn be an indexed access type. For example, with - // '{ [P in T]: { [Q in U]: number } }[T][U]' we want to first simplify the inner indexed access type. var objectType = getSimplifiedType(type.objectType); - if (objectType.flags & 524288 /* Intersection */ && isGenericObjectType(objectType)) { - // Given an indexed access type T[K], if T is an intersection containing one or more generic types and one or - // more object types with only a string index signature, e.g. '(U & V & { [x: string]: D })[K]', return a - // transformed type of the form '(U & V)[K] | D'. This allows us to properly reason about higher order indexed - // access types with default property values as expressed by D. + if (objectType.flags & 524288 && isGenericObjectType(objectType)) { if (ts.some(objectType.types, isStringIndexOnlyType)) { var regularTypes = []; var stringIndexTypes = []; for (var _i = 0, _a = objectType.types; _i < _a.length; _i++) { var t = _a[_i]; if (isStringIndexOnlyType(t)) { - stringIndexTypes.push(getIndexTypeOfType(t, 0 /* String */)); + stringIndexTypes.push(getIndexTypeOfType(t, 0)); } else { regularTypes.push(t); @@ -37150,23 +30673,15 @@ var ts; getIntersectionType(stringIndexTypes) ]); } - // Given an indexed access type T[K], if T is an intersection containing one or more generic types and one or - // more mapped types with a template type `never`, '(U & V & { [P in T]: never })[K]', return a - // transformed type that removes the never-mapped type: '(U & V)[K]'. This mirrors what would happen - // eventually anyway, but it easier to reason about. if (ts.some(objectType.types, isMappedTypeToNever)) { var nonNeverTypes = ts.filter(objectType.types, function (t) { return !isMappedTypeToNever(t); }); return type.simplified = getSimplifiedType(getIndexedAccessType(getIntersectionType(nonNeverTypes), type.indexType)); } } - // If the object type is a mapped type { [P in K]: E }, where K is generic, instantiate E using a mapper - // that substitutes the index type for P. For example, for an index access { [P in K]: Box }[X], we - // construct the type Box. We do not further simplify the result because mapped types can be recursive - // and we might never terminate. if (isGenericMappedType(objectType)) { return type.simplified = substituteIndexedMappedType(objectType, type); } - if (objectType.flags & 65536 /* TypeParameter */) { + if (objectType.flags & 65536) { var constraint = getConstraintFromTypeParameter(objectType); if (constraint && isGenericMappedType(constraint)) { return type.simplified = substituteIndexedMappedType(constraint, type); @@ -37183,16 +30698,10 @@ var ts; if (objectType === wildcardType || indexType === wildcardType) { return wildcardType; } - // If the index type is generic, or if the object type is generic and doesn't originate in an expression, - // we are performing a higher-order index access where we cannot meaningfully access the properties of the - // object type. Note that for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in - // an expression. This is to preserve backwards compatibility. For example, an element access 'this["foo"]' - // has always been resolved eagerly using the constraint type of 'this' at the given location. - if (isGenericIndexType(indexType) || !(accessNode && accessNode.kind === 186 /* ElementAccessExpression */) && isGenericObjectType(objectType)) { - if (objectType.flags & 3 /* AnyOrUnknown */) { + if (isGenericIndexType(indexType) || !(accessNode && accessNode.kind === 186) && isGenericObjectType(objectType)) { + if (objectType.flags & 3) { return objectType; } - // Defer the operation by creating an indexed access type. var id = objectType.id + "," + indexType.id; var type = indexedAccessTypes.get(id); if (!type) { @@ -37200,15 +30709,12 @@ var ts; } return type; } - // In the following we resolve T[K] to the type of the property in T selected by K. - // We treat boolean as different from other unions to improve errors; - // skipping straight to getPropertyTypeForIndexType gives errors with 'boolean' instead of 'true'. var apparentObjectType = getApparentType(objectType); - if (indexType.flags & 262144 /* Union */ && !(indexType.flags & 16 /* Boolean */)) { + if (indexType.flags & 262144 && !(indexType.flags & 16)) { var propTypes = []; for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) { var t = _a[_i]; - var propType = getPropertyTypeForIndexType(apparentObjectType, t, accessNode, /*cacheSymbol*/ false); + var propType = getPropertyTypeForIndexType(apparentObjectType, t, accessNode, false); if (propType === errorType) { return errorType; } @@ -37216,7 +30722,7 @@ var ts; } return getUnionType(propTypes); } - return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, /*cacheSymbol*/ true); + return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, true); } function getTypeFromIndexedAccessTypeNode(node) { var links = getNodeLinks(node); @@ -37224,7 +30730,7 @@ var ts; var objectType = getTypeFromTypeNode(node.objectType); var indexType = getTypeFromTypeNode(node.indexType); var resolved = getIndexedAccessType(objectType, indexType, node); - links.resolvedType = resolved.flags & 2097152 /* IndexedAccess */ && + links.resolvedType = resolved.flags & 2097152 && resolved.objectType === objectType && resolved.indexType === indexType ? getConstrainedTypeVariable(resolved, node) : resolved; @@ -37234,19 +30740,17 @@ var ts; function getTypeFromMappedTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - var type = createObjectType(32 /* Mapped */, node.symbol); + var type = createObjectType(32, node.symbol); type.declaration = node; type.aliasSymbol = getAliasSymbolForTypeNode(node); type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(type.aliasSymbol); 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; } function getActualTypeVariable(type) { - return type.flags & 8388608 /* Substitution */ ? type.typeVariable : type; + return type.flags & 8388608 ? type.typeVariable : type; } function getConditionalType(root, mapper) { var checkType = instantiateType(root.checkType, mapper); @@ -37254,56 +30758,39 @@ var ts; if (checkType === wildcardType || extendsType === wildcardType) { return wildcardType; } - // If this is a distributive conditional type and the check type is generic we need to defer - // resolution of the conditional type such that a later instantiation will properly distribute - // over union types. - var isDeferred = root.isDistributive && maybeTypeOfKind(checkType, 15794176 /* Instantiable */); + var isDeferred = root.isDistributive && maybeTypeOfKind(checkType, 15794176); var combinedMapper; if (root.inferTypeParameters) { - var context = createInferenceContext(root.inferTypeParameters, /*signature*/ undefined, 0 /* None */); + var context = createInferenceContext(root.inferTypeParameters, undefined, 0); if (!isDeferred) { - // We don't want inferences from constraints as they may cause us to eagerly resolve the - // conditional type instead of deferring resolution. Also, we always want strict function - // types rules (i.e. proper contravariance) for inferences. - inferTypes(context.inferences, checkType, extendsType, 32 /* NoConstraints */ | 64 /* AlwaysStrict */); + inferTypes(context.inferences, checkType, extendsType, 32 | 64); } combinedMapper = combineTypeMappers(mapper, context); } if (!isDeferred) { - if (extendsType.flags & 3 /* AnyOrUnknown */) { + if (extendsType.flags & 3) { return instantiateType(root.trueType, mapper); } - // Return union of trueType and falseType for 'any' since it matches anything - if (checkType.flags & 1 /* Any */) { + if (checkType.flags & 1) { return getUnionType([instantiateType(root.trueType, combinedMapper || mapper), instantiateType(root.falseType, mapper)]); } - // Instantiate the extends type including inferences for 'infer T' type parameters var inferredExtendsType = combinedMapper ? instantiateType(root.extendsType, combinedMapper) : extendsType; - // Return falseType for a definitely false extends check. We check an instantations of the two - // types with type parameters mapped to the wildcard type, the most permissive instantiations - // possible (the wildcard type is assignable to and from all types). If those are not related, - // then no instatiations will be and we can just return the false branch type. if (!isTypeAssignableTo(getWildcardInstantiation(checkType), getWildcardInstantiation(inferredExtendsType))) { return instantiateType(root.falseType, mapper); } - // Return trueType for a definitely true extends check. The definitely assignable relation excludes - // type variable constraints from consideration. Without the definitely assignable relation, the type - // type Foo = T extends { x: string } ? string : number - // would immediately resolve to 'string' instead of being deferred. - if (checkTypeRelatedTo(checkType, inferredExtendsType, definitelyAssignableRelation, /*errorNode*/ undefined)) { + if (checkTypeRelatedTo(checkType, inferredExtendsType, definitelyAssignableRelation, undefined)) { return instantiateType(root.trueType, combinedMapper || mapper); } } - // Return a deferred type for a check that is neither definitely true nor definitely false var erasedCheckType = getActualTypeVariable(checkType); - var result = createType(4194304 /* Conditional */); + var result = createType(4194304); result.root = root; result.checkType = erasedCheckType; result.extendsType = extendsType; result.mapper = mapper; result.combinedMapper = combinedMapper; result.aliasSymbol = root.aliasSymbol; - result.aliasTypeArguments = instantiateTypes(root.aliasTypeArguments, mapper); // TODO: GH#18217 + result.aliasTypeArguments = instantiateTypes(root.aliasTypeArguments, mapper); return result; } function getTrueTypeFromConditionalType(type) { @@ -37316,7 +30803,7 @@ var ts; var result; if (node.locals) { node.locals.forEach(function (symbol) { - if (symbol.flags & 262144 /* TypeParameter */) { + if (symbol.flags & 262144) { result = ts.append(result, getDeclaredTypeOfSymbol(symbol)); } }); @@ -37328,7 +30815,7 @@ var ts; return true; } while (node) { - if (node.kind === 171 /* ConditionalType */) { + if (node.kind === 171) { if (isTypeParameterPossiblyReferenced(tp, node.extendsType)) { return true; } @@ -37343,7 +30830,7 @@ var ts; var checkType = getTypeFromTypeNode(node.checkType); var aliasSymbol = getAliasSymbolForTypeNode(node); var aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); - var allOuterTypeParameters = getOuterTypeParameters(node, /*includeThisTypes*/ true); + var allOuterTypeParameters = getOuterTypeParameters(node, true); var outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : ts.filter(allOuterTypeParameters, function (tp) { return isPossiblyReferencedInConditionalType(tp, node); }); var root = { node: node, @@ -37351,14 +30838,14 @@ var ts; extendsType: getTypeFromTypeNode(node.extendsType), trueType: getTypeFromTypeNode(node.trueType), falseType: getTypeFromTypeNode(node.falseType), - isDistributive: !!(checkType.flags & 65536 /* TypeParameter */), + isDistributive: !!(checkType.flags & 65536), inferTypeParameters: getInferTypeParameters(node), outerTypeParameters: outerTypeParameters, instantiations: undefined, aliasSymbol: aliasSymbol, aliasTypeArguments: aliasTypeArguments }; - links.resolvedType = getConditionalType(root, /*mapper*/ undefined); + links.resolvedType = getConditionalType(root, undefined); if (outerTypeParameters) { root.instantiations = ts.createMap(); root.instantiations.set(getTypeListId(outerTypeParameters), links.resolvedType); @@ -37384,7 +30871,7 @@ var ts; function getTypeFromImportTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - if (node.isTypeOf && node.typeArguments) { // Only the non-typeof form can make use of type arguments + if (node.isTypeOf && node.typeArguments) { error(node, ts.Diagnostics.Type_arguments_cannot_be_used_here); links.resolvedSymbol = unknownSymbol; return links.resolvedType = errorType; @@ -37395,21 +30882,20 @@ var ts; return links.resolvedType = errorType; } var argumentType = getTypeFromTypeNode(node.argument); - var targetMeaning = node.isTypeOf ? 67216319 /* Value */ : 67901928 /* Type */; - // TODO: Future work: support unions/generics/whatever via a deferred import-type + var targetMeaning = node.isTypeOf ? 67216319 : 67901928; var moduleName = argumentType.value; - var innerModuleSymbol = resolveExternalModule(node, moduleName, ts.Diagnostics.Cannot_find_module_0, node, /*isForAugmentation*/ false); + var innerModuleSymbol = resolveExternalModule(node, moduleName, ts.Diagnostics.Cannot_find_module_0, node, false); if (!innerModuleSymbol) { links.resolvedSymbol = unknownSymbol; return links.resolvedType = errorType; } - var moduleSymbol_1 = resolveExternalModuleSymbol(innerModuleSymbol, /*dontResolveAlias*/ false); + var moduleSymbol_1 = resolveExternalModuleSymbol(innerModuleSymbol, false); if (!ts.nodeIsMissing(node.qualifier)) { var nameStack = getIdentifierChain(node.qualifier); var currentNamespace = moduleSymbol_1; var current = void 0; while (current = nameStack.shift()) { - var meaning = nameStack.length ? 1920 /* Namespace */ : targetMeaning; + var meaning = nameStack.length ? 1920 : targetMeaning; var next = getSymbol(getExportsOfSymbol(getMergedSymbol(resolveSymbol(currentNamespace))), current.escapedText, meaning); if (!next) { error(current, ts.Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(currentNamespace), ts.declarationNameToString(current)); @@ -37426,34 +30912,33 @@ var ts; resolveImportSymbolType(node, links, moduleSymbol_1, targetMeaning); } else { - error(node, targetMeaning === 67216319 /* Value */ ? ts.Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here : ts.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here, moduleName); + error(node, targetMeaning === 67216319 ? ts.Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here : ts.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here, moduleName); links.resolvedSymbol = unknownSymbol; links.resolvedType = errorType; } } } - return links.resolvedType; // TODO: GH#18217 + return links.resolvedType; } function resolveImportSymbolType(node, links, symbol, meaning) { var resolvedSymbol = resolveSymbol(symbol); links.resolvedSymbol = resolvedSymbol; - if (meaning === 67216319 /* Value */) { - return links.resolvedType = getTypeOfSymbol(symbol); // intentionally doesn't use resolved symbol so type is cached as expected on the alias + if (meaning === 67216319) { + return links.resolvedType = getTypeOfSymbol(symbol); } else { - return links.resolvedType = getTypeReferenceType(node, resolvedSymbol); // getTypeReferenceType doesn't handle aliases - it must get the resolved symbol + return links.resolvedType = getTypeReferenceType(node, resolvedSymbol); } } function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - // Deferred resolution of members is handled by resolveObjectTypeMembers var aliasSymbol = getAliasSymbolForTypeNode(node); if (getMembersOfSymbol(node.symbol).size === 0 && !aliasSymbol) { links.resolvedType = emptyTypeLiteralType; } else { - var type = createObjectType(16 /* Anonymous */, node.symbol); + var type = createObjectType(16, node.symbol); type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); if (ts.isJSDocTypeLiteral(node) && node.isArrayType) { @@ -37470,31 +30955,26 @@ var ts; function getTypeArgumentsForAliasSymbol(symbol) { return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : undefined; } - /** - * Since the source of spread types are object literals, which are not binary, - * this function should be called in a left folding style, with left = previous result of getSpreadType - * and right = the new element to be spread. - */ function getSpreadType(left, right, symbol, typeFlags, objectFlags) { - if (left.flags & 1 /* Any */ || right.flags & 1 /* Any */) { + if (left.flags & 1 || right.flags & 1) { return anyType; } - if (left.flags & 2 /* Unknown */ || right.flags & 2 /* Unknown */) { + if (left.flags & 2 || right.flags & 2) { return unknownType; } - if (left.flags & 32768 /* Never */) { + if (left.flags & 32768) { return right; } - if (right.flags & 32768 /* Never */) { + if (right.flags & 32768) { return left; } - if (left.flags & 262144 /* Union */) { + if (left.flags & 262144) { return mapType(left, function (t) { return getSpreadType(t, right, symbol, typeFlags, objectFlags); }); } - if (right.flags & 262144 /* Union */) { + if (right.flags & 262144) { return mapType(right, function (t) { return getSpreadType(left, t, symbol, typeFlags, objectFlags); }); } - if (right.flags & (272 /* BooleanLike */ | 168 /* NumberLike */ | 68 /* StringLike */ | 544 /* EnumLike */ | 16777216 /* NonPrimitive */ | 1048576 /* Index */)) { + if (right.flags & (272 | 168 | 68 | 544 | 16777216 | 1048576)) { return left; } var members = ts.createSymbolTable(); @@ -37502,19 +30982,17 @@ var ts; var stringIndexInfo; var numberIndexInfo; if (left === emptyObjectType) { - // for the first spread element, left === emptyObjectType, so take the right's string indexer - stringIndexInfo = getIndexInfoOfType(right, 0 /* String */); - numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */); + stringIndexInfo = getIndexInfoOfType(right, 0); + numberIndexInfo = getIndexInfoOfType(right, 1); } else { - stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */)); - numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */)); + stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0), getIndexInfoOfType(right, 0)); + numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1), getIndexInfoOfType(right, 1)); } for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) { var rightProp = _a[_i]; - // we approximate own properties as non-methods plus methods that are inside the object literal - var isSetterWithoutGetter = rightProp.flags & 65536 /* SetAccessor */ && !(rightProp.flags & 32768 /* GetAccessor */); - if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) { + var isSetterWithoutGetter = rightProp.flags & 65536 && !(rightProp.flags & 32768); + if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 | 16)) { skippedPrivateMembers.set(rightProp.escapedName, true); } else if (!isClassMethod(rightProp) && !isSetterWithoutGetter) { @@ -37523,7 +31001,7 @@ var ts; } for (var _b = 0, _c = getPropertiesOfType(left); _b < _c.length; _b++) { var leftProp = _c[_b]; - if (leftProp.flags & 65536 /* SetAccessor */ && !(leftProp.flags & 32768 /* GetAccessor */) + if (leftProp.flags & 65536 && !(leftProp.flags & 32768) || skippedPrivateMembers.has(leftProp.escapedName) || isClassMethod(leftProp)) { continue; @@ -37531,11 +31009,11 @@ var ts; if (members.has(leftProp.escapedName)) { var rightProp = members.get(leftProp.escapedName); var rightType = getTypeOfSymbol(rightProp); - if (rightProp.flags & 16777216 /* Optional */) { + if (rightProp.flags & 16777216) { var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations); - var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */); + var flags = 4 | (leftProp.flags & 16777216); var result = createSymbol(flags, leftProp.escapedName); - result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 131072 /* NEUndefined */)]); + result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 131072)]); result.leftSpread = leftProp; result.rightSpread = rightProp; result.declarations = declarations; @@ -37548,15 +31026,15 @@ var ts; } } var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getNonReadonlyIndexSignature(stringIndexInfo), getNonReadonlyIndexSignature(numberIndexInfo)); - spread.flags |= typeFlags | 268435456 /* ContainsObjectLiteral */; - spread.objectFlags |= objectFlags | (128 /* ObjectLiteral */ | 1024 /* ContainsSpread */); + spread.flags |= typeFlags | 268435456; + spread.objectFlags |= objectFlags | (128 | 1024); return spread; } function getNonReadonlySymbol(prop) { if (!isReadonlySymbol(prop)) { return prop; } - var flags = 4 /* Property */ | (prop.flags & 16777216 /* Optional */); + var flags = 4 | (prop.flags & 16777216); var result = createSymbol(flags, prop.escapedName); result.type = getTypeOfSymbol(prop); result.declarations = prop.declarations; @@ -37566,12 +31044,12 @@ var ts; } function getNonReadonlyIndexSignature(index) { if (index && index.isReadonly) { - return createIndexInfo(index.type, /*isReadonly*/ false, index.declaration); + return createIndexInfo(index.type, false, index.declaration); } return index; } function isClassMethod(prop) { - return prop.flags & 8192 /* Method */ && ts.find(prop.declarations, function (decl) { return ts.isClassLike(decl.parent); }); + return prop.flags & 8192 && ts.find(prop.declarations, function (decl) { return ts.isClassLike(decl.parent); }); } function createLiteralType(flags, value, symbol) { var type = createType(flags); @@ -37580,9 +31058,9 @@ var ts; return type; } function getFreshTypeOfLiteralType(type) { - if (type.flags & 192 /* StringOrNumberLiteral */ && !(type.flags & 33554432 /* FreshLiteral */)) { + if (type.flags & 192 && !(type.flags & 33554432)) { if (!type.freshType) { - var freshType = createLiteralType(type.flags | 33554432 /* FreshLiteral */, type.value, type.symbol); + var freshType = createLiteralType(type.flags | 33554432, type.value, type.symbol); freshType.regularType = type; type.freshType = freshType; } @@ -37591,20 +31069,16 @@ var ts; return type; } function getRegularTypeOfLiteralType(type) { - return type.flags & 192 /* StringOrNumberLiteral */ && type.flags & 33554432 /* FreshLiteral */ ? type.regularType : - type.flags & 262144 /* Union */ ? getUnionType(ts.sameMap(type.types, getRegularTypeOfLiteralType)) : + return type.flags & 192 && type.flags & 33554432 ? type.regularType : + type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getRegularTypeOfLiteralType)) : type; } function getLiteralType(value, enumId, symbol) { - // We store all literal types in a single map with keys of the form '#NNN' and '@SSS', - // where NNN is the text representation of a numeric literal and SSS are the characters - // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where - // EEE is a unique id for the containing enum type. var qualifier = typeof value === "number" ? "#" : "@"; var key = enumId ? enumId + qualifier + value : qualifier + value; var type = literalTypes.get(key); if (!type) { - var flags = (typeof value === "number" ? 128 /* NumberLiteral */ : 64 /* StringLiteral */) | (enumId ? 512 /* EnumLiteral */ : 0); + var flags = (typeof value === "number" ? 128 : 64) | (enumId ? 512 : 0); literalTypes.set(key, type = createLiteralType(flags, value, symbol)); } return type; @@ -37617,7 +31091,7 @@ var ts; return links.resolvedType; } function createUniqueESSymbolType(symbol) { - var type = createType(2048 /* UniqueESSymbol */); + var type = createType(2048); type.symbol = symbol; return type; } @@ -37630,11 +31104,11 @@ var ts; return esSymbolType; } function getThisType(node) { - var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); + var container = ts.getThisContainer(node, false); var parent = container && container.parent; - if (parent && (ts.isClassLike(parent) || parent.kind === 236 /* InterfaceDeclaration */)) { - if (!ts.hasModifier(container, 32 /* Static */) && - (container.kind !== 155 /* Constructor */ || ts.isNodeDescendantOf(node, container.body))) { + if (parent && (ts.isClassLike(parent) || parent.kind === 236)) { + if (!ts.hasModifier(container, 32) && + (container.kind !== 155 || ts.isNodeDescendantOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } @@ -37650,86 +31124,84 @@ var ts; } function getTypeFromTypeNode(node) { switch (node.kind) { - case 119 /* AnyKeyword */: - case 279 /* JSDocAllType */: - case 280 /* JSDocUnknownType */: + case 119: + case 279: + case 280: return anyType; - case 142 /* UnknownKeyword */: + case 142: return unknownType; - case 137 /* StringKeyword */: + case 137: return stringType; - case 134 /* NumberKeyword */: + case 134: return numberType; - case 122 /* BooleanKeyword */: + case 122: return booleanType; - case 138 /* SymbolKeyword */: + case 138: return esSymbolType; - case 105 /* VoidKeyword */: + case 105: return voidType; - case 140 /* UndefinedKeyword */: + case 140: return undefinedType; - case 95 /* NullKeyword */: + case 95: return nullType; - case 131 /* NeverKeyword */: + case 131: return neverType; - case 135 /* ObjectKeyword */: - return node.flags & 65536 /* JavaScriptFile */ ? anyType : nonPrimitiveType; - case 174 /* ThisType */: - case 99 /* ThisKeyword */: + case 135: + return node.flags & 65536 ? anyType : nonPrimitiveType; + case 174: + case 99: return getTypeFromThisTypeNode(node); - case 178 /* LiteralType */: + case 178: return getTypeFromLiteralTypeNode(node); - case 162 /* TypeReference */: + case 162: return getTypeFromTypeReference(node); - case 161 /* TypePredicate */: + case 161: return booleanType; - case 207 /* ExpressionWithTypeArguments */: + case 207: return getTypeFromTypeReference(node); - case 165 /* TypeQuery */: + case 165: return getTypeFromTypeQueryNode(node); - case 167 /* ArrayType */: + case 167: return getTypeFromArrayTypeNode(node); - case 168 /* TupleType */: + case 168: return getTypeFromTupleTypeNode(node); - case 169 /* UnionType */: + case 169: return getTypeFromUnionTypeNode(node); - case 170 /* IntersectionType */: + case 170: return getTypeFromIntersectionTypeNode(node); - case 281 /* JSDocNullableType */: + case 281: return getTypeFromJSDocNullableTypeNode(node); - case 283 /* JSDocOptionalType */: + case 283: return addOptionality(getTypeFromTypeNode(node.type)); - case 173 /* ParenthesizedType */: - case 282 /* JSDocNonNullableType */: - case 278 /* JSDocTypeExpression */: + case 173: + case 282: + case 278: return getTypeFromTypeNode(node.type); - case 285 /* JSDocVariadicType */: + case 285: return getTypeFromJSDocVariadicType(node); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 166 /* TypeLiteral */: - case 287 /* JSDocTypeLiteral */: - case 284 /* JSDocFunctionType */: - case 288 /* JSDocSignature */: + case 163: + case 164: + case 166: + case 287: + case 284: + case 288: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); - case 175 /* TypeOperator */: + case 175: return getTypeFromTypeOperatorNode(node); - case 176 /* IndexedAccessType */: + case 176: return getTypeFromIndexedAccessTypeNode(node); - case 177 /* MappedType */: + case 177: return getTypeFromMappedTypeNode(node); - case 171 /* ConditionalType */: + case 171: return getTypeFromConditionalTypeNode(node); - case 172 /* InferType */: + case 172: return getTypeFromInferTypeNode(node); - case 179 /* ImportType */: + case 179: return getTypeFromImportTypeNode(node); - // This function assumes that an identifier or qualified name is a type expression - // Callers should first ensure this by calling isTypeNode - case 71 /* Identifier */: - case 146 /* QualifiedName */: + case 71: + case 146: var symbol = getSymbolAtLocation(node); - return (symbol && getDeclaredTypeOfSymbol(symbol)); // TODO: GH#18217 + return (symbol && getDeclaredTypeOfSymbol(symbol)); default: return errorType; } @@ -37780,12 +31252,8 @@ var ts; makeArrayTypeMapper(sources, targets); } function createTypeEraser(sources) { - return createTypeMapper(sources, /*targets*/ undefined); + return createTypeMapper(sources, undefined); } - /** - * Maps forward-references to later types parameters to the empty object type. - * This is used during inference when instantiating type parameter defaults. - */ function createBackreferenceMapper(typeParameters, index) { return function (t) { return typeParameters.indexOf(t) >= index ? emptyObjectType : t; }; } @@ -37794,7 +31262,7 @@ var ts; } function cloneTypeMapper(mapper) { return mapper && isInferenceContext(mapper) ? - createInferenceContext(mapper.typeParameters, mapper.signature, mapper.flags | 2 /* NoDefault */, mapper.compareTypes, mapper.inferences) : + createInferenceContext(mapper.typeParameters, mapper.signature, mapper.flags | 2, mapper.compareTypes, mapper.inferences) : mapper; } function combineTypeMappers(mapper1, mapper2) { @@ -37808,10 +31276,10 @@ var ts; return function (t) { return t === source ? target : baseMapper(t); }; } function wildcardMapper(type) { - return type.flags & 65536 /* TypeParameter */ ? wildcardType : type; + return type.flags & 65536 ? wildcardType : type; } function cloneTypeParameter(typeParameter) { - var result = createType(65536 /* TypeParameter */); + var result = createType(65536); result.symbol = typeParameter.symbol; result.target = typeParameter; return result; @@ -37819,7 +31287,7 @@ var ts; function instantiateTypePredicate(predicate, mapper) { if (ts.isIdentifierTypePredicate(predicate)) { return { - kind: 1 /* Identifier */, + kind: 1, parameterName: predicate.parameterName, parameterIndex: predicate.parameterIndex, type: instantiateType(predicate.type, mapper) @@ -37827,7 +31295,7 @@ var ts; } else { return { - kind: 0 /* This */, + kind: 0, type: instantiateType(predicate.type, mapper) }; } @@ -37835,9 +31303,6 @@ var ts; function instantiateSignature(signature, mapper, eraseTypeParameters) { var freshTypeParameters; if (signature.typeParameters && !eraseTypeParameters) { - // First create a fresh set of type parameters, then include a mapping from the old to the - // new type parameters in the mapper function. Finally store this mapper in the new type - // parameters such that we can use it when instantiating constraints. freshTypeParameters = ts.map(signature.typeParameters, cloneTypeParameter); mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); for (var _i = 0, freshTypeParameters_1 = freshTypeParameters; _i < freshTypeParameters_1.length; _i++) { @@ -37845,33 +31310,21 @@ var ts; tp.mapper = mapper; } } - // Don't compute resolvedReturnType and resolvedTypePredicate now, - // because using `mapper` now could trigger inferences to become fixed. (See `createInferenceContext`.) - // See GH#17600. - var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), - /*resolvedReturnType*/ undefined, - /*resolvedTypePredicate*/ undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasLiteralTypes); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), undefined, undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasLiteralTypes); result.target = signature; result.mapper = mapper; return result; } function instantiateSymbol(symbol, mapper) { var links = getSymbolLinks(symbol); - if (links.type && !maybeTypeOfKind(links.type, 131072 /* Object */ | 15794176 /* Instantiable */)) { - // If the type of the symbol is already resolved, and if that type could not possibly - // be affected by instantiation, simply return the symbol itself. + if (links.type && !maybeTypeOfKind(links.type, 131072 | 15794176)) { return symbol; } - if (ts.getCheckFlags(symbol) & 1 /* Instantiated */) { - // If symbol being instantiated is itself a instantiation, fetch the original target and combine the - // type mappers. This ensures that original type identities are properly preserved and that aliases - // always reference a non-aliases. + if (ts.getCheckFlags(symbol) & 1) { symbol = links.target; mapper = combineTypeMappers(links.mapper, mapper); } - // Keep the flags from the symbol we're instantiating. Mark that is instantiated, and - // also transient so that we can just store data on it directly. - var result = createSymbol(symbol.flags, symbol.escapedName, 1 /* Instantiated */ | (ts.getCheckFlags(symbol) & 1024 /* Late */)); + var result = createSymbol(symbol.flags, symbol.escapedName, 1 | (ts.getCheckFlags(symbol) & 1024)); result.declarations = symbol.declarations; result.parent = symbol.parent; result.target = symbol; @@ -37890,15 +31343,11 @@ var ts; return result; } function getAnonymousTypeInstantiation(type, mapper) { - var target = type.objectFlags & 64 /* Instantiated */ ? type.target : type; + var target = type.objectFlags & 64 ? type.target : type; var symbol = target.symbol; var links = getSymbolLinks(symbol); var typeParameters = links.outerTypeParameters; if (!typeParameters) { - // The first time an anonymous type is instantiated we compute and store a list of the type - // parameters that are in scope (and therefore potentially referenced). For type literals that - // aren't the right hand side of a generic type alias declaration we optimize by reducing the - // set of type parameters to those that are possibly referenced in the literal. var declaration_1 = symbol.declarations[0]; if (ts.isInJavaScriptFile(declaration_1)) { var paramTag = ts.findAncestor(declaration_1, ts.isJSDocParameterTag); @@ -37909,13 +31358,13 @@ var ts; } } } - var outerTypeParameters = getOuterTypeParameters(declaration_1, /*includeThisTypes*/ true); + var outerTypeParameters = getOuterTypeParameters(declaration_1, true); if (isJavaScriptConstructor(declaration_1)) { var templateTagParameters = getTypeParametersFromDeclaration(declaration_1); outerTypeParameters = ts.addRange(outerTypeParameters, templateTagParameters); } typeParameters = outerTypeParameters || ts.emptyArray; - typeParameters = symbol.flags & 2048 /* TypeLiteral */ && !target.aliasTypeArguments ? + typeParameters = symbol.flags & 2048 && !target.aliasTypeArguments ? ts.filter(typeParameters, function (tp) { return isTypeParameterPossiblyReferenced(tp, declaration_1); }) : typeParameters; links.outerTypeParameters = typeParameters; @@ -37925,16 +31374,13 @@ var ts; } } if (typeParameters.length) { - // We are instantiating an anonymous type that has one or more type parameters in scope. Apply the - // mapper to the type parameters to produce the effective list of type arguments, and compute the - // instantiation cache key from the type IDs of the type arguments. - var combinedMapper = type.objectFlags & 64 /* Instantiated */ ? combineTypeMappers(type.mapper, mapper) : mapper; + var combinedMapper = type.objectFlags & 64 ? combineTypeMappers(type.mapper, mapper) : mapper; var typeArguments = ts.map(typeParameters, combinedMapper); var id = getTypeListId(typeArguments); var result = links.instantiations.get(id); if (!result) { var newMapper = createTypeMapper(typeParameters, typeArguments); - result = target.objectFlags & 32 /* Mapped */ ? instantiateMappedType(target, newMapper) : instantiateAnonymousType(target, newMapper); + result = target.objectFlags & 32 ? instantiateMappedType(target, newMapper) : instantiateAnonymousType(target, newMapper); links.instantiations.set(id, result); } return result; @@ -37942,43 +31388,35 @@ var ts; return type; } function maybeTypeParameterReference(node) { - return !(node.kind === 146 /* QualifiedName */ || - node.parent.kind === 162 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName); + return !(node.kind === 146 || + node.parent.kind === 162 && node.parent.typeArguments && node === node.parent.typeName); } function isTypeParameterPossiblyReferenced(tp, node) { - // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks - // between the node and the type parameter declaration, if the node contains actual references to the - // type parameter, or if the node contains type queries, we consider the type parameter possibly referenced. if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) { var container_3 = tp.symbol.declarations[0].parent; - if (ts.findAncestor(node, function (n) { return n.kind === 213 /* Block */ ? "quit" : n === container_3; })) { + if (ts.findAncestor(node, function (n) { return n.kind === 213 ? "quit" : n === container_3; })) { return !!ts.forEachChild(node, containsReference); } } return true; function containsReference(node) { switch (node.kind) { - case 174 /* ThisType */: + case 174: return !!tp.isThisType; - case 71 /* Identifier */: + case 71: return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) && getTypeFromTypeNode(node) === tp; - case 165 /* TypeQuery */: + case 165: return true; } return !!ts.forEachChild(node, containsReference); } } function instantiateMappedType(type, mapper) { - // Check if we have a homomorphic mapped type, i.e. a type of the form { [P in keyof T]: X } for some - // type variable 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 - // homomorphic 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 & 1048576 /* Index */) { + if (constraintType.flags & 1048576) { var typeVariable_1 = constraintType.type; - if (typeVariable_1.flags & 65536 /* TypeParameter */) { + if (typeVariable_1.flags & 65536) { var mappedTypeVariable = instantiateType(typeVariable_1, mapper); if (typeVariable_1 !== mappedTypeVariable) { return mapType(mappedTypeVariable, function (t) { @@ -37993,11 +31431,11 @@ var ts; return instantiateAnonymousType(type, mapper); } function isMappableType(type) { - return type.flags & (3 /* AnyOrUnknown */ | 14745600 /* InstantiableNonPrimitive */ | 131072 /* Object */ | 524288 /* Intersection */); + return type.flags & (3 | 14745600 | 131072 | 524288); } function instantiateAnonymousType(type, mapper) { - var result = createObjectType(type.objectFlags | 64 /* Instantiated */, type.symbol); - if (type.objectFlags & 32 /* Mapped */) { + var result = createObjectType(type.objectFlags | 64, type.symbol); + if (type.objectFlags & 32) { result.declaration = type.declaration; } result.target = type; @@ -38009,9 +31447,6 @@ var ts; function getConditionalTypeInstantiation(type, mapper) { var root = type.root; if (root.outerTypeParameters) { - // We are instantiating a conditional type that has one or more type parameters in scope. Apply the - // mapper to the type parameters to produce the effective list of type arguments, and compute the - // instantiation cache key from the type IDs of the type arguments. var typeArguments = ts.map(root.outerTypeParameters, mapper); var id = getTypeListId(typeArguments); var result = root.instantiations.get(id); @@ -38025,13 +31460,10 @@ var ts; return type; } function instantiateConditionalType(root, mapper) { - // Check if we have a conditional type where the check type is a naked type parameter. If so, - // the conditional type is distributive over union types and when T is instantiated to a union - // type A | B, we produce (A extends U ? X : Y) | (B extends U ? X : Y). if (root.isDistributive) { var checkType_1 = root.checkType; var instantiatedType = mapper(checkType_1); - if (checkType_1 !== instantiatedType && instantiatedType.flags & (262144 /* Union */ | 32768 /* Never */)) { + if (checkType_1 !== instantiatedType && instantiatedType.flags & (262144 | 32768)) { return mapType(instantiatedType, function (t) { return getConditionalType(root, createReplacementMapper(checkType_1, t, mapper)); }); } } @@ -38039,90 +31471,83 @@ var ts; } function instantiateType(type, mapper) { if (type && mapper && mapper !== identityMapper) { - if (type.flags & 65536 /* TypeParameter */) { + if (type.flags & 65536) { return mapper(type); } - if (type.flags & 131072 /* Object */) { - if (type.objectFlags & 16 /* Anonymous */) { - // If the anonymous type originates in a declaration of a function, method, class, or - // interface, in an object type literal, or in an object literal expression, we may need - // to instantiate the type because it might reference a type parameter. - return type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && type.symbol.declarations ? + if (type.flags & 131072) { + if (type.objectFlags & 16) { + return type.symbol && type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) && type.symbol.declarations ? getAnonymousTypeInstantiation(type, mapper) : type; } - if (type.objectFlags & 32 /* Mapped */) { + if (type.objectFlags & 32) { return getAnonymousTypeInstantiation(type, mapper); } - if (type.objectFlags & 4 /* Reference */) { + if (type.objectFlags & 4) { var typeArguments = type.typeArguments; var newTypeArguments = instantiateTypes(typeArguments, mapper); return newTypeArguments !== typeArguments ? createTypeReference(type.target, newTypeArguments) : type; } } - if (type.flags & 262144 /* Union */ && !(type.flags & 32764 /* Primitive */)) { + if (type.flags & 262144 && !(type.flags & 32764)) { var types = type.types; var newTypes = instantiateTypes(types, mapper); - return newTypes !== types ? getUnionType(newTypes, 1 /* Literal */, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper)) : type; + return newTypes !== types ? getUnionType(newTypes, 1, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper)) : type; } - if (type.flags & 524288 /* Intersection */) { + if (type.flags & 524288) { var types = type.types; var newTypes = instantiateTypes(types, mapper); return newTypes !== types ? getIntersectionType(newTypes, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper)) : type; } - if (type.flags & 1048576 /* Index */) { + if (type.flags & 1048576) { return getIndexType(instantiateType(type.type, mapper)); } - if (type.flags & 2097152 /* IndexedAccess */) { + if (type.flags & 2097152) { return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper)); } - if (type.flags & 4194304 /* Conditional */) { + if (type.flags & 4194304) { return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper)); } - if (type.flags & 8388608 /* Substitution */) { + if (type.flags & 8388608) { return instantiateType(type.typeVariable, mapper); } } return type; } function getWildcardInstantiation(type) { - return type.flags & (32764 /* Primitive */ | 3 /* AnyOrUnknown */ | 32768 /* Never */) ? type : + return type.flags & (32764 | 3 | 32768) ? type : type.wildcardInstantiation || (type.wildcardInstantiation = instantiateType(type, wildcardMapper)); } function instantiateIndexInfo(info, mapper) { return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration); } - // Returns true if the given expression contains (at any level of nesting) a function or arrow expression - // that is subject to contextual typing. function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 154 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 154 /* MethodDeclaration */: + case 192: + case 193: + case 154: return isContextSensitiveFunctionLikeDeclaration(node); - case 184 /* ObjectLiteralExpression */: + case 184: return ts.some(node.properties, isContextSensitive); - case 183 /* ArrayLiteralExpression */: + case 183: return ts.some(node.elements, isContextSensitive); - case 201 /* ConditionalExpression */: + case 201: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 200 /* BinaryExpression */: - return node.operatorToken.kind === 54 /* BarBarToken */ && + case 200: + return node.operatorToken.kind === 54 && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 270 /* PropertyAssignment */: + case 270: return isContextSensitive(node.initializer); - case 191 /* ParenthesizedExpression */: + case 191: return isContextSensitive(node.expression); - case 263 /* JsxAttributes */: + case 263: return ts.some(node.properties, isContextSensitive); - case 262 /* JsxAttribute */: { - // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive. + case 262: { var initializer = node.initializer; return !!initializer && isContextSensitive(initializer); } - case 265 /* JsxExpression */: { - // It is possible to that node.expression is undefined (e.g
) + case 265: { var expression = node.expression; return !!expression && isContextSensitive(expression); } @@ -38130,35 +31555,30 @@ var ts; return false; } function isContextSensitiveFunctionLikeDeclaration(node) { - // Functions with type parameters are not context sensitive. if (node.typeParameters) { return false; } - // Functions with any parameters that lack type annotations are context sensitive. if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) { return true; } - if (node.kind !== 193 /* ArrowFunction */) { - // If the first parameter is not an explicit 'this' parameter, then the function has - // an implicit 'this' parameter which is subject to contextual typing. + if (node.kind !== 193) { var parameter = ts.firstOrUndefined(node.parameters); if (!(parameter && ts.parameterIsThisKeyword(parameter))) { return true; } } - // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value. var body = node.body; - return body.kind === 213 /* Block */ ? false : isContextSensitive(body); + return body.kind === 213 ? false : isContextSensitive(body); } function isContextSensitiveFunctionOrObjectLiteralMethod(func) { return (ts.isInJavaScriptFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); } function getTypeWithoutSignatures(type) { - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); if (resolved.constructSignatures.length) { - var result = createObjectType(16 /* Anonymous */, type.symbol); + var result = createObjectType(16, type.symbol); result.members = resolved.members; result.properties = resolved.properties; result.callSignatures = ts.emptyArray; @@ -38166,20 +31586,19 @@ var ts; return result; } } - else if (type.flags & 524288 /* Intersection */) { + else if (type.flags & 524288) { return getIntersectionType(ts.map(type.types, getTypeWithoutSignatures)); } return type; } - // TYPE CHECKING function isTypeIdenticalTo(source, target) { return isTypeRelatedTo(source, target, identityRelation); } function compareTypesIdentical(source, target) { - return isTypeRelatedTo(source, target, identityRelation) ? -1 /* True */ : 0 /* False */; + return isTypeRelatedTo(source, target, identityRelation) ? -1 : 0; } function compareTypesAssignable(source, target) { - return isTypeRelatedTo(source, target, assignableRelation) ? -1 /* True */ : 0 /* False */; + return isTypeRelatedTo(source, target, assignableRelation) ? -1 : 0; } function isTypeSubtypeOf(source, target) { return isTypeRelatedTo(source, target, subtypeRelation); @@ -38187,31 +31606,13 @@ var ts; function isTypeAssignableTo(source, target) { return isTypeRelatedTo(source, target, assignableRelation); } - // An object type S is considered to be derived from an object type T if - // S is a union type and every constituent of S is derived from T, - // T is a union type and S is derived from at least one constituent of T, or - // S is a type variable with a base constraint that is derived from T, - // T is one of the global types Object and Function and S is a subtype of T, or - // T occurs directly or indirectly in an 'extends' clause of S. - // Note that this check ignores type parameters and only considers the - // inheritance hierarchy. function isTypeDerivedFrom(source, target) { - return source.flags & 262144 /* Union */ ? ts.every(source.types, function (t) { return isTypeDerivedFrom(t, target); }) : - target.flags & 262144 /* Union */ ? ts.some(target.types, function (t) { return isTypeDerivedFrom(source, t); }) : - source.flags & 14745600 /* InstantiableNonPrimitive */ ? isTypeDerivedFrom(getBaseConstraintOfType(source) || emptyObjectType, target) : + return source.flags & 262144 ? ts.every(source.types, function (t) { return isTypeDerivedFrom(t, target); }) : + target.flags & 262144 ? ts.some(target.types, function (t) { return isTypeDerivedFrom(source, t); }) : + source.flags & 14745600 ? isTypeDerivedFrom(getBaseConstraintOfType(source) || emptyObjectType, target) : target === globalObjectType || target === globalFunctionType ? isTypeSubtypeOf(source, target) : hasBaseType(source, getTargetType(target)); } - /** - * This is *not* a bi-directional relationship. - * If one needs to check both directions for comparability, use a second call to this function or 'checkTypeComparableTo'. - * - * A type S is comparable to a type T if some (but not necessarily all) of the possible values of S are also possible values of T. - * It is used to check following cases: - * - the types of the left and right sides of equality/inequality operators (`===`, `!==`, `==`, `!=`). - * - the types of `case` clause expressions and their respective `switch` expressions. - * - the type of an expression in a type assertion with the type being asserted. - */ function isTypeComparableTo(source, target) { return isTypeRelatedTo(source, target, comparableRelation); } @@ -38221,48 +31622,38 @@ var ts; function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain); } - /** - * This is *not* a bi-directional relationship. - * If one needs to check both directions for comparability, use a second call to this function or 'isTypeComparableTo'. - */ function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain); } function isSignatureAssignableTo(source, target, ignoreReturnTypes) { - return compareSignaturesRelated(source, target, 0 /* None */, ignoreReturnTypes, /*reportErrors*/ false, - /*errorReporter*/ undefined, compareTypesAssignable) !== 0 /* False */; + return compareSignaturesRelated(source, target, 0, ignoreReturnTypes, false, undefined, compareTypesAssignable) !== 0; } - /** - * See signatureRelatedTo, compareSignaturesIdentical - */ function compareSignaturesRelated(source, target, callbackCheck, ignoreReturnTypes, reportErrors, errorReporter, compareTypes) { - // TODO (drosen): De-duplicate code between related functions. if (source === target) { - return -1 /* True */; + return -1; } if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { - return 0 /* False */; + return 0; } if (source.typeParameters && source.typeParameters !== target.typeParameters) { target = getCanonicalSignature(target); - source = instantiateSignatureInContextOf(source, target, /*contextualMapper*/ undefined, compareTypes); + source = instantiateSignatureInContextOf(source, target, undefined, compareTypes); } - var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */; - var strictVariance = !callbackCheck && strictFunctionTypes && kind !== 154 /* MethodDeclaration */ && - kind !== 153 /* MethodSignature */ && kind !== 155 /* Constructor */; - var result = -1 /* True */; + var kind = target.declaration ? target.declaration.kind : 0; + var strictVariance = !callbackCheck && strictFunctionTypes && kind !== 154 && + kind !== 153 && kind !== 155; + var result = -1; var sourceThisType = getThisTypeOfSignature(source); if (sourceThisType && sourceThisType !== voidType) { var targetThisType = getThisTypeOfSignature(target); if (targetThisType) { - // void sources are assignable to anything. - var related = !strictVariance && compareTypes(sourceThisType, targetThisType, /*reportErrors*/ false) + var related = !strictVariance && compareTypes(sourceThisType, targetThisType, false) || compareTypes(targetThisType, sourceThisType, reportErrors); if (!related) { if (reportErrors) { errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); } - return 0 /* False */; + return 0; } result &= related; } @@ -38275,27 +31666,18 @@ var ts; for (var i = 0; i < checkCount; i++) { var sourceType = i < sourceMax ? getTypeOfParameter(sourceParams[i]) : getRestTypeOfSignature(source); var targetType = i < targetMax ? getTypeOfParameter(targetParams[i]) : getRestTypeOfSignature(target); - // In order to ensure that any generic type Foo is at least co-variant with respect to T no matter - // how Foo uses T, we need to relate parameters bi-variantly (given that parameters are input positions, - // they naturally relate only contra-variantly). However, if the source and target parameters both have - // function types with a single call signature, we know we are relating two callback parameters. In - // that case it is sufficient to only relate the parameters of the signatures co-variantly because, - // similar to return values, callback parameters are output positions. This means that a Promise, - // where T is used only in callback parameter positions, will be co-variant (as opposed to bi-variant) - // with respect to T. var sourceSig = callbackCheck ? undefined : getSingleCallSignature(getNonNullableType(sourceType)); var targetSig = callbackCheck ? undefined : getSingleCallSignature(getNonNullableType(targetType)); var callbacks = sourceSig && targetSig && !signatureHasTypePredicate(sourceSig) && !signatureHasTypePredicate(targetSig) && - (getFalsyFlags(sourceType) & 24576 /* Nullable */) === (getFalsyFlags(targetType) & 24576 /* Nullable */); + (getFalsyFlags(sourceType) & 24576) === (getFalsyFlags(targetType) & 24576); var related = callbacks ? - // TODO: GH#18217 It will work if they're both `undefined`, but not if only one is - compareSignaturesRelated(targetSig, sourceSig, strictVariance ? 2 /* Strict */ : 1 /* Bivariant */, /*ignoreReturnTypes*/ false, reportErrors, errorReporter, compareTypes) : - !callbackCheck && !strictVariance && compareTypes(sourceType, targetType, /*reportErrors*/ false) || compareTypes(targetType, sourceType, reportErrors); + compareSignaturesRelated(targetSig, sourceSig, strictVariance ? 2 : 1, false, reportErrors, errorReporter, compareTypes) : + !callbackCheck && !strictVariance && compareTypes(sourceType, targetType, false) || compareTypes(targetType, sourceType, reportErrors); if (!related) { if (reportErrors) { errorReporter(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, ts.symbolName(sourceParams[i < sourceMax ? i : sourceMax]), ts.symbolName(targetParams[i < targetMax ? i : targetMax])); } - return 0 /* False */; + return 0; } result &= related; } @@ -38305,25 +31687,21 @@ var ts; return result; } var sourceReturnType = getReturnTypeOfSignature(source); - // The following block preserves behavior forbidding boolean returning functions from being assignable to type guard returning functions var targetTypePredicate = getTypePredicateOfSignature(target); if (targetTypePredicate) { var sourceTypePredicate = getTypePredicateOfSignature(source); if (sourceTypePredicate) { - result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, source.declaration, target.declaration, reportErrors, errorReporter, compareTypes); // TODO: GH#18217 + result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, source.declaration, target.declaration, reportErrors, errorReporter, compareTypes); } else if (ts.isIdentifierTypePredicate(targetTypePredicate)) { if (reportErrors) { errorReporter(ts.Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source)); } - return 0 /* False */; + return 0; } } else { - // When relating callback signatures, we still need to relate return types bi-variantly as otherwise - // the containing type wouldn't be co-variant. For example, interface Foo { add(cb: () => T): void } - // wouldn't be co-variant for T without this rule. - result &= callbackCheck === 1 /* Bivariant */ && compareTypes(targetReturnType, sourceReturnType, /*reportErrors*/ false) || + result &= callbackCheck === 1 && compareTypes(targetReturnType, sourceReturnType, false) || compareTypes(sourceReturnType, targetReturnType, reportErrors); } } @@ -38335,9 +31713,9 @@ var ts; errorReporter(ts.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); } - return 0 /* False */; + return 0; } - if (source.kind === 1 /* Identifier */) { + if (source.kind === 1) { var targetPredicate = target; var sourceIndex = source.parameterIndex - (ts.getThisParameter(sourceDeclaration) ? 1 : 0); var targetIndex = targetPredicate.parameterIndex - (ts.getThisParameter(targetDeclaration) ? 1 : 0); @@ -38346,11 +31724,11 @@ var ts; errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, source.parameterName, targetPredicate.parameterName); errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); } - return 0 /* False */; + return 0; } } var related = compareTypes(source.type, target.type, reportErrors); - if (related === 0 /* False */ && reportErrors) { + if (related === 0 && reportErrors) { errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); } return related; @@ -38358,13 +31736,12 @@ var ts; function isImplementationCompatibleWithOverload(implementation, overload) { var erasedSource = getErasedSignature(implementation); var erasedTarget = getErasedSignature(overload); - // First see if the return types are compatible in either direction. var sourceReturnType = getReturnTypeOfSignature(erasedSource); var targetReturnType = getReturnTypeOfSignature(erasedTarget); if (targetReturnType === voidType || isTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation) || isTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation)) { - return isSignatureAssignableTo(erasedSource, erasedTarget, /*ignoreReturnTypes*/ true); + return isSignatureAssignableTo(erasedSource, erasedTarget, true); } return false; } @@ -38377,8 +31754,6 @@ var ts; function getNumParametersToCheckForSignatureRelatability(source, sourceNonRestParamCount, target, targetNonRestParamCount) { if (source.hasRestParameter === target.hasRestParameter) { if (source.hasRestParameter) { - // If both have rest parameters, get the max and add 1 to - // compensate for the rest parameter. return Math.max(sourceNonRestParamCount, targetNonRestParamCount) + 1; } else { @@ -38386,7 +31761,6 @@ var ts; } } else { - // Return the count for whichever signature doesn't have rest parameters. return source.hasRestParameter ? targetNonRestParamCount : sourceNonRestParamCount; @@ -38400,10 +31774,10 @@ var ts; !t.numberIndexInfo; } function isEmptyObjectType(type) { - return type.flags & 131072 /* Object */ ? isEmptyResolvedType(resolveStructuredTypeMembers(type)) : - type.flags & 16777216 /* NonPrimitive */ ? true : - type.flags & 262144 /* Union */ ? ts.some(type.types, isEmptyObjectType) : - type.flags & 524288 /* Intersection */ ? ts.every(type.types, isEmptyObjectType) : + return type.flags & 131072 ? isEmptyResolvedType(resolveStructuredTypeMembers(type)) : + type.flags & 16777216 ? true : + type.flags & 262144 ? ts.some(type.types, isEmptyObjectType) : + type.flags & 524288 ? ts.every(type.types, isEmptyObjectType) : false; } function isEnumTypeRelatedTo(sourceSymbol, targetSymbol, errorReporter) { @@ -38415,18 +31789,18 @@ var ts; if (relation !== undefined) { return relation; } - if (sourceSymbol.escapedName !== targetSymbol.escapedName || !(sourceSymbol.flags & 256 /* RegularEnum */) || !(targetSymbol.flags & 256 /* RegularEnum */)) { + if (sourceSymbol.escapedName !== targetSymbol.escapedName || !(sourceSymbol.flags & 256) || !(targetSymbol.flags & 256)) { enumRelation.set(id, false); return false; } var targetEnumType = getTypeOfSymbol(targetSymbol); for (var _i = 0, _a = getPropertiesOfType(getTypeOfSymbol(sourceSymbol)); _i < _a.length; _i++) { var property = _a[_i]; - if (property.flags & 8 /* EnumMember */) { + if (property.flags & 8) { var targetProperty = getPropertyOfType(targetEnumType, property.escapedName); - if (!targetProperty || !(targetProperty.flags & 8 /* EnumMember */)) { + if (!targetProperty || !(targetProperty.flags & 8)) { if (errorReporter) { - errorReporter(ts.Diagnostics.Property_0_is_missing_in_type_1, ts.symbolName(property), typeToString(getDeclaredTypeOfSymbol(targetSymbol), /*enclosingDeclaration*/ undefined, 64 /* UseFullyQualifiedType */)); + errorReporter(ts.Diagnostics.Property_0_is_missing_in_type_1, ts.symbolName(property), typeToString(getDeclaredTypeOfSymbol(targetSymbol), undefined, 64)); } enumRelation.set(id, false); return false; @@ -38439,91 +31813,78 @@ var ts; function isSimpleTypeRelatedTo(source, target, relation, errorReporter) { var s = source.flags; var t = target.flags; - if (t & 3 /* AnyOrUnknown */ || s & 32768 /* Never */ || source === wildcardType) + if (t & 3 || s & 32768 || source === wildcardType) return true; - if (t & 32768 /* Never */) + if (t & 32768) return false; - if (s & 68 /* StringLike */ && t & 4 /* String */) + if (s & 68 && t & 4) return true; - if (s & 64 /* StringLiteral */ && s & 512 /* EnumLiteral */ && - t & 64 /* StringLiteral */ && !(t & 512 /* EnumLiteral */) && + if (s & 64 && s & 512 && + t & 64 && !(t & 512) && source.value === target.value) return true; - if (s & 168 /* NumberLike */ && t & 8 /* Number */) + if (s & 168 && t & 8) return true; - if (s & 128 /* NumberLiteral */ && s & 512 /* EnumLiteral */ && - t & 128 /* NumberLiteral */ && !(t & 512 /* EnumLiteral */) && + if (s & 128 && s & 512 && + t & 128 && !(t & 512) && source.value === target.value) return true; - if (s & 272 /* BooleanLike */ && t & 16 /* Boolean */) + if (s & 272 && t & 16) return true; - if (s & 3072 /* ESSymbolLike */ && t & 1024 /* ESSymbol */) + if (s & 3072 && t & 1024) return true; - if (s & 32 /* Enum */ && t & 32 /* Enum */ && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) + if (s & 32 && t & 32 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; - if (s & 512 /* EnumLiteral */ && t & 512 /* EnumLiteral */) { - if (s & 262144 /* Union */ && t & 262144 /* Union */ && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) + if (s & 512 && t & 512) { + if (s & 262144 && t & 262144 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; - if (s & 448 /* Literal */ && t & 448 /* Literal */ && + if (s & 448 && t & 448 && source.value === target.value && isEnumTypeRelatedTo(getParentOfSymbol(source.symbol), getParentOfSymbol(target.symbol), errorReporter)) return true; } - if (s & 8192 /* Undefined */ && (!strictNullChecks || t & (8192 /* Undefined */ | 4096 /* Void */))) + if (s & 8192 && (!strictNullChecks || t & (8192 | 4096))) return true; - if (s & 16384 /* Null */ && (!strictNullChecks || t & 16384 /* Null */)) + if (s & 16384 && (!strictNullChecks || t & 16384)) return true; - if (s & 131072 /* Object */ && t & 16777216 /* NonPrimitive */) + if (s & 131072 && t & 16777216) return true; - if (s & 2048 /* UniqueESSymbol */ || t & 2048 /* UniqueESSymbol */) + if (s & 2048 || t & 2048) return false; if (relation === assignableRelation || relation === definitelyAssignableRelation || relation === comparableRelation) { - if (s & 1 /* Any */) + if (s & 1) return true; - // Type number or any numeric literal type is assignable to any numeric enum type or any - // numeric enum literal type. This rule exists for backwards compatibility reasons because - // bit-flag enum types sometimes look like literal enum types with numeric literal values. - if (s & (8 /* Number */ | 128 /* NumberLiteral */) && !(s & 512 /* EnumLiteral */) && (t & 32 /* Enum */ || t & 128 /* NumberLiteral */ && t & 512 /* EnumLiteral */)) + if (s & (8 | 128) && !(s & 512) && (t & 32 || t & 128 && t & 512)) return true; } return false; } function isTypeRelatedTo(source, target, relation) { - if (source.flags & 192 /* StringOrNumberLiteral */ && source.flags & 33554432 /* FreshLiteral */) { + if (source.flags & 192 && source.flags & 33554432) { source = source.regularType; } - if (target.flags & 192 /* StringOrNumberLiteral */ && target.flags & 33554432 /* FreshLiteral */) { + if (target.flags & 192 && target.flags & 33554432) { target = target.regularType; } if (source === target || - relation === comparableRelation && !(target.flags & 32768 /* Never */) && isSimpleTypeRelatedTo(target, source, relation) || + relation === comparableRelation && !(target.flags & 32768) && isSimpleTypeRelatedTo(target, source, relation) || relation !== identityRelation && isSimpleTypeRelatedTo(source, target, relation)) { return true; } - if (source.flags & 131072 /* Object */ && target.flags & 131072 /* Object */) { + if (source.flags & 131072 && target.flags & 131072) { var related = relation.get(getRelationKey(source, target, relation)); if (related !== undefined) { - return related === 1 /* Succeeded */; + return related === 1; } } - if (source.flags & 16711680 /* StructuredOrInstantiable */ || target.flags & 16711680 /* StructuredOrInstantiable */) { - return checkTypeRelatedTo(source, target, relation, /*errorNode*/ undefined); + if (source.flags & 16711680 || target.flags & 16711680) { + return checkTypeRelatedTo(source, target, relation, undefined); } return false; } function isIgnoredJsxProperty(source, sourceProp, targetMemberType) { - return ts.getObjectFlags(source) & 4096 /* JsxAttributes */ && !(isUnhyphenatedJsxName(sourceProp.escapedName) || targetMemberType); + return ts.getObjectFlags(source) & 4096 && !(isUnhyphenatedJsxName(sourceProp.escapedName) || targetMemberType); } - /** - * Checks if 'source' is related to 'target' (e.g.: is a assignable to). - * @param source The left-hand-side of the relation. - * @param target The right-hand-side of the relation. - * @param relation The relation considered. One of 'identityRelation', 'subtypeRelation', 'assignableRelation', or 'comparableRelation'. - * Used as both to determine which checks are performed and as a cache of previously computed results. - * @param errorNode The suggested node upon which all errors will be reported, if defined. This may or may not be the actual node used. - * @param headMessage If the error chain should be prepended by a head message, then headMessage will be used. - * @param containingMessageChain A chain of errors to prepend any new errors found. - */ function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) { var errorInfo; var maybeKeys; @@ -38531,11 +31892,11 @@ var ts; var targetStack; var maybeCount = 0; var depth = 0; - var expandingFlags = 0 /* None */; + var expandingFlags = 0; var overflow = false; var isIntersectionConstituent = false; ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); - var result = isRelatedTo(source, target, /*reportErrors*/ !!errorNode, headMessage); + var result = isRelatedTo(source, target, !!errorNode, headMessage); if (overflow) { error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); } @@ -38546,20 +31907,18 @@ var ts; errorInfo = ts.concatenateDiagnosticMessageChains(chain_1, errorInfo); } } - diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); // TODO: GH#18217 + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); } - // Check if we should issue an extra diagnostic to produce a quickfix for a slightly incorrect import statement if (headMessage && errorNode && !result && source.symbol) { var links = getSymbolLinks(source.symbol); if (links.originatingImport && !ts.isImportCall(links.originatingImport)) { - var helpfulRetry = checkTypeRelatedTo(getTypeOfSymbol(links.target), target, relation, /*errorNode*/ undefined); + var helpfulRetry = checkTypeRelatedTo(getTypeOfSymbol(links.target), target, relation, undefined); if (helpfulRetry) { - // Likely an incorrect import. Issue a helpful diagnostic to produce a quickfix to change the import diagnostics.add(ts.createDiagnosticForNode(links.originatingImport, ts.Diagnostics.A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime)); } } } - return result !== 0 /* False */; + return result !== 0; function reportError(message, arg0, arg1, arg2) { ts.Debug.assert(!!errorNode); errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); @@ -38568,8 +31927,8 @@ var ts; var sourceType = typeToString(source); var targetType = typeToString(target); if (sourceType === targetType) { - sourceType = typeToString(source, /*enclosingDeclaration*/ undefined, 64 /* UseFullyQualifiedType */); - targetType = typeToString(target, /*enclosingDeclaration*/ undefined, 64 /* UseFullyQualifiedType */); + sourceType = typeToString(source, undefined, 64); + targetType = typeToString(target, undefined, 64); } if (!message) { if (relation === comparableRelation) { @@ -38590,20 +31949,18 @@ var ts; if ((globalStringType === source && stringType === target) || (globalNumberType === source && numberType === target) || (globalBooleanType === source && booleanType === target) || - (getGlobalESSymbolType(/*reportErrors*/ false) === source && esSymbolType === target)) { + (getGlobalESSymbolType(false) === source && esSymbolType === target)) { reportError(ts.Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible, targetType, sourceType); } } function isUnionOrIntersectionTypeWithoutNullableConstituents(type) { - if (!(type.flags & 786432 /* UnionOrIntersection */)) { + if (!(type.flags & 786432)) { return false; } - // at this point we know that this is union or intersection type possibly with nullable constituents. - // check if we still will have compound type if we ignore nullable components. var seenNonNullable = false; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; - if (t.flags & 24576 /* Nullable */) { + if (t.flags & 24576) { continue; } if (seenNonNullable) { @@ -38613,131 +31970,95 @@ var ts; } return false; } - /** - * Compare two types and return - * * Ternary.True if they are related with no assumptions, - * * Ternary.Maybe if they are related with assumptions of other relationships, or - * * Ternary.False if they are not related. - */ function isRelatedTo(source, target, reportErrors, headMessage) { if (reportErrors === void 0) { reportErrors = false; } - if (source.flags & 192 /* StringOrNumberLiteral */ && source.flags & 33554432 /* FreshLiteral */) { + if (source.flags & 192 && source.flags & 33554432) { source = source.regularType; } - if (target.flags & 192 /* StringOrNumberLiteral */ && target.flags & 33554432 /* FreshLiteral */) { + if (target.flags & 192 && target.flags & 33554432) { target = target.regularType; } - if (source.flags & 8388608 /* Substitution */) { + if (source.flags & 8388608) { source = relation === definitelyAssignableRelation ? source.typeVariable : source.substitute; } - if (target.flags & 8388608 /* Substitution */) { + if (target.flags & 8388608) { target = target.typeVariable; } - if (source.flags & 2097152 /* IndexedAccess */) { + if (source.flags & 2097152) { source = getSimplifiedType(source); } - if (target.flags & 2097152 /* IndexedAccess */) { + if (target.flags & 2097152) { target = getSimplifiedType(target); } - // both types are the same - covers 'they are the same primitive type or both are Any' or the same type parameter cases if (source === target) - return -1 /* True */; + return -1; if (relation === identityRelation) { return isIdenticalTo(source, target); } - if (relation === comparableRelation && !(target.flags & 32768 /* Never */) && isSimpleTypeRelatedTo(target, source, relation) || + if (relation === comparableRelation && !(target.flags & 32768) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined)) - return -1 /* True */; - if (isObjectLiteralType(source) && source.flags & 33554432 /* FreshLiteral */) { - var discriminantType = target.flags & 262144 /* Union */ ? findMatchingDiscriminantType(source, target) : undefined; + return -1; + if (isObjectLiteralType(source) && source.flags & 33554432) { + var discriminantType = target.flags & 262144 ? findMatchingDiscriminantType(source, target) : undefined; if (hasExcessProperties(source, target, discriminantType, reportErrors)) { if (reportErrors) { reportRelationError(headMessage, source, target); } - return 0 /* False */; + return 0; } - // Above we check for excess properties with respect to the entire target type. When union - // and intersection types are further deconstructed on the target side, we don't want to - // make the check again (as it might fail for a partial target type). Therefore we obtain - // the regular source type and proceed with that. if (isUnionOrIntersectionTypeWithoutNullableConstituents(target) && !discriminantType) { source = getRegularTypeOfObjectLiteral(source); } } if (relation !== comparableRelation && - !(source.flags & 786432 /* UnionOrIntersection */) && - !(target.flags & 262144 /* Union */) && + !(source.flags & 786432) && + !(target.flags & 262144) && !isIntersectionConstituent && source !== globalObjectType && (getPropertiesOfType(source).length > 0 || typeHasCallOrConstructSignatures(source)) && isWeakType(target) && !hasCommonProperties(source, target)) { if (reportErrors) { - var calls = getSignaturesOfType(source, 0 /* Call */); - var constructs = getSignaturesOfType(source, 1 /* Construct */); - if (calls.length > 0 && isRelatedTo(getReturnTypeOfSignature(calls[0]), target, /*reportErrors*/ false) || - constructs.length > 0 && isRelatedTo(getReturnTypeOfSignature(constructs[0]), target, /*reportErrors*/ false)) { + var calls = getSignaturesOfType(source, 0); + var constructs = getSignaturesOfType(source, 1); + if (calls.length > 0 && isRelatedTo(getReturnTypeOfSignature(calls[0]), target, false) || + constructs.length > 0 && isRelatedTo(getReturnTypeOfSignature(constructs[0]), target, false)) { reportError(ts.Diagnostics.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it, typeToString(source), typeToString(target)); } else { reportError(ts.Diagnostics.Type_0_has_no_properties_in_common_with_type_1, typeToString(source), typeToString(target)); } } - return 0 /* False */; + return 0; } - var result = 0 /* False */; + var result = 0; var saveErrorInfo = errorInfo; var saveIsIntersectionConstituent = isIntersectionConstituent; isIntersectionConstituent = false; - // Note that these checks are specifically ordered to produce correct results. In particular, - // we need to deconstruct unions before intersections (because unions are always at the top), - // and we need to handle "each" relations before "some" relations for the same kind of type. - if (source.flags & 262144 /* Union */) { + if (source.flags & 262144) { result = relation === comparableRelation ? - someTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764 /* Primitive */)) : - eachTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764 /* Primitive */)); + someTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764)) : + eachTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764)); } else { - if (target.flags & 262144 /* Union */) { - result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 32764 /* Primitive */) && !(target.flags & 32764 /* Primitive */)); + if (target.flags & 262144) { + result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 32764) && !(target.flags & 32764)); } - else if (target.flags & 524288 /* Intersection */) { + else if (target.flags & 524288) { isIntersectionConstituent = true; result = typeRelatedToEachType(source, target, reportErrors); } - else if (source.flags & 524288 /* Intersection */) { - // Check to see if any constituents of the intersection are immediately related to the target. - // - // Don't report errors though. Checking whether a constituent is related to the source is not actually - // useful and leads to some confusing error messages. Instead it is better to let the below checks - // take care of this, or to not elaborate at all. For instance, - // - // - For an object type (such as 'C = A & B'), users are usually more interested in structural errors. - // - // - For a union type (such as '(A | B) = (C & D)'), it's better to hold onto the whole intersection - // than to report that 'D' is not assignable to 'A' or 'B'. - // - // - For a primitive type or type parameter (such as 'number = A & B') there is no point in - // breaking the intersection apart. - result = someTypeRelatedToType(source, target, /*reportErrors*/ false); + else if (source.flags & 524288) { + result = someTypeRelatedToType(source, target, false); } - if (!result && (source.flags & 16711680 /* StructuredOrInstantiable */ || target.flags & 16711680 /* StructuredOrInstantiable */)) { + if (!result && (source.flags & 16711680 || target.flags & 16711680)) { if (result = recursiveTypeRelatedTo(source, target, reportErrors)) { errorInfo = saveErrorInfo; } } } - if (!result && source.flags & 524288 /* Intersection */) { - // The combined constraint of an intersection type is the intersection of the constraints of - // the constituents. When an intersection type contains instantiable types with union type - // constraints, there are situations where we need to examine the combined constraint. One is - // when the target is a union type. Another is when the intersection contains types belonging - // to one of the disjoint domains. For example, given type variables T and U, each with the - // constraint 'string | number', the combined constraint of 'T & U' is 'string | number' and - // we need to check this constraint against a union on the target side. Also, given a type - // variable V constrained to 'string | number', 'V & number' has a combined constraint of - // 'string & number | number & number' which reduces to just 'number'. - var constraint = getUnionConstraintOfIntersection(source, !!(target.flags & 262144 /* Union */)); + if (!result && source.flags & 524288) { + var constraint = getUnionConstraintOfIntersection(source, !!(target.flags & 262144)); if (constraint) { if (result = isRelatedTo(constraint, target, reportErrors)) { errorInfo = saveErrorInfo; @@ -38746,19 +32067,18 @@ var ts; } isIntersectionConstituent = saveIsIntersectionConstituent; if (!result && reportErrors) { - if (source.flags & 131072 /* Object */ && target.flags & 32764 /* Primitive */) { + if (source.flags & 131072 && target.flags & 32764) { tryElaborateErrorsForPrimitivesAndObjects(source, target); } - else if (source.symbol && source.flags & 131072 /* Object */ && globalObjectType === source) { + else if (source.symbol && source.flags & 131072 && globalObjectType === source) { reportError(ts.Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead); } - else if (ts.getObjectFlags(source) & 4096 /* JsxAttributes */ && target.flags & 524288 /* Intersection */) { + else if (ts.getObjectFlags(source) & 4096 && target.flags & 524288) { var targetTypes = target.types; var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, errorNode); var intrinsicClassAttributes = getJsxType(JsxNames.IntrinsicClassAttributes, errorNode); if (intrinsicAttributes !== errorType && intrinsicClassAttributes !== errorType && (ts.contains(targetTypes, intrinsicAttributes) || ts.contains(targetTypes, intrinsicClassAttributes))) { - // do not report top error return result; } } @@ -38769,32 +32089,32 @@ var ts; function isIdenticalTo(source, target) { var result; var flags = source.flags & target.flags; - if (flags & 131072 /* Object */) { - return recursiveTypeRelatedTo(source, target, /*reportErrors*/ false); + if (flags & 131072) { + return recursiveTypeRelatedTo(source, target, false); } - if (flags & (262144 /* Union */ | 524288 /* Intersection */)) { + if (flags & (262144 | 524288)) { if (result = eachTypeRelatedToSomeType(source, target)) { if (result &= eachTypeRelatedToSomeType(target, source)) { return result; } } } - if (flags & 1048576 /* Index */) { - return isRelatedTo(source.type, target.type, /*reportErrors*/ false); + if (flags & 1048576) { + return isRelatedTo(source.type, target.type, false); } - if (flags & 2097152 /* IndexedAccess */) { - if (result = isRelatedTo(source.objectType, target.objectType, /*reportErrors*/ false)) { - if (result &= isRelatedTo(source.indexType, target.indexType, /*reportErrors*/ false)) { + if (flags & 2097152) { + if (result = isRelatedTo(source.objectType, target.objectType, false)) { + if (result &= isRelatedTo(source.indexType, target.indexType, false)) { return result; } } } - if (flags & 4194304 /* Conditional */) { + if (flags & 4194304) { if (source.root.isDistributive === target.root.isDistributive) { - if (result = isRelatedTo(source.checkType, target.checkType, /*reportErrors*/ false)) { - if (result &= isRelatedTo(source.extendsType, target.extendsType, /*reportErrors*/ false)) { - if (result &= isRelatedTo(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target), /*reportErrors*/ false)) { - if (result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), /*reportErrors*/ false)) { + if (result = isRelatedTo(source.checkType, target.checkType, false)) { + if (result &= isRelatedTo(source.extendsType, target.extendsType, false)) { + if (result &= isRelatedTo(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target), false)) { + if (result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), false)) { return result; } } @@ -38802,37 +32122,30 @@ var ts; } } } - if (flags & 8388608 /* Substitution */) { - return isRelatedTo(source.substitute, target.substitute, /*reportErrors*/ false); + if (flags & 8388608) { + return isRelatedTo(source.substitute, target.substitute, false); } - return 0 /* False */; + return 0; } function hasExcessProperties(source, target, discriminant, reportErrors) { - if (maybeTypeOfKind(target, 131072 /* Object */) && !(ts.getObjectFlags(target) & 512 /* ObjectLiteralPatternWithComputedProperties */)) { - var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 4096 /* JsxAttributes */); + if (maybeTypeOfKind(target, 131072) && !(ts.getObjectFlags(target) & 512)) { + var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 4096); if ((relation === assignableRelation || relation === definitelyAssignableRelation || relation === comparableRelation) && (isTypeSubsetOf(globalObjectType, target) || (!isComparingJsxAttributes && isEmptyObjectType(target)))) { return false; } if (discriminant) { - // check excess properties against discriminant type only, not the entire union - return hasExcessProperties(source, discriminant, /*discriminant*/ undefined, reportErrors); + return hasExcessProperties(source, discriminant, undefined, reportErrors); } var _loop_7 = function (prop) { if (!isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) { if (reportErrors) { - // We know *exactly* where things went wrong when comparing the types. - // Use this property as the error node as this will be more helpful in - // reasoning about what went wrong. if (!errorNode) return { value: ts.Debug.fail() }; if (ts.isJsxAttributes(errorNode) || ts.isJsxOpeningLikeElement(errorNode)) { - // JsxAttributes has an object-literal flag and undergo same type-assignablity check as normal object-literal. - // However, using an object-literal error message will be very confusing to the users so we give different a message. reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(prop), typeToString(target)); } else { - // use the property's value declaration if the property is assigned inside the literal itself var objectLiteralDeclaration_1 = source.symbol && ts.firstOrUndefined(source.symbol.declarations); var suggestion = void 0; if (prop.valueDeclaration && ts.findAncestor(prop.valueDeclaration, function (d) { return d === objectLiteralDeclaration_1; })) { @@ -38865,13 +32178,13 @@ var ts; return false; } function eachTypeRelatedToSomeType(source, target) { - var result = -1 /* True */; + var result = -1; var sourceTypes = source.types; for (var _i = 0, sourceTypes_1 = sourceTypes; _i < sourceTypes_1.length; _i++) { var sourceType = sourceTypes_1[_i]; - var related = typeRelatedToSomeType(sourceType, target, /*reportErrors*/ false); + var related = typeRelatedToSomeType(sourceType, target, false); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -38879,23 +32192,22 @@ var ts; } function typeRelatedToSomeType(source, target, reportErrors) { var targetTypes = target.types; - if (target.flags & 262144 /* Union */ && containsType(targetTypes, source)) { - return -1 /* True */; + if (target.flags & 262144 && containsType(targetTypes, source)) { + return -1; } for (var _i = 0, targetTypes_1 = targetTypes; _i < targetTypes_1.length; _i++) { var type = targetTypes_1[_i]; - var related = isRelatedTo(source, type, /*reportErrors*/ false); + var related = isRelatedTo(source, type, false); if (related) { return related; } } if (reportErrors) { var discriminantType = findMatchingDiscriminantType(source, target); - isRelatedTo(source, discriminantType || targetTypes[targetTypes.length - 1], /*reportErrors*/ true); + isRelatedTo(source, discriminantType || targetTypes[targetTypes.length - 1], true); } - return 0 /* False */; + return 0; } - // Keep this up-to-date with the same logic within `getApparentTypeOfContextualType`, since they should behave similarly function findMatchingDiscriminantType(source, target) { var match; var sourceProperties = getPropertiesOfObjectType(source); @@ -38910,7 +32222,7 @@ var ts; var targetType = getTypeOfPropertyOfType(type, sourceProperty.escapedName); if (targetType && isRelatedTo(sourceType, targetType)) { if (type === match) - continue; // Finding multiple fields which discriminate to the same type is fine + continue; if (match) { return undefined; } @@ -38923,13 +32235,13 @@ var ts; return match; } function typeRelatedToEachType(source, target, reportErrors) { - var result = -1 /* True */; + var result = -1; var targetTypes = target.types; for (var _i = 0, targetTypes_2 = targetTypes; _i < targetTypes_2.length; _i++) { var targetType = targetTypes_2[_i]; var related = isRelatedTo(source, targetType, reportErrors); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -38937,8 +32249,8 @@ var ts; } function someTypeRelatedToType(source, target, reportErrors) { var sourceTypes = source.types; - if (source.flags & 262144 /* Union */ && containsType(sourceTypes, target)) { - return -1 /* True */; + if (source.flags & 262144 && containsType(sourceTypes, target)) { + return -1; } var len = sourceTypes.length; for (var i = 0; i < len; i++) { @@ -38947,16 +32259,16 @@ var ts; return related; } } - return 0 /* False */; + return 0; } function eachTypeRelatedToType(source, target, reportErrors) { - var result = -1 /* True */; + var result = -1; var sourceTypes = source.types; for (var _i = 0, sourceTypes_2 = sourceTypes; _i < sourceTypes_2.length; _i++) { var sourceType = sourceTypes_2[_i]; var related = isRelatedTo(sourceType, target, reportErrors); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -38966,72 +32278,54 @@ var ts; var sources = source.typeArguments || ts.emptyArray; var targets = target.typeArguments || ts.emptyArray; if (sources.length !== targets.length && relation === identityRelation) { - return 0 /* False */; + return 0; } var length = sources.length <= targets.length ? sources.length : targets.length; - var result = -1 /* True */; + var result = -1; for (var i = 0; i < length; i++) { - // When variance information isn't available we default to covariance. This happens - // in the process of computing variance information for recursive types and when - // comparing 'this' type arguments. - var variance = i < variances.length ? variances[i] : 1 /* Covariant */; - // We ignore arguments for independent type parameters (because they're never witnessed). - if (variance !== 4 /* Independent */) { + var variance = i < variances.length ? variances[i] : 1; + if (variance !== 4) { var s = sources[i]; var t = targets[i]; - var related = -1 /* True */; - if (variance === 1 /* Covariant */) { + var related = -1; + if (variance === 1) { related = isRelatedTo(s, t, reportErrors); } - else if (variance === 2 /* Contravariant */) { + else if (variance === 2) { related = isRelatedTo(t, s, reportErrors); } - else if (variance === 3 /* Bivariant */) { - // In the bivariant case we first compare contravariantly without reporting - // errors. Then, if that doesn't succeed, we compare covariantly with error - // reporting. Thus, error elaboration will be based on the the covariant check, - // which is generally easier to reason about. - related = isRelatedTo(t, s, /*reportErrors*/ false); + else if (variance === 3) { + related = isRelatedTo(t, s, false); if (!related) { related = isRelatedTo(s, t, reportErrors); } } else { - // In the invariant case we first compare covariantly, and only when that - // succeeds do we proceed to compare contravariantly. Thus, error elaboration - // will typically be based on the covariant check. related = isRelatedTo(s, t, reportErrors); if (related) { related &= isRelatedTo(t, s, reportErrors); } } if (!related) { - return 0 /* False */; + return 0; } result &= related; } } return result; } - // Determine if possibly recursive types are related. First, check if the result is already available in the global cache. - // Second, check if we have already started a comparison of the given two types in which case we assume the result to be true. - // Third, check if both types are part of deeply nested chains of generic type instantiations and if so assume the types are - // equal and infinitely expanding. Fourth, if we have reached a depth of 100 nested comparisons, assume we have runaway recursion - // and issue an error. Otherwise, actually compare the structure of the two types. function recursiveTypeRelatedTo(source, target, reportErrors) { if (overflow) { - return 0 /* False */; + return 0; } var id = getRelationKey(source, target, relation); var related = relation.get(id); if (related !== undefined) { - if (reportErrors && related === 2 /* Failed */) { - // We are elaborating errors and the cached result is an unreported failure. Record the result as a reported - // failure and continue computing the relation such that errors get reported. - relation.set(id, 3 /* FailedAndReported */); + if (reportErrors && related === 2) { + relation.set(id, 3); } else { - return related === 1 /* Succeeded */ ? -1 /* True */ : 0 /* False */; + return related === 1 ? -1 : 0; } } if (!maybeKeys) { @@ -39041,14 +32335,13 @@ var ts; } else { for (var i = 0; i < maybeCount; i++) { - // If source and target are already being compared, consider them related with assumptions if (id === maybeKeys[i]) { - return 1 /* Maybe */; + return 1; } } if (depth === 100) { overflow = true; - return 0 /* False */; + return 0; } } var maybeStart = maybeCount; @@ -39058,26 +32351,23 @@ var ts; targetStack[depth] = target; depth++; var saveExpandingFlags = expandingFlags; - if (!(expandingFlags & 1 /* Source */) && isDeeplyNestedType(source, sourceStack, depth)) - expandingFlags |= 1 /* Source */; - if (!(expandingFlags & 2 /* Target */) && isDeeplyNestedType(target, targetStack, depth)) - expandingFlags |= 2 /* Target */; - var result = expandingFlags !== 3 /* Both */ ? structuredTypeRelatedTo(source, target, reportErrors) : 1 /* Maybe */; + if (!(expandingFlags & 1) && isDeeplyNestedType(source, sourceStack, depth)) + expandingFlags |= 1; + if (!(expandingFlags & 2) && isDeeplyNestedType(target, targetStack, depth)) + expandingFlags |= 2; + var result = expandingFlags !== 3 ? structuredTypeRelatedTo(source, target, reportErrors) : 1; expandingFlags = saveExpandingFlags; depth--; if (result) { - if (result === -1 /* True */ || depth === 0) { - // If result is definitely true, record all maybe keys as having succeeded + if (result === -1 || depth === 0) { for (var i = maybeStart; i < maybeCount; i++) { - relation.set(maybeKeys[i], 1 /* Succeeded */); + relation.set(maybeKeys[i], 1); } maybeCount = maybeStart; } } else { - // A false result goes straight into global cache (when something is false under - // assumptions it will also be false without assumptions) - relation.set(id, reportErrors ? 3 /* FailedAndReported */ : 2 /* Failed */); + relation.set(id, reportErrors ? 3 : 2); maybeCount = maybeStart; } return result; @@ -39089,10 +32379,9 @@ var ts; var result; var originalErrorInfo; var saveErrorInfo = errorInfo; - if (target.flags & 65536 /* TypeParameter */) { - // A source type { [P in keyof T]: X } is related to a target type T if X is related to T[P]. - if (ts.getObjectFlags(source) & 32 /* Mapped */ && getConstraintTypeFromMappedType(source) === getIndexType(target)) { - if (!(getMappedTypeModifiers(source) & 4 /* IncludeOptional */)) { + if (target.flags & 65536) { + if (ts.getObjectFlags(source) & 32 && getConstraintTypeFromMappedType(source) === getIndexType(target)) { + if (!(getMappedTypeModifiers(source) & 4)) { var templateType = getTemplateTypeFromMappedType(source); var indexedAccessType = getIndexedAccessType(target, getTypeParameterFromMappedType(source)); if (result = isRelatedTo(templateType, indexedAccessType, reportErrors)) { @@ -39101,15 +32390,12 @@ var ts; } } } - else if (target.flags & 1048576 /* Index */) { - // A keyof S is related to a keyof T if T is related to S. - if (source.flags & 1048576 /* Index */) { - if (result = isRelatedTo(target.type, source.type, /*reportErrors*/ false)) { + else if (target.flags & 1048576) { + if (source.flags & 1048576) { + if (result = isRelatedTo(target.type, source.type, false)) { return result; } } - // A type S is assignable to keyof T if S is assignable to keyof C, where C is the - // simplified form of T or, if T doesn't simplify, the constraint of T. if (relation !== definitelyAssignableRelation) { var simplified = getSimplifiedType(target.type); var constraint = simplified !== target.type ? simplified : getConstraintOfType(target.type); @@ -39120,9 +32406,7 @@ var ts; } } } - else if (target.flags & 2097152 /* IndexedAccess */) { - // A type S is related to a type T[K] if S is related to C, where C is the - // constraint of T[K] + else if (target.flags & 2097152) { var constraint = getConstraintForRelation(target); if (constraint) { if (result = isRelatedTo(source, constraint, reportErrors)) { @@ -39132,15 +32416,13 @@ var ts; } } else if (isGenericMappedType(target)) { - // A source type T is related to a target type { [P in X]: T[P] } var template = getTemplateTypeFromMappedType(target); var modifiers = getMappedTypeModifiers(target); - if (!(modifiers & 8 /* ExcludeOptional */)) { - if (template.flags & 2097152 /* IndexedAccess */ && template.objectType === source && + if (!(modifiers & 8)) { + if (template.flags & 2097152 && template.objectType === source && template.indexType === getTypeParameterFromMappedType(target)) { - return -1 /* True */; + return -1; } - // A source type T is related to a target type { [P in keyof T]: X } if T[P] is related to X. if (!isGenericMappedType(source) && getConstraintTypeFromMappedType(target) === getIndexType(source)) { var indexedAccessType = getIndexedAccessType(source, getTypeParameterFromMappedType(target)); var templateType = getTemplateTypeFromMappedType(target); @@ -39151,9 +32433,8 @@ var ts; } } } - if (source.flags & 2162688 /* TypeVariable */) { - if (source.flags & 2097152 /* IndexedAccess */ && target.flags & 2097152 /* IndexedAccess */) { - // A type S[K] is related to a type T[J] if S is related to T and K is related to J. + if (source.flags & 2162688) { + if (source.flags & 2097152 && target.flags & 2097152) { if (result = isRelatedTo(source.objectType, target.objectType, reportErrors)) { result &= isRelatedTo(source.indexType, target.indexType, reportErrors); } @@ -39163,9 +32444,8 @@ var ts; } } var constraint = getConstraintForRelation(source); - if (!constraint || (source.flags & 65536 /* TypeParameter */ && constraint.flags & 3 /* AnyOrUnknown */)) { - // A type variable with no constraint is not related to the non-primitive object type. - if (result = isRelatedTo(emptyObjectType, extractTypesOfKind(target, ~16777216 /* NonPrimitive */))) { + if (!constraint || (source.flags & 65536 && constraint.flags & 3)) { + if (result = isRelatedTo(emptyObjectType, extractTypesOfKind(target, ~16777216))) { errorInfo = saveErrorInfo; return result; } @@ -39178,17 +32458,14 @@ var ts; } } } - else if (source.flags & 1048576 /* Index */) { + else if (source.flags & 1048576) { if (result = isRelatedTo(keyofConstraintType, target, reportErrors)) { errorInfo = saveErrorInfo; return result; } } - else if (source.flags & 4194304 /* Conditional */) { - if (target.flags & 4194304 /* Conditional */) { - // Two conditional types 'T1 extends U1 ? X1 : Y1' and 'T2 extends U2 ? X2 : Y2' are related if - // one of T1 and T2 is related to the other, U1 and U2 are identical types, X1 is related to X2, - // and Y1 is related to Y2. + else if (source.flags & 4194304) { + if (target.flags & 4194304) { if (isTypeIdenticalTo(source.extendsType, target.extendsType) && (isRelatedTo(source.checkType, target.checkType) || isRelatedTo(target.checkType, source.checkType))) { if (result = isRelatedTo(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target), reportErrors)) { @@ -39218,68 +32495,42 @@ var ts; } } else { - if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target && - !(ts.getObjectFlags(source) & 8192 /* MarkerType */ || ts.getObjectFlags(target) & 8192 /* MarkerType */)) { - // We have type references to the same generic type, and the type references are not marker - // type references (which are intended by be compared structurally). Obtain the variance - // information for the type parameters and relate the type arguments accordingly. + if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && source.target === target.target && + !(ts.getObjectFlags(source) & 8192 || ts.getObjectFlags(target) & 8192)) { var variances = getVariances(source.target); if (result = typeArgumentsRelatedTo(source, target, variances, reportErrors)) { return result; } - // The type arguments did not relate appropriately, but it may be because we have no variance - // information (in which case typeArgumentsRelatedTo defaulted to covariance for all type - // arguments). It might also be the case that the target type has a 'void' type argument for - // a covariant type parameter that is only used in return positions within the generic type - // (in which case any type argument is permitted on the source side). In those cases we proceed - // with a structural comparison. Otherwise, we know for certain the instantiations aren't - // related and we can return here. if (variances !== ts.emptyArray && !hasCovariantVoidArgument(target, variances)) { - // In some cases generic types that are covariant in regular type checking mode become - // invariant in --strictFunctionTypes mode because one or more type parameters are used in - // both co- and contravariant positions. In order to make it easier to diagnose *why* such - // types are invariant, if any of the type parameters are invariant we reset the reported - // errors and instead force a structural comparison (which will include elaborations that - // reveal the reason). - if (!(reportErrors && ts.some(variances, function (v) { return v === 0 /* Invariant */; }))) { - return 0 /* False */; + if (!(reportErrors && ts.some(variances, function (v) { return v === 0; }))) { + return 0; } - // We remember the original error information so we can restore it in case the structural - // comparison unexpectedly succeeds. This can happen when the structural comparison result - // is a Ternary.Maybe for example caused by the recursion depth limiter. originalErrorInfo = errorInfo; errorInfo = saveErrorInfo; } } - // Even if relationship doesn't hold for unions, intersections, or generic type references, - // it may hold in a structural comparison. - var sourceIsPrimitive = !!(source.flags & 32764 /* Primitive */); + var sourceIsPrimitive = !!(source.flags & 32764); if (relation !== identityRelation) { source = 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 (source.flags & (131072 /* Object */ | 524288 /* Intersection */) && target.flags & 131072 /* Object */) { - // Report structural errors only if we haven't reported any errors yet + if (source.flags & (131072 | 524288) && target.flags & 131072) { var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !sourceIsPrimitive; - // An empty object type is related to any mapped type that includes a '?' modifier. if (isPartialMappedType(target) && !isGenericMappedType(source) && isEmptyObjectType(source)) { - result = -1 /* True */; + result = -1; } else if (isGenericMappedType(target)) { - result = isGenericMappedType(source) ? mappedTypeRelatedTo(source, target, reportStructuralErrors) : 0 /* False */; + result = isGenericMappedType(source) ? mappedTypeRelatedTo(source, target, reportStructuralErrors) : 0; } else { result = propertiesRelatedTo(source, target, reportStructuralErrors); if (result) { - result &= signaturesRelatedTo(source, target, 0 /* Call */, reportStructuralErrors); + result &= signaturesRelatedTo(source, target, 0, reportStructuralErrors); if (result) { - result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors); + result &= signaturesRelatedTo(source, target, 1, reportStructuralErrors); if (result) { - result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors); + result &= indexTypesRelatedTo(source, target, 0, sourceIsPrimitive, reportStructuralErrors); if (result) { - result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors); + result &= indexTypesRelatedTo(source, target, 1, sourceIsPrimitive, reportStructuralErrors); } } } @@ -39294,11 +32545,8 @@ var ts; } } } - return 0 /* False */; + return 0; } - // A type [P in S]: X is related to a type [Q in T]: Y if T is related to S and X' is - // related to Y, where X' is an instantiation of X in which P is replaced with Q. Notice - // that S and T are contra-variant whereas X and Y are co-variant. function mappedTypeRelatedTo(source, target, reportErrors) { var modifiersRelated = relation === comparableRelation || (relation === identityRelation ? getMappedTypeModifiers(source) === getMappedTypeModifiers(target) : getCombinedMappedTypeOptionality(source) <= getCombinedMappedTypeOptionality(target)); @@ -39309,7 +32557,7 @@ var ts; return result_2 & isRelatedTo(instantiateType(getTemplateTypeFromMappedType(source), mapper), getTemplateTypeFromMappedType(target), reportErrors); } } - return 0 /* False */; + return 0; } function propertiesRelatedTo(source, target, reportErrors) { if (relation === identityRelation) { @@ -39321,7 +32569,7 @@ var ts; if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(unmatchedProperty), typeToString(source)); } - return 0 /* False */; + return 0; } if (isObjectLiteralType(target)) { for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) { @@ -39332,16 +32580,16 @@ var ts; if (reportErrors) { reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target)); } - return 0 /* False */; + return 0; } } } } - var result = -1 /* True */; + var result = -1; var properties = getPropertiesOfObjectType(target); for (var _b = 0, properties_3 = properties; _b < properties_3.length; _b++) { var targetProp = properties_3[_b]; - if (!(targetProp.flags & 4194304 /* Prototype */)) { + if (!(targetProp.flags & 4194304)) { var sourceProp = getPropertyOfType(source, targetProp.escapedName); if (sourceProp && sourceProp !== targetProp) { if (isIgnoredJsxProperty(source, sourceProp, getTypeOfSymbol(targetProp))) { @@ -39349,86 +32597,74 @@ var ts; } var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp); var targetPropFlags = ts.getDeclarationModifierFlagsFromSymbol(targetProp); - if (sourcePropFlags & 8 /* Private */ || targetPropFlags & 8 /* Private */) { + if (sourcePropFlags & 8 || targetPropFlags & 8) { var hasDifferingDeclarations = sourceProp.valueDeclaration !== targetProp.valueDeclaration; - if (ts.getCheckFlags(sourceProp) & 256 /* ContainsPrivate */ && hasDifferingDeclarations) { + if (ts.getCheckFlags(sourceProp) & 256 && hasDifferingDeclarations) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1, symbolToString(sourceProp), typeToString(source)); } - return 0 /* False */; + return 0; } if (hasDifferingDeclarations) { if (reportErrors) { - if (sourcePropFlags & 8 /* Private */ && targetPropFlags & 8 /* Private */) { + if (sourcePropFlags & 8 && targetPropFlags & 8) { reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp)); } else { - reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 8 /* Private */ ? source : target), typeToString(sourcePropFlags & 8 /* Private */ ? target : source)); + reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 8 ? source : target), typeToString(sourcePropFlags & 8 ? target : source)); } } - return 0 /* False */; + return 0; } } - else if (targetPropFlags & 16 /* Protected */) { + else if (targetPropFlags & 16) { if (!isValidOverrideOf(sourceProp, targetProp)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(getDeclaringClass(sourceProp) || source), typeToString(getDeclaringClass(targetProp) || target)); } - return 0 /* False */; + return 0; } } - else if (sourcePropFlags & 16 /* Protected */) { + else if (sourcePropFlags & 16) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target)); } - return 0 /* False */; + return 0; } var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); if (!related) { if (reportErrors) { reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp)); } - return 0 /* False */; + return 0; } result &= related; - // When checking for comparability, be more lenient with optional properties. - if (relation !== comparableRelation && sourceProp.flags & 16777216 /* Optional */ && !(targetProp.flags & 16777216 /* Optional */)) { - // TypeScript 1.0 spec (April 2014): 3.8.3 - // S is a subtype of a type T, and T is a supertype of S if ... - // S' and T are object types and, for each member M in T.. - // M is a property and S' contains a property N where - // if M is a required property, N is also a required property - // (M - property in T) - // (N - property in S) + if (relation !== comparableRelation && sourceProp.flags & 16777216 && !(targetProp.flags & 16777216)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target)); } - return 0 /* False */; + return 0; } } } } return result; } - /** - * A type is 'weak' if it is an object type with at least one optional property - * and no required properties, call/construct signatures or index signatures - */ function isWeakType(type) { - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo && resolved.properties.length > 0 && - ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); }); + ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216); }); } - if (type.flags & 524288 /* Intersection */) { + if (type.flags & 524288) { return ts.every(type.types, isWeakType); } return false; } function hasCommonProperties(source, target) { - var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 4096 /* JsxAttributes */); + var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 4096); for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) { var prop = _a[_i]; if (isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) { @@ -39438,24 +32674,24 @@ var ts; return false; } function propertiesIdenticalTo(source, target) { - if (!(source.flags & 131072 /* Object */ && target.flags & 131072 /* Object */)) { - return 0 /* False */; + if (!(source.flags & 131072 && target.flags & 131072)) { + return 0; } var sourceProperties = getPropertiesOfObjectType(source); var targetProperties = getPropertiesOfObjectType(target); if (sourceProperties.length !== targetProperties.length) { - return 0 /* False */; + return 0; } - var result = -1 /* True */; + var result = -1; for (var _i = 0, sourceProperties_1 = sourceProperties; _i < sourceProperties_1.length; _i++) { var sourceProp = sourceProperties_1[_i]; var targetProp = getPropertyOfObjectType(target, sourceProp.escapedName); if (!targetProp) { - return 0 /* False */; + return 0; } var related = compareProperties(sourceProp, targetProp, isRelatedTo); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -39466,57 +32702,43 @@ var ts; return signaturesIdenticalTo(source, target, kind); } if (target === anyFunctionType || source === anyFunctionType) { - return -1 /* True */; + return -1; } var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); - if (kind === 1 /* Construct */ && sourceSignatures.length && targetSignatures.length) { + if (kind === 1 && sourceSignatures.length && targetSignatures.length) { if (ts.isAbstractConstructorType(source) && !ts.isAbstractConstructorType(target)) { - // An abstract constructor type is not assignable to a non-abstract constructor type - // as it would otherwise be possible to new an abstract class. Note that the assignability - // check we perform for an extends clause excludes construct signatures from the target, - // so this check never proceeds. if (reportErrors) { reportError(ts.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type); } - return 0 /* False */; + return 0; } if (!constructorVisibilitiesAreCompatible(sourceSignatures[0], targetSignatures[0], reportErrors)) { - return 0 /* False */; + return 0; } } - var result = -1 /* True */; + var result = -1; var saveErrorInfo = errorInfo; - if (ts.getObjectFlags(source) & 64 /* Instantiated */ && ts.getObjectFlags(target) & 64 /* Instantiated */ && source.symbol === target.symbol) { - // We have instantiations of the same anonymous type (which typically will be the type of a - // method). Simply do a pairwise comparison of the signatures in the two signature lists instead - // of the much more expensive N * M comparison matrix we explore below. We erase type parameters - // as they are known to always be the same. + if (ts.getObjectFlags(source) & 64 && ts.getObjectFlags(target) & 64 && source.symbol === target.symbol) { for (var i = 0; i < targetSignatures.length; i++) { - var related = signatureRelatedTo(sourceSignatures[i], targetSignatures[i], /*erase*/ true, reportErrors); + var related = signatureRelatedTo(sourceSignatures[i], targetSignatures[i], true, reportErrors); if (!related) { - return 0 /* False */; + return 0; } result &= related; } } else if (sourceSignatures.length === 1 && targetSignatures.length === 1) { - // For simple functions (functions with a single signature) we only erase type parameters for - // the comparable relation. Otherwise, if the source signature is generic, we instantiate it - // in the context of the target signature before checking the relationship. Ideally we'd do - // this regardless of the number of signatures, but the potential costs are prohibitive due - // to the quadratic nature of the logic below. var eraseGenerics = relation === comparableRelation || !!compilerOptions.noStrictGenericChecks; result = signatureRelatedTo(sourceSignatures[0], targetSignatures[0], eraseGenerics, reportErrors); } else { outer: for (var _i = 0, targetSignatures_1 = targetSignatures; _i < targetSignatures_1.length; _i++) { var t = targetSignatures_1[_i]; - // Only elaborate errors from the first failure var shouldElaborateErrors = reportErrors; for (var _a = 0, sourceSignatures_1 = sourceSignatures; _a < sourceSignatures_1.length; _a++) { var s = sourceSignatures_1[_a]; - var related = signatureRelatedTo(s, t, /*erase*/ true, shouldElaborateErrors); + var related = signatureRelatedTo(s, t, true, shouldElaborateErrors); if (related) { result &= related; errorInfo = saveErrorInfo; @@ -39525,53 +32747,49 @@ var ts; shouldElaborateErrors = false; } if (shouldElaborateErrors) { - reportError(ts.Diagnostics.Type_0_provides_no_match_for_the_signature_1, typeToString(source), signatureToString(t, /*enclosingDeclaration*/ undefined, /*flags*/ undefined, kind)); + reportError(ts.Diagnostics.Type_0_provides_no_match_for_the_signature_1, typeToString(source), signatureToString(t, undefined, undefined, kind)); } - return 0 /* False */; + return 0; } } return result; } - /** - * See signatureAssignableTo, compareSignaturesIdentical - */ function signatureRelatedTo(source, target, erase, reportErrors) { - return compareSignaturesRelated(erase ? getErasedSignature(source) : source, erase ? getErasedSignature(target) : target, 0 /* None */, /*ignoreReturnTypes*/ false, reportErrors, reportError, isRelatedTo); + return compareSignaturesRelated(erase ? getErasedSignature(source) : source, erase ? getErasedSignature(target) : target, 0, false, reportErrors, reportError, isRelatedTo); } function signaturesIdenticalTo(source, target, kind) { var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); if (sourceSignatures.length !== targetSignatures.length) { - return 0 /* False */; + return 0; } - var result = -1 /* True */; + var result = -1; for (var i = 0; i < sourceSignatures.length; i++) { - var related = compareSignaturesIdentical(sourceSignatures[i], targetSignatures[i], /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, isRelatedTo); + var related = compareSignaturesIdentical(sourceSignatures[i], targetSignatures[i], false, false, false, isRelatedTo); if (!related) { - return 0 /* False */; + return 0; } result &= related; } return result; } function eachPropertyRelatedTo(source, target, kind, reportErrors) { - var result = -1 /* True */; + var result = -1; for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { var prop = _a[_i]; - if (isIgnoredJsxProperty(source, prop, /*targetMemberType*/ undefined)) { + if (isIgnoredJsxProperty(source, prop, undefined)) { continue; } - // Skip over symbol-named members - if (prop.nameType && prop.nameType.flags & 2048 /* UniqueESSymbol */) { + if (prop.nameType && prop.nameType.flags & 2048) { continue; } - if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) { + if (kind === 0 || isNumericLiteralName(prop.escapedName)) { var related = isRelatedTo(getTypeOfSymbol(prop), target, reportErrors); if (!related) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop)); } - return 0 /* False */; + return 0; } result &= related; } @@ -39590,24 +32808,21 @@ var ts; return indexTypesIdenticalTo(source, target, kind); } var targetInfo = getIndexInfoOfType(target, kind); - if (!targetInfo || targetInfo.type.flags & 3 /* AnyOrUnknown */ && !sourceIsPrimitive) { - // Index signature of type any permits assignment from everything but primitives - return -1 /* True */; + if (!targetInfo || targetInfo.type.flags & 3 && !sourceIsPrimitive) { + return -1; } var sourceInfo = getIndexInfoOfType(source, kind) || - kind === 1 /* Number */ && getIndexInfoOfType(source, 0 /* String */); + kind === 1 && getIndexInfoOfType(source, 0); if (sourceInfo) { return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors); } if (isGenericMappedType(source)) { - // A generic mapped type { [P in K]: T } is related to an index signature { [x: string]: U } - // if T is related to U. - return (kind === 0 /* String */ && isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors)); // TODO: GH#18217 + return (kind === 0 && isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors)); } if (isObjectTypeWithInferableIndex(source)) { - var related = -1 /* True */; - if (kind === 0 /* String */) { - var sourceNumberInfo = getIndexInfoOfType(source, 1 /* Number */); + var related = -1; + if (kind === 0) { + var sourceNumberInfo = getIndexInfoOfType(source, 1); if (sourceNumberInfo) { related = indexInfoRelatedTo(sourceNumberInfo, targetInfo, reportErrors); } @@ -39620,35 +32835,32 @@ var ts; if (reportErrors) { reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); } - return 0 /* False */; + return 0; } function indexTypesIdenticalTo(source, target, indexKind) { var targetInfo = getIndexInfoOfType(target, indexKind); var sourceInfo = getIndexInfoOfType(source, indexKind); if (!sourceInfo && !targetInfo) { - return -1 /* True */; + return -1; } if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) { return isRelatedTo(sourceInfo.type, targetInfo.type); } - return 0 /* False */; + return 0; } function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) { if (!sourceSignature.declaration || !targetSignature.declaration) { return true; } - var sourceAccessibility = ts.getSelectedModifierFlags(sourceSignature.declaration, 24 /* NonPublicAccessibilityModifier */); - var targetAccessibility = ts.getSelectedModifierFlags(targetSignature.declaration, 24 /* NonPublicAccessibilityModifier */); - // A public, protected and private signature is assignable to a private signature. - if (targetAccessibility === 8 /* Private */) { + var sourceAccessibility = ts.getSelectedModifierFlags(sourceSignature.declaration, 24); + var targetAccessibility = ts.getSelectedModifierFlags(targetSignature.declaration, 24); + if (targetAccessibility === 8) { return true; } - // A public and protected signature is assignable to a protected signature. - if (targetAccessibility === 16 /* Protected */ && sourceAccessibility !== 8 /* Private */) { + if (targetAccessibility === 16 && sourceAccessibility !== 8) { return true; } - // Only a public signature is assignable to public signature. - if (targetAccessibility !== 16 /* Protected */ && !sourceAccessibility) { + if (targetAccessibility !== 16 && !sourceAccessibility) { return true; } if (reportErrors) { @@ -39657,19 +32869,11 @@ var ts; return false; } } - // Return a type reference where the source type parameter is replaced with the target marker - // type, and flag the result as a marker type reference. function getMarkerTypeReference(type, source, target) { var result = createTypeReference(type, ts.map(type.typeParameters, function (t) { return t === source ? target : t; })); - result.objectFlags |= 8192 /* MarkerType */; + result.objectFlags |= 8192; return result; } - // Return an array containing the variance of each type parameter. The variance is effectively - // a digest of the type comparisons that occur for each type argument when instantiations of the - // generic type are structurally compared. We infer the variance information by comparing - // instantiations of the generic type for type arguments with known relations. The function - // returns the emptyArray singleton if we're not in strictFunctionTypes mode or if the function - // has been invoked recursively for the given generic type. function getVariances(type) { if (!strictFunctionTypes) { return ts.emptyArray; @@ -39678,28 +32882,19 @@ var ts; var variances = type.variances; if (!variances) { if (type === globalArrayType || type === globalReadonlyArrayType) { - // Arrays are known to be covariant, no need to spend time computing this - variances = [1 /* Covariant */]; + variances = [1]; } else { - // The emptyArray singleton is used to signal a recursive invocation. type.variances = ts.emptyArray; variances = []; for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) { var tp = typeParameters_1[_i]; - // We first compare instantiations where the type parameter is replaced with - // marker types that have a known subtype relationship. From this we can infer - // invariance, covariance, contravariance or bivariance. var typeWithSuper = getMarkerTypeReference(type, tp, markerSuperType); var typeWithSub = getMarkerTypeReference(type, tp, markerSubType); - var variance = (isTypeAssignableTo(typeWithSub, typeWithSuper) ? 1 /* Covariant */ : 0) | - (isTypeAssignableTo(typeWithSuper, typeWithSub) ? 2 /* Contravariant */ : 0); - // If the instantiations appear to be related bivariantly it may be because the - // type parameter is independent (i.e. it isn't witnessed anywhere in the generic - // type). To determine this we compare instantiations where the type parameter is - // replaced with marker types that are known to be unrelated. - if (variance === 3 /* Bivariant */ && isTypeAssignableTo(getMarkerTypeReference(type, tp, markerOtherType), typeWithSuper)) { - variance = 4 /* Independent */; + var variance = (isTypeAssignableTo(typeWithSub, typeWithSuper) ? 1 : 0) | + (isTypeAssignableTo(typeWithSuper, typeWithSub) ? 2 : 0); + if (variance === 3 && isTypeAssignableTo(getMarkerTypeReference(type, tp, markerOtherType), typeWithSuper)) { + variance = 4; } variances.push(variance); } @@ -39708,26 +32903,20 @@ var ts; } return variances; } - // Return true if the given type reference has a 'void' type argument for a covariant type parameter. - // See comment at call in recursiveTypeRelatedTo for when this case matters. function hasCovariantVoidArgument(type, variances) { for (var i = 0; i < variances.length; i++) { - if (variances[i] === 1 /* Covariant */ && type.typeArguments[i].flags & 4096 /* Void */) { + if (variances[i] === 1 && type.typeArguments[i].flags & 4096) { return true; } } return false; } function isUnconstrainedTypeParameter(type) { - return type.flags & 65536 /* TypeParameter */ && !getConstraintFromTypeParameter(type); + return type.flags & 65536 && !getConstraintFromTypeParameter(type); } function isTypeReferenceWithGenericArguments(type) { - return !!(ts.getObjectFlags(type) & 4 /* Reference */) && ts.some(type.typeArguments, function (t) { return isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t); }); + return !!(ts.getObjectFlags(type) & 4) && ts.some(type.typeArguments, function (t) { return isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t); }); } - /** - * getTypeReferenceId(A) returns "111=0-12=1" - * where A.id=111 and number.id=12 - */ function getTypeReferenceId(type, typeParameters, depth) { if (depth === void 0) { depth = 0; } var result = "" + type.target.id; @@ -39750,10 +32939,6 @@ var ts; } return result; } - /** - * To improve caching, the relation key for two generic types uses the target's id plus ids of the type parameters. - * For other cases, the types ids are used. - */ function getRelationKey(source, target, relation) { if (relation === identityRelation && source.id > target.id) { var temp = source; @@ -39766,10 +32951,8 @@ var ts; } return source.id + "," + target.id; } - // Invoke the callback for each underlying property symbol of the given symbol and return the first - // value that isn't undefined. function forEachProperty(prop, callback) { - if (ts.getCheckFlags(prop) & 6 /* Synthetic */) { + if (ts.getCheckFlags(prop) & 6) { for (var _i = 0, _a = prop.containingType.types; _i < _a.length; _i++) { var t = _a[_i]; var p = getPropertyOfType(t, prop.escapedName); @@ -39782,43 +32965,31 @@ var ts; } return callback(prop); } - // Return the declaring class type of a property or undefined if property not declared in class function getDeclaringClass(prop) { - return prop.parent && prop.parent.flags & 32 /* Class */ ? getDeclaredTypeOfSymbol(getParentOfSymbol(prop)) : undefined; + return prop.parent && prop.parent.flags & 32 ? getDeclaredTypeOfSymbol(getParentOfSymbol(prop)) : undefined; } - // Return true if some underlying source property is declared in a class that derives - // from the given base class. function isPropertyInClassDerivedFrom(prop, baseClass) { return forEachProperty(prop, function (sp) { var sourceClass = getDeclaringClass(sp); return sourceClass ? hasBaseType(sourceClass, baseClass) : false; }); } - // Return true if source property is a valid override of protected parts of target property. function isValidOverrideOf(sourceProp, targetProp) { - return !forEachProperty(targetProp, function (tp) { return ts.getDeclarationModifierFlagsFromSymbol(tp) & 16 /* Protected */ ? + return !forEachProperty(targetProp, function (tp) { return ts.getDeclarationModifierFlagsFromSymbol(tp) & 16 ? !isPropertyInClassDerivedFrom(sourceProp, getDeclaringClass(tp)) : false; }); } - // Return true if the given class derives from each of the declaring classes of the protected - // constituents of the given property. function isClassDerivedFromDeclaringClasses(checkClass, prop) { - return forEachProperty(prop, function (p) { return ts.getDeclarationModifierFlagsFromSymbol(p) & 16 /* Protected */ ? + return forEachProperty(prop, function (p) { return ts.getDeclarationModifierFlagsFromSymbol(p) & 16 ? !hasBaseType(checkClass, getDeclaringClass(p)) : false; }) ? undefined : checkClass; } - // Return true if the given type is deeply nested. We consider this to be the case when structural type comparisons - // for 5 or more occurrences or instantiations of the type have been recorded on the given stack. It is possible, - // though highly unlikely, for this test to be true in a situation where a chain of instantiations is not infinitely - // expanding. Effectively, we will generate a false positive when two types are structurally equal to at least 5 - // levels, but unequal at some level beyond that. function isDeeplyNestedType(type, stack, depth) { - // We track all object types that have an associated symbol (representing the origin of the type) - if (depth >= 5 && type.flags & 131072 /* Object */) { + if (depth >= 5 && type.flags & 131072) { var symbol = type.symbol; if (symbol) { var count = 0; for (var i = 0; i < depth; i++) { var t = stack[i]; - if (t.flags & 131072 /* Object */ && t.symbol === symbol) { + if (t.flags & 131072 && t.symbol === symbol) { count++; if (count >= 5) return true; @@ -39829,46 +33000,38 @@ var ts; return false; } function isPropertyIdenticalTo(sourceProp, targetProp) { - return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== 0 /* False */; + return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== 0; } function compareProperties(sourceProp, targetProp, compareTypes) { - // Two members are considered identical when - // - they are public properties with identical names, optionality, and types, - // - they are private or protected properties originating in the same declaration and having identical types if (sourceProp === targetProp) { - return -1 /* True */; + return -1; } - var sourcePropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(sourceProp) & 24 /* NonPublicAccessibilityModifier */; - var targetPropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(targetProp) & 24 /* NonPublicAccessibilityModifier */; + var sourcePropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(sourceProp) & 24; + var targetPropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(targetProp) & 24; if (sourcePropAccessibility !== targetPropAccessibility) { - return 0 /* False */; + return 0; } if (sourcePropAccessibility) { if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) { - return 0 /* False */; + return 0; } } else { - if ((sourceProp.flags & 16777216 /* Optional */) !== (targetProp.flags & 16777216 /* Optional */)) { - return 0 /* False */; + if ((sourceProp.flags & 16777216) !== (targetProp.flags & 16777216)) { + return 0; } } if (isReadonlySymbol(sourceProp) !== isReadonlySymbol(targetProp)) { - return 0 /* False */; + return 0; } return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); } function isMatchingSignature(source, target, partialMatch) { - // A source signature matches a target signature if the two signatures have the same number of required, - // optional, and rest parameters. if (source.parameters.length === target.parameters.length && source.minArgumentCount === target.minArgumentCount && source.hasRestParameter === target.hasRestParameter) { return true; } - // A source signature partially matches a target signature if the target signature has no fewer required - // parameters and no more overall parameters than the source signature (where a signature with a rest - // parameter is always considered to have more overall parameters than one without). var sourceRestCount = source.hasRestParameter ? 1 : 0; var targetRestCount = target.hasRestParameter ? 1 : 0; if (partialMatch && source.minArgumentCount <= target.minArgumentCount && (sourceRestCount > targetRestCount || @@ -39877,30 +33040,19 @@ var ts; } return false; } - /** - * See signatureRelatedTo, compareSignaturesIdentical - */ function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes) { - // TODO (drosen): De-duplicate code between related functions. if (source === target) { - return -1 /* True */; + return -1; } if (!(isMatchingSignature(source, target, partialMatch))) { - return 0 /* False */; + return 0; } - // Check that the two signatures have the same number of type parameters. We might consider - // also checking that any type parameter constraints match, but that would require instantiating - // the constraints with a common set of type arguments to get relatable entities in places where - // type parameters occur in the constraints. The complexity of doing that doesn't seem worthwhile, - // particularly as we're comparing erased versions of the signatures below. if (ts.length(source.typeParameters) !== ts.length(target.typeParameters)) { - return 0 /* False */; + return 0; } - // Spec 1.0 Section 3.8.3 & 3.8.4: - // M and N (the signatures) are instantiated using type Any as the type argument for all type parameters declared by M and N source = getErasedSignature(source); target = getErasedSignature(target); - var result = -1 /* True */; + var result = -1; if (!ignoreThisTypes) { var sourceThisType = getThisTypeOfSignature(source); if (sourceThisType) { @@ -39908,7 +33060,7 @@ var ts; if (targetThisType) { var related = compareTypes(sourceThisType, targetThisType); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -39920,7 +33072,7 @@ var ts; var t = isRestParameterIndex(target, i) ? getRestTypeOfSignature(target) : getTypeOfParameter(target.parameters[i]); var related = compareTypes(s, t); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -39929,13 +33081,12 @@ var ts; var targetTypePredicate = getTypePredicateOfSignature(target); result &= sourceTypePredicate !== undefined || targetTypePredicate !== undefined ? compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes) - // If they're both type predicates their return types will both be `boolean`, so no need to compare those. : compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); } return result; } function compareTypePredicatesIdentical(source, target, compareTypes) { - return source === undefined || target === undefined || !typePredicateKindsMatch(source, target) ? 0 /* False */ : compareTypes(source.type, target.type); + return source === undefined || target === undefined || !typePredicateKindsMatch(source, target) ? 0 : compareTypes(source.type, target.type); } function isRestParameterIndex(signature, parameterIndex) { return signature.hasRestParameter && parameterIndex >= signature.parameters.length - 1; @@ -39954,9 +33105,6 @@ var ts; } return true; } - // When the candidate types are all literal types with the same base type, return a union - // of those literal types. Otherwise, return the leftmost type for which no type to the - // right is a supertype. function getSupertypeOrUnion(types) { return literalTypesWithSameBaseType(types) ? getUnionType(types) : @@ -39966,23 +33114,20 @@ var ts; if (!strictNullChecks) { return getSupertypeOrUnion(types); } - var primaryTypes = ts.filter(types, function (t) { return !(t.flags & 24576 /* Nullable */); }); + var primaryTypes = ts.filter(types, function (t) { return !(t.flags & 24576); }); return primaryTypes.length ? - getNullableType(getSupertypeOrUnion(primaryTypes), getFalsyFlagsOfTypes(types) & 24576 /* Nullable */) : - getUnionType(types, 2 /* Subtype */); + getNullableType(getSupertypeOrUnion(primaryTypes), getFalsyFlagsOfTypes(types) & 24576) : + getUnionType(types, 2); } - // Return the leftmost type for which no type to the right is a subtype. function getCommonSubtype(types) { return ts.reduceLeft(types, function (s, t) { return isTypeSubtypeOf(t, s) ? t : s; }); } function isArrayType(type) { - return !!(ts.getObjectFlags(type) & 4 /* Reference */) && type.target === globalArrayType; + return !!(ts.getObjectFlags(type) & 4) && type.target === globalArrayType; } function isArrayLikeType(type) { - // A type is array-like if it is a reference to the global Array or global ReadonlyArray type, - // or if it is not the undefined or null type and if it is assignable to ReadonlyArray - return ts.getObjectFlags(type) & 4 /* Reference */ && (type.target === globalArrayType || type.target === globalReadonlyArrayType) || - !(type.flags & 24576 /* Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType); + return ts.getObjectFlags(type) & 4 && (type.target === globalArrayType || type.target === globalReadonlyArrayType) || + !(type.flags & 24576) && isTypeAssignableTo(type, anyReadonlyArrayType); } function isEmptyArrayLiteralType(type) { var elementType = isArrayType(type) ? type.typeArguments[0] : undefined; @@ -39992,35 +33137,35 @@ var ts; return !!getPropertyOfType(type, "0"); } function isNeitherUnitTypeNorNever(type) { - return !(type.flags & (27072 /* Unit */ | 32768 /* Never */)); + return !(type.flags & (27072 | 32768)); } function isUnitType(type) { - return !!(type.flags & 27072 /* Unit */); + return !!(type.flags & 27072); } function isLiteralType(type) { - return type.flags & 16 /* Boolean */ ? true : - type.flags & 262144 /* Union */ ? type.flags & 512 /* EnumLiteral */ ? true : ts.every(type.types, isUnitType) : + return type.flags & 16 ? true : + type.flags & 262144 ? type.flags & 512 ? true : ts.every(type.types, isUnitType) : isUnitType(type); } function getBaseTypeOfLiteralType(type) { - return type.flags & 512 /* EnumLiteral */ ? getBaseTypeOfEnumLiteralType(type) : - type.flags & 64 /* StringLiteral */ ? stringType : - type.flags & 128 /* NumberLiteral */ ? numberType : - type.flags & 256 /* BooleanLiteral */ ? booleanType : - type.flags & 262144 /* Union */ ? getUnionType(ts.sameMap(type.types, getBaseTypeOfLiteralType)) : + return type.flags & 512 ? getBaseTypeOfEnumLiteralType(type) : + type.flags & 64 ? stringType : + type.flags & 128 ? numberType : + type.flags & 256 ? booleanType : + type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getBaseTypeOfLiteralType)) : type; } function getWidenedLiteralType(type) { - return type.flags & 512 /* EnumLiteral */ ? getBaseTypeOfEnumLiteralType(type) : - type.flags & 64 /* StringLiteral */ && type.flags & 33554432 /* FreshLiteral */ ? stringType : - type.flags & 128 /* NumberLiteral */ && type.flags & 33554432 /* FreshLiteral */ ? numberType : - type.flags & 256 /* BooleanLiteral */ ? booleanType : - type.flags & 262144 /* Union */ ? getUnionType(ts.sameMap(type.types, getWidenedLiteralType)) : + return type.flags & 512 ? getBaseTypeOfEnumLiteralType(type) : + type.flags & 64 && type.flags & 33554432 ? stringType : + type.flags & 128 && type.flags & 33554432 ? numberType : + type.flags & 256 ? booleanType : + type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getWidenedLiteralType)) : type; } function getWidenedUniqueESSymbolType(type) { - return type.flags & 2048 /* UniqueESSymbol */ ? esSymbolType : - type.flags & 262144 /* Union */ ? getUnionType(ts.sameMap(type.types, getWidenedUniqueESSymbolType)) : + return type.flags & 2048 ? esSymbolType : + type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getWidenedUniqueESSymbolType)) : type; } function getWidenedLiteralLikeTypeForContextualType(type, contextualType) { @@ -40029,12 +33174,8 @@ var ts; } return type; } - /** - * Check if a Type was written as a tuple type literal. - * Prefer using isTupleLikeType() unless the use of `elementTypes` is required. - */ function isTupleType(type) { - return !!(ts.getObjectFlags(type) & 4 /* Reference */ && type.target.objectFlags & 8 /* Tuple */); + return !!(ts.getObjectFlags(type) & 4 && type.target.objectFlags & 8); } function getFalsyFlagsOfTypes(types) { var result = 0; @@ -40044,68 +33185,55 @@ var ts; } return result; } - // Returns the String, Number, Boolean, StringLiteral, NumberLiteral, BooleanLiteral, Void, Undefined, or Null - // flags for the string, number, boolean, "", 0, false, void, undefined, or null types respectively. Returns - // no flags for all other types (including non-falsy literal types). function getFalsyFlags(type) { - return type.flags & 262144 /* Union */ ? getFalsyFlagsOfTypes(type.types) : - type.flags & 64 /* StringLiteral */ ? type.value === "" ? 64 /* StringLiteral */ : 0 : - type.flags & 128 /* NumberLiteral */ ? type.value === 0 ? 128 /* NumberLiteral */ : 0 : - type.flags & 256 /* BooleanLiteral */ ? type === falseType ? 256 /* BooleanLiteral */ : 0 : - type.flags & 29148 /* PossiblyFalsy */; + return type.flags & 262144 ? getFalsyFlagsOfTypes(type.types) : + type.flags & 64 ? type.value === "" ? 64 : 0 : + type.flags & 128 ? type.value === 0 ? 128 : 0 : + type.flags & 256 ? type === falseType ? 256 : 0 : + type.flags & 29148; } function removeDefinitelyFalsyTypes(type) { - return getFalsyFlags(type) & 29120 /* DefinitelyFalsy */ ? - filterType(type, function (t) { return !(getFalsyFlags(t) & 29120 /* DefinitelyFalsy */); }) : + return getFalsyFlags(type) & 29120 ? + filterType(type, function (t) { return !(getFalsyFlags(t) & 29120); }) : type; } function extractDefinitelyFalsyTypes(type) { return mapType(type, getDefinitelyFalsyPartOfType); } function getDefinitelyFalsyPartOfType(type) { - return type.flags & 4 /* String */ ? emptyStringType : - type.flags & 8 /* Number */ ? zeroType : - type.flags & 16 /* Boolean */ || type === falseType ? falseType : - type.flags & (4096 /* Void */ | 8192 /* Undefined */ | 16384 /* Null */) || - type.flags & 64 /* StringLiteral */ && type.value === "" || - type.flags & 128 /* NumberLiteral */ && type.value === 0 ? type : + return type.flags & 4 ? emptyStringType : + type.flags & 8 ? zeroType : + type.flags & 16 || type === falseType ? falseType : + type.flags & (4096 | 8192 | 16384) || + type.flags & 64 && type.value === "" || + type.flags & 128 && type.value === 0 ? type : neverType; } - /** - * Add undefined or null or both to a type if they are missing. - * @param type - type to add undefined and/or null to if not present - * @param flags - Either TypeFlags.Undefined or TypeFlags.Null, or both - */ function getNullableType(type, flags) { - var missing = (flags & ~type.flags) & (8192 /* Undefined */ | 16384 /* Null */); + var missing = (flags & ~type.flags) & (8192 | 16384); return missing === 0 ? type : - missing === 8192 /* Undefined */ ? getUnionType([type, undefinedType]) : - missing === 16384 /* Null */ ? getUnionType([type, nullType]) : + missing === 8192 ? getUnionType([type, undefinedType]) : + missing === 16384 ? getUnionType([type, nullType]) : getUnionType([type, undefinedType, nullType]); } function getOptionalType(type) { ts.Debug.assert(strictNullChecks); - return type.flags & 8192 /* Undefined */ ? type : getUnionType([type, undefinedType]); + return type.flags & 8192 ? type : getUnionType([type, undefinedType]); } function getGlobalNonNullableTypeInstantiation(type) { if (!deferredGlobalNonNullableTypeAlias) { - deferredGlobalNonNullableTypeAlias = getGlobalSymbol("NonNullable", 524288 /* TypeAlias */, /*diagnostic*/ undefined) || unknownSymbol; + deferredGlobalNonNullableTypeAlias = getGlobalSymbol("NonNullable", 524288, undefined) || unknownSymbol; } - // Use NonNullable global type alias if available to improve quick info/declaration emit if (deferredGlobalNonNullableTypeAlias !== unknownSymbol) { return getTypeAliasInstantiation(deferredGlobalNonNullableTypeAlias, [type]); } - return getTypeWithFacts(type, 524288 /* NEUndefinedOrNull */); // Type alias unavailable, fall back to non-higherorder behavior + return getTypeWithFacts(type, 524288); } function getNonNullableType(type) { return strictNullChecks ? getGlobalNonNullableTypeInstantiation(type) : type; } - /** - * Return true if type was inferred from an object literal, written as an object type literal, or is the shape of a module - * with no call or construct signatures. - */ function isObjectTypeWithInferableIndex(type) { - return type.symbol && (type.symbol.flags & (4096 /* ObjectLiteral */ | 2048 /* TypeLiteral */ | 512 /* ValueModule */)) !== 0 && + return type.symbol && (type.symbol.flags & (4096 | 2048 | 512)) !== 0 && !typeHasCallOrConstructSignatures(type); } function createSymbolWithType(source, type) { @@ -40132,13 +33260,8 @@ var ts; } return members; } - /** - * If the the provided object literal is subject to the excess properties check, - * create a new that is exempt. Recursively mark object literal members as exempt. - * Leave signatures alone since they are not subject to the check. - */ function getRegularTypeOfObjectLiteral(type) { - if (!(isObjectLiteralType(type) && type.flags & 33554432 /* FreshLiteral */)) { + if (!(isObjectLiteralType(type) && type.flags & 33554432)) { return type; } var regularType = type.regularType; @@ -40148,8 +33271,8 @@ var ts; var resolved = type; var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral); var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo); - regularNew.flags = resolved.flags & ~33554432 /* FreshLiteral */; - regularNew.objectFlags |= 128 /* ObjectLiteral */; + regularNew.flags = resolved.flags & ~33554432; + regularNew.objectFlags |= 128; type.regularType = regularNew; return regularNew; } @@ -40179,7 +33302,7 @@ var ts; var names = ts.createMap(); for (var _i = 0, _a = getSiblingsOfContext(context); _i < _a.length; _i++) { var t = _a[_i]; - if (isObjectLiteralType(t) && !(ts.getObjectFlags(t) & 1024 /* ContainsSpread */)) { + if (isObjectLiteralType(t) && !(ts.getObjectFlags(t) & 1024)) { for (var _b = 0, _c = getPropertiesOfType(t); _b < _c.length; _b++) { var prop = _c[_b]; names.set(prop.escapedName, prop); @@ -40191,21 +33314,18 @@ var ts; return context.resolvedProperties; } function getWidenedProperty(prop, context) { - if (!(prop.flags & 4 /* Property */)) { - // Since get accessors already widen their return value there is no need to - // widen accessor based properties here. + if (!(prop.flags & 4)) { return prop; } - if (prop.flags & 67108864 /* JSContainer */) { + if (prop.flags & 67108864) { var node = prop.declarations && ts.first(prop.declarations); var init = ts.getAssignedJavascriptInitializer(node); - if (init && init.kind !== 184 /* ObjectLiteralExpression */) { - // for JS special declarations, the only kind of initializer that will widen is object literals + if (init && init.kind !== 184) { return prop; } } var original = getTypeOfSymbol(prop); - var propContext = context && createWideningContext(context, prop.escapedName, /*siblings*/ undefined); + var propContext = context && createWideningContext(context, prop.escapedName, undefined); var widened = getWidenedTypeWithContext(original, propContext); return widened === original ? prop : createSymbolWithType(prop, widened); } @@ -40215,7 +33335,7 @@ var ts; return cached; } var result = createSymbolWithType(prop, undefinedType); - result.flags |= 16777216 /* Optional */; + result.flags |= 16777216; undefinedProperties.set(prop.escapedName, result); return result; } @@ -40233,28 +33353,25 @@ var ts; } } } - var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */); - var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */); + var stringIndexInfo = getIndexInfoOfType(type, 0); + var numberIndexInfo = getIndexInfoOfType(type, 1); return createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly)); } function getWidenedType(type) { - return getWidenedTypeWithContext(type, /*context*/ undefined); + return getWidenedTypeWithContext(type, undefined); } function getWidenedTypeWithContext(type, context) { - if (type.flags & 402653184 /* RequiresWidening */) { - if (type.flags & 24576 /* Nullable */) { + if (type.flags & 402653184) { + if (type.flags & 24576) { return anyType; } if (isObjectLiteralType(type)) { return getWidenedTypeOfObjectLiteral(type, context); } - if (type.flags & 262144 /* Union */) { - var unionContext_1 = context || createWideningContext(/*parent*/ undefined, /*propertyName*/ undefined, type.types); - var widenedTypes = ts.sameMap(type.types, function (t) { return t.flags & 24576 /* Nullable */ ? t : getWidenedTypeWithContext(t, unionContext_1); }); - // Widening an empty object literal transitions from a highly restrictive type to - // a highly inclusive one. For that reason we perform subtype reduction here if the - // union includes empty object types (e.g. reducing {} | string to just {}). - return getUnionType(widenedTypes, ts.some(widenedTypes, isEmptyObjectType) ? 2 /* Subtype */ : 1 /* Literal */); + if (type.flags & 262144) { + var unionContext_1 = context || createWideningContext(undefined, undefined, type.types); + var widenedTypes = ts.sameMap(type.types, function (t) { return t.flags & 24576 ? t : getWidenedTypeWithContext(t, unionContext_1); }); + return getUnionType(widenedTypes, ts.some(widenedTypes, isEmptyObjectType) ? 2 : 1); } if (isArrayType(type) || isTupleType(type)) { return createTypeReference(type.target, ts.sameMap(type.typeArguments, getWidenedType)); @@ -40262,21 +33379,10 @@ var ts; } return type; } - /** - * Reports implicit any errors that occur as a result of widening 'null' and 'undefined' - * to 'any'. A call to reportWideningErrorsInType is normally accompanied by a call to - * getWidenedType. But in some cases getWidenedType is called without reporting errors - * (type argument inference is an example). - * - * The return value indicates whether an error was in fact reported. The particular circumstances - * are on a best effort basis. Currently, if the null or undefined that causes widening is inside - * an object literal property (arbitrarily deeply), this function reports an error. If no error is - * reported, reportImplicitAnyError is a suitable fallback to report a general error. - */ function reportWideningErrorsInType(type) { var errorReported = false; - if (type.flags & 134217728 /* ContainsWideningType */) { - if (type.flags & 262144 /* Union */) { + if (type.flags & 134217728) { + if (type.flags & 262144) { if (ts.some(type.types, isEmptyObjectType)) { errorReported = true; } @@ -40301,7 +33407,7 @@ var ts; for (var _d = 0, _e = getPropertiesOfObjectType(type); _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); - if (t.flags & 134217728 /* ContainsWideningType */) { + if (t.flags & 134217728) { if (!reportWideningErrorsInType(t)) { error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); } @@ -40316,33 +33422,33 @@ var ts; var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { - case 200 /* BinaryExpression */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 200: + case 152: + case 151: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 149 /* Parameter */: + case 149: diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 182 /* BindingElement */: + case 182: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; - case 234 /* FunctionDeclaration */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 234: + case 154: + case 153: + case 156: + case 157: + case 192: + case 193: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; } diagnostic = ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type; break; - case 177 /* MappedType */: + case 177: error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type); return; default: @@ -40351,8 +33457,7 @@ var ts; error(declaration, diagnostic, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)), typeAsString); } function reportErrorsFromWidening(declaration, type) { - if (produceDiagnostics && noImplicitAny && type.flags & 134217728 /* ContainsWideningType */) { - // Report implicit any error within type if possible, otherwise report error on declaration + if (produceDiagnostics && noImplicitAny && type.flags & 134217728) { if (!reportWideningErrorsInType(type)) { reportImplicitAnyError(declaration, type); } @@ -40419,16 +33524,13 @@ var ts; isFixed: inference.isFixed }; } - // Return true if the given type could possibly reference a type parameter for which - // we perform type inference (i.e. a type parameter of a generic function). We cache - // results for union and intersection types for performance reasons. function couldContainTypeVariables(type) { var objectFlags = ts.getObjectFlags(type); - return !!(type.flags & 15794176 /* Instantiable */ || - objectFlags & 4 /* Reference */ && ts.forEach(type.typeArguments, couldContainTypeVariables) || - objectFlags & 16 /* Anonymous */ && type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 2048 /* TypeLiteral */ | 32 /* Class */) || - objectFlags & 32 /* Mapped */ || - type.flags & 786432 /* UnionOrIntersection */ && couldUnionOrIntersectionContainTypeVariables(type)); + return !!(type.flags & 15794176 || + objectFlags & 4 && ts.forEach(type.typeArguments, couldContainTypeVariables) || + objectFlags & 16 && type.symbol && type.symbol.flags & (16 | 8192 | 2048 | 32) || + objectFlags & 32 || + type.flags & 786432 && couldUnionOrIntersectionContainTypeVariables(type)); } function couldUnionOrIntersectionContainTypeVariables(type) { if (type.couldContainTypeVariables === undefined) { @@ -40437,17 +33539,16 @@ var ts; return type.couldContainTypeVariables; } function isTypeParameterAtTopLevel(type, typeParameter) { - return type === typeParameter || !!(type.flags & 786432 /* UnionOrIntersection */) && ts.some(type.types, function (t) { return isTypeParameterAtTopLevel(t, typeParameter); }); + return type === typeParameter || !!(type.flags & 786432) && ts.some(type.types, function (t) { return isTypeParameterAtTopLevel(t, typeParameter); }); } - /** Create an object with properties named in the string literal type. Every property has type `any` */ function createEmptyObjectTypeFromStringLiteral(type) { var members = ts.createSymbolTable(); forEachType(type, function (t) { - if (!(t.flags & 64 /* StringLiteral */)) { + if (!(t.flags & 64)) { return; } var name = ts.escapeLeadingUnderscores(t.value); - var literalProp = createSymbol(4 /* Property */, name); + var literalProp = createSymbol(4, name); literalProp.type = anyType; if (t.symbol) { literalProp.declarations = t.symbol.declarations; @@ -40455,15 +33556,9 @@ var ts; } members.set(name, literalProp); }); - var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined; + var indexInfo = type.flags & 4 ? createIndexInfo(emptyObjectType, false) : undefined; return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined); } - /** - * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct - * an object type with the same set of properties as the source type, where the type of each - * property is computed by inferring from the source property type to X for the type - * variable T[P] (i.e. we treat the type T[P] as the type variable we're inferring for). - */ function inferTypeForHomomorphicMappedType(source, target) { var key = source.id + "," + target.id; if (reverseMappedCache.has(key)) { @@ -40476,18 +33571,16 @@ var ts; } function createReverseMappedType(source, target) { var properties = getPropertiesOfType(source); - if (properties.length === 0 && !getIndexInfoOfType(source, 0 /* String */)) { + if (properties.length === 0 && !getIndexInfoOfType(source, 0)) { return undefined; } - // If any property contains context sensitive functions that have been skipped, the source type - // is incomplete and we can't infer a meaningful input type. for (var _i = 0, properties_4 = properties; _i < properties_4.length; _i++) { var prop = properties_4[_i]; - if (getTypeOfSymbol(prop).flags & 536870912 /* ContainsAnyFunctionType */) { + if (getTypeOfSymbol(prop).flags & 536870912) { return undefined; } } - var reversed = createObjectType(2048 /* ReverseMapped */ | 16 /* Anonymous */, /*symbol*/ undefined); + var reversed = createObjectType(2048 | 16, undefined); reversed.source = source; reversed.mappedType = target; return reversed; @@ -40503,10 +33596,10 @@ var ts; return getTypeFromInference(inference); } function getUnmatchedProperty(source, target, requireOptionalProperties) { - var properties = target.flags & 524288 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(target) : getPropertiesOfObjectType(target); + var properties = target.flags & 524288 ? getPropertiesOfUnionOrIntersectionType(target) : getPropertiesOfObjectType(target); for (var _i = 0, properties_5 = properties; _i < properties_5.length; _i++) { var targetProp = properties_5[_i]; - if (requireOptionalProperties || !(targetProp.flags & 16777216 /* Optional */)) { + if (requireOptionalProperties || !(targetProp.flags & 16777216)) { var sourceProp = getPropertyOfType(source, targetProp.escapedName); if (!sourceProp) { return targetProp; @@ -40516,13 +33609,11 @@ var ts; return undefined; } function typesDefinitelyUnrelated(source, target) { - // Two tuple types with different arity are definitely unrelated. - // Two object types that each have a property that is unmatched in the other are definitely unrelated. return isTupleType(source) && isTupleType(target) && getTypeReferenceArity(source) !== getTypeReferenceArity(target) || - !!getUnmatchedProperty(source, target, /*requireOptionalProperties*/ false) && !!getUnmatchedProperty(target, source, /*requireOptionalProperties*/ false); + !!getUnmatchedProperty(source, target, false) && !!getUnmatchedProperty(target, source, false); } function getTypeFromInference(inference) { - return inference.candidates ? getUnionType(inference.candidates, 2 /* Subtype */) : + return inference.candidates ? getUnionType(inference.candidates, 2) : inference.contraCandidates ? getIntersectionType(inference.contraCandidates) : emptyObjectType; } @@ -40538,9 +33629,6 @@ var ts; return; } if (source === wildcardType) { - // We are inferring from an 'any' type. We want to infer this type for every type parameter - // referenced in the target type, so we record it as the propagation type and infer from the - // target to itself. Then, as we find candidates we substitute the propagation type. var savePropagationType = propagationType; propagationType = source; inferFromTypes(target, target); @@ -40548,8 +33636,6 @@ var ts; return; } if (source.aliasSymbol && source.aliasTypeArguments && source.aliasSymbol === target.aliasSymbol) { - // Source and target are types originating in the same generic type alias declaration. - // Simply infer from source type arguments to target type arguments. var sourceTypes = source.aliasTypeArguments; var targetTypes = target.aliasTypeArguments; for (var i = 0; i < sourceTypes.length; i++) { @@ -40557,10 +33643,8 @@ var ts; } return; } - if (source.flags & 262144 /* Union */ && target.flags & 262144 /* Union */ && !(source.flags & 512 /* EnumLiteral */ && target.flags & 512 /* EnumLiteral */) || - source.flags & 524288 /* Intersection */ && target.flags & 524288 /* Intersection */) { - // Source and target are both unions or both intersections. If source and target - // are the same type, just relate each constituent type to itself. + if (source.flags & 262144 && target.flags & 262144 && !(source.flags & 512 && target.flags & 512) || + source.flags & 524288 && target.flags & 524288) { if (source === target) { for (var _i = 0, _a = source.types; _i < _a.length; _i++) { var t = _a[_i]; @@ -40568,12 +33652,6 @@ var ts; } return; } - // Find each source constituent type that has an identically matching target constituent - // type, and for each such type infer from the type to itself. When inferring from a - // type to itself we effectively find all type parameter occurrences within that type - // and infer themselves as their type arguments. We have special handling for numeric - // and string literals because the number and string types are not represented as unions - // of all their possible values. var matchingTypes = void 0; for (var _b = 0, _c = source.types; _b < _c.length; _b++) { var t = _c[_b]; @@ -40581,30 +33659,20 @@ var ts; (matchingTypes || (matchingTypes = [])).push(t); inferFromTypes(t, t); } - else if (t.flags & (128 /* NumberLiteral */ | 64 /* StringLiteral */)) { + else if (t.flags & (128 | 64)) { var b = getBaseTypeOfLiteralType(t); if (typeIdenticalToSomeType(b, target.types)) { (matchingTypes || (matchingTypes = [])).push(t, b); } } } - // Next, to improve the quality of inferences, reduce the source and target types by - // removing the identically matched constituents. For example, when inferring from - // 'string | string[]' to 'string | T' we reduce the types to 'string[]' and 'T'. if (matchingTypes) { source = removeTypesFromUnionOrIntersection(source, matchingTypes); target = removeTypesFromUnionOrIntersection(target, matchingTypes); } } - if (target.flags & 2162688 /* TypeVariable */) { - // If target is a type parameter, make an inference, unless the source type contains - // the anyFunctionType (the wildcard type that's used to avoid contextually typing functions). - // Because the anyFunctionType is internal, it should not be exposed to the user by adding - // it as an inference candidate. Hopefully, a better candidate will come along that does - // not contain anyFunctionType when we come back to this argument for its second round - // of inference. Also, we exclude inferences for silentNeverType (which is used as a wildcard - // when constructing types from type parameters that had no inference candidates). - if (source.flags & 536870912 /* ContainsAnyFunctionType */ || source === silentNeverType) { + if (target.flags & 2162688) { + if (source.flags & 536870912 || source === silentNeverType) { return; } var inference = getInferenceInfoForType(target); @@ -40624,21 +33692,20 @@ var ts; inference.candidates = ts.append(inference.candidates, candidate); } } - if (!(priority & 8 /* ReturnType */) && target.flags & 65536 /* TypeParameter */ && !isTypeParameterAtTopLevel(originalTarget, target)) { + if (!(priority & 8) && target.flags & 65536 && !isTypeParameterAtTopLevel(originalTarget, target)) { inference.topLevel = false; } } return; } } - if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target) { - // If source and target are references to the same generic type, infer from type arguments + if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && source.target === target.target) { var sourceTypes = source.typeArguments || ts.emptyArray; var targetTypes = target.typeArguments || ts.emptyArray; var count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length; var variances = getVariances(source.target); for (var i = 0; i < count; i++) { - if (i < variances.length && variances[i] === 2 /* Contravariant */) { + if (i < variances.length && variances[i] === 2) { inferFromContravariantTypes(sourceTypes[i], targetTypes[i]); } else { @@ -40646,35 +33713,34 @@ var ts; } } } - else if (source.flags & 1048576 /* Index */ && target.flags & 1048576 /* Index */) { + else if (source.flags & 1048576 && target.flags & 1048576) { contravariant = !contravariant; inferFromTypes(source.type, target.type); contravariant = !contravariant; } - else if ((isLiteralType(source) || source.flags & 4 /* String */) && target.flags & 1048576 /* Index */) { + else if ((isLiteralType(source) || source.flags & 4) && target.flags & 1048576) { var empty = createEmptyObjectTypeFromStringLiteral(source); contravariant = !contravariant; var savePriority = priority; - priority |= 16 /* LiteralKeyof */; + priority |= 16; inferFromTypes(empty, target.type); priority = savePriority; contravariant = !contravariant; } - else if (source.flags & 2097152 /* IndexedAccess */ && target.flags & 2097152 /* IndexedAccess */) { + else if (source.flags & 2097152 && target.flags & 2097152) { inferFromTypes(source.objectType, target.objectType); inferFromTypes(source.indexType, target.indexType); } - else if (source.flags & 4194304 /* Conditional */ && target.flags & 4194304 /* Conditional */) { + else if (source.flags & 4194304 && target.flags & 4194304) { inferFromTypes(source.checkType, target.checkType); inferFromTypes(source.extendsType, target.extendsType); inferFromTypes(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target)); inferFromTypes(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target)); } - else if (target.flags & 786432 /* UnionOrIntersection */) { + else if (target.flags & 786432) { var targetTypes = target.types; var typeVariableCount = 0; var typeVariable = void 0; - // First infer to each type in union or intersection that isn't a type variable for (var _d = 0, targetTypes_3 = targetTypes; _d < targetTypes_3.length; _d++) { var t = targetTypes_3[_d]; if (getInferenceInfoForType(t)) { @@ -40685,18 +33751,14 @@ var ts; inferFromTypes(source, t); } } - // Next, if target containings a single naked type variable, make a secondary inference to that type - // variable. This gives meaningful results for union types in co-variant positions and intersection - // types in contra-variant positions (such as callback parameters). if (typeVariableCount === 1) { var savePriority = priority; - priority |= 1 /* NakedTypeVariable */; + priority |= 1; inferFromTypes(source, typeVariable); priority = savePriority; } } - else if (source.flags & 262144 /* Union */) { - // Source is a union or intersection type, infer from each constituent type + else if (source.flags & 262144) { var sourceTypes = source.types; for (var _e = 0, sourceTypes_3 = sourceTypes; _e < sourceTypes_3.length; _e++) { var sourceType = sourceTypes_3[_e]; @@ -40704,21 +33766,17 @@ var ts; } } else { - if (!(priority & 32 /* NoConstraints */ && source.flags & (524288 /* Intersection */ | 15794176 /* Instantiable */))) { + if (!(priority & 32 && source.flags & (524288 | 15794176))) { source = getApparentType(source); } - if (source.flags & (131072 /* Object */ | 524288 /* Intersection */)) { + if (source.flags & (131072 | 524288)) { var key = source.id + "," + target.id; if (visited && visited.get(key)) { return; } (visited || (visited = ts.createMap())).set(key, true); - // If we are already processing another target type with the same associated symbol (such as - // an instantiation of the same generic type), we do not explore this target as it would yield - // no further inferences. We exclude the static side of classes from this check since it shares - // its symbol with the instance side which would lead to false positives. - var isNonConstructorObject = target.flags & 131072 /* Object */ && - !(ts.getObjectFlags(target) & 16 /* Anonymous */ && target.symbol && target.symbol.flags & 32 /* Class */); + var isNonConstructorObject = target.flags & 131072 && + !(ts.getObjectFlags(target) & 16 && target.symbol && target.symbol.flags & 32); var symbol = isNonConstructorObject ? target.symbol : undefined; if (symbol) { if (ts.contains(symbolStack, symbol)) { @@ -40735,7 +33793,7 @@ var ts; } } function inferFromContravariantTypes(source, target) { - if (strictFunctionTypes || priority & 64 /* AlwaysStrict */) { + if (strictFunctionTypes || priority & 64) { contravariant = !contravariant; inferFromTypes(source, target); contravariant = !contravariant; @@ -40745,7 +33803,7 @@ var ts; } } function getInferenceInfoForType(type) { - if (type.flags & 2162688 /* TypeVariable */) { + if (type.flags & 2162688) { for (var _i = 0, inferences_1 = inferences; _i < inferences_1.length; _i++) { var inference = inferences_1[_i]; if (type === inference.typeParameter) { @@ -40757,46 +33815,37 @@ var ts; } function inferFromObjectTypes(source, target) { if (isGenericMappedType(source) && isGenericMappedType(target)) { - // The source and target types are generic types { [P in S]: X } and { [P in T]: Y }, so we infer - // from S to T and from X to Y. inferFromTypes(getConstraintTypeFromMappedType(source), getConstraintTypeFromMappedType(target)); inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target)); } - if (ts.getObjectFlags(target) & 32 /* Mapped */) { + if (ts.getObjectFlags(target) & 32) { var constraintType = getConstraintTypeFromMappedType(target); - if (constraintType.flags & 1048576 /* Index */) { - // We're inferring from some source type S to a homomorphic mapped type { [P in keyof T]: X }, - // where T is a type variable. Use inferTypeForHomomorphicMappedType to infer a suitable source - // type and then make a secondary inference from that type to T. We make a secondary inference - // such that direct inferences to T get priority over inferences to Partial, for example. + if (constraintType.flags & 1048576) { var inference = getInferenceInfoForType(constraintType.type); if (inference && !inference.isFixed) { var inferredType = inferTypeForHomomorphicMappedType(source, target); if (inferredType) { var savePriority = priority; - priority |= 2 /* HomomorphicMappedType */; + priority |= 2; inferFromTypes(inferredType, inference.typeParameter); priority = savePriority; } } return; } - if (constraintType.flags & 65536 /* TypeParameter */) { - // We're inferring from some source type S to a mapped type { [P in T]: X }, where T is a type - // parameter. Infer from 'keyof S' to T and infer from a union of each property type in S to X. + if (constraintType.flags & 65536) { var savePriority = priority; - priority |= 4 /* MappedTypeConstraint */; + priority |= 4; inferFromTypes(getIndexType(source), constraintType); priority = savePriority; inferFromTypes(getUnionType(ts.map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target)); return; } } - // Infer from the members of source and target only if the two types are possibly related if (!typesDefinitelyUnrelated(source, target)) { inferFromProperties(source, target); - inferFromSignatures(source, target, 0 /* Call */); - inferFromSignatures(source, target, 1 /* Construct */); + inferFromSignatures(source, target, 0); + inferFromSignatures(source, target, 1); inferFromIndexTypes(source, target); } } @@ -40832,19 +33881,19 @@ var ts; } } function inferFromIndexTypes(source, target) { - var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */); + var targetStringIndexType = getIndexTypeOfType(target, 0); if (targetStringIndexType) { - var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) || - getImplicitIndexTypeOfType(source, 0 /* String */); + var sourceIndexType = getIndexTypeOfType(source, 0) || + getImplicitIndexTypeOfType(source, 0); if (sourceIndexType) { inferFromTypes(sourceIndexType, targetStringIndexType); } } - var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */); + var targetNumberIndexType = getIndexTypeOfType(target, 1); if (targetNumberIndexType) { - var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) || - getIndexTypeOfType(source, 0 /* String */) || - getImplicitIndexTypeOfType(source, 1 /* Number */); + var sourceIndexType = getIndexTypeOfType(source, 1) || + getIndexTypeOfType(source, 0) || + getImplicitIndexTypeOfType(source, 1); if (sourceIndexType) { inferFromTypes(sourceIndexType, targetNumberIndexType); } @@ -40860,10 +33909,6 @@ var ts; } return false; } - /** - * Return a new union or intersection type computed by removing a given set of types - * from a given union or intersection type. - */ function removeTypesFromUnionOrIntersection(type, typesToRemove) { var reducedTypes = []; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { @@ -40872,46 +33917,38 @@ var ts; reducedTypes.push(t); } } - return type.flags & 262144 /* Union */ ? getUnionType(reducedTypes) : getIntersectionType(reducedTypes); + return type.flags & 262144 ? getUnionType(reducedTypes) : getIntersectionType(reducedTypes); } function hasPrimitiveConstraint(type) { var constraint = getConstraintOfTypeParameter(type); - return !!constraint && maybeTypeOfKind(constraint, 32764 /* Primitive */ | 1048576 /* Index */); + return !!constraint && maybeTypeOfKind(constraint, 32764 | 1048576); } function isObjectLiteralType(type) { - return !!(ts.getObjectFlags(type) & 128 /* ObjectLiteral */); + return !!(ts.getObjectFlags(type) & 128); } function widenObjectLiteralCandidates(candidates) { if (candidates.length > 1) { var objectLiterals = ts.filter(candidates, isObjectLiteralType); if (objectLiterals.length) { - var objectLiteralsType = getWidenedType(getUnionType(objectLiterals, 2 /* Subtype */)); + var objectLiteralsType = getWidenedType(getUnionType(objectLiterals, 2)); return ts.concatenate(ts.filter(candidates, function (t) { return !isObjectLiteralType(t); }), [objectLiteralsType]); } } return candidates; } function getContravariantInference(inference) { - return inference.priority & 28 /* PriorityImpliesCombination */ ? getIntersectionType(inference.contraCandidates) : getCommonSubtype(inference.contraCandidates); + return inference.priority & 28 ? getIntersectionType(inference.contraCandidates) : getCommonSubtype(inference.contraCandidates); } function getCovariantInference(inference, context, signature) { - // Extract all object literal types and replace them with a single widened and normalized type. var candidates = widenObjectLiteralCandidates(inference.candidates); - // We widen inferred literal types if - // all inferences were made to top-level occurrences of the type parameter, and - // the type parameter has no constraint or its constraint includes no primitive or literal types, and - // the type parameter was fixed during inference or does not occur at top-level in the return type. var primitiveConstraint = hasPrimitiveConstraint(inference.typeParameter); var widenLiteralTypes = !primitiveConstraint && inference.topLevel && (inference.isFixed || !isTypeParameterAtTopLevel(getReturnTypeOfSignature(signature), inference.typeParameter)); var baseCandidates = primitiveConstraint ? ts.sameMap(candidates, getRegularTypeOfLiteralType) : widenLiteralTypes ? ts.sameMap(candidates, getWidenedLiteralType) : candidates; - // If all inferences were made from contravariant positions, infer a common subtype. Otherwise, if - // union types were requested or if all inferences were made from the return type position, infer a - // union type. Otherwise, infer a common supertype. - var unwidenedType = context.flags & 1 /* InferUnionTypes */ || inference.priority & 28 /* PriorityImpliesCombination */ ? - getUnionType(baseCandidates, 2 /* Subtype */) : + var unwidenedType = context.flags & 1 || inference.priority & 28 ? + getUnionType(baseCandidates, 2) : getCommonSupertype(baseCandidates); return getWidenedType(unwidenedType); } @@ -40923,34 +33960,23 @@ var ts; if (signature) { if (inference.candidates) { inferredType = getCovariantInference(inference, context, signature); - // If we have inferred 'never' but have contravariant candidates. To get a more specific type we - // infer from the contravariant candidates instead. - if (inferredType.flags & 32768 /* Never */ && inference.contraCandidates) { + if (inferredType.flags & 32768 && inference.contraCandidates) { inferredType = getContravariantInference(inference); } } else if (inference.contraCandidates) { - // We only have contravariant inferences, infer the best common subtype of those inferredType = getContravariantInference(inference); } - else if (context.flags & 2 /* NoDefault */) { - // We use silentNeverType as the wildcard that signals no inferences. + else if (context.flags & 2) { inferredType = silentNeverType; } else { - // Infer either the default or the empty object type when no inferences were - // made. It is important to remember that in this case, inference still - // succeeds, meaning there is no error for not having inference candidates. An - // inference error only occurs when there are *conflicting* candidates, i.e. - // candidates with no common supertype. var defaultType = getDefaultFromTypeParameter(inference.typeParameter); if (defaultType) { - // Instantiate the default type. Any forward reference to a type - // parameter should be instantiated to the empty object type. inferredType = instantiateType(defaultType, combineTypeMappers(createBackreferenceMapper(context.signature.typeParameters, index), context)); } else { - inferredType = getDefaultTypeArgumentType(!!(context.flags & 4 /* AnyDefault */)); + inferredType = getDefaultTypeArgumentType(!!(context.flags & 4)); } } } @@ -40978,43 +34004,32 @@ var ts; } return result; } - // EXPRESSION TYPE CHECKING function getResolvedSymbol(node) { var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && - resolveName(node, node.escapedText, 67216319 /* Value */ | 1048576 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, node, !ts.isWriteOnlyAccess(node), - /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol; + resolveName(node, node.escapedText, 67216319 | 1048576, ts.Diagnostics.Cannot_find_name_0, node, !ts.isWriteOnlyAccess(node), false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol; } return links.resolvedSymbol; } function isInTypeQuery(node) { - // TypeScript 1.0 spec (April 2014): 3.6.3 - // A type query consists of the keyword typeof followed by an expression. - // The expression is restricted to a single identifier or a sequence of identifiers separated by periods - return !!ts.findAncestor(node, function (n) { return n.kind === 165 /* TypeQuery */ ? true : n.kind === 71 /* Identifier */ || n.kind === 146 /* QualifiedName */ ? false : "quit"; }); + return !!ts.findAncestor(node, function (n) { return n.kind === 165 ? true : n.kind === 71 || n.kind === 146 ? false : "quit"; }); } - // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers - // separated by dots). The key consists of the id of the symbol referenced by the - // leftmost identifier followed by zero or more property names separated by dots. - // The result is undefined if the reference isn't a dotted name. We prefix nodes - // occurring in an apparent type position with '@' because the control flow type - // of such nodes may be based on the apparent type instead of the declared type. function getFlowCacheKey(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? (isConstraintPosition(node) ? "@" : "") + getSymbolId(symbol) : undefined; } - if (node.kind === 99 /* ThisKeyword */) { + if (node.kind === 99) { return "0"; } - if (node.kind === 185 /* PropertyAccessExpression */) { + if (node.kind === 185) { var key = getFlowCacheKey(node.expression); return key && key + "." + ts.idText(node.name); } - if (node.kind === 182 /* BindingElement */) { + if (node.kind === 182) { var container = node.parent.parent; - var key = container.kind === 182 /* BindingElement */ ? getFlowCacheKey(container) : (container.initializer && getFlowCacheKey(container.initializer)); + var key = container.kind === 182 ? getFlowCacheKey(container) : (container.initializer && getFlowCacheKey(container.initializer)); var text = getBindingElementNameText(node); var result = key && text && (key + "." + text); return result; @@ -41023,18 +34038,17 @@ var ts; } function getBindingElementNameText(element) { var parent = element.parent; - if (parent.kind === 180 /* ObjectBindingPattern */) { + if (parent.kind === 180) { var name = element.propertyName || element.name; switch (name.kind) { - case 71 /* Identifier */: + case 71: return ts.idText(name); - case 147 /* ComputedPropertyName */: + case 147: return ts.isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined; - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: + case 9: + case 8: return name.text; default: - // Per types, array and object binding patterns remain, however they should never be present if propertyName is not defined ts.Debug.fail("Unexpected name kind for binding element name"); } } @@ -41044,28 +34058,28 @@ var ts; } function isMatchingReference(source, target) { switch (source.kind) { - case 71 /* Identifier */: - return target.kind === 71 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) || - (target.kind === 232 /* VariableDeclaration */ || target.kind === 182 /* BindingElement */) && + case 71: + return target.kind === 71 && getResolvedSymbol(source) === getResolvedSymbol(target) || + (target.kind === 232 || target.kind === 182) && getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target); - case 99 /* ThisKeyword */: - return target.kind === 99 /* ThisKeyword */; - case 97 /* SuperKeyword */: - return target.kind === 97 /* SuperKeyword */; - case 185 /* PropertyAccessExpression */: - return target.kind === 185 /* PropertyAccessExpression */ && + case 99: + return target.kind === 99; + case 97: + return target.kind === 97; + case 185: + return target.kind === 185 && source.name.escapedText === target.name.escapedText && isMatchingReference(source.expression, target.expression); - case 182 /* BindingElement */: - if (target.kind !== 185 /* PropertyAccessExpression */) + case 182: + if (target.kind !== 185) return false; var t = target; if (t.name.escapedText !== getBindingElementNameText(source)) return false; - if (source.parent.parent.kind === 182 /* BindingElement */ && isMatchingReference(source.parent.parent, t.expression)) { + if (source.parent.parent.kind === 182 && isMatchingReference(source.parent.parent, t.expression)) { return true; } - if (source.parent.parent.kind === 232 /* VariableDeclaration */) { + if (source.parent.parent.kind === 232) { var maybeId = source.parent.parent.initializer; return !!maybeId && isMatchingReference(maybeId, t.expression); } @@ -41073,7 +34087,7 @@ var ts; return false; } function containsMatchingReference(source, target) { - while (source.kind === 185 /* PropertyAccessExpression */) { + while (source.kind === 185) { source = source.expression; if (isMatchingReference(source, target)) { return true; @@ -41081,31 +34095,27 @@ var ts; } return false; } - // Return true if target is a property access xxx.yyy, source is a property access xxx.zzz, the declared - // type of xxx is a union type, and yyy is a property that is possibly a discriminant. We consider a property - // a possible discriminant if its type differs in the constituents of containing union type, and if every - // choice is a unit type or a union of unit types. function containsMatchingReferenceDiscriminant(source, target) { - return target.kind === 185 /* PropertyAccessExpression */ && + return target.kind === 185 && containsMatchingReference(source, target.expression) && isDiscriminantProperty(getDeclaredTypeOfReference(target.expression), target.name.escapedText); } function getDeclaredTypeOfReference(expr) { - if (expr.kind === 71 /* Identifier */) { + if (expr.kind === 71) { return getTypeOfSymbol(getResolvedSymbol(expr)); } - if (expr.kind === 185 /* PropertyAccessExpression */) { + if (expr.kind === 185) { var type = getDeclaredTypeOfReference(expr.expression); return type && getTypeOfPropertyOfType(type, expr.name.escapedText); } return undefined; } function isDiscriminantProperty(type, name) { - if (type && type.flags & 262144 /* Union */) { + if (type && type.flags & 262144) { var prop = getUnionOrIntersectionProperty(type, name); - if (prop && ts.getCheckFlags(prop) & 2 /* SyntheticProperty */) { + if (prop && ts.getCheckFlags(prop) & 2) { if (prop.isDiscriminantProperty === undefined) { - prop.isDiscriminantProperty = !!(prop.checkFlags & 32 /* HasNonUniformType */) && isLiteralType(getTypeOfSymbol(prop)); + prop.isDiscriminantProperty = !!(prop.checkFlags & 32) && isLiteralType(getTypeOfSymbol(prop)); } return prop.isDiscriminantProperty; } @@ -41138,7 +34148,7 @@ var ts; } } } - if (callExpression.expression.kind === 185 /* PropertyAccessExpression */ && + if (callExpression.expression.kind === 185 && isOrContainsMatchingReference(reference, callExpression.expression.expression)) { return true; } @@ -41152,7 +34162,7 @@ var ts; return flow.id; } function typeMaybeAssignableTo(source, target) { - if (!(source.flags & 262144 /* Union */)) { + if (!(source.flags & 262144)) { return isTypeAssignableTo(source, target); } for (var _i = 0, _a = source.types; _i < _a.length; _i++) { @@ -41163,23 +34173,20 @@ var ts; } return false; } - // Remove those constituent types of declaredType to which no constituent type of assignedType is assignable. - // For example, when a variable of type number | string | boolean is assigned a value of type number | boolean, - // we remove type string. function getAssignmentReducedType(declaredType, assignedType) { if (declaredType !== assignedType) { - if (assignedType.flags & 32768 /* Never */) { + if (assignedType.flags & 32768) { return assignedType; } var reducedType = filterType(declaredType, function (t) { return typeMaybeAssignableTo(assignedType, t); }); - if (!(reducedType.flags & 32768 /* Never */)) { + if (!(reducedType.flags & 32768)) { return reducedType; } } return declaredType; } function getTypeFactsOfTypes(types) { - var result = 0 /* None */; + var result = 0; for (var _i = 0, types_12 = types; _i < types_12.length; _i++) { var t = types_12[_i]; result |= getTypeFacts(t); @@ -41187,64 +34194,62 @@ var ts; return result; } function isFunctionObjectType(type) { - // We do a quick check for a "bind" property before performing the more expensive subtype - // check. This gives us a quicker out in the common case where an object type is not a function. var resolved = resolveStructuredTypeMembers(type); return !!(resolved.callSignatures.length || resolved.constructSignatures.length || resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType)); } function getTypeFacts(type) { var flags = type.flags; - if (flags & 4 /* String */) { - return strictNullChecks ? 4079361 /* StringStrictFacts */ : 4194049 /* StringFacts */; + if (flags & 4) { + return strictNullChecks ? 4079361 : 4194049; } - if (flags & 64 /* StringLiteral */) { + if (flags & 64) { var isEmpty = type.value === ""; return strictNullChecks ? - isEmpty ? 3030785 /* EmptyStringStrictFacts */ : 1982209 /* NonEmptyStringStrictFacts */ : - isEmpty ? 3145473 /* EmptyStringFacts */ : 4194049 /* NonEmptyStringFacts */; + isEmpty ? 3030785 : 1982209 : + isEmpty ? 3145473 : 4194049; } - if (flags & (8 /* Number */ | 32 /* Enum */)) { - return strictNullChecks ? 4079234 /* NumberStrictFacts */ : 4193922 /* NumberFacts */; + if (flags & (8 | 32)) { + return strictNullChecks ? 4079234 : 4193922; } - if (flags & 128 /* NumberLiteral */) { + if (flags & 128) { var isZero = type.value === 0; return strictNullChecks ? - isZero ? 3030658 /* ZeroStrictFacts */ : 1982082 /* NonZeroStrictFacts */ : - isZero ? 3145346 /* ZeroFacts */ : 4193922 /* NonZeroFacts */; + isZero ? 3030658 : 1982082 : + isZero ? 3145346 : 4193922; } - if (flags & 16 /* Boolean */) { - return strictNullChecks ? 4078980 /* BooleanStrictFacts */ : 4193668 /* BooleanFacts */; + if (flags & 16) { + return strictNullChecks ? 4078980 : 4193668; } - if (flags & 272 /* BooleanLike */) { + if (flags & 272) { return strictNullChecks ? - type === falseType ? 3030404 /* FalseStrictFacts */ : 1981828 /* TrueStrictFacts */ : - type === falseType ? 3145092 /* FalseFacts */ : 4193668 /* TrueFacts */; + type === falseType ? 3030404 : 1981828 : + type === falseType ? 3145092 : 4193668; } - if (flags & 131072 /* Object */) { + if (flags & 131072) { return isFunctionObjectType(type) ? - strictNullChecks ? 1970144 /* FunctionStrictFacts */ : 4181984 /* FunctionFacts */ : - strictNullChecks ? 1972176 /* ObjectStrictFacts */ : 4184016 /* ObjectFacts */; + strictNullChecks ? 1970144 : 4181984 : + strictNullChecks ? 1972176 : 4184016; } - if (flags & (4096 /* Void */ | 8192 /* Undefined */)) { - return 2457472 /* UndefinedFacts */; + if (flags & (4096 | 8192)) { + return 2457472; } - if (flags & 16384 /* Null */) { - return 2340752 /* NullFacts */; + if (flags & 16384) { + return 2340752; } - if (flags & 3072 /* ESSymbolLike */) { - return strictNullChecks ? 1981320 /* SymbolStrictFacts */ : 4193160 /* SymbolFacts */; + if (flags & 3072) { + return strictNullChecks ? 1981320 : 4193160; } - if (flags & 16777216 /* NonPrimitive */) { - return strictNullChecks ? 1972176 /* ObjectStrictFacts */ : 4184016 /* ObjectFacts */; + if (flags & 16777216) { + return strictNullChecks ? 1972176 : 4184016; } - if (flags & 15794176 /* Instantiable */) { + if (flags & 15794176) { return getTypeFacts(getBaseConstraintOfType(type) || emptyObjectType); } - if (flags & 786432 /* UnionOrIntersection */) { + if (flags & 786432) { return getTypeFactsOfTypes(type.types); } - return 4194303 /* All */; + return 4194303; } function getTypeWithFacts(type, include) { return filterType(type, function (t) { return (getTypeFacts(t) & include) !== 0; }); @@ -41252,35 +34257,35 @@ var ts; function getTypeWithDefault(type, defaultExpression) { if (defaultExpression) { var defaultType = getTypeOfExpression(defaultExpression); - return getUnionType([getTypeWithFacts(type, 131072 /* NEUndefined */), defaultType]); + return getUnionType([getTypeWithFacts(type, 131072), defaultType]); } return type; } function getTypeOfDestructuredProperty(type, name) { var text = ts.getTextOfPropertyName(name); return getConstraintForLocation(getTypeOfPropertyOfType(type, text), name) || - isNumericLiteralName(text) && getIndexTypeOfType(type, 1 /* Number */) || - getIndexTypeOfType(type, 0 /* String */) || + isNumericLiteralName(text) && getIndexTypeOfType(type, 1) || + getIndexTypeOfType(type, 0) || errorType; } function getTypeOfDestructuredArrayElement(type, index) { return isTupleLikeType(type) && getTypeOfPropertyOfType(type, "" + index) || - checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || + checkIteratedTypeOrElementType(type, undefined, false, false) || errorType; } function getTypeOfDestructuredSpreadExpression(type) { - return createArrayType(checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType); + return createArrayType(checkIteratedTypeOrElementType(type, undefined, false, false) || errorType); } function getAssignedTypeOfBinaryExpression(node) { - var isDestructuringDefaultAssignment = node.parent.kind === 183 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) || - node.parent.kind === 270 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent); + var isDestructuringDefaultAssignment = node.parent.kind === 183 && isDestructuringAssignmentTarget(node.parent) || + node.parent.kind === 270 && isDestructuringAssignmentTarget(node.parent.parent); return isDestructuringDefaultAssignment ? getTypeWithDefault(getAssignedType(node), node.right) : getTypeOfExpression(node.right); } function isDestructuringAssignmentTarget(parent) { - return parent.parent.kind === 200 /* BinaryExpression */ && parent.parent.left === parent || - parent.parent.kind === 222 /* ForOfStatement */ && parent.parent.initializer === parent; + return parent.parent.kind === 200 && parent.parent.left === parent || + parent.parent.kind === 222 && parent.parent.initializer === parent; } function getAssignedTypeOfArrayLiteralElement(node, element) { return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element)); @@ -41297,21 +34302,21 @@ var ts; function getAssignedType(node) { var parent = node.parent; switch (parent.kind) { - case 221 /* ForInStatement */: + case 221: return stringType; - case 222 /* ForOfStatement */: + case 222: return checkRightHandSideOfForOf(parent.expression, parent.awaitModifier) || errorType; - case 200 /* BinaryExpression */: + case 200: return getAssignedTypeOfBinaryExpression(parent); - case 194 /* DeleteExpression */: + case 194: return undefinedType; - case 183 /* ArrayLiteralExpression */: + case 183: return getAssignedTypeOfArrayLiteralElement(parent, node); - case 204 /* SpreadElement */: + case 204: return getAssignedTypeOfSpreadExpression(parent); - case 270 /* PropertyAssignment */: + case 270: return getAssignedTypeOfPropertyAssignment(parent); - case 271 /* ShorthandPropertyAssignment */: + case 271: return getAssignedTypeOfShorthandPropertyAssignment(parent); } return errorType; @@ -41319,7 +34324,7 @@ var ts; function getInitialTypeOfBindingElement(node) { var pattern = node.parent; var parentType = getInitialType(pattern.parent); - var type = pattern.kind === 180 /* ObjectBindingPattern */ ? + var type = pattern.kind === 180 ? getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : !node.dotDotDotToken ? getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) : @@ -41327,9 +34332,6 @@ var ts; return getTypeWithDefault(type, node.initializer); } function getTypeOfInitializer(node) { - // Return the cached type if one is available. If the type of the variable was inferred - // 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 || getTypeOfExpression(node); } @@ -41337,39 +34339,39 @@ var ts; if (node.initializer) { return getTypeOfInitializer(node.initializer); } - if (node.parent.parent.kind === 221 /* ForInStatement */) { + if (node.parent.parent.kind === 221) { return stringType; } - if (node.parent.parent.kind === 222 /* ForOfStatement */) { + if (node.parent.parent.kind === 222) { return checkRightHandSideOfForOf(node.parent.parent.expression, node.parent.parent.awaitModifier) || errorType; } return errorType; } function getInitialType(node) { - return node.kind === 232 /* VariableDeclaration */ ? + return node.kind === 232 ? getInitialTypeOfVariableDeclaration(node) : getInitialTypeOfBindingElement(node); } function getInitialOrAssignedType(node) { - return node.kind === 232 /* VariableDeclaration */ || node.kind === 182 /* BindingElement */ ? + return node.kind === 232 || node.kind === 182 ? getInitialType(node) : getAssignedType(node); } function isEmptyArrayAssignment(node) { - return node.kind === 232 /* VariableDeclaration */ && node.initializer && + return node.kind === 232 && node.initializer && isEmptyArrayLiteral(node.initializer) || - node.kind !== 182 /* BindingElement */ && node.parent.kind === 200 /* BinaryExpression */ && + node.kind !== 182 && node.parent.kind === 200 && isEmptyArrayLiteral(node.parent.right); } function getReferenceCandidate(node) { switch (node.kind) { - case 191 /* ParenthesizedExpression */: + case 191: return getReferenceCandidate(node.expression); - case 200 /* BinaryExpression */: + case 200: switch (node.operatorToken.kind) { - case 58 /* EqualsToken */: + case 58: return getReferenceCandidate(node.left); - case 26 /* CommaToken */: + case 26: return getReferenceCandidate(node.right); } } @@ -41377,13 +34379,13 @@ var ts; } function getReferenceRoot(node) { var parent = node.parent; - return parent.kind === 191 /* ParenthesizedExpression */ || - parent.kind === 200 /* BinaryExpression */ && parent.operatorToken.kind === 58 /* EqualsToken */ && parent.left === node || - parent.kind === 200 /* BinaryExpression */ && parent.operatorToken.kind === 26 /* CommaToken */ && parent.right === node ? + return parent.kind === 191 || + parent.kind === 200 && parent.operatorToken.kind === 58 && parent.left === node || + parent.kind === 200 && parent.operatorToken.kind === 26 && parent.right === node ? getReferenceRoot(parent) : node; } function getTypeOfSwitchClause(clause) { - if (clause.kind === 266 /* CaseClause */) { + if (clause.kind === 266) { return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression)); } return neverType; @@ -41400,13 +34402,13 @@ var ts; return links.switchTypes; } function eachTypeContainedIn(source, types) { - return source.flags & 262144 /* Union */ ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + return source.flags & 262144 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); } function isTypeSubsetOf(source, target) { - return source === target || target.flags & 262144 /* Union */ && isTypeSubsetOfUnion(source, target); + return source === target || target.flags & 262144 && isTypeSubsetOfUnion(source, target); } function isTypeSubsetOfUnion(source, target) { - if (source.flags & 262144 /* Union */) { + if (source.flags & 262144) { for (var _i = 0, _a = source.types; _i < _a.length; _i++) { var t = _a[_i]; if (!containsType(target.types, t)) { @@ -41415,27 +34417,27 @@ var ts; } return true; } - if (source.flags & 512 /* EnumLiteral */ && getBaseTypeOfEnumLiteralType(source) === target) { + if (source.flags & 512 && getBaseTypeOfEnumLiteralType(source) === target) { return true; } return containsType(target.types, source); } function forEachType(type, f) { - return type.flags & 262144 /* Union */ ? ts.forEach(type.types, f) : f(type); + return type.flags & 262144 ? ts.forEach(type.types, f) : f(type); } function filterType(type, f) { - if (type.flags & 262144 /* Union */) { + if (type.flags & 262144) { var types = type.types; var filtered = ts.filter(types, f); - return filtered === types ? type : getUnionTypeFromSortedList(filtered, type.flags & 67108864 /* UnionOfUnitTypes */); + return filtered === types ? type : getUnionTypeFromSortedList(filtered, type.flags & 67108864); } return f(type) ? type : neverType; } function mapType(type, mapper, noReductions) { - if (type.flags & 32768 /* Never */) { + if (type.flags & 32768) { return type; } - if (!(type.flags & 262144 /* Union */)) { + if (!(type.flags & 262144)) { return mapper(type); } var types = type.types; @@ -41456,20 +34458,17 @@ var ts; } } } - return mappedTypes ? getUnionType(mappedTypes, noReductions ? 0 /* None */ : 1 /* Literal */) : mappedType; + return mappedTypes ? getUnionType(mappedTypes, noReductions ? 0 : 1) : mappedType; } function extractTypesOfKind(type, kind) { return filterType(type, function (t) { return (t.flags & kind) !== 0; }); } - // Return a new type in which occurrences of the string and number primitive types in - // typeWithPrimitives have been replaced with occurrences of string literals and numeric - // literals in typeWithLiterals, respectively. function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) { - if (isTypeSubsetOf(stringType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 64 /* StringLiteral */) || - isTypeSubsetOf(numberType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 128 /* NumberLiteral */)) { + if (isTypeSubsetOf(stringType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 64) || + isTypeSubsetOf(numberType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 128)) { return mapType(typeWithPrimitives, function (t) { - return t.flags & 4 /* String */ ? extractTypesOfKind(typeWithLiterals, 4 /* String */ | 64 /* StringLiteral */) : - t.flags & 8 /* Number */ ? extractTypesOfKind(typeWithLiterals, 8 /* Number */ | 128 /* NumberLiteral */) : + return t.flags & 4 ? extractTypesOfKind(typeWithLiterals, 4 | 64) : + t.flags & 8 ? extractTypesOfKind(typeWithLiterals, 8 | 128) : t; }); } @@ -41484,48 +34483,40 @@ var ts; function createFlowType(type, incomplete) { return incomplete ? { flags: 0, type: type } : type; } - // An evolving array type tracks the element types that have so far been seen in an - // 'x.push(value)' or 'x[n] = value' operation along the control flow graph. Evolving - // array types are ultimately converted into manifest array types (using getFinalArrayType) - // and never escape the getFlowTypeOfReference function. function createEvolvingArrayType(elementType) { - var result = createObjectType(256 /* EvolvingArray */); + var result = createObjectType(256); result.elementType = elementType; return result; } function getEvolvingArrayType(elementType) { return evolvingArrayTypes[elementType.id] || (evolvingArrayTypes[elementType.id] = createEvolvingArrayType(elementType)); } - // When adding evolving array element types we do not perform subtype reduction. Instead, - // we defer subtype reduction until the evolving array type is finalized into a manifest - // array type. function addEvolvingArrayElementType(evolvingArrayType, node) { var elementType = getBaseTypeOfLiteralType(getContextFreeTypeOfExpression(node)); return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType])); } function createFinalArrayType(elementType) { - return elementType.flags & 32768 /* Never */ ? + return elementType.flags & 32768 ? autoArrayType : - createArrayType(elementType.flags & 262144 /* Union */ ? - getUnionType(elementType.types, 2 /* Subtype */) : + createArrayType(elementType.flags & 262144 ? + getUnionType(elementType.types, 2) : elementType); } - // We perform subtype reduction upon obtaining the final array type from an evolving array type. function getFinalArrayType(evolvingArrayType) { return evolvingArrayType.finalArrayType || (evolvingArrayType.finalArrayType = createFinalArrayType(evolvingArrayType.elementType)); } function finalizeEvolvingArrayType(type) { - return ts.getObjectFlags(type) & 256 /* EvolvingArray */ ? getFinalArrayType(type) : type; + return ts.getObjectFlags(type) & 256 ? getFinalArrayType(type) : type; } function getElementTypeOfEvolvingArrayType(type) { - return ts.getObjectFlags(type) & 256 /* EvolvingArray */ ? type.elementType : neverType; + return ts.getObjectFlags(type) & 256 ? type.elementType : neverType; } function isEvolvingArrayTypeList(types) { var hasEvolvingArrayType = false; for (var _i = 0, types_14 = types; _i < types_14.length; _i++) { var t = types_14[_i]; - if (!(t.flags & 32768 /* Never */)) { - if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) { + if (!(t.flags & 32768)) { + if (!(ts.getObjectFlags(t) & 256)) { return false; } hasEvolvingArrayType = true; @@ -41533,28 +34524,23 @@ var ts; } return hasEvolvingArrayType; } - // At flow control branch or loop junctions, if the type along every antecedent code path - // is an evolving array type, we construct a combined evolving array type. Otherwise we - // finalize all evolving array types. function getUnionOrEvolvingArrayType(types, subtypeReduction) { return isEvolvingArrayTypeList(types) ? getEvolvingArrayType(getUnionType(ts.map(types, getElementTypeOfEvolvingArrayType))) : getUnionType(ts.sameMap(types, finalizeEvolvingArrayType), subtypeReduction); } - // Return true if the given node is 'x' in an 'x.length', x.push(value)', 'x.unshift(value)' or - // 'x[n] = value' operation, where 'n' is an expression of type any, undefined, or a number-like type. function isEvolvingArrayOperationTarget(node) { var root = getReferenceRoot(node); var parent = root.parent; - var isLengthPushOrUnshift = parent.kind === 185 /* PropertyAccessExpression */ && (parent.name.escapedText === "length" || - parent.parent.kind === 187 /* CallExpression */ && ts.isPushOrUnshiftIdentifier(parent.name)); - var isElementAssignment = parent.kind === 186 /* ElementAccessExpression */ && + var isLengthPushOrUnshift = parent.kind === 185 && (parent.name.escapedText === "length" || + parent.parent.kind === 187 && ts.isPushOrUnshiftIdentifier(parent.name)); + var isElementAssignment = parent.kind === 186 && parent.expression === root && - parent.parent.kind === 200 /* BinaryExpression */ && - parent.parent.operatorToken.kind === 58 /* EqualsToken */ && + parent.parent.kind === 200 && + parent.parent.operatorToken.kind === 58 && parent.parent.left === parent && !ts.isAssignmentTarget(parent.parent) && - isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 168 /* NumberLike */); + isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 168); return isLengthPushOrUnshift || isElementAssignment; } function maybeTypePredicateCall(node) { @@ -41565,11 +34551,11 @@ var ts; return links.maybeTypePredicate; } function getMaybeTypePredicate(node) { - if (node.expression.kind !== 97 /* SuperKeyword */) { + if (node.expression.kind !== 97) { var funcType = checkNonNullExpression(node.expression); if (funcType !== silentNeverType) { var apparentType = getApparentType(funcType); - return apparentType !== errorType && ts.some(getSignaturesOfType(apparentType, 0 /* Call */), signatureHasTypePredicate); + return apparentType !== errorType && ts.some(getSignaturesOfType(apparentType, 0), signatureHasTypePredicate); } } return false; @@ -41587,25 +34573,19 @@ var ts; if (flowAnalysisDisabled) { return errorType; } - if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 33492479 /* Narrowable */)) { + if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 33492479)) { return declaredType; } var sharedFlowStart = sharedFlowCount; var evolvedType = getTypeFromFlowType(getTypeAtFlowNode(reference.flowNode)); sharedFlowCount = sharedFlowStart; - // When the reference is 'x' in an 'x.length', 'x.push(value)', 'x.unshift(value)' or x[n] = value' operation, - // we give type 'any[]' to 'x' instead of using the type determined by control flow analysis such that operations - // on empty arrays are possible without implicit any errors and new element types can be inferred without - // type mismatch errors. - var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? anyArrayType : finalizeEvolvingArrayType(evolvedType); - if (reference.parent && reference.parent.kind === 209 /* NonNullExpression */ && getTypeWithFacts(resultType, 524288 /* NEUndefinedOrNull */).flags & 32768 /* Never */) { + var resultType = ts.getObjectFlags(evolvedType) & 256 && isEvolvingArrayOperationTarget(reference) ? anyArrayType : finalizeEvolvingArrayType(evolvedType); + if (reference.parent && reference.parent.kind === 209 && getTypeWithFacts(resultType, 524288).flags & 32768) { return declaredType; } return resultType; function getTypeAtFlowNode(flow) { if (flowDepth === 2500) { - // We have made 2500 recursive invocations. To avoid overflowing the call stack we report an error - // and disable further control flow analysis in the containing function or module body. flowAnalysisDisabled = true; reportFlowControlError(reference); return errorType; @@ -41613,10 +34593,7 @@ var ts; flowDepth++; while (true) { var flags = flow.flags; - if (flags & 1024 /* Shared */) { - // We cache results of flow type resolution for shared nodes that were previously visited in - // the same getFlowTypeOfReference invocation. A node is considered shared when it is the - // antecedent of more than one node. + if (flags & 1024) { for (var i = sharedFlowStart; i < sharedFlowCount; i++) { if (sharedFlowNodes[i] === flow) { flowDepth--; @@ -41625,64 +34602,56 @@ var ts; } } var type = void 0; - if (flags & 4096 /* AfterFinally */) { - // block flow edge: finally -> pre-try (for larger explanation check comment in binder.ts - bindTryStatement + if (flags & 4096) { flow.locked = true; type = getTypeAtFlowNode(flow.antecedent); flow.locked = false; } - else if (flags & 2048 /* PreFinally */) { - // locked pre-finally flows are filtered out in getTypeAtFlowBranchLabel - // so here just redirect to antecedent + else if (flags & 2048) { flow = flow.antecedent; continue; } - else if (flags & 16 /* Assignment */) { + else if (flags & 16) { type = getTypeAtFlowAssignment(flow); if (!type) { flow = flow.antecedent; continue; } } - else if (flags & 96 /* Condition */) { + else if (flags & 96) { type = getTypeAtFlowCondition(flow); } - else if (flags & 128 /* SwitchClause */) { + else if (flags & 128) { type = getTypeAtSwitchClause(flow); } - else if (flags & 12 /* Label */) { + else if (flags & 12) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; continue; } - type = flags & 4 /* BranchLabel */ ? + type = flags & 4 ? getTypeAtFlowBranchLabel(flow) : getTypeAtFlowLoopLabel(flow); } - else if (flags & 256 /* ArrayMutation */) { + else if (flags & 256) { type = getTypeAtFlowArrayMutation(flow); if (!type) { flow = flow.antecedent; continue; } } - else if (flags & 2 /* Start */) { - // Check if we should continue with the control flow of the containing function. + else if (flags & 2) { var container = flow.container; - if (container && container !== flowContainer && reference.kind !== 185 /* PropertyAccessExpression */ && reference.kind !== 99 /* ThisKeyword */) { + if (container && container !== flowContainer && reference.kind !== 185 && reference.kind !== 99) { flow = container.flowNode; continue; } - // At the top of the flow we have the initial type. type = initialType; } else { - // Unreachable code errors are reported in the binding phase. Here we - // simply return the non-auto declared type to reduce follow-on errors. type = convertAutoToAny(declaredType); } - if (flags & 1024 /* Shared */) { - // Record visited node and the associated type in the cache. + if (flags & 1024) { sharedFlowNodes[sharedFlowCount] = flow; sharedFlowTypes[sharedFlowCount] = type; sharedFlowCount++; @@ -41693,10 +34662,8 @@ var ts; } function getTypeAtFlowAssignment(flow) { var node = flow.node; - // Assignments only narrow the computed type if the declared type is a union type. Thus, we - // only need to evaluate the assigned type if the declared type is a union type. if (isMatchingReference(reference, node)) { - if (ts.getAssignmentTargetKind(node) === 2 /* Compound */) { + if (ts.getAssignmentTargetKind(node) === 2) { var flowType = getTypeAtFlowNode(flow.antecedent); return createFlowType(getBaseTypeOfLiteralType(getTypeFromFlowType(flowType)), isIncomplete(flowType)); } @@ -41707,33 +34674,28 @@ var ts; var assignedType = getBaseTypeOfLiteralType(getInitialOrAssignedType(node)); return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType; } - if (declaredType.flags & 262144 /* Union */) { + if (declaredType.flags & 262144) { return getAssignmentReducedType(declaredType, getInitialOrAssignedType(node)); } return declaredType; } - // We didn't have a direct match. However, if the reference is a dotted name, this - // may be an assignment to a left hand part of the reference. For example, for a - // reference 'x.y.z', we may be at an assignment to 'x.y' or 'x'. In that case, - // return the declared type. if (containsMatchingReference(reference, node)) { return declaredType; } - // Assignment doesn't affect reference return undefined; } function getTypeAtFlowArrayMutation(flow) { if (declaredType === autoType || declaredType === autoArrayType) { var node = flow.node; - var expr = node.kind === 187 /* CallExpression */ ? + var expr = node.kind === 187 ? node.expression.expression : node.left.expression; if (isMatchingReference(reference, getReferenceCandidate(expr))) { var flowType = getTypeAtFlowNode(flow.antecedent); var type = getTypeFromFlowType(flowType); - if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) { + if (ts.getObjectFlags(type) & 256) { var evolvedType_1 = type; - if (node.kind === 187 /* CallExpression */) { + if (node.kind === 187) { for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) { var arg = _a[_i]; evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg); @@ -41741,7 +34703,7 @@ var ts; } else { var indexType = getTypeOfExpression(node.left.argumentExpression); - if (isTypeAssignableToKind(indexType, 168 /* NumberLike */)) { + if (isTypeAssignableToKind(indexType, 168)) { evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, node.right); } } @@ -41755,24 +34717,17 @@ var ts; function getTypeAtFlowCondition(flow) { var flowType = getTypeAtFlowNode(flow.antecedent); var type = getTypeFromFlowType(flowType); - if (type.flags & 32768 /* Never */) { + if (type.flags & 32768) { return flowType; } - // If we have an antecedent type (meaning we're reachable in some way), we first - // attempt to narrow the antecedent type. If that produces the never type, and if - // the antecedent type is incomplete (i.e. a transient type in a loop), then we - // take the type guard as an indication that control *could* reach here once we - // have the complete type. We proceed by switching to the silent never type which - // doesn't report errors when operators are applied to it. Note that this is the - // *only* place a silent never type is ever generated. - var assumeTrue = (flow.flags & 32 /* TrueCondition */) !== 0; + var assumeTrue = (flow.flags & 32) !== 0; var nonEvolvingType = finalizeEvolvingArrayType(type); var narrowedType = narrowType(nonEvolvingType, flow.expression, assumeTrue); if (narrowedType === nonEvolvingType) { return flowType; } var incomplete = isIncomplete(flowType); - var resultType = incomplete && narrowedType.flags & 32768 /* Never */ ? silentNeverType : narrowedType; + var resultType = incomplete && narrowedType.flags & 32768 ? silentNeverType : narrowedType; return createFlowType(resultType, incomplete); } function getTypeAtSwitchClause(flow) { @@ -41793,25 +34748,15 @@ var ts; var seenIncomplete = false; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { var antecedent = _a[_i]; - if (antecedent.flags & 2048 /* PreFinally */ && antecedent.lock.locked) { - // if flow correspond to branch from pre-try to finally and this branch is locked - this means that - // we initially have started following the flow outside the finally block. - // in this case we should ignore this branch. + if (antecedent.flags & 2048 && antecedent.lock.locked) { continue; } var flowType = getTypeAtFlowNode(antecedent); var type = getTypeFromFlowType(flowType); - // If the type at a particular antecedent path is the declared type and the - // reference is known to always be assigned (i.e. when declared and initial types - // are the same), there is no reason to process more antecedents since the only - // possible outcome is subtypes that will be removed in the final union type anyway. if (type === declaredType && declaredType === initialType) { return type; } ts.pushIfUnique(antecedentTypes, type); - // If an antecedent type is not a subset of the declared type, we need to perform - // subtype reduction. This happens when a "foreign" type is injected into the control - // flow using the instanceof operator or a user defined type predicate. if (!isTypeSubsetOf(type, declaredType)) { subtypeReduction = true; } @@ -41819,16 +34764,13 @@ var ts; seenIncomplete = true; } } - return createFlowType(getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 /* Subtype */ : 1 /* Literal */), seenIncomplete); + return createFlowType(getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 : 1), seenIncomplete); } function getTypeAtFlowLoopLabel(flow) { - // If we have previously computed the control flow type for the reference at - // this flow loop junction, return the cached type. var id = getFlowNodeId(flow); var cache = flowLoopCaches[id] || (flowLoopCaches[id] = ts.createMap()); if (!key) { key = getFlowCacheKey(reference); - // No cache key is generated when binding patterns are in unnarrowable situations if (!key) { return declaredType; } @@ -41837,21 +34779,11 @@ var ts; if (cached) { return cached; } - // If this flow loop junction and reference are already being processed, return - // the union of the types computed for each branch so far, marked as incomplete. - // It is possible to see an empty array in cases where loops are nested and the - // back edge of the outer loop reaches an inner loop that is already being analyzed. - // In such cases we restart the analysis of the inner loop, which will then see - // a non-empty in-process array for the outer loop and eventually terminate because - // the first antecedent of a loop junction is always the non-looping control flow - // path that leads to the top. for (var i = flowLoopStart; i < flowLoopCount; i++) { if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key && flowLoopTypes[i].length) { - return createFlowType(getUnionOrEvolvingArrayType(flowLoopTypes[i], 1 /* Literal */), /*incomplete*/ true); + return createFlowType(getUnionOrEvolvingArrayType(flowLoopTypes[i], 1), true); } } - // Add the flow loop junction and reference to the in-process stack and analyze - // each antecedent code path. var antecedentTypes = []; var subtypeReduction = false; var firstAntecedentType; @@ -41867,39 +34799,28 @@ var ts; firstAntecedentType = flowType; } var type = getTypeFromFlowType(flowType); - // If we see a value appear in the cache it is a sign that control flow analysis - // was restarted and completed by checkExpressionCached. We can simply pick up - // the resulting type and bail out. var cached_1 = cache.get(key); if (cached_1) { return cached_1; } ts.pushIfUnique(antecedentTypes, type); - // If an antecedent type is not a subset of the declared type, we need to perform - // subtype reduction. This happens when a "foreign" type is injected into the control - // flow using the instanceof operator or a user defined type predicate. if (!isTypeSubsetOf(type, declaredType)) { subtypeReduction = true; } - // If the type at a particular antecedent path is the declared type there is no - // reason to process more antecedents since the only possible outcome is subtypes - // that will be removed in the final union type anyway. if (type === declaredType) { break; } } - // The result is incomplete if the first antecedent (the non-looping control flow path) - // is incomplete. - var result = getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 /* Subtype */ : 1 /* Literal */); + var result = getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 : 1); if (isIncomplete(firstAntecedentType)) { - return createFlowType(result, /*incomplete*/ true); + return createFlowType(result, true); } cache.set(key, result); return result; } function isMatchingReferenceDiscriminant(expr, computedType) { - return expr.kind === 185 /* PropertyAccessExpression */ && - computedType.flags & 262144 /* Union */ && + return expr.kind === 185 && + computedType.flags & 262144 && isMatchingReference(reference, expr.expression) && isDiscriminantProperty(computedType, expr.name.escapedText); } @@ -41911,10 +34832,10 @@ var ts; } function narrowTypeByTruthiness(type, expr, assumeTrue) { if (isMatchingReference(reference, expr)) { - return getTypeWithFacts(type, assumeTrue ? 1048576 /* Truthy */ : 2097152 /* Falsy */); + return getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152); } if (isMatchingReferenceDiscriminant(expr, declaredType)) { - return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 1048576 /* Truthy */ : 2097152 /* Falsy */); }); + return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 1048576 : 2097152); }); } if (containsMatchingReferenceDiscriminant(reference, expr)) { return declaredType; @@ -41922,17 +34843,17 @@ var ts; return type; } function isTypePresencePossible(type, propName, assumeTrue) { - if (getIndexInfoOfType(type, 0 /* String */)) { + if (getIndexInfoOfType(type, 0)) { return true; } var prop = getPropertyOfType(type, propName); if (prop) { - return prop.flags & 16777216 /* Optional */ ? true : assumeTrue; + return prop.flags & 16777216 ? true : assumeTrue; } return !assumeTrue; } function narrowByInKeyword(type, literal, assumeTrue) { - if ((type.flags & (262144 /* Union */ | 131072 /* Object */)) || (type.flags & 65536 /* TypeParameter */ && type.isThisType)) { + if ((type.flags & (262144 | 131072)) || (type.flags & 65536 && type.isThisType)) { var propName_1 = ts.escapeLeadingUnderscores(literal.text); return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); }); } @@ -41940,19 +34861,19 @@ var ts; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { - case 58 /* EqualsToken */: + case 58: return narrowTypeByTruthiness(type, expr.left, assumeTrue); - case 32 /* EqualsEqualsToken */: - case 33 /* ExclamationEqualsToken */: - case 34 /* EqualsEqualsEqualsToken */: - case 35 /* ExclamationEqualsEqualsToken */: + case 32: + case 33: + case 34: + case 35: var operator_1 = expr.operatorToken.kind; var left_1 = getReferenceCandidate(expr.left); var right_1 = getReferenceCandidate(expr.right); - if (left_1.kind === 195 /* TypeOfExpression */ && ts.isStringLiteralLike(right_1)) { + if (left_1.kind === 195 && ts.isStringLiteralLike(right_1)) { return narrowTypeByTypeof(type, left_1, operator_1, right_1, assumeTrue); } - if (right_1.kind === 195 /* TypeOfExpression */ && ts.isStringLiteralLike(left_1)) { + if (right_1.kind === 195 && ts.isStringLiteralLike(left_1)) { return narrowTypeByTypeof(type, right_1, operator_1, left_1, assumeTrue); } if (isMatchingReference(reference, left_1)) { @@ -41971,45 +34892,45 @@ var ts; return declaredType; } break; - case 93 /* InstanceOfKeyword */: + case 93: return narrowTypeByInstanceof(type, expr, assumeTrue); - case 92 /* InKeyword */: + case 92: var target = getReferenceCandidate(expr.right); if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) { return narrowByInKeyword(type, expr.left, assumeTrue); } break; - case 26 /* CommaToken */: + case 26: return narrowType(type, expr.right, assumeTrue); } return type; } function narrowTypeByEquality(type, operator, value, assumeTrue) { - if (type.flags & 1 /* Any */) { + if (type.flags & 1) { return type; } - if (operator === 33 /* ExclamationEqualsToken */ || operator === 35 /* ExclamationEqualsEqualsToken */) { + if (operator === 33 || operator === 35) { assumeTrue = !assumeTrue; } var valueType = getTypeOfExpression(value); - if (valueType.flags & 24576 /* Nullable */) { + if (valueType.flags & 24576) { if (!strictNullChecks) { return type; } - var doubleEquals = operator === 32 /* EqualsEqualsToken */ || operator === 33 /* ExclamationEqualsToken */; + var doubleEquals = operator === 32 || operator === 33; var facts = doubleEquals ? - assumeTrue ? 65536 /* EQUndefinedOrNull */ : 524288 /* NEUndefinedOrNull */ : - valueType.flags & 16384 /* Null */ ? - assumeTrue ? 32768 /* EQNull */ : 262144 /* NENull */ : - assumeTrue ? 16384 /* EQUndefined */ : 131072 /* NEUndefined */; + assumeTrue ? 65536 : 524288 : + valueType.flags & 16384 ? + assumeTrue ? 32768 : 262144 : + assumeTrue ? 16384 : 131072; return getTypeWithFacts(type, facts); } - if (type.flags & 16909315 /* NotUnionOrUnit */) { + if (type.flags & 16909315) { return type; } if (assumeTrue) { var narrowedType = filterType(type, function (t) { return areTypesComparable(t, valueType); }); - return narrowedType.flags & 32768 /* Never */ ? type : replacePrimitivesWithLiterals(narrowedType, valueType); + return narrowedType.flags & 32768 ? type : replacePrimitivesWithLiterals(narrowedType, valueType); } if (isUnitType(valueType)) { var regularType_1 = getRegularTypeOfLiteralType(valueType); @@ -42018,32 +34939,26 @@ var ts; return type; } function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { - // We have '==', '!=', '====', or !==' operator with 'typeof xxx' and string literal operands var target = getReferenceCandidate(typeOfExpr.expression); if (!isMatchingReference(reference, target)) { - // For a reference of the form 'x.y', a 'typeof x === ...' type guard resets the - // narrowed type of 'y' to its declared type. if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (operator === 33 /* ExclamationEqualsToken */ || operator === 35 /* ExclamationEqualsEqualsToken */) { + if (operator === 33 || operator === 35) { assumeTrue = !assumeTrue; } - if (type.flags & 1 /* Any */ && literal.text === "function") { + if (type.flags & 1 && literal.text === "function") { return type; } - if (assumeTrue && !(type.flags & 262144 /* Union */)) { - // We narrow a non-union type to an exact primitive type if the non-union type - // is a supertype of that primitive type. For example, type 'any' can be narrowed - // to one of the primitive types. + if (assumeTrue && !(type.flags & 262144)) { var targetType = literal.text === "function" ? globalFunctionType : typeofTypesByName.get(literal.text); if (targetType) { if (isTypeSubtypeOf(targetType, type)) { return targetType; } - if (type.flags & 15794176 /* Instantiable */) { + if (type.flags & 15794176) { var constraint = getBaseConstraintOfType(type) || anyType; if (isTypeSubtypeOf(targetType, constraint)) { return getIntersectionType([type, targetType]); @@ -42052,12 +34967,11 @@ var ts; } } var facts = assumeTrue ? - typeofEQFacts.get(literal.text) || 64 /* TypeofEQHostObject */ : - typeofNEFacts.get(literal.text) || 8192 /* TypeofNEHostObject */; + typeofEQFacts.get(literal.text) || 64 : + typeofNEFacts.get(literal.text) || 8192; return getTypeWithFacts(type, facts); } function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { - // We only narrow if all case expressions specify values with unit types var switchTypes = getSwitchClauseTypes(switchStatement); if (!switchTypes.length) { return type; @@ -42065,25 +34979,22 @@ var ts; var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, neverType); var discriminantType = getUnionType(clauseTypes); - var caseType = discriminantType.flags & 32768 /* Never */ ? neverType : + var caseType = discriminantType.flags & 32768 ? neverType : replacePrimitivesWithLiterals(filterType(type, function (t) { return areTypesComparable(discriminantType, t); }), discriminantType); if (!hasDefaultClause) { return caseType; } var defaultType = filterType(type, function (t) { return !(isUnitType(t) && ts.contains(switchTypes, getRegularTypeOfLiteralType(t))); }); - return caseType.flags & 32768 /* Never */ ? defaultType : getUnionType([caseType, defaultType]); + return caseType.flags & 32768 ? defaultType : getUnionType([caseType, defaultType]); } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceCandidate(expr.left); if (!isMatchingReference(reference, left)) { - // For a reference of the form 'x.y', an 'x instanceof T' type guard resets the - // narrowed type of 'y' to its declared type. if (containsMatchingReference(reference, left)) { return declaredType; } return type; } - // Check that right operand is a function type with a prototype property var rightType = getTypeOfExpression(expr.right); if (!isTypeSubtypeOf(rightType, globalFunctionType)) { return type; @@ -42091,24 +35002,21 @@ var ts; var targetType; var prototypeProperty = getPropertyOfType(rightType, "prototype"); if (prototypeProperty) { - // Target type is type of the prototype property var prototypePropertyType = getTypeOfSymbol(prototypeProperty); if (!isTypeAny(prototypePropertyType)) { targetType = prototypePropertyType; } } - // Don't narrow from 'any' if the target type is exactly 'Object' or 'Function' if (isTypeAny(type) && (targetType === globalObjectType || targetType === globalFunctionType)) { return type; } if (!targetType) { - // Target type is type of construct signature var constructSignatures = void 0; - if (ts.getObjectFlags(rightType) & 2 /* Interface */) { + if (ts.getObjectFlags(rightType) & 2) { constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures; } - else if (ts.getObjectFlags(rightType) & 16 /* Anonymous */) { - constructSignatures = getSignaturesOfType(rightType, 1 /* Construct */); + else if (ts.getObjectFlags(rightType) & 16) { + constructSignatures = getSignaturesOfType(rightType, 1); } if (constructSignatures && constructSignatures.length) { targetType = getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); })); @@ -42123,19 +35031,12 @@ var ts; if (!assumeTrue) { 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 & 262144 /* Union */) { + if (type.flags & 262144) { var assignableType = filterType(type, function (t) { return isRelated(t, candidate); }); - if (!(assignableType.flags & 32768 /* Never */)) { + if (!(assignableType.flags & 32768)) { return assignableType; } } - // If the candidate type is a subtype of the target type, narrow to the candidate type. - // Otherwise, if the target type is assignable to the candidate type, keep the target type. - // Otherwise, if the candidate type is assignable to the target type, narrow to the candidate - // type. Otherwise, the types are completely unrelated, so narrow to an intersection of the - // two types. return isTypeSubtypeOf(candidate, type) ? candidate : isTypeAssignableTo(type, candidate) ? type : isTypeAssignableTo(candidate, type) ? candidate : @@ -42150,7 +35051,6 @@ var ts; if (!predicate) { return type; } - // Don't narrow from 'any' if the predicate type is exactly 'Object' or 'Function' if (isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType)) { return type; } @@ -42167,7 +35067,7 @@ var ts; } else { var invokedExpression = ts.skipParentheses(callExpression.expression); - if (invokedExpression.kind === 186 /* ElementAccessExpression */ || invokedExpression.kind === 185 /* PropertyAccessExpression */) { + if (invokedExpression.kind === 186 || invokedExpression.kind === 185) { var accessExpression = invokedExpression; var possibleReference = ts.skipParentheses(accessExpression.expression); if (isMatchingReference(reference, possibleReference)) { @@ -42180,23 +35080,21 @@ var ts; } return type; } - // Narrow the given type based on the given expression having the assumed boolean value. The returned type - // will be a subtype or the same type as the argument. function narrowType(type, expr, assumeTrue) { switch (expr.kind) { - case 71 /* Identifier */: - case 99 /* ThisKeyword */: - case 97 /* SuperKeyword */: - case 185 /* PropertyAccessExpression */: + case 71: + case 99: + case 97: + case 185: return narrowTypeByTruthiness(type, expr, assumeTrue); - case 187 /* CallExpression */: + case 187: return narrowTypeByTypePredicate(type, expr, assumeTrue); - case 191 /* ParenthesizedExpression */: + case 191: return narrowType(type, expr.expression, assumeTrue); - case 200 /* BinaryExpression */: + case 200: return narrowTypeByBinaryExpression(type, expr, assumeTrue); - case 198 /* PrefixUnaryExpression */: - if (expr.operator === 51 /* ExclamationToken */) { + case 198: + if (expr.operator === 51) { return narrowType(type, expr.operand, !assumeTrue); } break; @@ -42206,11 +35104,7 @@ var ts; } function getTypeOfSymbolAtLocation(symbol, location) { symbol = symbol.exportSymbol || symbol; - // If we have an identifier or a property access at the given location, if the location is - // an dotted name expression, and if the location is not an assignment target, obtain the type - // of the expression (which will reflect control flow analysis). If the expression indeed - // resolved to the given symbol, return the narrowed type. - if (location.kind === 71 /* Identifier */) { + if (location.kind === 71) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } @@ -42221,27 +35115,21 @@ var ts; } } } - // The location isn't a reference to the given symbol, meaning we're being asked - // a hypothetical question of what type the symbol would have if there was a reference - // to it at the given location. Since we have no control flow information for the - // hypothetical reference (control flow information is created and attached by the - // binder), we simply return the declared type of the symbol. return getTypeOfSymbol(symbol); } function getControlFlowContainer(node) { return ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) || - node.kind === 240 /* ModuleBlock */ || - node.kind === 274 /* SourceFile */ || - node.kind === 152 /* PropertyDeclaration */; + node.kind === 240 || + node.kind === 274 || + node.kind === 152; }); } - // Check if a parameter is assigned anywhere within its declaring function. function isParameterAssigned(symbol) { var func = ts.getRootDeclaration(symbol.valueDeclaration).parent; var links = getNodeLinks(func); - if (!(links.flags & 4194304 /* AssignmentsMarked */)) { - links.flags |= 4194304 /* AssignmentsMarked */; + if (!(links.flags & 4194304)) { + links.flags |= 4194304; if (!hasParentWithAssignmentsMarked(func)) { markParameterAssignments(func); } @@ -42249,13 +35137,13 @@ var ts; return symbol.isAssigned || false; } function hasParentWithAssignmentsMarked(node) { - return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 4194304 /* AssignmentsMarked */); }); + return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 4194304); }); } function markParameterAssignments(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { if (ts.isAssignmentTarget(node)) { var symbol = getResolvedSymbol(node); - if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 149 /* Parameter */) { + if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 149) { symbol.isAssigned = true; } } @@ -42265,39 +35153,34 @@ var ts; } } function isConstVariable(symbol) { - return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType; + return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType; } - /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */ function removeOptionalityFromDeclaredType(declaredType, declaration) { var annotationIncludesUndefined = strictNullChecks && - declaration.kind === 149 /* Parameter */ && + declaration.kind === 149 && declaration.initializer && - getFalsyFlags(declaredType) & 8192 /* Undefined */ && - !(getFalsyFlags(checkExpression(declaration.initializer)) & 8192 /* Undefined */); - return annotationIncludesUndefined ? getTypeWithFacts(declaredType, 131072 /* NEUndefined */) : declaredType; + getFalsyFlags(declaredType) & 8192 && + !(getFalsyFlags(checkExpression(declaration.initializer)) & 8192); + return annotationIncludesUndefined ? getTypeWithFacts(declaredType, 131072) : declaredType; } function isConstraintPosition(node) { var parent = node.parent; - return parent.kind === 185 /* PropertyAccessExpression */ || - parent.kind === 187 /* CallExpression */ && parent.expression === node || - parent.kind === 186 /* ElementAccessExpression */ && parent.expression === node || - parent.kind === 182 /* BindingElement */ && parent.name === node && !!parent.initializer; + return parent.kind === 185 || + parent.kind === 187 && parent.expression === node || + parent.kind === 186 && parent.expression === node || + parent.kind === 182 && parent.name === node && !!parent.initializer; } function typeHasNullableConstraint(type) { - return type.flags & 14745600 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || emptyObjectType, 24576 /* Nullable */); + return type.flags & 14745600 && maybeTypeOfKind(getBaseConstraintOfType(type) || emptyObjectType, 24576); } function getConstraintForLocation(type, node) { - // When a node is the left hand expression of a property access, element access, or call expression, - // and the type of the node includes type variables with constraints that are nullable, we fetch the - // apparent type of the node *before* performing control flow analysis such that narrowings apply to - // the constraint type. if (type && isConstraintPosition(node) && forEachType(type, typeHasNullableConstraint)) { return mapType(getWidenedType(type), getBaseConstraintOrType); } return type; } function markAliasReferenced(symbol, location) { - if (isNonLocalAlias(symbol, /*excludes*/ 67216319 /* Value */) && !isInTypeQuery(location) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { + if (isNonLocalAlias(symbol, 67216319) && !isInTypeQuery(location) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { markAliasSymbolAsReferenced(symbol); } } @@ -42306,62 +35189,48 @@ var ts; if (symbol === unknownSymbol) { return errorType; } - // As noted in ECMAScript 6 language spec, arrow functions never have an arguments objects. - // Although in down-level emit of arrow function, we emit it using function expression which means that - // arguments objects will be bound to the inner object; emitting arrow function natively in ES6, arguments objects - // will be bound to non-arrow function that contain this arrow function. This results in inconsistent behavior. - // To avoid that we will give an error to users if they use arguments objects in arrow function so that they - // can explicitly bound arguments objects if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); - if (languageVersion < 2 /* ES2015 */) { - if (container.kind === 193 /* ArrowFunction */) { + if (languageVersion < 2) { + if (container.kind === 193) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); } - else if (ts.hasModifier(container, 256 /* Async */)) { + else if (ts.hasModifier(container, 256)) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method); } } - getNodeLinks(container).flags |= 8192 /* CaptureArguments */; + getNodeLinks(container).flags |= 8192; return getTypeOfSymbol(symbol); } - // We should only mark aliases as referenced if there isn't a local value declaration - // for the symbol. Also, don't mark any property access expression LHS - checkPropertyAccessExpression will handle that if (!(node.parent && ts.isPropertyAccessExpression(node.parent) && node.parent.expression === node)) { markAliasReferenced(symbol, node); } var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); var declaration = localOrExportSymbol.valueDeclaration; - if (localOrExportSymbol.flags & 32 /* Class */) { - // Due to the emit for class decorators, any reference to the class from inside of the class body - // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind - // behavior of class names in ES6. - if (declaration.kind === 235 /* ClassDeclaration */ + if (localOrExportSymbol.flags & 32) { + if (declaration.kind === 235 && ts.nodeIsDecorated(declaration)) { var container = ts.getContainingClass(node); while (container !== undefined) { if (container === declaration && container.name !== node) { - getNodeLinks(declaration).flags |= 8388608 /* ClassWithConstructorReference */; - getNodeLinks(node).flags |= 16777216 /* ConstructorReferenceInClass */; + getNodeLinks(declaration).flags |= 8388608; + getNodeLinks(node).flags |= 16777216; break; } container = ts.getContainingClass(container); } } - else if (declaration.kind === 205 /* ClassExpression */) { - // When we emit a class expression with static members that contain a reference - // to the constructor in the initializer, we will need to substitute that - // binding with an alias as the class name is not in scope. - var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); - while (container.kind !== 274 /* SourceFile */) { + else if (declaration.kind === 205) { + var container = ts.getThisContainer(node, false); + while (container.kind !== 274) { if (container.parent === declaration) { - if (container.kind === 152 /* PropertyDeclaration */ && ts.hasModifier(container, 32 /* Static */)) { - getNodeLinks(declaration).flags |= 8388608 /* ClassWithConstructorReference */; - getNodeLinks(node).flags |= 16777216 /* ConstructorReferenceInClass */; + if (container.kind === 152 && ts.hasModifier(container, 32)) { + getNodeLinks(declaration).flags |= 8388608; + getNodeLinks(node).flags |= 16777216; } break; } - container = ts.getThisContainer(container, /*includeArrowFunctions*/ false); + container = ts.getThisContainer(container, false); } } } @@ -42369,8 +35238,8 @@ var ts; var type = getConstraintForLocation(getTypeOfSymbol(localOrExportSymbol), node); var assignmentKind = ts.getAssignmentTargetKind(node); if (assignmentKind) { - if (!(localOrExportSymbol.flags & 3 /* Variable */) && - !(ts.isInJavaScriptFile(node) && localOrExportSymbol.flags & 512 /* ValueModule */)) { + if (!(localOrExportSymbol.flags & 3) && + !(ts.isInJavaScriptFile(node) && localOrExportSymbol.flags & 512)) { error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable, symbolToString(symbol)); return errorType; } @@ -42379,11 +35248,9 @@ var ts; return errorType; } } - var isAlias = localOrExportSymbol.flags & 2097152 /* Alias */; - // We only narrow variables and parameters occurring in a non-assignment position. For all other - // entities we simply return the declared type. - if (localOrExportSymbol.flags & 3 /* Variable */) { - if (assignmentKind === 1 /* Definite */) { + var isAlias = localOrExportSymbol.flags & 2097152; + if (localOrExportSymbol.flags & 3) { + if (assignmentKind === 1) { return type; } } @@ -42396,38 +35263,26 @@ var ts; if (!declaration) { return type; } - // The declaration container is the innermost function that encloses the declaration of the variable - // or parameter. The flow container is the innermost function starting with which we analyze the control - // flow graph to determine the control flow based type. - var isParameter = ts.getRootDeclaration(declaration).kind === 149 /* Parameter */; + var isParameter = ts.getRootDeclaration(declaration).kind === 149; var declarationContainer = getControlFlowContainer(declaration); var flowContainer = getControlFlowContainer(node); var isOuterVariable = flowContainer !== declarationContainer; var isSpreadDestructuringAsignmentTarget = node.parent && node.parent.parent && ts.isSpreadAssignment(node.parent) && isDestructuringAssignmentTarget(node.parent.parent); - // When the control flow originates in a function expression or arrow function and we are referencing - // a const variable or parameter from an outer function, we extend the origin of the control flow - // analysis to include the immediately enclosing function. - while (flowContainer !== declarationContainer && (flowContainer.kind === 192 /* FunctionExpression */ || - flowContainer.kind === 193 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) && + while (flowContainer !== declarationContainer && (flowContainer.kind === 192 || + flowContainer.kind === 193 || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) && (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) { flowContainer = getControlFlowContainer(flowContainer); } - // We only look for uninitialized variables in strict null checking mode, and only when we can analyze - // the entire control flow graph from the variable's declaration (i.e. when the flow container and - // declaration container are the same). var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAsignmentTarget || - type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & 3 /* AnyOrUnknown */) !== 0 || - isInTypeQuery(node) || node.parent.kind === 252 /* ExportSpecifier */) || - node.parent.kind === 209 /* NonNullExpression */ || - declaration.kind === 232 /* VariableDeclaration */ && declaration.exclamationToken || - declaration.flags & 4194304 /* Ambient */; + type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & 3) !== 0 || + isInTypeQuery(node) || node.parent.kind === 252) || + node.parent.kind === 209 || + declaration.kind === 232 && declaration.exclamationToken || + declaration.flags & 4194304; var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) : type === autoType || type === autoArrayType ? undefinedType : getOptionalType(type); var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized); - // A variable is considered uninitialized when it is possible to analyze the entire control flow graph - // from declaration to use, and when the variable's declared type doesn't include undefined but the - // control flow based type does include undefined. if (type === autoType || type === autoArrayType) { if (flowType === autoType || flowType === autoArrayType) { if (noImplicitAny) { @@ -42437,9 +35292,8 @@ var ts; return convertAutoToAny(flowType); } } - else if (!assumeInitialized && !(getFalsyFlags(type) & 8192 /* Undefined */) && getFalsyFlags(flowType) & 8192 /* Undefined */) { + else if (!assumeInitialized && !(getFalsyFlags(type) & 8192) && getFalsyFlags(flowType) & 8192) { error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); - // Return the declared type to reduce follow-on errors return type; } return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; @@ -42448,21 +35302,17 @@ var ts; return !!ts.findAncestor(node, function (n) { return n === threshold ? "quit" : ts.isFunctionLike(n); }); } function checkNestedBlockScopedBinding(node, symbol) { - if (languageVersion >= 2 /* ES2015 */ || - (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 || - symbol.valueDeclaration.parent.kind === 269 /* CatchClause */) { + if (languageVersion >= 2 || + (symbol.flags & (2 | 32)) === 0 || + symbol.valueDeclaration.parent.kind === 269) { return; } - // 1. walk from the use site up to the declaration and check - // if there is anything function like between declaration and use-site (is binding/class is captured in function). - // 2. walk from the declaration up to the boundary of lexical environment and check - // if there is an iteration statement in between declaration and boundary (is binding/class declared inside iteration statement) var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); var usedInFunction = isInsideFunction(node.parent, container); var current = container; var containedInIterationStatement = false; while (current && !ts.nodeStartsNewLexicalEnvironment(current)) { - if (ts.isIterationStatement(current, /*lookInLabeledStatements*/ false)) { + if (ts.isIterationStatement(current, false)) { containedInIterationStatement = true; break; } @@ -42470,53 +35320,45 @@ var ts; } if (containedInIterationStatement) { if (usedInFunction) { - // mark iteration statement as containing block-scoped binding captured in some function - getNodeLinks(current).flags |= 65536 /* LoopWithCapturedBlockScopedBinding */; + getNodeLinks(current).flags |= 65536; } - // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement. - // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back. - if (container.kind === 220 /* ForStatement */ && - ts.getAncestor(symbol.valueDeclaration, 233 /* VariableDeclarationList */).parent === container && + if (container.kind === 220 && + ts.getAncestor(symbol.valueDeclaration, 233).parent === container && isAssignedInBodyOfForStatement(node, container)) { - getNodeLinks(symbol.valueDeclaration).flags |= 2097152 /* NeedsLoopOutParameter */; + getNodeLinks(symbol.valueDeclaration).flags |= 2097152; } - // set 'declared inside loop' bit on the block-scoped binding - getNodeLinks(symbol.valueDeclaration).flags |= 262144 /* BlockScopedBindingInLoop */; + getNodeLinks(symbol.valueDeclaration).flags |= 262144; } if (usedInFunction) { - getNodeLinks(symbol.valueDeclaration).flags |= 131072 /* CapturedBlockScopedBinding */; + getNodeLinks(symbol.valueDeclaration).flags |= 131072; } } function isAssignedInBodyOfForStatement(node, container) { - // skip parenthesized nodes var current = node; - while (current.parent.kind === 191 /* ParenthesizedExpression */) { + while (current.parent.kind === 191) { current = current.parent; } - // check if node is used as LHS in some assignment expression var isAssigned = false; if (ts.isAssignmentTarget(current)) { isAssigned = true; } - else if ((current.parent.kind === 198 /* PrefixUnaryExpression */ || current.parent.kind === 199 /* PostfixUnaryExpression */)) { + else if ((current.parent.kind === 198 || current.parent.kind === 199)) { var expr = current.parent; - isAssigned = expr.operator === 43 /* PlusPlusToken */ || expr.operator === 44 /* MinusMinusToken */; + isAssigned = expr.operator === 43 || expr.operator === 44; } if (!isAssigned) { return false; } - // at this point we know that node is the target of assignment - // now check that modification happens inside the statement part of the ForStatement return !!ts.findAncestor(current, function (n) { return n === container ? "quit" : n === container.statement; }); } function captureLexicalThis(node, container) { - getNodeLinks(node).flags |= 2 /* LexicalThis */; - if (container.kind === 152 /* PropertyDeclaration */ || container.kind === 155 /* Constructor */) { + getNodeLinks(node).flags |= 2; + if (container.kind === 152 || container.kind === 155) { var classNode = container.parent; - getNodeLinks(classNode).flags |= 4 /* CaptureThis */; + getNodeLinks(classNode).flags |= 4; } else { - getNodeLinks(container).flags |= 4 /* CaptureThis */; + getNodeLinks(container).flags |= 4; } } function findFirstSuperCall(n) { @@ -42528,26 +35370,14 @@ var ts; } return ts.forEachChild(n, findFirstSuperCall); } - /** - * Return a cached result if super-statement is already found. - * Otherwise, find a super statement in a given constructor function and cache the result in the node-links of the constructor - * - * @param constructor constructor-function to look for super statement - */ function getSuperCallInConstructor(constructor) { var links = getNodeLinks(constructor); - // Only trying to find super-call if we haven't yet tried to find one. Once we try, we will record the result if (links.hasSuperCall === undefined) { links.superCall = findFirstSuperCall(constructor.body); links.hasSuperCall = links.superCall ? true : false; } return links.superCall; } - /** - * Check if the given class-declaration extends null then return true. - * Otherwise, return false - * @param classDecl a class declaration to check if it extends null - */ function classDeclarationExtendsNull(classDecl) { var classSymbol = getSymbolOfNode(classDecl); var classInstanceType = getDeclaredTypeOfSymbol(classSymbol); @@ -42557,60 +35387,42 @@ var ts; function checkThisBeforeSuper(node, container, diagnosticMessage) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); - // If a containing class does not have extends clause or the class extends null - // skip checking whether super statement is called before "this" accessing. if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { var superCall = getSuperCallInConstructor(container); - // We should give an error in the following cases: - // - No super-call - // - "this" is accessing before super-call. - // i.e super(this) - // this.x; super(); - // We want to make sure that super-call is done before accessing "this" so that - // "this" is not accessed as a parameter of the super-call. if (!superCall || superCall.end > node.pos) { - // In ES6, super inside constructor of class-declaration has to precede "this" accessing error(node, diagnosticMessage); } } } function checkThisExpression(node) { - // Stop at the first arrow function so that we can - // tell whether 'this' needs to be captured. - var container = ts.getThisContainer(node, /* includeArrowFunctions */ true); + var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; - if (container.kind === 155 /* Constructor */) { + if (container.kind === 155) { checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class); } - // Now skip arrow functions to get the "real" owner of 'this'. - if (container.kind === 193 /* ArrowFunction */) { - container = ts.getThisContainer(container, /* includeArrowFunctions */ false); - // When targeting es6, arrow function lexically bind "this" so we do not need to do the work of binding "this" in emitted code - needToCaptureLexicalThis = (languageVersion < 2 /* ES2015 */); + if (container.kind === 193) { + container = ts.getThisContainer(container, false); + needToCaptureLexicalThis = (languageVersion < 2); } switch (container.kind) { - case 239 /* ModuleDeclaration */: + case 239: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 238 /* EnumDeclaration */: + case 238: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 155 /* Constructor */: + case 155: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks } break; - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - if (ts.hasModifier(container, 32 /* Static */)) { + case 152: + case 151: + if (ts.hasModifier(container, 32)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); - // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks } break; - case 147 /* ComputedPropertyName */: + case 147: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } @@ -42619,28 +35431,23 @@ var ts; } var type = tryGetThisTypeAt(node, container); if (!type && noImplicitThis) { - // With noImplicitThis, functions may not reference 'this' if it has type 'any' error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation); } return type || anyType; } function tryGetThisTypeAt(node, container) { - if (container === void 0) { container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); } + if (container === void 0) { container = ts.getThisContainer(node, false); } if (ts.isFunctionLike(container) && (!isInParameterInitializerBeforeContainingFunction(node) || ts.getThisParameter(container))) { - // Note: a parameter initializer should refer to class-this unless function-this is explicitly annotated. - // If this is a function in a JS file, it might be a class method. Check if it's the RHS - // of a x.prototype.y = function [name]() { .... } - if (container.kind === 192 /* FunctionExpression */ && - container.parent.kind === 200 /* BinaryExpression */ && - ts.getSpecialPropertyAssignmentKind(container.parent) === 3 /* PrototypeProperty */) { - // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') - var className = container.parent // x.prototype.y = f - .left // x.prototype.y - .expression // x.prototype - .expression; // x + if (container.kind === 192 && + container.parent.kind === 200 && + ts.getSpecialPropertyAssignmentKind(container.parent) === 3) { + var className = container.parent + .left + .expression + .expression; var classSymbol = checkExpression(className).symbol; - if (classSymbol && classSymbol.members && (classSymbol.flags & 16 /* Function */)) { + if (classSymbol && classSymbol.members && (classSymbol.flags & 16)) { return getFlowTypeOfReference(node, getInferredClassType(classSymbol)); } } @@ -42651,7 +35458,7 @@ var ts; } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); - var type = ts.hasModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; + var type = ts.hasModifier(container, 32) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; return getFlowTypeOfReference(node, type); } if (ts.isInJavaScriptFile(node)) { @@ -42663,7 +35470,7 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var jsdocType = ts.getJSDocType(node); - if (jsdocType && jsdocType.kind === 284 /* JSDocFunctionType */) { + if (jsdocType && jsdocType.kind === 284) { var jsDocFunctionType = jsdocType; if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].name && @@ -42673,35 +35480,29 @@ var ts; } } function isInConstructorArgumentInitializer(node, constructorDecl) { - return !!ts.findAncestor(node, function (n) { return n === constructorDecl ? "quit" : n.kind === 149 /* Parameter */; }); + return !!ts.findAncestor(node, function (n) { return n === constructorDecl ? "quit" : n.kind === 149; }); } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 187 /* CallExpression */ && node.parent.expression === node; - var container = ts.getSuperContainer(node, /*stopOnFunctions*/ true); + var isCallExpression = node.parent.kind === 187 && node.parent.expression === node; + var container = ts.getSuperContainer(node, true); var needToCaptureLexicalThis = false; - // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting if (!isCallExpression) { - while (container && container.kind === 193 /* ArrowFunction */) { - container = ts.getSuperContainer(container, /*stopOnFunctions*/ true); - needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */; + while (container && container.kind === 193) { + container = ts.getSuperContainer(container, true); + needToCaptureLexicalThis = languageVersion < 2; } } var canUseSuperExpression = isLegalUsageOfSuperExpression(container); var nodeCheckFlag = 0; if (!canUseSuperExpression) { - // issue more specific error if super is used in computed property name - // class A { foo() { return "1" }} - // class B { - // [super.foo()]() {} - // } - var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 147 /* ComputedPropertyName */; }); - if (current && current.kind === 147 /* ComputedPropertyName */) { + var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 147; }); + if (current && current.kind === 147) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name); } else if (isCallExpression) { error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors); } - else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 184 /* ObjectLiteralExpression */)) { + else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 184)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { @@ -42709,97 +35510,36 @@ var ts; } return errorType; } - if (!isCallExpression && container.kind === 155 /* Constructor */) { + if (!isCallExpression && container.kind === 155) { checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class); } - if (ts.hasModifier(container, 32 /* Static */) || isCallExpression) { - nodeCheckFlag = 512 /* SuperStatic */; + if (ts.hasModifier(container, 32) || isCallExpression) { + nodeCheckFlag = 512; } else { - nodeCheckFlag = 256 /* SuperInstance */; + nodeCheckFlag = 256; } getNodeLinks(node).flags |= nodeCheckFlag; - // Due to how we emit async functions, we need to specialize the emit for an async method that contains a `super` reference. - // This is due to the fact that we emit the body of an async function inside of a generator function. As generator - // functions cannot reference `super`, we emit a helper inside of the method body, but outside of the generator. This helper - // uses an arrow function, which is permitted to reference `super`. - // - // There are two primary ways we can access `super` from within an async method. The first is getting the value of a property - // or indexed access on super, either as part of a right-hand-side expression or call expression. The second is when setting the value - // of a property or indexed access, either as part of an assignment expression or destructuring assignment. - // - // The simplest case is reading a value, in which case we will emit something like the following: - // - // // ts - // ... - // async asyncMethod() { - // let x = await super.asyncMethod(); - // return x; - // } - // ... - // - // // js - // ... - // asyncMethod() { - // const _super = name => super[name]; - // return __awaiter(this, arguments, Promise, function *() { - // let x = yield _super("asyncMethod").call(this); - // return x; - // }); - // } - // ... - // - // The more complex case is when we wish to assign a value, especially as part of a destructuring assignment. As both cases - // are legal in ES6, but also likely less frequent, we emit the same more complex helper for both scenarios: - // - // // ts - // ... - // async asyncMethod(ar: Promise) { - // [super.a, super.b] = await ar; - // } - // ... - // - // // js - // ... - // asyncMethod(ar) { - // 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 __awaiter(this, arguments, Promise, function *() { - // [_super("a").value, _super("b").value] = yield ar; - // }); - // } - // ... - // - // This helper creates an object with a "value" property that wraps the `super` property or indexed access for both get and set. - // This is required for destructuring assignments, as a call expression cannot be used as the target of a destructuring assignment - // while a property access can. - if (container.kind === 154 /* MethodDeclaration */ && ts.hasModifier(container, 256 /* Async */)) { + if (container.kind === 154 && ts.hasModifier(container, 256)) { if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) { - getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */; + getNodeLinks(container).flags |= 4096; } else { - getNodeLinks(container).flags |= 2048 /* AsyncMethodWithSuper */; + getNodeLinks(container).flags |= 2048; } } if (needToCaptureLexicalThis) { - // call expressions are allowed only in constructors so they should always capture correct 'this' - // super property access expressions can also appear in arrow functions - - // in this case they should also use correct lexical this captureLexicalThis(node.parent, container); } - if (container.parent.kind === 184 /* ObjectLiteralExpression */) { - if (languageVersion < 2 /* ES2015 */) { + if (container.parent.kind === 184) { + if (languageVersion < 2) { error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher); return errorType; } else { - // for object literal assume that type of 'super' is 'any' return anyType; } } - // at this point the only legal case for parent is ClassLikeDeclaration var classLikeDeclaration = container.parent; if (!ts.getClassExtendsHeritageClauseElement(classLikeDeclaration)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class); @@ -42810,12 +35550,11 @@ var ts; if (!baseClassType) { return errorType; } - if (container.kind === 155 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { - // issue custom error message for super property access in constructor arguments (to be aligned with old compiler) + if (container.kind === 155 && isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return errorType; } - return nodeCheckFlag === 512 /* SuperStatic */ + return nodeCheckFlag === 512 ? getBaseConstructorTypeOfClass(classType) : getTypeWithThisArgument(baseClassType, classType.thisType); function isLegalUsageOfSuperExpression(container) { @@ -42823,31 +35562,24 @@ var ts; return false; } if (isCallExpression) { - // TS 1.0 SPEC (April 2014): 4.8.1 - // Super calls are only permitted in constructors of derived classes - return container.kind === 155 /* Constructor */; + return container.kind === 155; } else { - // TS 1.0 SPEC (April 2014) - // 'super' property access is allowed - // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance - // - In a static member function or static member accessor - // topmost container must be something that is directly nested in the class declaration\object literal expression - if (ts.isClassLike(container.parent) || container.parent.kind === 184 /* ObjectLiteralExpression */) { - if (ts.hasModifier(container, 32 /* Static */)) { - return container.kind === 154 /* MethodDeclaration */ || - container.kind === 153 /* MethodSignature */ || - container.kind === 156 /* GetAccessor */ || - container.kind === 157 /* SetAccessor */; + if (ts.isClassLike(container.parent) || container.parent.kind === 184) { + if (ts.hasModifier(container, 32)) { + return container.kind === 154 || + container.kind === 153 || + container.kind === 156 || + container.kind === 157; } else { - return container.kind === 154 /* MethodDeclaration */ || - container.kind === 153 /* MethodSignature */ || - container.kind === 156 /* GetAccessor */ || - container.kind === 157 /* SetAccessor */ || - container.kind === 152 /* PropertyDeclaration */ || - container.kind === 151 /* PropertySignature */ || - container.kind === 155 /* Constructor */; + return container.kind === 154 || + container.kind === 153 || + container.kind === 156 || + container.kind === 157 || + container.kind === 152 || + container.kind === 151 || + container.kind === 155; } } } @@ -42855,22 +35587,22 @@ var ts; } } function getContainingObjectLiteral(func) { - return (func.kind === 154 /* MethodDeclaration */ || - func.kind === 156 /* GetAccessor */ || - func.kind === 157 /* SetAccessor */) && func.parent.kind === 184 /* ObjectLiteralExpression */ ? func.parent : - func.kind === 192 /* FunctionExpression */ && func.parent.kind === 270 /* PropertyAssignment */ ? func.parent.parent : + return (func.kind === 154 || + func.kind === 156 || + func.kind === 157) && func.parent.kind === 184 ? func.parent : + func.kind === 192 && func.parent.kind === 270 ? func.parent.parent : undefined; } function getThisTypeArgument(type) { - return ts.getObjectFlags(type) & 4 /* Reference */ && type.target === globalThisType ? type.typeArguments[0] : undefined; + return ts.getObjectFlags(type) & 4 && type.target === globalThisType ? type.typeArguments[0] : undefined; } function getThisTypeFromContextualType(type) { return mapType(type, function (t) { - return t.flags & 524288 /* Intersection */ ? ts.forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); + return t.flags & 524288 ? ts.forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); }); } function getContextualThisParameterType(func) { - if (func.kind === 193 /* ArrowFunction */) { + if (func.kind === 193) { return undefined; } if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { @@ -42886,9 +35618,6 @@ var ts; if (noImplicitThis || inJs) { var containingLiteral = getContainingObjectLiteral(func); if (containingLiteral) { - // We have an object literal method. Check if the containing object literal has a contextual type - // that includes a ThisType. If so, T is the contextual type for 'this'. We continue looking in - // any directly enclosing object literals. var contextualType = getApparentTypeOfContextualType(containingLiteral); var literal = containingLiteral; var type = contextualType; @@ -42897,25 +35626,19 @@ var ts; if (thisType) { return instantiateType(thisType, getContextualMapper(containingLiteral)); } - if (literal.parent.kind !== 270 /* PropertyAssignment */) { + if (literal.parent.kind !== 270) { break; } literal = literal.parent.parent; type = getApparentTypeOfContextualType(literal); } - // There was no contextual ThisType for the containing object literal, so the contextual type - // for 'this' is the non-null form of the contextual type for the containing object literal or - // the type of the object literal itself. return contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral); } - // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the - // contextual type for 'this' is 'obj'. var parent = func.parent; - if (parent.kind === 200 /* BinaryExpression */ && parent.operatorToken.kind === 58 /* EqualsToken */) { + if (parent.kind === 200 && parent.operatorToken.kind === 58) { var target = parent.left; - if (target.kind === 185 /* PropertyAccessExpression */ || target.kind === 186 /* ElementAccessExpression */) { + if (target.kind === 185 || target.kind === 186) { var expression = target.expression; - // Don't contextually type `this` as `exports` in `exports.Point = function(x, y) { this.x = x; this.y = y; }` if (inJs && ts.isIdentifier(expression)) { var sourceFile = ts.getSourceFileOfNode(parent); if (sourceFile.commonJsModuleIndicator && getResolvedSymbol(expression) === sourceFile.symbol) { @@ -42928,7 +35651,6 @@ var ts; } return undefined; } - // Return contextual type of parameter or undefined if no contextual type is available function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; if (!isContextSensitiveFunctionOrObjectLiteralMethod(func)) { @@ -42959,13 +35681,12 @@ var ts; var len = func.parameters.length - (funcHasRestParameters ? 1 : 0); var indexOfParameter = func.parameters.indexOf(parameter); if (ts.getThisParameter(func) !== undefined && !contextualSignature.thisParameter) { - ts.Debug.assert(indexOfParameter !== 0); // Otherwise we should not have called `getContextuallyTypedParameterType`. + ts.Debug.assert(indexOfParameter !== 0); indexOfParameter -= 1; } if (indexOfParameter < len) { return getTypeAtPosition(contextualSignature, indexOfParameter); } - // If last parameter is contextually rest parameter get its type if (funcHasRestParameters && indexOfParameter === (func.parameters.length - 1) && isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { @@ -42973,14 +35694,6 @@ var ts; } } } - // In a variable, parameter or property declaration with a type annotation, - // the contextual type of an initializer expression is the type of the variable, parameter or property. - // Otherwise, in a parameter declaration of a contextually typed function expression, - // the contextual type of an initializer expression is the contextual type of the parameter. - // Otherwise, in a variable or parameter declaration with a binding pattern name, - // the contextual type of an initializer expression is the type implied by the binding pattern. - // Otherwise, in a binding pattern inside a variable or parameter declaration, - // the contextual type of an initializer expression is the type annotation of the containing declaration, if present. function getContextualTypeForInitializerExpression(node) { var declaration = node.parent; if (ts.hasInitializer(declaration) && node === declaration.initializer) { @@ -42988,19 +35701,19 @@ var ts; if (typeNode) { return getTypeFromTypeNode(typeNode); } - if (declaration.kind === 149 /* Parameter */) { + if (declaration.kind === 149) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; } } if (ts.isBindingPattern(declaration.name)) { - return getTypeFromBindingPattern(declaration.name, /*includePatternInType*/ true, /*reportErrors*/ false); + return getTypeFromBindingPattern(declaration.name, true, false); } if (ts.isBindingPattern(declaration.parent)) { var parentDeclaration = declaration.parent.parent; var name = declaration.propertyName || declaration.name; - if (parentDeclaration.kind !== 182 /* BindingElement */) { + if (parentDeclaration.kind !== 182) { var parentTypeNode = ts.getEffectiveTypeAnnotationNode(parentDeclaration); if (parentTypeNode && !ts.isBindingPattern(name)) { var text = ts.getTextOfPropertyName(name); @@ -43017,13 +35730,13 @@ var ts; var func = ts.getContainingFunction(node); if (func) { var functionFlags = ts.getFunctionFlags(func); - if (functionFlags & 1 /* Generator */) { // AsyncGenerator function or Generator function + if (functionFlags & 1) { return undefined; } var contextualReturnType = getContextualReturnType(func); - return functionFlags & 2 /* Async */ - ? contextualReturnType && getAwaitedTypeOfPromise(contextualReturnType) // Async function - : contextualReturnType; // Regular function + return functionFlags & 2 + ? contextualReturnType && getAwaitedTypeOfPromise(contextualReturnType) + : contextualReturnType; } return undefined; } @@ -43035,7 +35748,7 @@ var ts; if (contextualReturnType) { return node.asteriskToken ? contextualReturnType - : getIteratedTypeOfGenerator(contextualReturnType, (functionFlags & 2 /* Async */) !== 0); + : getIteratedTypeOfGenerator(contextualReturnType, (functionFlags & 2) !== 0); } } return undefined; @@ -43054,35 +35767,28 @@ var ts; return false; } function getContextualReturnType(functionDecl) { - // If the containing function has a return type annotation, is a constructor, or is a get accessor whose - // corresponding set accessor has a type annotation, return statements in the function are contextually typed - if (functionDecl.kind === 155 /* Constructor */ || + if (functionDecl.kind === 155 || ts.getEffectiveReturnTypeNode(functionDecl) || isGetAccessorWithAnnotatedSetAccessor(functionDecl)) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } - // Otherwise, if the containing function is contextually typed by a function type with exactly one call signature - // and that call signature is non-generic, return statements are contextually typed by the return type of the signature var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); if (signature && !isResolvingReturnTypeOfSignature(signature)) { return getReturnTypeOfSignature(signature); } return undefined; } - // In a typed function call, an argument or substitution expression is contextually typed by the type of the corresponding parameter. function getContextualTypeForArgument(callTarget, arg) { - var args = getEffectiveCallArguments(callTarget); // TODO: GH#18217 - var argIndex = args.indexOf(arg); // -1 for e.g. the expression of a CallExpression, or the tag of a TaggedTemplateExpression + var args = getEffectiveCallArguments(callTarget); + var argIndex = args.indexOf(arg); return argIndex === -1 ? undefined : getContextualTypeForArgumentAtIndex(callTarget, argIndex); } function getContextualTypeForArgumentAtIndex(callTarget, argIndex) { - // If we're already in the process of resolving the given signature, don't resolve again as - // that could cause infinite recursion. Instead, return anySignature. var signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget); return getTypeAtPosition(signature, argIndex); } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 189 /* TaggedTemplateExpression */) { + if (template.parent.kind === 189) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -43091,38 +35797,31 @@ var ts; var binaryExpression = node.parent; var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right; switch (operatorToken.kind) { - case 58 /* EqualsToken */: + case 58: return node === right && isContextSensitiveAssignment(binaryExpression) ? getTypeOfExpression(left) : undefined; - case 54 /* BarBarToken */: - // When an || expression has a contextual type, the operands are contextually typed by that type. When an || - // expression has no contextual type, the right operand is contextually typed by the type of the left operand, - // except for the special case of Javascript declarations of the form `namespace.prop = namespace.prop || {}` + case 54: var type = getContextualType(binaryExpression); return !type && node === right && !ts.isDefaultedJavascriptInitializer(binaryExpression) ? getTypeOfExpression(left) : type; - case 53 /* AmpersandAmpersandToken */: - case 26 /* CommaToken */: + case 53: + case 26: return node === right ? getContextualType(binaryExpression) : undefined; default: return undefined; } } - // In an assignment expression, the right operand is contextually typed by the type of the left operand. - // Don't do this for special property assignments to avoid circularity. function isContextSensitiveAssignment(binaryExpression) { var kind = ts.getSpecialPropertyAssignmentKind(binaryExpression); switch (kind) { - case 0 /* None */: + case 0: return true; - case 5 /* Property */: - // If `binaryExpression.left` was assigned a symbol, then this is a new declaration; otherwise it is an assignment to an existing declaration. - // See `bindStaticPropertyAssignment` in `binder.ts`. + case 5: return !binaryExpression.left.symbol; - case 1 /* ExportsProperty */: - case 2 /* ModuleExports */: - case 3 /* PrototypeProperty */: - case 4 /* ThisProperty */: - case 6 /* Prototype */: + case 1: + case 2: + case 3: + case 4: + case 6: return false; default: return ts.Debug.assertNever(kind); @@ -43130,24 +35829,19 @@ var ts; } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { - var prop = t.flags & 917504 /* StructuredType */ ? getPropertyOfType(t, name) : undefined; + var prop = t.flags & 917504 ? getPropertyOfType(t, name) : undefined; return prop ? getTypeOfSymbol(prop) : undefined; - }, /*noReductions*/ true); + }, true); } function getIndexTypeOfContextualType(type, kind) { - return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true); + return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, true); } - // Return true if the given contextual type is a tuple-like type function contextualTypeIsTupleLikeType(type) { - return !!(type.flags & 262144 /* Union */ ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); + return !!(type.flags & 262144 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); } - // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of - // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one - // exists. Otherwise, it is the type of the string index signature in T, if one exists. function getContextualTypeForObjectLiteralMethod(node) { ts.Debug.assert(ts.isObjectLiteralMethod(node)); - if (node.flags & 8388608 /* InWithStatement */) { - // We cannot answer semantic questions within a with block, do not proceed any further + if (node.flags & 8388608) { return undefined; } return getContextualTypeForObjectLiteralElement(node); @@ -43157,37 +35851,28 @@ var ts; var type = getApparentTypeOfContextualType(objectLiteral); if (type) { if (!hasNonBindableDynamicName(element)) { - // For a (non-symbol) computed property, there is no reason to look up the name - // in the type. It will just be "__computed", which does not appear in any - // SymbolTable. var symbolName_1 = getSymbolOfNode(element).escapedName; var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_1); if (propertyType) { return propertyType; } } - return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) || - getIndexTypeOfContextualType(type, 0 /* String */); + return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) || + getIndexTypeOfContextualType(type, 0); } return undefined; } - // In an array literal contextually typed by a type T, the contextual type of an element expression at index N is - // the type of the property with the numeric name N in T, if one exists. Otherwise, if T has a numeric index signature, - // it is the type of the numeric index signature in T. Otherwise, in ES6 and higher, the contextual type is the iterated - // type of T. function getContextualTypeForElementExpression(arrayContextualType, index) { return arrayContextualType && (getTypeOfPropertyOfContextualType(arrayContextualType, "" + index) - || getIndexTypeOfContextualType(arrayContextualType, 1 /* Number */) - || getIteratedTypeOrElementType(arrayContextualType, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false, /*checkAssignability*/ false)); + || getIndexTypeOfContextualType(arrayContextualType, 1) + || getIteratedTypeOrElementType(arrayContextualType, undefined, false, false, false)); } - // In a contextually typed conditional expression, the true/false expressions are contextually typed by the same type. function getContextualTypeForConditionalOperand(node) { var conditional = node.parent; return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined; } function getContextualTypeForChildJsxExpression(node) { var attributesType = getApparentTypeOfContextualType(node.openingElement.tagName); - // JSX expression is in children of JSX Element, we will look for an "children" atttribute (we get the name from JSX.ElementAttributesProperty) var jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); return attributesType && !isTypeAny(attributesType) && jsxChildrenPropertyName && jsxChildrenPropertyName !== "" ? getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName) : undefined; } @@ -43200,9 +35885,6 @@ var ts; : undefined; } function getContextualTypeForJsxAttribute(attribute) { - // When we trying to resolve JsxOpeningLikeElement as a stateless function element, we will already give its attributes a contextual type - // which is a type of the parameter of the signature we are trying out. - // If there is no contextual type (e.g. we are trying to resolve stateful component), get attributes type from resolving element's tagName if (ts.isJsxAttribute(attribute)) { var attributesType = getApparentTypeOfContextualType(attribute.parent); if (!attributesType || isTypeAny(attributesType)) { @@ -43214,50 +35896,44 @@ var ts; return getContextualType(attribute.parent); } } - // Return true if the given expression is possibly a discriminant value. We limit the kinds of - // expressions we check to those that don't depend on their contextual type in order not to cause - // recursive (and possibly infinite) invocations of getContextualType. function isPossiblyDiscriminantValue(node) { switch (node.kind) { - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 95 /* NullKeyword */: - case 71 /* Identifier */: + case 9: + case 8: + case 13: + case 101: + case 86: + case 95: + case 71: return true; - case 185 /* PropertyAccessExpression */: - case 191 /* ParenthesizedExpression */: + case 185: + case 191: return isPossiblyDiscriminantValue(node.expression); } return false; } - // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily - // be "pushed" onto a node using the contextualType property. function getApparentTypeOfContextualType(node) { var contextualType = getContextualType(node); contextualType = contextualType && mapType(contextualType, getApparentType); - if (!(contextualType && contextualType.flags & 262144 /* Union */ && ts.isObjectLiteralExpression(node))) { + if (!(contextualType && contextualType.flags & 262144 && ts.isObjectLiteralExpression(node))) { return contextualType; } - // Keep the below up-to-date with the work done within `isRelatedTo` by `findMatchingDiscriminantType` var match; propLoop: for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var prop = _a[_i]; if (!prop.symbol) continue; - if (prop.kind !== 270 /* PropertyAssignment */) + if (prop.kind !== 270) continue; if (isPossiblyDiscriminantValue(prop.initializer) && isDiscriminantProperty(contextualType, prop.symbol.escapedName)) { var discriminatingType = checkExpression(prop.initializer); for (var _b = 0, _c = contextualType.types; _b < _c.length; _b++) { var type = _c[_b]; var targetType = getTypeOfPropertyOfType(type, prop.symbol.escapedName); - if (targetType && checkTypeAssignableTo(discriminatingType, targetType, /*errorNode*/ undefined)) { + if (targetType && checkTypeAssignableTo(discriminatingType, targetType, undefined)) { if (match) { if (type === match) - continue; // Finding multiple fields which discriminate to the same type is fine + continue; match = undefined; break propLoop; } @@ -43268,26 +35944,8 @@ var ts; } return match || contextualType; } - /** - * Woah! Do you really want to use this function? - * - * Unless you're trying to get the *non-apparent* type for a - * value-literal type or you're authoring relevant portions of this algorithm, - * you probably meant to use 'getApparentTypeOfContextualType'. - * Otherwise this may not be very useful. - * - * In cases where you *are* working on this function, you should understand - * when it is appropriate to use 'getContextualType' and 'getApparentTypeOfContextualType'. - * - * - Use 'getContextualType' when you are simply going to propagate the result to the expression. - * - Use 'getApparentTypeOfContextualType' when you're going to need the members of the type. - * - * @param node the expression whose contextual type will be returned. - * @returns the contextual type of an expression. - */ function getContextualType(node) { - if (node.flags & 8388608 /* InWithStatement */) { - // We cannot answer semantic questions within a with block, do not proceed any further + if (node.flags & 8388608) { return undefined; } if (node.contextualType) { @@ -43295,52 +35953,51 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 232 /* VariableDeclaration */: - case 149 /* Parameter */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 182 /* BindingElement */: + case 232: + case 149: + case 152: + case 151: + case 182: return getContextualTypeForInitializerExpression(node); - case 193 /* ArrowFunction */: - case 225 /* ReturnStatement */: + case 193: + case 225: return getContextualTypeForReturnExpression(node); - case 203 /* YieldExpression */: + case 203: return getContextualTypeForYieldOperand(parent); - case 187 /* CallExpression */: - case 188 /* NewExpression */: + case 187: + case 188: return getContextualTypeForArgument(parent, node); - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: + case 190: + case 208: return getTypeFromTypeNode(parent.type); - case 200 /* BinaryExpression */: + case 200: return getContextualTypeForBinaryOperand(node); - case 270 /* PropertyAssignment */: - case 271 /* ShorthandPropertyAssignment */: + case 270: + case 271: return getContextualTypeForObjectLiteralElement(parent); - case 272 /* SpreadAssignment */: + case 272: return getApparentTypeOfContextualType(parent.parent); - case 183 /* ArrayLiteralExpression */: { + case 183: { var arrayLiteral = parent; var type = getApparentTypeOfContextualType(arrayLiteral); return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node)); } - case 201 /* ConditionalExpression */: + case 201: return getContextualTypeForConditionalOperand(node); - case 211 /* TemplateSpan */: - ts.Debug.assert(parent.parent.kind === 202 /* TemplateExpression */); + case 211: + ts.Debug.assert(parent.parent.kind === 202); return getContextualTypeForSubstitutionExpression(parent.parent, node); - case 191 /* ParenthesizedExpression */: { - // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast. + case 191: { var tag = ts.isInJavaScriptFile(parent) ? ts.getJSDocTypeTag(parent) : undefined; return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent); } - case 265 /* JsxExpression */: + case 265: return getContextualTypeForJsxExpression(parent); - case 262 /* JsxAttribute */: - case 264 /* JsxSpreadAttribute */: + case 262: + case 264: return getContextualTypeForJsxAttribute(parent); - case 257 /* JsxOpeningElement */: - case 256 /* JsxSelfClosingElement */: + case 257: + case 256: return getContextualJsxElementAttributesType(parent); } return undefined; @@ -43355,22 +36012,16 @@ var ts; } var valueType = checkExpression(node.tagName); if (isTypeAny(valueType)) { - // Short-circuit if the class tag is using an element type 'any' return anyType; } var isJs = ts.isInJavaScriptFile(node); return mapType(valueType, function (t) { return getJsxSignaturesParameterTypes(t, isJs, node); }); } function getJsxSignaturesParameterTypes(valueType, isJs, context) { - // If the elemType is a string type, we have to return anyType to prevent an error downstream as we will try to find construct or call signature of the type - if (valueType.flags & 4 /* String */) { + if (valueType.flags & 4) { return anyType; } - else if (valueType.flags & 64 /* StringLiteral */) { - // If the elemType is a stringLiteral type, we can then provide a check to make sure that the string literal type is one of the Jsx intrinsic element type - // For example: - // var CustomTag: "h1" = "h1"; - // Hello World + else if (valueType.flags & 64) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, context); if (intrinsicElementsType !== errorType) { var stringLiteralTypeName = valueType.value; @@ -43378,22 +36029,19 @@ var ts; if (intrinsicProp) { return getTypeOfSymbol(intrinsicProp); } - var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */); + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); if (indexSignatureType) { return indexSignatureType; } } return anyType; } - // Resolve the signatures, preferring constructor - var signatures = getSignaturesOfType(valueType, 1 /* Construct */); + var signatures = getSignaturesOfType(valueType, 1); var ctor = true; if (signatures.length === 0) { - // No construct signatures, try call signatures - signatures = getSignaturesOfType(valueType, 0 /* Call */); + signatures = getSignaturesOfType(valueType, 0); ctor = false; if (signatures.length === 0) { - // We found no signatures at all, which is an error return errorType; } } @@ -43410,7 +36058,7 @@ var ts; links.resolvedSignatures.set(cacheKey, resolvingSignaturesArray); links.resolvedSignatures.set(cacheKey, signatures = instantiateJsxSignatures(context, signatures)); } - return getUnionType(ts.map(signatures, ctor ? function (t) { return getJsxPropsTypeFromClassType(t, isJs, context, /*reportErrors*/ false); } : function (t) { return getJsxPropsTypeFromCallSignature(t, context); }), 0 /* None */); + return getUnionType(ts.map(signatures, ctor ? function (t) { return getJsxPropsTypeFromClassType(t, isJs, context, false); } : function (t) { return getJsxPropsTypeFromCallSignature(t, context); }), 0); } function getJsxPropsTypeFromCallSignature(sig, context) { var propsType = getTypeOfFirstParameterOfSignatureWithFallback(sig, emptyObjectType); @@ -43427,26 +36075,20 @@ var ts; function getJsxPropsTypeFromClassType(sig, isJs, context, reportErrors) { var forcedLookupLocation = getJsxElementPropertiesName(getJsxNamespaceAt(context)); var attributesType = forcedLookupLocation === undefined - // If there is no type ElementAttributesProperty, return the type of the first parameter of the signature, which should be the props type ? getTypeOfFirstParameterOfSignatureWithFallback(sig, emptyObjectType) : forcedLookupLocation === "" - // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead ? getReturnTypeOfSignature(sig) - // Otherwise get the type of the property on the signature return type : getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation); if (!attributesType) { - // There is no property named 'props' on this instance type if (reportErrors && !!forcedLookupLocation && !!ts.length(context.attributes.properties)) { error(context, ts.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, ts.unescapeLeadingUnderscores(forcedLookupLocation)); } return emptyObjectType; } else if (isTypeAny(attributesType)) { - // Props is of type 'any' or unknown return attributesType; } else { - // Normal case -- add in IntrinsicClassElements and IntrinsicElements var apparentAttributesType = attributesType; var intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes, context); if (intrinsicClassAttribs !== errorType) { @@ -43463,10 +36105,8 @@ var ts; return apparentAttributesType; } } - // If the given type is an object or union type with a single signature, and if that signature has at - // least as many parameters as the given function, return the signature. Otherwise return undefined. function getContextualCallSignature(type, node) { - var signatures = getSignaturesOfType(type, 0 /* Call */); + var signatures = getSignaturesOfType(type, 0); if (signatures.length === 1) { var signature = signatures[0]; if (!isAritySmaller(signature, node)) { @@ -43474,7 +36114,6 @@ var ts; } } } - /** If the contextual signature has fewer parameters than the function expression, do not use it */ function isAritySmaller(signature, target) { var targetParameterCount = 0; for (; targetParameterCount < target.parameters.length; targetParameterCount++) { @@ -43490,10 +36129,9 @@ var ts; return sourceLength < targetParameterCount; } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 192 /* FunctionExpression */ || node.kind === 193 /* ArrowFunction */; + return node.kind === 192 || node.kind === 193; } function getContextualSignatureForFunctionLikeDeclaration(node) { - // Only function expressions, arrow functions, and object literal methods are contextually typed. return isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node) ? getContextualSignature(node) : undefined; @@ -43503,13 +36141,8 @@ var ts; getContextualTypeForObjectLiteralMethod(node) : getApparentTypeOfContextualType(node); } - // Return the contextual signature for a given expression node. A contextual type provides a - // contextual signature if it has a single call signature and if that call signature is non-generic. - // If the contextual type is a union type, get the signature from each type possible and if they are - // all identical ignoring their return type, the result is same signature but with return type as - // union type of return types from these signatures function getContextualSignature(node) { - ts.Debug.assert(node.kind !== 154 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); var type; if (ts.isInJavaScriptFile(node)) { var jsdoc = ts.getJSDocType(node); @@ -43523,7 +36156,7 @@ var ts; if (!type) { return undefined; } - if (!(type.flags & 262144 /* Union */)) { + if (!(type.flags & 262144)) { return getContextualCallSignature(type, node); } var signatureList; @@ -43533,20 +36166,16 @@ var ts; var signature = getContextualCallSignature(current, node); if (signature) { if (!signatureList) { - // This signature will contribute to contextual union signature signatureList = [signature]; } - else if (!compareSignaturesIdentical(signatureList[0], signature, /*partialMatch*/ false, /*ignoreThisTypes*/ true, /*ignoreReturnTypes*/ true, compareTypesIdentical)) { - // Signatures aren't identical, do not use + else if (!compareSignaturesIdentical(signatureList[0], signature, false, true, true, compareTypesIdentical)) { return undefined; } else { - // Use this signature for contextual union signature signatureList.push(signature); } } } - // Result is union of signatures collected (return type is union of return types of this signature set) var result; if (signatureList) { result = cloneSignature(signatureList[0]); @@ -43555,15 +36184,15 @@ var ts; return result; } function checkSpreadExpression(node, checkMode) { - if (languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) { - checkExternalEmitHelpers(node, 1536 /* SpreadIncludes */); + if (languageVersion < 2 && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 1536); } var arrayOrIterableType = checkExpression(node.expression, checkMode); - return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, /*allowStringInput*/ false, /*allowAsyncIterables*/ false); + return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false, false); } function hasDefaultValue(node) { - return (node.kind === 182 /* BindingElement */ && !!node.initializer) || - (node.kind === 200 /* BinaryExpression */ && node.operatorToken.kind === 58 /* EqualsToken */); + return (node.kind === 182 && !!node.initializer) || + (node.kind === 200 && node.operatorToken.kind === 58); } function checkArrayLiteral(node, checkMode) { var elements = node.elements; @@ -43573,22 +36202,10 @@ var ts; var contextualType = getApparentTypeOfContextualType(node); for (var index = 0; index < elements.length; index++) { var e = elements[index]; - if (inDestructuringPattern && e.kind === 204 /* SpreadElement */) { - // Given the following situation: - // var c: {}; - // [...c] = ["", 0]; - // - // c is represented in the tree as a spread element in an array literal. - // But c really functions as a rest element, and its purpose is to provide - // a contextual type for the right hand side of the assignment. Therefore, - // instead of calling checkExpression on "...c", which will give an error - // if c is not iterable/array-like, we need to act as if we are trying to - // get the contextual element type from it. So we do something similar to - // getContextualTypeForElementExpression, which will crucially not error - // if there is no index type / iterated type. + if (inDestructuringPattern && e.kind === 204) { var restArrayType = checkExpression(e.expression, checkMode); - var restElementType = getIndexTypeOfType(restArrayType, 1 /* Number */) || - getIteratedTypeOrElementType(restArrayType, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false, /*checkAssignability*/ false); + var restElementType = getIndexTypeOfType(restArrayType, 1) || + getIteratedTypeOrElementType(restArrayType, undefined, false, false, false); if (restElementType) { elementTypes.push(restElementType); } @@ -43598,11 +36215,9 @@ var ts; var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType); elementTypes.push(type); } - hasSpreadElement = hasSpreadElement || e.kind === 204 /* SpreadElement */; + hasSpreadElement = hasSpreadElement || e.kind === 204; } if (!hasSpreadElement) { - // If array literal is actually a destructuring pattern, mark it as an implied type. We do this such - // that we get the same behavior for "var [x, y] = []" and "[x, y] = []". if (inDestructuringPattern && elementTypes.length) { var type = cloneTypeReference(createTupleType(elementTypes)); type.pattern = node; @@ -43610,9 +36225,7 @@ var ts; } if (contextualType && contextualTypeIsTupleLikeType(contextualType)) { var pattern = contextualType.pattern; - // If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting - // tuple type with the corresponding binding or assignment element types to make the lengths equal. - if (pattern && (pattern.kind === 181 /* ArrayBindingPattern */ || pattern.kind === 183 /* ArrayLiteralExpression */)) { + if (pattern && (pattern.kind === 181 || pattern.kind === 183)) { var patternElements = pattern.elements; for (var i = elementTypes.length; i < patternElements.length; i++) { var patternElement = patternElements[i]; @@ -43620,7 +36233,7 @@ var ts; elementTypes.push(contextualType.typeArguments[i]); } else { - if (patternElement.kind !== 206 /* OmittedExpression */) { + if (patternElement.kind !== 206) { error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType); @@ -43633,67 +36246,42 @@ var ts; } } return createArrayType(elementTypes.length ? - getUnionType(elementTypes, 2 /* Subtype */) : + getUnionType(elementTypes, 2) : strictNullChecks ? implicitNeverType : undefinedWideningType); } function isNumericName(name) { switch (name.kind) { - case 147 /* ComputedPropertyName */: + case 147: return isNumericComputedName(name); - case 71 /* Identifier */: + case 71: return isNumericLiteralName(name.escapedText); - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: + case 8: + case 9: return isNumericLiteralName(name.text); default: return false; } } function isNumericComputedName(name) { - // It seems odd to consider an expression of type Any to result in a numeric name, - // but this behavior is consistent with checkIndexedAccess - return isTypeAssignableToKind(checkComputedPropertyName(name), 168 /* NumberLike */); + return isTypeAssignableToKind(checkComputedPropertyName(name), 168); } function isInfinityOrNaNString(name) { return name === "Infinity" || name === "-Infinity" || name === "NaN"; } function isNumericLiteralName(name) { - // The intent of numeric names is that - // - they are names with text in a numeric form, and that - // - setting properties/indexing with them is always equivalent to doing so with the numeric literal 'numLit', - // acquired by applying the abstract 'ToNumber' operation on the name's text. - // - // The subtlety is in the latter portion, as we cannot reliably say that anything that looks like a numeric literal is a numeric name. - // In fact, it is the case that the text of the name must be equal to 'ToString(numLit)' for this to hold. - // - // Consider the property name '"0xF00D"'. When one indexes with '0xF00D', they are actually indexing with the value of 'ToString(0xF00D)' - // according to the ECMAScript specification, so it is actually as if the user indexed with the string '"61453"'. - // Thus, the text of all numeric literals equivalent to '61543' such as '0xF00D', '0xf00D', '0170015', etc. are not valid numeric names - // because their 'ToString' representation is not equal to their original text. - // This is motivated by ECMA-262 sections 9.3.1, 9.8.1, 11.1.5, and 11.2.1. - // - // Here, we test whether 'ToString(ToNumber(name))' is exactly equal to 'name'. - // The '+' prefix operator is equivalent here to applying the abstract ToNumber operation. - // Applying the 'toString()' method on a number gives us the abstract ToString operation on a number. - // - // Note that this accepts the values 'Infinity', '-Infinity', and 'NaN', and that this is intentional. - // This is desired behavior, because when indexing with them as numeric entities, you are indexing - // with the strings '"Infinity"', '"-Infinity"', and '"NaN"' respectively. return (+name).toString() === name; } function checkComputedPropertyName(node) { var links = getNodeLinks(node.expression); if (!links.resolvedType) { 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 (links.resolvedType.flags & 24576 /* Nullable */ || - !isTypeAssignableToKind(links.resolvedType, 68 /* StringLike */ | 168 /* NumberLike */ | 3072 /* ESSymbolLike */) && + if (links.resolvedType.flags & 24576 || + !isTypeAssignableToKind(links.resolvedType, 68 | 168 | 3072) && !isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) { error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any); } else { - checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, /*reportError*/ true); + checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, true); } } return links.resolvedType; @@ -43701,24 +36289,23 @@ var ts; function getObjectLiteralIndexInfo(propertyNodes, offset, properties, kind) { var propTypes = []; for (var i = 0; i < properties.length; i++) { - if (kind === 0 /* String */ || isNumericName(propertyNodes[i + offset].name)) { + if (kind === 0 || isNumericName(propertyNodes[i + offset].name)) { propTypes.push(getTypeOfSymbol(properties[i])); } } - var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType; - return createIndexInfo(unionType, /*isReadonly*/ false); + var unionType = propTypes.length ? getUnionType(propTypes, 2) : undefinedType; + return createIndexInfo(unionType, false); } function checkObjectLiteral(node, checkMode) { var inDestructuringPattern = ts.isAssignmentTarget(node); - // Grammar checking checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable; var propertiesArray = []; var spread = emptyObjectType; - var propagatedFlags = 33554432 /* FreshLiteral */; + var propagatedFlags = 33554432; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && - (contextualType.pattern.kind === 180 /* ObjectBindingPattern */ || contextualType.pattern.kind === 184 /* ObjectLiteralExpression */); + (contextualType.pattern.kind === 180 || contextualType.pattern.kind === 184); var isInJSFile = ts.isInJavaScriptFile(node) && !ts.isInJsonFile(node); var isJSObjectLiteral = !contextualType && isInJSFile; var typeFlags = 0; @@ -43728,7 +36315,6 @@ var ts; if (isInJSFile) { var decl = ts.getDeclarationOfJSInitializer(node); if (decl) { - // a JS object literal whose declaration's symbol has exports is a JS namespace var symbol = getSymbolOfNode(decl); if (symbol && ts.hasEntries(symbol.exports)) { propertiesTable = symbol.exports; @@ -43742,13 +36328,13 @@ var ts; for (var i = 0; i < node.properties.length; i++) { var memberDecl = node.properties[i]; var member = getSymbolOfNode(memberDecl); - var computedNameType = memberDecl.name && memberDecl.name.kind === 147 /* ComputedPropertyName */ && !ts.isWellKnownSymbolSyntactically(memberDecl.name.expression) ? + var computedNameType = memberDecl.name && memberDecl.name.kind === 147 && !ts.isWellKnownSymbolSyntactically(memberDecl.name.expression) ? checkComputedPropertyName(memberDecl.name) : undefined; - if (memberDecl.kind === 270 /* PropertyAssignment */ || - memberDecl.kind === 271 /* ShorthandPropertyAssignment */ || + if (memberDecl.kind === 270 || + memberDecl.kind === 271 || ts.isObjectLiteralMethod(memberDecl)) { - var type = memberDecl.kind === 270 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) : - memberDecl.kind === 271 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(memberDecl.name, checkMode) : + var type = memberDecl.kind === 270 ? checkPropertyAssignment(memberDecl, checkMode) : + memberDecl.kind === 271 ? checkExpressionForMutableLocation(memberDecl.name, checkMode) : checkObjectLiteralMethod(memberDecl, checkMode); if (isInJSFile) { var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl); @@ -43758,31 +36344,27 @@ var ts; } } typeFlags |= type.flags; - var nameType = computedNameType && computedNameType.flags & 2240 /* StringOrNumberLiteralOrUnique */ ? + var nameType = computedNameType && computedNameType.flags & 2240 ? computedNameType : undefined; var prop = nameType ? - createSymbol(4 /* Property */ | member.flags, getLateBoundNameFromType(nameType), 1024 /* Late */) : - createSymbol(4 /* Property */ | member.flags, member.escapedName); + createSymbol(4 | member.flags, getLateBoundNameFromType(nameType), 1024) : + createSymbol(4 | member.flags, member.escapedName); if (nameType) { prop.nameType = nameType; } if (inDestructuringPattern) { - // If object literal is an assignment pattern and if the assignment pattern specifies a default value - // for the property, make the property optional. - var isOptional = (memberDecl.kind === 270 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) || - (memberDecl.kind === 271 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer); + var isOptional = (memberDecl.kind === 270 && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 271 && memberDecl.objectAssignmentInitializer); if (isOptional) { - prop.flags |= 16777216 /* Optional */; + prop.flags |= 16777216; } } - else if (contextualTypeHasPattern && !(ts.getObjectFlags(contextualType) & 512 /* ObjectLiteralPatternWithComputedProperties */)) { - // If object literal is contextually typed by the implied type of a binding pattern, and if the - // binding pattern specifies a default value for the property, make the property optional. + else if (contextualTypeHasPattern && !(ts.getObjectFlags(contextualType) & 512)) { var impliedProp = getPropertyOfType(contextualType, member.escapedName); if (impliedProp) { - prop.flags |= impliedProp.flags & 16777216 /* Optional */; + prop.flags |= impliedProp.flags & 16777216; } - else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) { + else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0)) { error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType)); } } @@ -43795,12 +36377,12 @@ var ts; prop.target = member; member = prop; } - else if (memberDecl.kind === 272 /* SpreadAssignment */) { - if (languageVersion < 2 /* ES2015 */) { - checkExternalEmitHelpers(memberDecl, 2 /* Assign */); + else if (memberDecl.kind === 272) { + if (languageVersion < 2) { + checkExternalEmitHelpers(memberDecl, 2); } if (propertiesArray.length > 0) { - spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, /*objectFlags*/ 0); + spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, 0); propertiesArray = []; propertiesTable = ts.createSymbolTable(); hasComputedStringProperty = false; @@ -43812,20 +36394,15 @@ var ts; error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types); return errorType; } - spread = getSpreadType(spread, type, node.symbol, propagatedFlags, /*objectFlags*/ 0); + spread = getSpreadType(spread, type, node.symbol, propagatedFlags, 0); offset = i + 1; continue; } else { - // TypeScript 1.0 spec (April 2014) - // A get accessor declaration is processed in the same manner as - // an ordinary function declaration(section 6.1) with no parameters. - // A set accessor declaration is processed in the same manner - // as an ordinary function declaration with a single parameter and a Void return type. - ts.Debug.assert(memberDecl.kind === 156 /* GetAccessor */ || memberDecl.kind === 157 /* SetAccessor */); + ts.Debug.assert(memberDecl.kind === 156 || memberDecl.kind === 157); checkNodeDeferred(memberDecl); } - if (computedNameType && !(computedNameType.flags & 2240 /* StringOrNumberLiteralOrUnique */)) { + if (computedNameType && !(computedNameType.flags & 2240)) { if (isTypeAssignableTo(computedNameType, stringNumberSymbolType)) { if (isTypeAssignableTo(computedNameType, numberType)) { hasComputedNumberProperty = true; @@ -43843,13 +36420,11 @@ var ts; } propertiesArray.push(member); } - // 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 _i = 0, _a = getPropertiesOfType(contextualType); _i < _a.length; _i++) { var prop = _a[_i]; if (!propertiesTable.get(prop.escapedName) && !(spread && getPropertyOfType(spread, prop.escapedName))) { - if (!(prop.flags & 16777216 /* Optional */)) { + if (!(prop.flags & 16777216)) { error(prop.valueDeclaration || prop.bindingElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } propertiesTable.set(prop.escapedName, prop); @@ -43859,44 +36434,42 @@ var ts; } if (spread !== emptyObjectType) { if (propertiesArray.length > 0) { - spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, /*objectFlags*/ 0); + spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, 0); } return spread; } return createObjectLiteralType(); function createObjectLiteralType() { - var stringIndexInfo = isJSObjectLiteral ? jsObjectLiteralIndexInfo : hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 0 /* String */) : undefined; - var numberIndexInfo = hasComputedNumberProperty && !isJSObjectLiteral ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 1 /* Number */) : undefined; + var stringIndexInfo = isJSObjectLiteral ? jsObjectLiteralIndexInfo : hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 0) : undefined; + var numberIndexInfo = hasComputedNumberProperty && !isJSObjectLiteral ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 1) : undefined; var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); - var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 33554432 /* FreshLiteral */; - result.flags |= 268435456 /* ContainsObjectLiteral */ | freshObjectLiteralFlag | (typeFlags & 939524096 /* PropagatingFlags */); - result.objectFlags |= 128 /* ObjectLiteral */; + var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 33554432; + result.flags |= 268435456 | freshObjectLiteralFlag | (typeFlags & 939524096); + result.objectFlags |= 128; if (patternWithComputedProperties) { - result.objectFlags |= 512 /* ObjectLiteralPatternWithComputedProperties */; + result.objectFlags |= 512; } if (inDestructuringPattern) { result.pattern = node; } - if (!(result.flags & 24576 /* Nullable */)) { - propagatedFlags |= (result.flags & 939524096 /* PropagatingFlags */); + if (!(result.flags & 24576)) { + propagatedFlags |= (result.flags & 939524096); } return result; } } function isValidSpreadType(type) { - return !!(type.flags & (3 /* AnyOrUnknown */ | 16777216 /* NonPrimitive */) || - getFalsyFlags(type) & 29120 /* DefinitelyFalsy */ && isValidSpreadType(removeDefinitelyFalsyTypes(type)) || - type.flags & 131072 /* Object */ && !isGenericMappedType(type) || - type.flags & 786432 /* UnionOrIntersection */ && ts.every(type.types, isValidSpreadType)); + return !!(type.flags & (3 | 16777216) || + getFalsyFlags(type) & 29120 && isValidSpreadType(removeDefinitelyFalsyTypes(type)) || + type.flags & 131072 && !isGenericMappedType(type) || + type.flags & 786432 && ts.every(type.types, isValidSpreadType)); } function checkJsxSelfClosingElement(node, checkMode) { checkJsxOpeningLikeElementOrOpeningFragment(node, checkMode); return getJsxElementTypeAt(node) || anyType; } function checkJsxElement(node, checkMode) { - // Check attributes checkJsxOpeningLikeElementOrOpeningFragment(node.openingElement, checkMode); - // Perform resolution on the closing tag so that rename/go to definition/etc work if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) { getIntrinsicTagSymbol(node.closingElement); } @@ -43907,30 +36480,22 @@ var ts; } function checkJsxFragment(node, checkMode) { checkJsxOpeningLikeElementOrOpeningFragment(node.openingFragment, checkMode); - if (compilerOptions.jsx === 2 /* React */ && (compilerOptions.jsxFactory || ts.getSourceFileOfNode(node).pragmas.has("jsx"))) { + if (compilerOptions.jsx === 2 && (compilerOptions.jsxFactory || ts.getSourceFileOfNode(node).pragmas.has("jsx"))) { error(node, compilerOptions.jsxFactory ? ts.Diagnostics.JSX_fragment_is_not_supported_when_using_jsxFactory : ts.Diagnostics.JSX_fragment_is_not_supported_when_using_an_inline_JSX_factory_pragma); } return getJsxElementTypeAt(node) || anyType; } - /** - * Returns true iff the JSX element name would be a valid JS identifier, ignoring restrictions about keywords not being identifiers - */ function isUnhyphenatedJsxName(name) { - // - is the only character supported in JSX attribute names that isn't valid in JavaScript identifiers return !ts.stringContains(name, "-"); } - /** - * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name - */ function isJsxIntrinsicIdentifier(tagName) { - // TODO (yuisu): comment switch (tagName.kind) { - case 185 /* PropertyAccessExpression */: - case 99 /* ThisKeyword */: + case 185: + case 99: return false; - case 71 /* Identifier */: + case 71: return ts.isIntrinsicJsxName(tagName.escapedText); default: return ts.Debug.fail(); @@ -43939,17 +36504,8 @@ var ts; function checkJsxAttribute(node, checkMode) { return node.initializer ? checkExpressionForMutableLocation(node.initializer, checkMode) - : trueType; // is sugar for + : trueType; } - /** - * Get attributes type of the JSX opening-like element. The result is from resolving "attributes" property of the opening-like element. - * - * @param openingLikeElement a JSX opening-like element - * @param filter a function to remove attributes that will not participate in checking whether attributes are assignable - * @return an anonymous type (similar to the one returned by checkObjectLiteral) in which its properties are attributes property. - * @remarks Because this function calls getSpreadType, it needs to use the same checks as checkObjectLiteral, - * which also calls getSpreadType. - */ function createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode) { var attributes = openingLikeElement.attributes; var attributesTable = ts.createSymbolTable(); @@ -43963,7 +36519,7 @@ var ts; var member = attributeDecl.symbol; if (ts.isJsxAttribute(attributeDecl)) { var exprType = checkJsxAttribute(attributeDecl, checkMode); - var attributeSymbol = createSymbol(4 /* Property */ | 33554432 /* Transient */ | member.flags, member.escapedName); + var attributeSymbol = createSymbol(4 | 33554432 | member.flags, member.escapedName); attributeSymbol.declarations = member.declarations; attributeSymbol.parent = member.parent; if (member.valueDeclaration) { @@ -43977,9 +36533,9 @@ var ts; } } else { - ts.Debug.assert(attributeDecl.kind === 264 /* JsxSpreadAttribute */); + ts.Debug.assert(attributeDecl.kind === 264); if (attributesTable.size > 0) { - spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, /*typeFlags*/ 0, 4096 /* JsxAttributes */); + spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, 0, 4096); attributesTable = ts.createSymbolTable(); } var exprType = checkExpressionCached(attributeDecl.expression, checkMode); @@ -43987,7 +36543,7 @@ var ts; hasSpreadAnyType = true; } if (isValidSpreadType(exprType)) { - spread = getSpreadType(spread, exprType, openingLikeElement.symbol, /*typeFlags*/ 0, 4096 /* JsxAttributes */); + spread = getSpreadType(spread, exprType, openingLikeElement.symbol, 0, 4096); } else { typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType; @@ -43996,29 +36552,23 @@ var ts; } if (!hasSpreadAnyType) { if (attributesTable.size > 0) { - spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, /*typeFlags*/ 0, 4096 /* JsxAttributes */); + spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, 0, 4096); } } - // Handle children attribute - var parent = openingLikeElement.parent.kind === 255 /* JsxElement */ ? openingLikeElement.parent : undefined; - // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement + var parent = openingLikeElement.parent.kind === 255 ? openingLikeElement.parent : undefined; if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) { var childrenTypes = checkJsxChildren(parent, checkMode); if (!hasSpreadAnyType && jsxChildrenPropertyName && jsxChildrenPropertyName !== "") { - // Error if there is a attribute named "children" explicitly specified and children element. - // This is because children element will overwrite the value from attributes. - // Note: we will not warn "children" attribute overwritten if "children" attribute is specified in object spread. if (explicitlySpecifyChildrenAttribute) { error(attributes, ts.Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, ts.unescapeLeadingUnderscores(jsxChildrenPropertyName)); } - // If there are children in the body of JSX element, create dummy attribute "children" with the union of children types so that it will pass the attribute checking process - var childrenPropSymbol = createSymbol(4 /* Property */ | 33554432 /* Transient */, jsxChildrenPropertyName); + var childrenPropSymbol = createSymbol(4 | 33554432, jsxChildrenPropertyName); childrenPropSymbol.type = childrenTypes.length === 1 ? childrenTypes[0] : createArrayType(getUnionType(childrenTypes)); var childPropMap = ts.createSymbolTable(); childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol); - spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, /*typeFlags*/ 0, 4096 /* JsxAttributes */); + spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, undefined, undefined), attributes.symbol, 0, 4096); } } if (hasSpreadAnyType) { @@ -44028,15 +36578,10 @@ var ts; return getIntersectionType([typeToIntersect, spread]); } return typeToIntersect || (spread === emptyObjectType ? createJsxAttributesType() : spread); - /** - * Create anonymous type from given attributes symbol table. - * @param symbol a symbol of JsxAttributes containing attributes corresponding to attributesTable - * @param attributesTable a symbol table of attributes property - */ function createJsxAttributesType() { - var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined); - result.flags |= 268435456 /* ContainsObjectLiteral */; - result.objectFlags |= 128 /* ObjectLiteral */ | 4096 /* JsxAttributes */; + var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, undefined, undefined); + result.flags |= 268435456; + result.objectFlags |= 128 | 4096; return result; } } @@ -44044,9 +36589,7 @@ var ts; var childrenTypes = []; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; - // In React, JSX text that contains only whitespaces will be ignored so we don't want to type-check that - // because then type of children property will have constituent of string type. - if (child.kind === 10 /* JsxText */) { + if (child.kind === 10) { if (!child.containsOnlyWhiteSpaces) { childrenTypes.push(stringType); } @@ -44057,46 +36600,32 @@ var ts; } return childrenTypes; } - /** - * Check attributes property of opening-like element. This function is called during chooseOverload to get call signature of a JSX opening-like element. - * (See "checkApplicableSignatureForJsxOpeningLikeElement" for how the function is used) - * @param node a JSXAttributes to be resolved of its type - */ function checkJsxAttributes(node, checkMode) { return createJsxAttributesTypeFromAttributesProperty(node.parent, checkMode); } function getJsxType(name, location) { var namespace = getJsxNamespaceAt(location); var exports = namespace && getExportsOfSymbol(namespace); - var typeSymbol = exports && getSymbol(exports, name, 67901928 /* Type */); + var typeSymbol = exports && getSymbol(exports, name, 67901928); return typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType; } - /** - * Looks up an intrinsic tag name and returns a symbol that either points to an intrinsic - * property (in which case nodeLinks.jsxFlags will be IntrinsicNamedElement) or an intrinsic - * string index signature (in which case nodeLinks.jsxFlags will be IntrinsicIndexedElement). - * May also return unknownSymbol if both of these lookups fail. - */ function getIntrinsicTagSymbol(node) { var links = getNodeLinks(node); if (!links.resolvedSymbol) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, node); if (intrinsicElementsType !== errorType) { - // Property case if (!ts.isIdentifier(node.tagName)) return ts.Debug.fail(); var intrinsicProp = getPropertyOfType(intrinsicElementsType, node.tagName.escapedText); if (intrinsicProp) { - links.jsxFlags |= 1 /* IntrinsicNamedElement */; + links.jsxFlags |= 1; return links.resolvedSymbol = intrinsicProp; } - // Intrinsic string indexer case - var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */); + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); if (indexSignatureType) { - links.jsxFlags |= 2 /* IntrinsicIndexedElement */; + links.jsxFlags |= 2; return links.resolvedSymbol = intrinsicElementsType.symbol; } - // Wasn't found error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(node.tagName), "JSX." + JsxNames.IntrinsicElements); return links.resolvedSymbol = unknownSymbol; } @@ -44117,7 +36646,7 @@ var ts; var signature = signatures_3[_i]; if (signature.typeParameters) { var isJavascript = ts.isInJavaScriptFile(node); - var typeArgumentInstantiated = getJsxSignatureTypeArgumentInstantiation(signature, node, isJavascript, /*reportErrors*/ false); + var typeArgumentInstantiated = getJsxSignatureTypeArgumentInstantiation(signature, node, isJavascript, false); if (typeArgumentInstantiated) { hasTypeArgumentError = false; instantiatedSignatures.push(typeArgumentInstantiated); @@ -44126,7 +36655,7 @@ var ts; if (node.typeArguments && hasCorrectTypeArgumentArity(signature, node.typeArguments)) { candidateForTypeArgumentError = signature; } - var inferenceContext = createInferenceContext(signature.typeParameters, signature, /*flags*/ isJavascript ? 4 /* AnyDefault */ : 0 /* None */); + var inferenceContext = createInferenceContext(signature.typeParameters, signature, isJavascript ? 4 : 0); var typeArguments = inferJsxTypeArguments(signature, node, inferenceContext); instantiatedSignatures.push(getSignatureInstantiation(signature, typeArguments, isJavascript)); } @@ -44137,9 +36666,8 @@ var ts; } if (node.typeArguments && hasTypeArgumentError) { if (candidateForTypeArgumentError) { - checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, /*reportErrors*/ true); + checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, true); } - // Length check to avoid issuing an arity error on length=0, the "Type argument list cannot be empty" grammar error alone is fine else if (node.typeArguments.length !== 0) { diagnostics.add(getTypeArgumentArityError(node, signatures, node.typeArguments)); } @@ -44162,52 +36690,32 @@ var ts; } function getJsxNamespaceAt(location) { var namespaceName = getJsxNamespace(location); - var resolvedNamespace = resolveName(location, namespaceName, 1920 /* Namespace */, /*diagnosticMessage*/ undefined, namespaceName, /*isUse*/ false); + var resolvedNamespace = resolveName(location, namespaceName, 1920, undefined, namespaceName, false); if (resolvedNamespace) { - var candidate = getSymbol(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, 1920 /* Namespace */); + var candidate = getSymbol(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, 1920); if (candidate) { return candidate; } } - // JSX global fallback - return getGlobalSymbol(JsxNames.JSX, 1920 /* Namespace */, /*diagnosticMessage*/ undefined); // TODO: GH#18217 + return getGlobalSymbol(JsxNames.JSX, 1920, undefined); } - /** - * Look into JSX namespace and then look for container with matching name as nameOfAttribPropContainer. - * Get a single property from that container if existed. Report an error if there are more than one property. - * - * @param nameOfAttribPropContainer a string of value JsxNames.ElementAttributesPropertyNameContainer or JsxNames.ElementChildrenAttributeNameContainer - * if other string is given or the container doesn't exist, return undefined. - */ function getNameFromJsxElementAttributesContainer(nameOfAttribPropContainer, jsxNamespace) { - // JSX.ElementAttributesProperty | JSX.ElementChildrenAttribute [symbol] - var jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol(jsxNamespace.exports, nameOfAttribPropContainer, 67901928 /* Type */); - // JSX.ElementAttributesProperty | JSX.ElementChildrenAttribute [type] + var jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol(jsxNamespace.exports, nameOfAttribPropContainer, 67901928); var jsxElementAttribPropInterfaceType = jsxElementAttribPropInterfaceSym && getDeclaredTypeOfSymbol(jsxElementAttribPropInterfaceSym); - // The properties of JSX.ElementAttributesProperty | JSX.ElementChildrenAttribute var propertiesOfJsxElementAttribPropInterface = jsxElementAttribPropInterfaceType && getPropertiesOfType(jsxElementAttribPropInterfaceType); if (propertiesOfJsxElementAttribPropInterface) { - // Element Attributes has zero properties, so the element attributes type will be the class instance type if (propertiesOfJsxElementAttribPropInterface.length === 0) { return ""; } - // Element Attributes has one property, so the element attributes type will be the type of the corresponding - // property of the class instance type else if (propertiesOfJsxElementAttribPropInterface.length === 1) { return propertiesOfJsxElementAttribPropInterface[0].escapedName; } else if (propertiesOfJsxElementAttribPropInterface.length > 1) { - // More than one property on ElementAttributesProperty is an error error(jsxElementAttribPropInterfaceSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, ts.unescapeLeadingUnderscores(nameOfAttribPropContainer)); } } return undefined; } - /// e.g. "props" for React.d.ts, - /// or 'undefined' if ElementAttributesProperty doesn't exist (which means all - /// non-intrinsic elements' attributes type is 'any'), - /// or '' if it has 0 properties (which means every - /// non-intrinsic elements' attributes type is the element instance type) function getJsxElementPropertiesName(jsxNamespace) { return getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer, jsxNamespace); } @@ -44218,7 +36726,7 @@ var ts; if (!propsType) { return undefined; } - if (propsType.flags & 524288 /* Intersection */) { + if (propsType.flags & 524288) { var propsApparentType = []; for (var _i = 0, _a = propsType.types; _i < _a.length; _i++) { var t = _a[_i]; @@ -44228,29 +36736,17 @@ var ts; } return getApparentType(propsType); } - /** - * Get JSX attributes type by trying to resolve openingLikeElement as a stateless function component. - * Return only attributes type of successfully resolved call signature. - * This function assumes that the caller handled other possible element type of the JSX element (e.g. stateful component) - * Unlike tryGetAllJsxStatelessFunctionAttributesType, this function is a default behavior of type-checkers. - * @param openingLikeElement a JSX opening-like element to find attributes type - * @param elementType a type of the opening-like element. This elementType can't be an union type - * @param elemInstanceType an element instance type (the result of newing or invoking this tag) - * @param elementClassType a JSX-ElementClass type. This is a result of looking up ElementClass interface in the JSX global - */ function defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) { - ts.Debug.assert(!(elementType.flags & 262144 /* Union */)); + ts.Debug.assert(!(elementType.flags & 262144)); if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) { var jsxStatelessElementType = getJsxStatelessElementTypeAt(openingLikeElement); if (jsxStatelessElementType) { - // We don't call getResolvedSignature here because we have already resolve the type of JSX Element. - var callSignature = getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, /*candidatesOutArray*/ undefined); + var callSignature = getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, undefined); if (callSignature !== unknownSignature) { var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); paramType = getApparentTypeOfJsxPropsType(paramType); if (callReturnType && isTypeAssignableTo(callReturnType, jsxStatelessElementType)) { - // Intersect in JSX.IntrinsicAttributes if it exists var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, openingLikeElement); if (intrinsicAttributes !== errorType) { paramType = intersectTypes(intrinsicAttributes, paramType); @@ -44262,23 +36758,11 @@ var ts; } return undefined; } - /** - * Get JSX attributes type by trying to resolve openingLikeElement as a stateless function component. - * Return all attributes type of resolved call signature including candidate signatures. - * This function assumes that the caller handled other possible element type of the JSX element. - * This function is a behavior used by language service when looking up completion in JSX element. - * @param openingLikeElement a JSX opening-like element to find attributes type - * @param elementType a type of the opening-like element. This elementType can't be an union type - * @param elemInstanceType an element instance type (the result of newing or invoking this tag) - * @param elementClassType a JSX-ElementClass type. This is a result of looking up ElementClass interface in the JSX global - */ function tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) { - ts.Debug.assert(!(elementType.flags & 262144 /* Union */)); + ts.Debug.assert(!(elementType.flags & 262144)); if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) { - // Is this is a stateless function component? See if its single signature's return type is assignable to the JSX Element Type var jsxStatelessElementType = getJsxStatelessElementTypeAt(openingLikeElement); if (jsxStatelessElementType) { - // We don't call getResolvedSignature because here we have already resolve the type of JSX Element. var candidatesOutArray = []; getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray); var result = void 0; @@ -44286,7 +36770,6 @@ var ts; for (var _i = 0, candidatesOutArray_1 = candidatesOutArray; _i < candidatesOutArray_1.length; _i++) { var candidate = candidatesOutArray_1[_i]; var callReturnType = getReturnTypeOfSignature(candidate); - // TODO: GH#18217: callReturnType should always be defined... var paramType = callReturnType && (candidate.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(candidate.parameters[0])); paramType = getApparentTypeOfJsxPropsType(paramType); if (callReturnType && isTypeAssignableTo(callReturnType, jsxStatelessElementType)) { @@ -44295,7 +36778,7 @@ var ts; var attribute = _b[_a]; if (ts.isJsxAttribute(attribute) && isUnhyphenatedJsxName(attribute.name.escapedText) && - !getPropertyOfType(paramType, attribute.name.escapedText)) { // TODO: GH#18217 + !getPropertyOfType(paramType, attribute.name.escapedText)) { shouldBeCandidate = false; break; } @@ -44306,11 +36789,9 @@ var ts; allMatchingAttributesType = intersectTypes(allMatchingAttributesType, paramType); } } - // If we can't find any matching, just return everything. if (!result) { result = allMatchingAttributesType; } - // Intersect in JSX.IntrinsicAttributes if it exists var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, openingLikeElement); if (intrinsicAttributes !== errorType) { result = intersectTypes(intrinsicAttributes, result); @@ -44333,62 +36814,34 @@ var ts; return links.resolvedSignatures.get(cacheKey); } links.resolvedSignatures.set(cacheKey, resolvingSignaturesArray); - // Resolve the signatures, preferring constructor - var signatures = getSignaturesOfType(elementType, 1 /* Construct */); + var signatures = getSignaturesOfType(elementType, 1); if (signatures.length === 0) { - // No construct signatures, try call signatures - signatures = getSignaturesOfType(elementType, 0 /* Call */); + signatures = getSignaturesOfType(elementType, 0); if (signatures.length === 0) { - // We found no signatures at all, which is an error if (reportErrors) { error(openingLikeElement.tagName, ts.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, ts.getTextOfNode(openingLikeElement.tagName)); } return; } } - // Instantiate in context of source type var results = instantiateJsxSignatures(openingLikeElement, signatures); links.resolvedSignatures.set(cacheKey, results); return results; } - /** - * Resolve attributes type of the given opening-like element. The attributes type is a type of attributes associated with the given elementType. - * For instance: - * declare function Foo(attr: { p1: string}): JSX.Element; - * ; // This function will try resolve "Foo" and return an attributes type of "Foo" which is "{ p1: string }" - * - * The function is intended to initially be called from getAttributesTypeFromJsxOpeningLikeElement which already handle JSX-intrinsic-element.. - * This function will try to resolve custom JSX attributes type in following order: string literal, stateless function, and stateful component - * - * @param openingLikeElement a non-intrinsic JSXOPeningLikeElement - * @param shouldIncludeAllStatelessAttributesType a boolean indicating whether to include all attributes types from all stateless function signature - * @param sourceAttributesType Is the attributes type the user passed, and is used to create inferences in the target type if present - * @param elementType an instance type of the given opening-like element. If undefined, the function will check type openinglikeElement's tagname. - * @param elementClassType a JSX-ElementClass type. This is a result of looking up ElementClass interface in the JSX global (imported from react.d.ts) - * @return attributes type if able to resolve the type of node - * anyType if there is no type ElementAttributesProperty or there is an error - * emptyObjectType if there is no "prop" in the element instance type - */ function resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, elementType, elementClassType) { - if (elementType.flags & 262144 /* Union */) { + if (elementType.flags & 262144) { var types = elementType.types; return getUnionType(types.map(function (type) { return resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, type, elementClassType); - }), 2 /* Subtype */); + }), 2); } - // Shortcircuit any if (isTypeAny(elementType)) { return elementType; } - // If the elemType is a string type, we have to return anyType to prevent an error downstream as we will try to find construct or call signature of the type - else if (elementType.flags & 4 /* String */) { + else if (elementType.flags & 4) { return anyType; } - else if (elementType.flags & 64 /* StringLiteral */) { - // If the elemType is a stringLiteral type, we can then provide a check to make sure that the string literal type is one of the Jsx intrinsic element type - // For example: - // var CustomTag: "h1" = "h1"; - // Hello World + else if (elementType.flags & 64) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, openingLikeElement); if (intrinsicElementsType !== errorType) { var stringLiteralTypeName = elementType.value; @@ -44396,51 +36849,41 @@ var ts; if (intrinsicProp) { return getTypeOfSymbol(intrinsicProp); } - var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */); + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); if (indexSignatureType) { return indexSignatureType; } error(openingLikeElement, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); } - // If we need to report an error, we already done so here. So just return any to prevent any more error downstream return anyType; } - // Get the element instance type (the result of newing or invoking this tag) - var instantiatedSignatures = getInstantiatedJsxSignatures(openingLikeElement, elementType, /*reportErrors*/ true); + var instantiatedSignatures = getInstantiatedJsxSignatures(openingLikeElement, elementType, true); if (!ts.length(instantiatedSignatures)) { return errorType; } - var elemInstanceType = getUnionType(instantiatedSignatures.map(getReturnTypeOfSignature), 2 /* Subtype */); - // If we should include all stateless attributes type, then get all attributes type from all stateless function signature. - // Otherwise get only attributes type from the signature picked by choose-overload logic. + var elemInstanceType = getUnionType(instantiatedSignatures.map(getReturnTypeOfSignature), 2); var statelessAttributesType = shouldIncludeAllStatelessAttributesType ? tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) : defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType); if (statelessAttributesType) { return statelessAttributesType; } - // Issue an error if this return type isn't assignable to JSX.ElementClass if (elementClassType) { checkTypeRelatedTo(elemInstanceType, elementClassType, assignableRelation, openingLikeElement, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); } var isJs = ts.isInJavaScriptFile(openingLikeElement); - return getUnionType(instantiatedSignatures.map(function (sig) { return getJsxPropsTypeFromClassType(sig, isJs, openingLikeElement, /*reportErrors*/ true); })); + return getUnionType(instantiatedSignatures.map(function (sig) { return getJsxPropsTypeFromClassType(sig, isJs, openingLikeElement, true); })); } - /** - * Get attributes type of the given intrinsic opening-like Jsx element by resolving the tag name. - * The function is intended to be called from a function which has checked that the opening element is an intrinsic element. - * @param node an intrinsic JSX opening-like element - */ function getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node) { ts.Debug.assert(isJsxIntrinsicIdentifier(node.tagName)); var links = getNodeLinks(node); if (!links.resolvedJsxElementAttributesType) { var symbol = getIntrinsicTagSymbol(node); - if (links.jsxFlags & 1 /* IntrinsicNamedElement */) { + if (links.jsxFlags & 1) { return links.resolvedJsxElementAttributesType = getTypeOfSymbol(symbol); } - else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) { - return links.resolvedJsxElementAttributesType = getIndexInfoOfSymbol(symbol, 0 /* String */).type; + else if (links.jsxFlags & 2) { + return links.resolvedJsxElementAttributesType = getIndexInfoOfSymbol(symbol, 0).type; } else { return links.resolvedJsxElementAttributesType = errorType; @@ -44448,48 +36891,25 @@ var ts; } return links.resolvedJsxElementAttributesType; } - /** - * Get attributes type of the given custom opening-like JSX element. - * This function is intended to be called from a caller that handles intrinsic JSX element already. - * @param node a custom JSX opening-like element - * @param shouldIncludeAllStatelessAttributesType a boolean value used by language service to get all possible attributes type from an overload stateless function component - */ function getCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType) { return resolveCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType, checkExpression(node.tagName), getJsxElementClassTypeAt(node)); } - /** - * Get all possible attributes type, especially from an overload stateless function component, of the given JSX opening-like element. - * This function is called by language service (see: completions-tryGetGlobalSymbols). - * @param node a JSX opening-like element to get attributes type for - */ function getAllAttributesTypeFromJsxOpeningLikeElement(node) { if (isJsxIntrinsicIdentifier(node.tagName)) { return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); } else { - // Because in language service, the given JSX opening-like element may be incomplete and therefore, - // we can't resolve to exact signature if the element is a stateless function component so the best thing to do is return all attributes type from all overloads. - return getCustomJsxElementAttributesType(node, /*shouldIncludeAllStatelessAttributesType*/ true); + return getCustomJsxElementAttributesType(node, true); } } - /** - * Get the attributes type, which indicates the attributes that are valid on the given JSXOpeningLikeElement. - * @param node a JSXOpeningLikeElement node - * @return an attributes type of the given node - */ function getAttributesTypeFromJsxOpeningLikeElement(node) { if (isJsxIntrinsicIdentifier(node.tagName)) { return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); } else { - return getCustomJsxElementAttributesType(node, /*shouldIncludeAllStatelessAttributesType*/ false); + return getCustomJsxElementAttributesType(node, false); } } - /** - * Given a JSX attribute, returns the symbol for the corresponds property - * of the element attributes type. Will return unknownSymbol for attributes - * that have no matching element attributes type property. - */ function getJsxAttributePropertySymbol(attrib) { var attributesType = getAttributesTypeFromJsxOpeningLikeElement(attrib.parent.parent); var prop = getPropertyOfType(attributesType, attrib.name.escapedText); @@ -44510,16 +36930,12 @@ var ts; return getUnionType([jsxElementType, nullType]); } } - /** - * Returns all the properties of the Jsx.IntrinsicElements interface - */ function getJsxIntrinsicTagNamesAt(location) { var intrinsics = getJsxType(JsxNames.IntrinsicElements, location); return intrinsics ? getPropertiesOfType(intrinsics) : ts.emptyArray; } function checkJsxPreconditions(errorNode) { - // Preconditions for using JSX - if ((compilerOptions.jsx || 0 /* None */) === 0 /* None */) { + if ((compilerOptions.jsx || 0) === 0) { error(errorNode, ts.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided); } if (getJsxElementTypeAt(errorNode) === undefined) { @@ -44534,18 +36950,13 @@ var ts; checkGrammarJsxElement(node); } checkJsxPreconditions(node); - // The reactNamespace/jsxFactory's root symbol should be marked as 'used' so we don't incorrectly elide its import. - // And if there is no reactNamespace/jsxFactory's symbol in scope when targeting React emit, we should issue an error. - var reactRefErr = diagnostics && compilerOptions.jsx === 2 /* React */ ? ts.Diagnostics.Cannot_find_name_0 : undefined; + var reactRefErr = diagnostics && compilerOptions.jsx === 2 ? ts.Diagnostics.Cannot_find_name_0 : undefined; var reactNamespace = getJsxNamespace(node); var reactLocation = isNodeOpeningLikeElement ? node.tagName : node; - var reactSym = resolveName(reactLocation, reactNamespace, 67216319 /* Value */, reactRefErr, reactNamespace, /*isUse*/ true); + var reactSym = resolveName(reactLocation, reactNamespace, 67216319, reactRefErr, reactNamespace, true); if (reactSym) { - // Mark local symbol as referenced here because it might not have been marked - // if jsx emit was not react as there wont be error being emitted - reactSym.isReferenced = 67108863 /* All */; - // If react symbol is alias, mark it as refereced - if (reactSym.flags & 2097152 /* Alias */ && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) { + reactSym.isReferenced = 67108863; + if (reactSym.flags & 2097152 && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) { markAliasSymbolAsReferenced(reactSym); } } @@ -44556,31 +36967,17 @@ var ts; checkJsxChildren(node.parent); } } - /** - * Check if a property with the given name is known anywhere in the given type. In an object type, a property - * is considered known if - * 1. the object type is empty and the check is for assignability, or - * 2. if the object type has index signatures, or - * 3. if the property is actually declared in the object type - * (this means that 'toString', for example, is not usually a known property). - * 4. In a union or intersection type, - * a property is considered known if it is known in any constituent type. - * @param targetType a type to search a given name in - * @param name a property name to search - * @param isComparingJsxAttributes a boolean flag indicating whether we are searching in JsxAttributesType - */ function isKnownProperty(targetType, name, isComparingJsxAttributes) { - if (targetType.flags & 131072 /* Object */) { + if (targetType.flags & 131072) { var resolved = resolveStructuredTypeMembers(targetType); if (resolved.stringIndexInfo || resolved.numberIndexInfo && isNumericLiteralName(name) || getPropertyOfObjectType(targetType, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { - // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known. return true; } } - else if (targetType.flags & 786432 /* UnionOrIntersection */) { + else if (targetType.flags & 786432) { for (var _i = 0, _a = targetType.types; _i < _a.length; _i++) { var t = _a[_i]; if (isKnownProperty(t, name, isComparingJsxAttributes)) { @@ -44590,30 +36987,12 @@ var ts; } return false; } - /** - * Check whether the given attributes of JSX opening-like element is assignable to the tagName attributes. - * Get the attributes type of the opening-like element through resolving the tagName, "target attributes" - * Check assignablity between given attributes property, "source attributes", and the "target attributes" - * @param openingLikeElement an opening-like JSX element to check its JSXAttributes - */ function checkJsxAttributesAssignableToTagNameAttributes(openingLikeElement, checkMode) { - // The function involves following steps: - // 1. Figure out expected attributes type by resolving tagName of the JSX opening-like element, targetAttributesType. - // During these steps, we will try to resolve the tagName as intrinsic name, stateless function, stateful component (in the order) - // 2. Solved JSX attributes type given by users, sourceAttributesType, which is by resolving "attributes" property of the JSX opening-like element. - // 3. Check if the two are assignable to each other - // targetAttributesType is a type of an attribute from resolving tagName of an opening-like JSX element. var targetAttributesType = isJsxIntrinsicIdentifier(openingLikeElement.tagName) ? getIntrinsicAttributesTypeFromJsxOpeningLikeElement(openingLikeElement) : - getCustomJsxElementAttributesType(openingLikeElement, /*shouldIncludeAllStatelessAttributesType*/ false); - // sourceAttributesType is a type of an attributes properties. - // i.e
- // attr1 and attr2 are treated as JSXAttributes attached in the JsxOpeningLikeElement as "attributes". + getCustomJsxElementAttributesType(openingLikeElement, false); var sourceAttributesType = createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode); - // Check if sourceAttributesType assignable to targetAttributesType though this check will allow excess properties var isSourceAttributeTypeAssignableToTarget = isTypeAssignableTo(sourceAttributesType, targetAttributesType); - // After we check for assignability, we will do another pass to check that all explicitly specified attributes have correct name corresponding in targetAttributeType. - // This will allow excess properties in spread type as it is very common pattern to spread outer attributes into React component in its render method. if (isSourceAttributeTypeAssignableToTarget && !isTypeAny(sourceAttributesType) && !isTypeAny(targetAttributesType)) { for (var _i = 0, _a = openingLikeElement.attributes.properties; _i < _a.length; _i++) { var attribute = _a[_i]; @@ -44622,15 +37001,13 @@ var ts; } var attrName = attribute.name; var isNotIgnoredJsxProperty = (isUnhyphenatedJsxName(ts.idText(attrName)) || !!(getPropertyOfType(targetAttributesType, attrName.escapedText))); - if (isNotIgnoredJsxProperty && !isKnownProperty(targetAttributesType, attrName.escapedText, /*isComparingJsxAttributes*/ true)) { + if (isNotIgnoredJsxProperty && !isKnownProperty(targetAttributesType, attrName.escapedText, true)) { error(attribute, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(attrName), typeToString(targetAttributesType)); - // We break here so that errors won't be cascading break; } } } else if (!isSourceAttributeTypeAssignableToTarget) { - // Assignability failure - check each prop individually, and if that fails, fall back on the bad error span if (ts.length(openingLikeElement.attributes.properties)) { var reportedError = false; var _loop_8 = function (prop) { @@ -44639,9 +37016,8 @@ var ts; var name = ts.idText(prop.name); var sourcePropType = getIndexedAccessType(sourceAttributesType, getLiteralType(name)); var targetPropType = getIndexedAccessType(targetAttributesType, getLiteralType(name)); - var rootChain = function () { return ts.chainDiagnosticMessages( - /*details*/ undefined, ts.Diagnostics.Types_of_property_0_are_incompatible, name); }; - if (!checkTypeAssignableTo(sourcePropType, targetPropType, prop, /*headMessage*/ undefined, rootChain)) { + var rootChain = function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Types_of_property_0_are_incompatible, name); }; + if (!checkTypeAssignableTo(sourcePropType, targetPropType, prop, undefined, rootChain)) { reportedError = true; } }; @@ -44653,7 +37029,6 @@ var ts; return; } } - // Report fallback error on just the component name checkTypeAssignableTo(sourceAttributesType, targetAttributesType, openingLikeElement.tagName); } } @@ -44669,86 +37044,56 @@ var ts; return errorType; } } - // If a symbol is a synthesized symbol with no value declaration, we assume it is a property. Example of this are the synthesized - // '.prototype' property as well as synthesized tuple index properties. function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 152 /* PropertyDeclaration */; + return s.valueDeclaration ? s.valueDeclaration.kind : 152; } function getDeclarationNodeFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : 0; } - /** - * Return whether this symbol is a member of a prototype somewhere - * Note that this is not tracked well within the compiler, so the answer may be incorrect. - */ function isPrototypeProperty(symbol) { - if (symbol.flags & 8192 /* Method */ || ts.getCheckFlags(symbol) & 4 /* SyntheticMethod */) { + if (symbol.flags & 8192 || ts.getCheckFlags(symbol) & 4) { return true; } if (ts.isInJavaScriptFile(symbol.valueDeclaration)) { var parent = symbol.valueDeclaration.parent; return parent && ts.isBinaryExpression(parent) && - ts.getSpecialPropertyAssignmentKind(parent) === 3 /* PrototypeProperty */; + ts.getSpecialPropertyAssignmentKind(parent) === 3; } } - /** - * Check whether the requested property access is valid. - * Returns true if node is a valid property access, and false otherwise. - * @param node The node to be checked. - * @param left The left hand side of the property access (e.g.: the super in `super.foo`). - * @param type The type of left. - * @param prop The symbol for the right hand side of the property access. - */ function checkPropertyAccessibility(node, left, type, prop) { var flags = ts.getDeclarationModifierFlagsFromSymbol(prop); - var errorNode = node.kind === 185 /* PropertyAccessExpression */ || node.kind === 232 /* VariableDeclaration */ ? + var errorNode = node.kind === 185 || node.kind === 232 ? node.name : - node.kind === 179 /* ImportType */ ? + node.kind === 179 ? node : node.right; - if (ts.getCheckFlags(prop) & 256 /* ContainsPrivate */) { - // Synthetic property with private constituent property + if (ts.getCheckFlags(prop) & 256) { error(errorNode, ts.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1, symbolToString(prop), typeToString(type)); return false; } - if (left.kind === 97 /* SuperKeyword */) { - // TS 1.0 spec (April 2014): 4.8.2 - // - In a constructor, instance member function, instance member accessor, or - // instance member variable initializer where this references a derived class instance, - // a super property access is permitted and must specify a public instance member function of the base class. - // - In a static member function or static member accessor - // where this references the constructor function object of a derived class, - // a super property access is permitted and must specify a public static member function of the base class. - if (languageVersion < 2 /* ES2015 */) { + if (left.kind === 97) { + if (languageVersion < 2) { if (symbolHasNonMethodDeclaration(prop)) { error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); return false; } } - if (flags & 128 /* Abstract */) { - // A method cannot be accessed in a super property access if the method is abstract. - // This error could mask a private property access error. But, a member - // cannot simultaneously be private and abstract, so this will trigger an - // additional error elsewhere. + if (flags & 128) { error(errorNode, ts.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop))); return false; } } - // Referencing abstract properties within their own constructors is not allowed - if ((flags & 128 /* Abstract */) && ts.isThisProperty(node) && symbolHasNonMethodDeclaration(prop)) { + if ((flags & 128) && ts.isThisProperty(node) && symbolHasNonMethodDeclaration(prop)) { var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)); if (declaringClassDeclaration && isNodeWithinConstructorOfClass(node, declaringClassDeclaration)) { - error(errorNode, ts.Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), ts.getTextOfIdentifierOrLiteral(declaringClassDeclaration.name)); // TODO: GH#18217 + error(errorNode, ts.Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), ts.getTextOfIdentifierOrLiteral(declaringClassDeclaration.name)); return false; } } - // Public properties are otherwise accessible. - if (!(flags & 24 /* NonPublicAccessibilityModifier */)) { + if (!(flags & 24)) { return true; } - // Property is known to be private or protected at this point - // Private property is accessible if the property is within the declaring class - if (flags & 8 /* Private */) { + if (flags & 8) { var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)); if (!isNodeWithinClass(node, declaringClassDeclaration)) { error(errorNode, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop))); @@ -44756,36 +37101,27 @@ var ts; } return true; } - // Property is known to be protected at this point - // All protected properties of a supertype are accessible in a super access - if (left.kind === 97 /* SuperKeyword */) { + if (left.kind === 97) { return true; } - // Find the first enclosing class that has the declaring classes of the protected constituents - // of the property as base classes var enclosingClass = forEachEnclosingClass(node, function (enclosingDeclaration) { var enclosingClass = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingDeclaration)); return isClassDerivedFromDeclaringClasses(enclosingClass, prop) ? enclosingClass : undefined; }); - // A protected property is accessible if the property is within the declaring class or classes derived from it if (!enclosingClass) { - // allow PropertyAccessibility if context is in function with this parameter - // static member access is disallow var thisParameter = void 0; - if (flags & 32 /* Static */ || !(thisParameter = getThisParameterFromNodeContext(node)) || !thisParameter.type) { + if (flags & 32 || !(thisParameter = getThisParameterFromNodeContext(node)) || !thisParameter.type) { error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || type)); return false; } var thisType = getTypeFromTypeNode(thisParameter.type); - enclosingClass = ((thisType.flags & 65536 /* TypeParameter */) ? getConstraintFromTypeParameter(thisType) : thisType); + enclosingClass = ((thisType.flags & 65536) ? getConstraintFromTypeParameter(thisType) : thisType); } - // No further restrictions for static properties - if (flags & 32 /* Static */) { + if (flags & 32) { return true; } - if (type.flags & 65536 /* TypeParameter */) { - // get the original type -- represented as the type constraint of the 'this' type - type = type.isThisType ? getConstraintOfTypeParameter(type) : getBaseConstraintOfType(type); // TODO: GH#18217 Use a different variable that's allowed to be undefined + if (type.flags & 65536) { + type = type.isThisType ? getConstraintOfTypeParameter(type) : getBaseConstraintOfType(type); } if (!type || !hasBaseType(type, enclosingClass)) { error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass)); @@ -44794,31 +37130,31 @@ var ts; return true; } function getThisParameterFromNodeContext(node) { - var thisContainer = ts.getThisContainer(node, /* includeArrowFunctions */ false); + var thisContainer = ts.getThisContainer(node, false); return thisContainer && ts.isFunctionLike(thisContainer) ? ts.getThisParameter(thisContainer) : undefined; } function symbolHasNonMethodDeclaration(symbol) { return forEachProperty(symbol, function (prop) { var propKind = getDeclarationKindFromSymbol(prop); - return propKind !== 154 /* MethodDeclaration */ && propKind !== 153 /* MethodSignature */; + return propKind !== 154 && propKind !== 153; }); } function checkNonNullExpression(node, nullDiagnostic, undefinedDiagnostic, nullOrUndefinedDiagnostic) { return checkNonNullType(checkExpression(node), node, nullDiagnostic, undefinedDiagnostic, nullOrUndefinedDiagnostic); } function checkNonNullType(type, node, nullDiagnostic, undefinedDiagnostic, nullOrUndefinedDiagnostic) { - if (type.flags & 2 /* Unknown */) { + if (type.flags & 2) { error(node, ts.Diagnostics.Object_is_of_type_unknown); return errorType; } - var kind = (strictNullChecks ? getFalsyFlags(type) : type.flags) & 24576 /* Nullable */; + var kind = (strictNullChecks ? getFalsyFlags(type) : type.flags) & 24576; if (kind) { - error(node, kind & 8192 /* Undefined */ ? kind & 16384 /* Null */ ? + error(node, kind & 8192 ? kind & 16384 ? (nullOrUndefinedDiagnostic || ts.Diagnostics.Object_is_possibly_null_or_undefined) : (undefinedDiagnostic || ts.Diagnostics.Object_is_possibly_undefined) : (nullDiagnostic || ts.Diagnostics.Object_is_possibly_null)); var t = getNonNullableType(type); - return t.flags & (24576 /* Nullable */ | 32768 /* Never */) ? errorType : t; + return t.flags & (24576 | 32768) ? errorType : t; } return type; } @@ -44845,10 +37181,10 @@ var ts; markAliasReferenced(parentSymbol, node); } if (!prop) { - var indexInfo = getIndexInfoOfType(apparentType, 0 /* String */); + var indexInfo = getIndexInfoOfType(apparentType, 0); if (!(indexInfo && indexInfo.type)) { if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) { - reportNonexistentProperty(right, leftType.flags & 65536 /* TypeParameter */ && leftType.isThisType ? apparentType : leftType); + reportNonexistentProperty(right, leftType.flags & 65536 && leftType.isThisType ? apparentType : leftType); } return errorType; } @@ -44859,7 +37195,7 @@ var ts; } else { checkPropertyNotUsedBeforeDeclaration(prop, node, right); - markPropertyAsReferenced(prop, node, left.kind === 99 /* ThisKeyword */); + markPropertyAsReferenced(prop, node, left.kind === 99); getNodeLinks(node).resolvedSymbol = prop; checkPropertyAccessibility(node, left, apparentType, prop); if (assignmentKind) { @@ -44870,32 +37206,24 @@ var ts; } propType = getConstraintForLocation(getTypeOfSymbol(prop), node); } - // Only compute control flow type if this is a property access expression that isn't an - // assignment target, and the referenced property was declared as a variable, property, - // accessor, or optional method. - if (node.kind !== 185 /* PropertyAccessExpression */ || - assignmentKind === 1 /* Definite */ || - prop && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */)) && !(prop.flags & 8192 /* Method */ && propType.flags & 262144 /* Union */)) { + if (node.kind !== 185 || + assignmentKind === 1 || + prop && !(prop.flags & (3 | 4 | 98304)) && !(prop.flags & 8192 && propType.flags & 262144)) { return propType; } - // If strict null checks and strict property initialization checks are enabled, if we have - // a this.xxx property access, if the property is an instance property without an initializer, - // and if we are in a constructor of the same class as the property declaration, assume that - // the property is uninitialized at the top of the control flow. var assumeUninitialized = false; - if (strictNullChecks && strictPropertyInitialization && left.kind === 99 /* ThisKeyword */) { + if (strictNullChecks && strictPropertyInitialization && left.kind === 99) { var declaration = prop && prop.valueDeclaration; if (declaration && isInstancePropertyWithoutInitializer(declaration)) { var flowContainer = getControlFlowContainer(node); - if (flowContainer.kind === 155 /* Constructor */ && flowContainer.parent === declaration.parent) { + if (flowContainer.kind === 155 && flowContainer.parent === declaration.parent) { assumeUninitialized = true; } } } var flowType = getFlowTypeOfReference(node, propType, assumeUninitialized ? getOptionalType(propType) : propType); - if (assumeUninitialized && !(getFalsyFlags(propType) & 8192 /* Undefined */) && getFalsyFlags(flowType) & 8192 /* Undefined */) { - error(right, ts.Diagnostics.Property_0_is_used_before_being_assigned, symbolToString(prop)); // TODO: GH#18217 - // Return the declared type to reduce follow-on errors + if (assumeUninitialized && !(getFalsyFlags(propType) & 8192) && getFalsyFlags(flowType) & 8192) { + error(right, ts.Diagnostics.Property_0_is_used_before_being_assigned, symbolToString(prop)); return propType; } return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; @@ -44910,9 +37238,9 @@ var ts; && !isPropertyDeclaredInAncestorClass(prop)) { error(right, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.idText(right)); } - else if (valueDeclaration.kind === 235 /* ClassDeclaration */ && - node.parent.kind !== 162 /* TypeReference */ && - !(valueDeclaration.flags & 4194304 /* Ambient */) && + else if (valueDeclaration.kind === 235 && + node.parent.kind !== 162 && + !(valueDeclaration.flags & 4194304) && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) { error(right, ts.Diagnostics.Class_0_used_before_its_declaration, ts.idText(right)); } @@ -44920,22 +37248,17 @@ var ts; function isInPropertyInitializer(node) { return !!ts.findAncestor(node, function (node) { switch (node.kind) { - case 152 /* PropertyDeclaration */: + case 152: return true; - case 270 /* PropertyAssignment */: - // We might be in `a = { b: this.b }`, so keep looking. See `tests/cases/compiler/useBeforeDeclaration_propertyAssignment.ts`. + case 270: return false; default: return ts.isExpressionNode(node) ? false : "quit"; } }); } - /** - * It's possible that "prop.valueDeclaration" is a local declaration, but the property was also declared in a superclass. - * In that case we won't consider it used before its declaration, because it gets its value from the superclass' declaration. - */ function isPropertyDeclaredInAncestorClass(prop) { - if (!(prop.parent.flags & 32 /* Class */)) { + if (!(prop.parent.flags & 32)) { return false; } var classType = getTypeOfSymbol(prop.parent); @@ -44959,7 +37282,7 @@ var ts; } function reportNonexistentProperty(propNode, containingType) { var errorInfo; - if (containingType.flags & 262144 /* Union */ && !(containingType.flags & 32764 /* Primitive */)) { + if (containingType.flags & 262144 && !(containingType.flags & 32764)) { for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) { var subtype = _a[_i]; if (!getPropertyOfType(subtype, propNode.escapedText)) { @@ -44984,40 +37307,22 @@ var ts; diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo)); } function getSuggestionForNonexistentProperty(node, containingType) { - var suggestion = getSpellingSuggestionForName(ts.idText(node), getPropertiesOfType(containingType), 67216319 /* Value */); + var suggestion = getSpellingSuggestionForName(ts.idText(node), getPropertiesOfType(containingType), 67216319); return suggestion && ts.symbolName(suggestion); } function getSuggestionForNonexistentSymbol(location, outerName, meaning) { ts.Debug.assert(outerName !== undefined, "outername should always be defined"); - var result = resolveNameHelper(location, outerName, meaning, /*nameNotFoundMessage*/ undefined, outerName, /*isUse*/ false, /*excludeGlobals*/ false, function (symbols, name, meaning) { + var result = resolveNameHelper(location, outerName, meaning, undefined, outerName, false, false, function (symbols, name, meaning) { ts.Debug.assertEqual(outerName, name, "name should equal outerName"); var symbol = getSymbol(symbols, name, meaning); - // Sometimes the symbol is found when location is a return type of a function: `typeof x` and `x` is declared in the body of the function - // So the table *contains* `x` but `x` isn't actually in scope. - // However, resolveNameHelper will continue and call this callback again, so we'll eventually get a correct suggestion. return symbol || getSpellingSuggestionForName(ts.unescapeLeadingUnderscores(name), ts.arrayFrom(symbols.values()), meaning); }); return result && ts.symbolName(result); } function getSuggestionForNonexistentModule(name, targetModule) { - var suggestion = targetModule.exports && getSpellingSuggestionForName(ts.idText(name), getExportsOfModuleAsArray(targetModule), 2623475 /* ModuleMember */); + var suggestion = targetModule.exports && getSpellingSuggestionForName(ts.idText(name), getExportsOfModuleAsArray(targetModule), 2623475); return suggestion && ts.symbolName(suggestion); } - /** - * Given a name and a list of symbols whose names are *not* equal to the name, return a spelling suggestion if there is one that is close enough. - * Names less than length 3 only check for case-insensitive equality, not levenshtein distance. - * - * If there is a candidate that's the same except for case, return that. - * If there is a candidate that's within one edit of the name, return that. - * Otherwise, return the candidate with the smallest Levenshtein distance, - * except for candidates: - * * With no name - * * Whose meaning doesn't match the `meaning` parameter. - * * Whose length differs from the target name by more than 0.34 of the length of the name. - * * Whose levenshtein distance is more than 0.4 of the length of the name - * (0.4 allows 1 substitution/transposition for every 5 characters, - * and 1 insertion/deletion at 3 characters) - */ function getSpellingSuggestionForName(name, symbols, meaning) { return ts.getSpellingSuggestion(name, symbols, getCandidateName); function getCandidateName(candidate) { @@ -45026,38 +37331,37 @@ var ts; } } function markPropertyAsReferenced(prop, nodeForCheckWriteOnly, isThisAccess) { - if (!prop || !(prop.flags & 106500 /* ClassMember */) || !prop.valueDeclaration || !ts.hasModifier(prop.valueDeclaration, 8 /* Private */)) { + if (!prop || !(prop.flags & 106500) || !prop.valueDeclaration || !ts.hasModifier(prop.valueDeclaration, 8)) { return; } - if (nodeForCheckWriteOnly && ts.isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */))) { + if (nodeForCheckWriteOnly && ts.isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & 65536 && !(prop.flags & 32768))) { return; } if (isThisAccess) { - // Find any FunctionLikeDeclaration because those create a new 'this' binding. But this should only matter for methods (or getters/setters). var containingMethod = ts.findAncestor(nodeForCheckWriteOnly, ts.isFunctionLikeDeclaration); if (containingMethod && containingMethod.symbol === prop) { return; } } - (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */; + (ts.getCheckFlags(prop) & 1 ? getSymbolLinks(prop).target : prop).isReferenced = 67108863; } function isValidPropertyAccess(node, propertyName) { switch (node.kind) { - case 185 /* PropertyAccessExpression */: + case 185: return isValidPropertyAccessWithType(node, node.expression, propertyName, getWidenedType(checkExpression(node.expression))); - case 146 /* QualifiedName */: + case 146: return isValidPropertyAccessWithType(node, node.left, propertyName, getWidenedType(checkExpression(node.left))); - case 179 /* ImportType */: + case 179: return isValidPropertyAccessWithType(node, node, propertyName, getTypeFromTypeNode(node)); } } function isValidPropertyAccessForCompletions(node, type, property) { - return isValidPropertyAccessWithType(node, node.kind === 179 /* ImportType */ ? node : node.expression, property.escapedName, type) - && (!(property.flags & 8192 /* Method */) || isValidMethodAccess(property, type)); + return isValidPropertyAccessWithType(node, node.kind === 179 ? node : node.expression, property.escapedName, type) + && (!(property.flags & 8192) || isValidMethodAccess(property, type)); } function isValidMethodAccess(method, actualThisType) { var propType = getTypeOfPropertyOfType(actualThisType, method.escapedName); - var signatures = getSignaturesOfType(getNonNullableType(propType), 0 /* Call */); + var signatures = getSignaturesOfType(getNonNullableType(propType), 0); ts.Debug.assert(signatures.length !== 0); return signatures.some(function (sig) { var signatureThisType = getThisTypeOfSignature(sig); @@ -45068,7 +37372,7 @@ var ts; if (!sig.typeParameters) { return signatureThisType; } - var context = createInferenceContext(sig.typeParameters, sig, 0 /* None */); + var context = createInferenceContext(sig.typeParameters, sig, 0); inferTypes(context.inferences, actualThisType, signatureThisType); return instantiateType(signatureThisType, createSignatureTypeMapper(sig, getInferredTypes(context))); } @@ -45078,44 +37382,33 @@ var ts; } var prop = getPropertyOfType(type, propertyName); return prop ? checkPropertyAccessibility(node, left, type, prop) - // In js files properties of unions are allowed in completion - : ts.isInJavaScriptFile(node) && (type.flags & 262144 /* Union */) !== 0 && type.types.some(function (elementType) { return isValidPropertyAccessWithType(node, left, propertyName, elementType); }); + : ts.isInJavaScriptFile(node) && (type.flags & 262144) !== 0 && type.types.some(function (elementType) { return isValidPropertyAccessWithType(node, left, propertyName, elementType); }); } - /** - * Return the symbol of the for-in variable declared or referenced by the given for-in statement. - */ function getForInVariableSymbol(node) { var initializer = node.initializer; - if (initializer.kind === 233 /* VariableDeclarationList */) { + if (initializer.kind === 233) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); } } - else if (initializer.kind === 71 /* Identifier */) { + else if (initializer.kind === 71) { return getResolvedSymbol(initializer); } return undefined; } - /** - * Return true if the given type is considered to have numeric property names. - */ function hasNumericPropertyNames(type) { - return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */); + return getIndexTypeOfType(type, 1) && !getIndexTypeOfType(type, 0); } - /** - * Return true if given node is an expression consisting of an identifier (possibly parenthesized) - * that references a for-in variable for an object with numeric property names. - */ function isForInVariableForNumericPropertyNames(expr) { var e = ts.skipParentheses(expr); - if (e.kind === 71 /* Identifier */) { + if (e.kind === 71) { var symbol = getResolvedSymbol(e); - if (symbol.flags & 3 /* Variable */) { + if (symbol.flags & 3) { var child = expr; var node = expr.parent; while (node) { - if (node.kind === 221 /* ForInStatement */ && + if (node.kind === 221 && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(getTypeOfExpression(node.expression))) { @@ -45133,7 +37426,7 @@ var ts; var indexExpression = node.argumentExpression; if (!indexExpression) { var sourceFile = ts.getSourceFileOfNode(node); - if (node.parent.kind === 188 /* NewExpression */ && node.parent.expression === node) { + if (node.parent.kind === 188 && node.parent.expression === node) { var start = ts.skipTrivia(sourceFile.text, node.expression.end); var end = node.end; grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); @@ -45149,7 +37442,7 @@ var ts; if (objectType === errorType || objectType === silentNeverType) { return objectType; } - if (isConstEnumObjectType(objectType) && indexExpression.kind !== 9 /* StringLiteral */) { + if (isConstEnumObjectType(objectType) && indexExpression.kind !== 9) { error(indexExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal); return errorType; } @@ -45157,29 +37450,24 @@ var ts; } function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) { if (expressionType === errorType) { - // There is already an error, so no need to report one. return false; } if (!ts.isWellKnownSymbolSyntactically(expression)) { return false; } - // Make sure the property type is the primitive symbol type - if ((expressionType.flags & 3072 /* ESSymbolLike */) === 0) { + if ((expressionType.flags & 3072) === 0) { if (reportError) { error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression)); } return false; } - // The name is Symbol., so make sure Symbol actually resolves to the - // global Symbol object var leftHandSide = expression.expression; var leftHandSideSymbol = getResolvedSymbol(leftHandSide); if (!leftHandSideSymbol) { return false; } - var globalESSymbol = getGlobalESSymbolConstructorSymbol(/*reportErrors*/ true); + var globalESSymbol = getGlobalESSymbolConstructorSymbol(true); if (!globalESSymbol) { - // Already errored when we tried to look up the symbol return false; } if (leftHandSideSymbol !== globalESSymbol) { @@ -45191,19 +37479,16 @@ var ts; return true; } function callLikeExpressionMayHaveTypeArguments(node) { - // TODO: Also include tagged templates (https://github.com/Microsoft/TypeScript/issues/11947) return ts.isCallOrNewExpression(node); } function resolveUntypedCall(node) { if (callLikeExpressionMayHaveTypeArguments(node)) { - // Check type arguments even though we will give an error that untyped calls may not accept type arguments. - // This gets us diagnostics for the type arguments and marks them as referenced. ts.forEach(node.typeArguments, checkSourceElement); } - if (node.kind === 189 /* TaggedTemplateExpression */) { + if (node.kind === 189) { checkExpression(node.template); } - else if (node.kind !== 150 /* Decorator */) { + else if (node.kind !== 150) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); @@ -45214,14 +37499,6 @@ var ts; resolveUntypedCall(node); return unknownSignature; } - // Re-order candidate signatures into the result array. Assumes the result array to be empty. - // The candidate list orders groups in reverse, but within a group signatures are kept in declaration order - // A nit here is that we reorder only signatures that belong to the same symbol, - // so order how inherited signatures are processed is still preserved. - // interface A { (x: string): void } - // interface B extends A { (x: 'foo'): string } - // const b: B; - // b('foo') // <- here overloads should be processed as [(x:'foo'): string, (x: string): void] function reorderCandidates(signatures, result) { var lastParent; var lastSymbol; @@ -45244,20 +37521,13 @@ var ts; } } else { - // 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; } lastSymbol = symbol; - // specialized signatures always need to be placed before non-specialized signatures regardless - // of the cutoff position; see GH#1133 if (signature.hasLiteralTypes) { specializedIndex++; spliceIndex = specializedIndex; - // The cutoff index always needs to be greater than or equal to the specialized signature index - // in order to prevent non-specialized signatures from being added before a specialized - // signature. cutoffIndex++; } else { @@ -45269,7 +37539,7 @@ var ts; function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; - if (arg && arg.kind === 204 /* SpreadElement */) { + if (arg && arg.kind === 204) { return i; } } @@ -45277,46 +37547,36 @@ var ts; } function hasCorrectArity(node, args, signature, signatureHelpTrailingComma) { if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; } - var argCount; // Apparent number of arguments we will have in this call - var typeArguments; // Type arguments (undefined if none) - var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments + var argCount; + var typeArguments; + var callIsIncomplete = false; var spreadArgIndex = -1; if (ts.isJsxOpeningLikeElement(node)) { - // The arity check will be done in "checkApplicableSignatureForJsxOpeningLikeElement". return true; } - if (node.kind === 189 /* TaggedTemplateExpression */) { - // Even if the call is incomplete, we'll have a missing expression as our last argument, - // so we can say the count is just the arg list length + if (node.kind === 189) { argCount = args.length; typeArguments = node.typeArguments; - if (node.template.kind === 202 /* TemplateExpression */) { - // If a tagged template expression lacks a tail literal, the call is incomplete. - // Specifically, a template only can end in a TemplateTail or a Missing literal. - var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span. + if (node.template.kind === 202) { + var lastSpan = ts.last(node.template.templateSpans); callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated; } else { - // If the template didn't end in a backtick, or its beginning occurred right prior to EOF, - // then this might actually turn out to be a TemplateHead in the future; - // so we consider the call to be incomplete. var templateLiteral = node.template; - ts.Debug.assert(templateLiteral.kind === 13 /* NoSubstitutionTemplateLiteral */); + ts.Debug.assert(templateLiteral.kind === 13); callIsIncomplete = !!templateLiteral.isUnterminated; } } - else if (node.kind === 150 /* Decorator */) { + else if (node.kind === 150) { typeArguments = undefined; - argCount = getEffectiveArgumentCount(node, /*args*/ undefined, signature); + argCount = getEffectiveArgumentCount(node, undefined, signature); } else { if (!node.arguments) { - // This only happens when we have something of the form: 'new C' - ts.Debug.assert(node.kind === 188 /* NewExpression */); + ts.Debug.assert(node.kind === 188); return signature.minArgumentCount === 0; } argCount = signatureHelpTrailingComma ? args.length + 1 : args.length; - // If we are missing the close parenthesis, the call is incomplete. callIsIncomplete = node.arguments.end === node.end; typeArguments = node.typeArguments; spreadArgIndex = getSpreadArgumentIndex(args); @@ -45324,30 +37584,24 @@ var ts; if (!hasCorrectTypeArgumentArity(signature, typeArguments)) { return false; } - // If a spread argument is present, check that it corresponds to a rest parameter or at least that it's in the valid range. if (spreadArgIndex >= 0) { return isRestParameterIndex(signature, spreadArgIndex) || signature.minArgumentCount <= spreadArgIndex && spreadArgIndex < signature.parameters.length; } - // Too many arguments implies incorrect arity. if (!signature.hasRestParameter && argCount > signature.parameters.length) { return false; } - // If the call is incomplete, we should skip the lower bound check. var hasEnoughArguments = argCount >= signature.minArgumentCount; return callIsIncomplete || hasEnoughArguments; } function hasCorrectTypeArgumentArity(signature, typeArguments) { - // If the user supplied type arguments, but the number of type arguments does not match - // the declared number of type parameters, the call has an incorrect arity. var numTypeParameters = ts.length(signature.typeParameters); var minTypeArgumentCount = getMinTypeArgumentCount(signature.typeParameters); return !typeArguments || (typeArguments.length >= minTypeArgumentCount && typeArguments.length <= numTypeParameters); } - // If type has a single call signature and no other members, return that signature. Otherwise, return undefined. function getSingleCallSignature(type) { - if (type.flags & 131072 /* Object */) { + if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { @@ -45356,66 +37610,42 @@ var ts; } return undefined; } - // Instantiate a generic signature in the context of a non-generic signature (section 3.8.5 in TypeScript spec) function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper, compareTypes) { - var context = createInferenceContext(signature.typeParameters, signature, 1 /* InferUnionTypes */, compareTypes); + var context = createInferenceContext(signature.typeParameters, signature, 1, compareTypes); forEachMatchingParameterType(contextualSignature, signature, function (source, target) { - // Type parameters from outer context referenced by source type are fixed by instantiation of the source type inferTypes(context.inferences, instantiateType(source, contextualMapper || identityMapper), target); }); if (!contextualMapper) { - inferTypes(context.inferences, getReturnTypeOfSignature(contextualSignature), getReturnTypeOfSignature(signature), 8 /* ReturnType */); + inferTypes(context.inferences, getReturnTypeOfSignature(contextualSignature), getReturnTypeOfSignature(signature), 8); } return getSignatureInstantiation(signature, getInferredTypes(context), ts.isInJavaScriptFile(contextualSignature.declaration)); } function inferJsxTypeArguments(signature, node, context) { - // Skip context sensitive pass var skipContextParamType = getTypeAtPosition(signature, 0); var checkAttrTypeSkipContextSensitive = checkExpressionWithContextualType(node.attributes, skipContextParamType, identityMapper); inferTypes(context.inferences, checkAttrTypeSkipContextSensitive, skipContextParamType); - // Standard pass var paramType = getTypeAtPosition(signature, 0); var checkAttrType = checkExpressionWithContextualType(node.attributes, paramType, context); inferTypes(context.inferences, checkAttrType, paramType); return getInferredTypes(context); } function inferTypeArguments(node, signature, args, excludeArgument, context) { - // Clear out all the inference results from the last time inferTypeArguments was called on this context for (var _i = 0, _a = context.inferences; _i < _a.length; _i++) { var inference = _a[_i]; - // As an optimization, we don't have to clear (and later recompute) inferred types - // for type parameters that have already been fixed on the previous call to inferTypeArguments. - // It would be just as correct to reset all of them. But then we'd be repeating the same work - // for the type parameters that were fixed, namely the work done by getInferredType. if (!inference.isFixed) { inference.inferredType = undefined; } } - // If a contextual type is available, infer from that type to the return type of the call expression. For - // example, given a 'function wrap(cb: (x: T) => U): (x: T) => U' and a call expression - // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the - // return type of 'wrap'. - if (node.kind !== 150 /* Decorator */) { + if (node.kind !== 150) { var contextualType = getContextualType(node); if (contextualType) { - // We clone the contextual mapper to avoid disturbing a resolution in progress for an - // outer call expression. Effectively we just want a snapshot of whatever has been - // inferred for any outer call expression so far. var instantiatedType = instantiateType(contextualType, cloneTypeMapper(getContextualMapper(node))); - // If the contextual type is a generic function type with a single call signature, we - // instantiate the type with its own type parameters and type arguments. This ensures that - // the type parameters are not erased to type any during type inference such that they can - // be inferred as actual types from the contextual type. For example: - // declare function arrayMap(f: (x: T) => U): (a: T[]) => U[]; - // const boxElements: (a: A[]) => { value: A }[] = arrayMap(value => ({ value })); - // Above, the type of the 'value' parameter is inferred to be 'A'. var contextualSignature = getSingleCallSignature(instantiatedType); var inferenceSourceType = contextualSignature && contextualSignature.typeParameters ? getOrCreateTypeFromSignature(getSignatureInstantiation(contextualSignature, contextualSignature.typeParameters, ts.isInJavaScriptFile(node))) : instantiatedType; var inferenceTargetType = getReturnTypeOfSignature(signature); - // Inferences made from return types have lower priority than all other inferences. - inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 8 /* ReturnType */); + inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 8); } } var thisType = getThisTypeOfSignature(signature); @@ -45424,34 +37654,21 @@ var ts; var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; inferTypes(context.inferences, thisArgumentType, thisType); } - // We perform two passes over the arguments. In the first pass we infer from all arguments, but use - // wildcards for all context sensitive function expressions. var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 206 /* OmittedExpression */) { + if (arg === undefined || arg.kind !== 206) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i); - // If the effective argument type is 'undefined', there is no synthetic type - // for the argument. In that case, we should check the argument. if (argType === undefined) { - // For context sensitive arguments we pass the identityMapper, which is a signal to treat all - // context sensitive function expressions as wildcards var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : context; argType = checkExpressionWithContextualType(arg, paramType, mapper); } inferTypes(context.inferences, argType, paramType); } } - // In the second pass we visit only context sensitive arguments, and only those that aren't excluded, this - // time treating function expressions normally (which may cause previously inferred type arguments to be fixed - // as we construct types for contextually typed parameters) - // Decorators will not have `excludeArgument`, as their arguments cannot be contextually typed. - // Tagged template expressions will always have `undefined` for `excludeArgument[0]`. if (excludeArgument) { for (var i = 0; i < argCount; i++) { - // No need to check for omitted args and template expressions, their exclusion value is always undefined if (excludeArgument[i] === false) { var arg = args[i]; var paramType = getTypeAtPosition(signature, i); @@ -45471,7 +37688,7 @@ var ts; var constraint = getConstraintOfTypeParameter(typeParameters[i]); if (!constraint) continue; - var errorInfo = reportErrors && headMessage ? (function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); }) : undefined; + var errorInfo = reportErrors && headMessage ? (function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); }) : undefined; var typeArgumentHeadMessage = headMessage || ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1; if (!mapper) { mapper = createTypeMapper(typeParameters, typeArgumentTypes); @@ -45483,29 +37700,14 @@ var ts; } return typeArgumentTypes; } - /** - * Check if the given signature can possibly be a signature called by the JSX opening-like element. - * @param node a JSX opening-like element we are trying to figure its call signature - * @param signature a candidate signature we are trying whether it is a call signature - * @param relation a relationship to check parameter and argument type - * @param excludeArgument - */ function checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation) { - // JSX opening-like element has correct arity for stateless-function component if the one of the following condition is true: - // 1. callIsIncomplete - // 2. attributes property has same number of properties as the parameter object type. - // We can figure that out by resolving attributes property and check number of properties in the resolved type - // If the call has correct arity, we will then check if the argument type and parameter type is assignable - var callIsIncomplete = node.attributes.end === node.end; // If we are missing the close "/>", the call is incomplete + var callIsIncomplete = node.attributes.end === node.end; if (callIsIncomplete) { return true; } var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1; - // Stateless function components can have maximum of three arguments: "props", "context", and "updater". - // However "context" and "updater" are implicit and can't be specify by users. Only the first parameter, props, - // can be specified by users through attributes property. var paramType = getTypeAtPosition(signature, 0); - var attributesType = checkExpressionWithContextualType(node.attributes, paramType, /*contextualMapper*/ undefined); + var attributesType = checkExpressionWithContextualType(node.attributes, paramType, undefined); var argProperties = getPropertiesOfType(attributesType); for (var _i = 0, argProperties_1 = argProperties; _i < argProperties_1.length; _i++) { var arg = argProperties_1[_i]; @@ -45513,17 +37715,14 @@ var ts; return false; } } - return checkTypeRelatedTo(attributesType, paramType, relation, /*errorNode*/ undefined, headMessage); + return checkTypeRelatedTo(attributesType, paramType, relation, undefined, headMessage); } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { if (ts.isJsxOpeningLikeElement(node)) { return checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation); } var thisType = getThisTypeOfSignature(signature); - if (thisType && thisType !== voidType && node.kind !== 188 /* NewExpression */) { - // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType - // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible. - // If the expression is a new expression, then the check is skipped. + if (thisType && thisType !== voidType && node.kind !== 188) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; var errorNode = reportErrors ? (thisArgumentNode || node) : undefined; @@ -45536,19 +37735,11 @@ var ts; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 206 /* OmittedExpression */) { - // Check spread elements against rest type (from arity check we know spread argument corresponds to a rest parameter) + if (arg === undefined || arg.kind !== 206) { var paramType = getTypeAtPosition(signature, i); - // If the effective argument type is undefined, there is no synthetic type for the argument. - // In that case, we should check the argument. var argType = getEffectiveArgumentType(node, i) || checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); - // If one or more arguments are still excluded (as indicated by a non-null excludeArgument parameter), - // we obtain the regular type of any object literal arguments because we may not have inferred complete - // parameter types yet and therefore excess property checks may yield false positives (see #17041). var checkArgType = excludeArgument ? getRegularTypeOfObjectLiteral(argType) : argType; - // Use argument expression as error location when reporting errors var errorNode = reportErrors ? getEffectiveArgumentErrorNode(node, i, arg) : undefined; if (!checkTypeRelatedTo(checkArgType, paramType, relation, errorNode, headMessage)) { return false; @@ -45557,41 +37748,26 @@ var ts; } return true; } - /** - * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise. - */ function getThisArgumentOfCall(node) { - if (node.kind === 187 /* CallExpression */) { + if (node.kind === 187) { var callee = ts.skipOuterExpressions(node.expression); - if (callee.kind === 185 /* PropertyAccessExpression */ || callee.kind === 186 /* ElementAccessExpression */) { + if (callee.kind === 185 || callee.kind === 186) { return callee.expression; } } } - /** - * Returns the effective arguments for an expression that works like a function invocation. - * - * If 'node' is a CallExpression or a NewExpression, then its argument list is returned. - * If 'node' is a TaggedTemplateExpression, a new argument list is constructed from the substitution - * expressions, where the first element of the list is `undefined`. - * If 'node' is a Decorator, the argument list will be `undefined`, and its arguments and types - * will be supplied from calls to `getEffectiveArgumentCount` and `getEffectiveArgumentType`. - */ function getEffectiveCallArguments(node) { - if (node.kind === 189 /* TaggedTemplateExpression */) { + if (node.kind === 189) { var template = node.template; - var args_4 = [undefined]; // TODO: GH#18217 - if (template.kind === 202 /* TemplateExpression */) { + var args_4 = [undefined]; + if (template.kind === 202) { ts.forEach(template.templateSpans, function (span) { args_4.push(span.expression); }); } return args_4; } - else if (node.kind === 150 /* Decorator */) { - // For a decorator, we return undefined as we will determine - // the number and types of arguments for a decorator using - // `getEffectiveArgumentCount` and `getEffectiveArgumentType` below. + else if (node.kind === 150) { return undefined; } else if (ts.isJsxOpeningLikeElement(node)) { @@ -45601,45 +37777,22 @@ var ts; return node.arguments || ts.emptyArray; } } - /** - * Returns the effective argument count for a node that works like a function invocation. - * If 'node' is a Decorator, the number of arguments is derived from the decoration - * target and the signature: - * If 'node.target' is a class declaration or class expression, the effective argument - * count is 1. - * If 'node.target' is a parameter declaration, the effective argument count is 3. - * If 'node.target' is a property declaration, the effective argument count is 2. - * If 'node.target' is a method or accessor declaration, the effective argument count - * is 3, although it can be 2 if the signature only accepts two arguments, allowing - * us to match a property decorator. - * Otherwise, the argument count is the length of the 'args' array. - */ function getEffectiveArgumentCount(node, args, signature) { - if (node.kind === 150 /* Decorator */) { + if (node.kind === 150) { switch (node.parent.kind) { - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - // A class decorator will have one argument (see `ClassDecorator` in core.d.ts) + case 235: + case 205: return 1; - case 152 /* PropertyDeclaration */: - // A property declaration decorator will have two arguments (see - // `PropertyDecorator` in core.d.ts) + case 152: return 2; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - // A method or accessor declaration decorator will have two or three arguments (see - // `PropertyDecorator` and `MethodDecorator` in core.d.ts) - // If we are emitting decorators for ES3, we will only pass two arguments. - if (languageVersion === 0 /* ES3 */) { + case 154: + case 156: + case 157: + if (languageVersion === 0) { return 2; } - // If the method decorator signature only accepts a target and a key, we will only - // type check those arguments. return signature.parameters.length >= 3 ? 3 : 2; - case 149 /* Parameter */: - // A parameter declaration decorator will have three arguments (see - // `ParameterDecorator` in core.d.ts) + case 149: return 3; default: return ts.Debug.fail(); @@ -45649,97 +37802,53 @@ var ts; return args.length; } } - /** - * Returns the effective type of the first argument to a decorator. - * If 'node' is a class declaration or class expression, the effective argument type - * is the type of the static side of the class. - * If 'node' is a parameter declaration, the effective argument type is either the type - * of the static or instance side of the class for the parameter's parent method, - * depending on whether the method is declared static. - * For a constructor, the type is always the type of the static side of the class. - * If 'node' is a property, method, or accessor declaration, the effective argument - * type is the type of the static or instance side of the parent class for class - * element, depending on whether the element is declared static. - */ function getEffectiveDecoratorFirstArgumentType(node) { - // The first argument to a decorator is its `target`. - if (node.kind === 235 /* ClassDeclaration */) { - // For a class decorator, the `target` is the type of the class (e.g. the - // "static" or "constructor" side of the class) + if (node.kind === 235) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } - if (node.kind === 149 /* Parameter */) { - // For a parameter decorator, the `target` is the parent type of the - // parameter's containing method. + if (node.kind === 149) { node = node.parent; - if (node.kind === 155 /* Constructor */) { + if (node.kind === 155) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } - if (node.kind === 152 /* PropertyDeclaration */ || - node.kind === 154 /* MethodDeclaration */ || - node.kind === 156 /* GetAccessor */ || - node.kind === 157 /* SetAccessor */) { - // For a property or method decorator, the `target` is the - // "static"-side type of the parent of the member if the member is - // declared "static"; otherwise, it is the "instance"-side type of the - // parent of the member. + if (node.kind === 152 || + node.kind === 154 || + node.kind === 156 || + node.kind === 157) { return getParentTypeOfClassElement(node); } ts.Debug.fail("Unsupported decorator target."); return errorType; } - /** - * Returns the effective type for the second argument to a decorator. - * If 'node' is a parameter, its effective argument type is one of the following: - * If 'node.parent' is a constructor, the effective argument type is 'any', as we - * will emit `undefined`. - * If 'node.parent' is a member with an identifier, numeric, or string literal name, - * the effective argument type will be a string literal type for the member name. - * If 'node.parent' is a computed property name, the effective argument type will - * either be a symbol type or the string type. - * If 'node' is a member with an identifier, numeric, or string literal name, the - * effective argument type will be a string literal type for the member name. - * If 'node' is a computed property name, the effective argument type will either - * be a symbol type or the string type. - * A class decorator does not have a second argument type. - */ function getEffectiveDecoratorSecondArgumentType(node) { - // The second argument to a decorator is its `propertyKey` - if (node.kind === 235 /* ClassDeclaration */) { + if (node.kind === 235) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return errorType; } - if (node.kind === 149 /* Parameter */) { + if (node.kind === 149) { node = node.parent; - if (node.kind === 155 /* Constructor */) { - // For a constructor parameter decorator, the `propertyKey` will be `undefined`. + if (node.kind === 155) { return anyType; } - // For a non-constructor parameter decorator, the `propertyKey` will be either - // a string or a symbol, based on the name of the parameter's containing method. } - if (node.kind === 152 /* PropertyDeclaration */ || - node.kind === 154 /* MethodDeclaration */ || - node.kind === 156 /* GetAccessor */ || - node.kind === 157 /* SetAccessor */) { - // The `propertyKey` for a property or method decorator will be a - // string literal type if the member name is an identifier, number, or string; - // otherwise, if the member name is a computed property name it will - // be either string or symbol. + if (node.kind === 152 || + node.kind === 154 || + node.kind === 156 || + node.kind === 157) { var element = node; var name = element.name; switch (name.kind) { - case 71 /* Identifier */: + case 71: return getLiteralType(ts.idText(name)); - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: + case 8: + case 9: return getLiteralType(name.text); - case 147 /* ComputedPropertyName */: + case 147: var nameType = checkComputedPropertyName(name); - if (isTypeAssignableToKind(nameType, 3072 /* ESSymbolLike */)) { + if (isTypeAssignableToKind(nameType, 3072)) { return nameType; } else { @@ -45753,42 +37862,27 @@ var ts; ts.Debug.fail("Unsupported decorator target."); return errorType; } - /** - * Returns the effective argument type for the third argument to a decorator. - * If 'node' is a parameter, the effective argument type is the number type. - * If 'node' is a method or accessor, the effective argument type is a - * `TypedPropertyDescriptor` instantiated with the type of the member. - * Class and property decorators do not have a third effective argument. - */ function getEffectiveDecoratorThirdArgumentType(node) { - // The third argument to a decorator is either its `descriptor` for a method decorator - // or its `parameterIndex` for a parameter decorator - if (node.kind === 235 /* ClassDeclaration */) { + if (node.kind === 235) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return errorType; } - if (node.kind === 149 /* Parameter */) { - // The `parameterIndex` for a parameter decorator is always a number + if (node.kind === 149) { return numberType; } - if (node.kind === 152 /* PropertyDeclaration */) { + if (node.kind === 152) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return errorType; } - if (node.kind === 154 /* MethodDeclaration */ || - node.kind === 156 /* GetAccessor */ || - node.kind === 157 /* SetAccessor */) { - // The `descriptor` for a method decorator will be a `TypedPropertyDescriptor` - // for the type of the member. - var propertyType = getTypeOfNode(node); // TODO: GH#18217 + if (node.kind === 154 || + node.kind === 156 || + node.kind === 157) { + var propertyType = getTypeOfNode(node); return createTypedPropertyDescriptorType(propertyType); } ts.Debug.fail("Unsupported decorator target."); return errorType; } - /** - * Returns the effective argument type for the provided argument to a decorator. - */ function getEffectiveDecoratorArgumentType(node, argIndex) { if (argIndex === 0) { return getEffectiveDecoratorFirstArgumentType(node.parent); @@ -45802,44 +37896,27 @@ var ts; ts.Debug.fail("Decorators should not have a fourth synthetic argument."); return errorType; } - /** - * Gets the effective argument type for an argument in a call expression. - */ function getEffectiveArgumentType(node, argIndex) { - // Decorators provide special arguments, a tagged template expression provides - // a special first argument, and string literals get string literal types - // unless we're reporting errors - if (node.kind === 150 /* Decorator */) { + if (node.kind === 150) { return getEffectiveDecoratorArgumentType(node, argIndex); } - else if (argIndex === 0 && node.kind === 189 /* TaggedTemplateExpression */) { + else if (argIndex === 0 && node.kind === 189) { return getGlobalTemplateStringsArrayType(); } - // This is not a synthetic argument, so we return 'undefined' - // to signal that the caller needs to check the argument. return undefined; } - /** - * Gets the effective argument expression for an argument in a call expression. - */ function getEffectiveArgument(node, args, argIndex) { - // For a decorator or the first argument of a tagged template expression we return undefined. - if (node.kind === 150 /* Decorator */ || - (argIndex === 0 && node.kind === 189 /* TaggedTemplateExpression */)) { + if (node.kind === 150 || + (argIndex === 0 && node.kind === 189)) { return undefined; } return args[argIndex]; } - /** - * Gets the error node to use when reporting errors for an effective argument. - */ function getEffectiveArgumentErrorNode(node, argIndex, arg) { - if (node.kind === 150 /* Decorator */) { - // For a decorator, we use the expression of the decorator for error reporting. + if (node.kind === 150) { return node.expression; } - else if (argIndex === 0 && node.kind === 189 /* TaggedTemplateExpression */) { - // For a the first argument of a tagged template expression, we use the template of the tag for error reporting. + else if (argIndex === 0 && node.kind === 189) { return node.template; } else { @@ -45858,45 +37935,27 @@ var ts; return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, paramCount, typeArguments.length); } function resolveCall(node, signatures, candidatesOutArray, fallbackError) { - var isTaggedTemplate = node.kind === 189 /* TaggedTemplateExpression */; - var isDecorator = node.kind === 150 /* Decorator */; + var isTaggedTemplate = node.kind === 189; + var isDecorator = node.kind === 150; var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node); var typeArguments; if (!isDecorator) { typeArguments = node.typeArguments; - // We already perform checking on the type arguments on the class declaration itself. - if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 97 /* SuperKeyword */) { + if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 97) { ts.forEach(typeArguments, checkSourceElement); } } var candidates = candidatesOutArray || []; - // reorderCandidates fills up the candidates array directly reorderCandidates(signatures, candidates); if (!candidates.length) { diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Call_target_does_not_contain_any_signatures)); return resolveErrorCall(node); } var args = getEffectiveCallArguments(node); - // The following applies to any value of 'excludeArgument[i]': - // - true: the argument at 'i' is susceptible to a one-time permanent contextual typing. - // - undefined: the argument at 'i' is *not* susceptible to permanent contextual typing. - // - false: the argument at 'i' *was* and *has been* permanently contextually typed. - // - // The idea is that we will perform type argument inference & assignability checking once - // without using the susceptible parameters that are functions, and once more for each of those - // parameters, contextually typing each as we go along. - // - // For a tagged template, then the first argument be 'undefined' if necessary - // because it represents a TemplateStringsArray. - // - // For a decorator, no arguments are susceptible to contextual typing due to the fact - // decorators are applied to a declaration by the emitter, and not to an expression. var isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; var excludeArgument; var excludeCount = 0; if (!isDecorator && !isSingleNonGenericCandidate) { - // We do not need to call `getEffectiveArgumentCount` here as it only - // applies when calculating the number of arguments for a decorator. for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) { if (isContextSensitive(args[i])) { if (!excludeArgument) { @@ -45907,43 +37966,10 @@ var ts; } } } - // The following variables are captured and modified by calls to chooseOverload. - // If overload resolution or type argument inference fails, we want to report the - // best error possible. The best error is one which says that an argument was not - // assignable to a parameter. This implies that everything else about the overload - // was fine. So if there is any overload that is only incorrect because of an - // argument, we will report an error on that one. - // - // function foo(s: string): void; - // function foo(n: number): void; // Report argument error on this overload - // function foo(): void; - // foo(true); - // - // If none of the overloads even made it that far, there are two possibilities. - // There was a problem with type arguments for some overload, in which case - // report an error on that. Or none of the overloads even had correct arity, - // in which case give an arity error. - // - // function foo(x: T): void; // Report type argument error - // function foo(): void; - // foo(0); - // var candidateForArgumentError; var candidateForTypeArgumentError; var result; - // If we are in signature help, a trailing comma indicates that we intend to provide another argument, - // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments. - var signatureHelpTrailingComma = candidatesOutArray && node.kind === 187 /* CallExpression */ && node.arguments.hasTrailingComma; - // Section 4.12.1: - // if the candidate list contains one or more signatures for which the type of each argument - // expression is a subtype of each corresponding parameter type, the return type of the first - // of those signatures becomes the return type of the function call. - // Otherwise, the return type of the first signature in the candidate list becomes the return - // type of the function call. - // - // Whether the call is an error is determined by assignability of the arguments. The subtype pass - // is just important for choosing the best signature. So in the case where there is only one - // signature, the subtype pass is useless. So skipping it is an optimization. + var signatureHelpTrailingComma = candidatesOutArray && node.kind === 187 && node.arguments.hasTrailingComma; if (candidates.length > 1) { result = chooseOverload(candidates, subtypeRelation, signatureHelpTrailingComma); } @@ -45953,24 +37979,14 @@ var ts; if (result) { return result; } - // No signatures were applicable. Now report errors based on the last applicable signature with - // no arguments excluded from assignability checks. - // If candidate is undefined, it means that no candidates had a suitable arity. In that case, - // skip the checkApplicableSignature check. if (candidateForArgumentError) { if (isJsxOpeningOrSelfClosingElement) { - // We do not report any error here because any error will be handled in "resolveCustomJsxElementAttributesType". return candidateForArgumentError; } - // excludeArgument is undefined, in this case also equivalent to [undefined, undefined, ...] - // The importance of excludeArgument is to prevent us from typing function expression parameters - // in arguments too early. If possible, we'd like to only type them once we know the correct - // overload. However, this matters for the case where the call is correct. When the call is - // an error, we don't need to exclude any arguments, although it would cause no harm to do so. - checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, /*excludeArgument*/ undefined, /*reportErrors*/ true); + checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true); } else if (candidateForTypeArgumentError) { - checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, /*reportErrors*/ true, fallbackError); + checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, true, fallbackError); } else if (typeArguments && ts.every(signatures, function (sig) { return ts.length(sig.typeParameters) !== typeArguments.length; })) { diagnostics.add(getTypeArgumentArityError(node, signatures, typeArguments)); @@ -46001,21 +38017,13 @@ var ts; else if (fallbackError) { diagnostics.add(ts.createDiagnosticForNode(node, fallbackError)); } - // No signature was applicable. We have already reported the errors for the invalid signature. - // If this is a type resolution session, e.g. Language Service, try to get better information than anySignature. - // Pick the longest signature. This way we can get a contextual type for cases like: - // declare function f(a: { xa: number; xb: number; }, b: number); - // f({ | - // Also, use explicitly-supplied type arguments if they are provided, so we can get a contextual signature in cases like: - // declare function f(k: keyof T); - // f(" if (!produceDiagnostics) { - ts.Debug.assert(candidates.length > 0); // Else would have exited above. + ts.Debug.assert(candidates.length > 0); var bestIndex = getLongestCandidateIndex(candidates, apparentArgumentCount === undefined ? args.length : apparentArgumentCount); var candidate = candidates[bestIndex]; var typeParameters = candidate.typeParameters; if (typeParameters && callLikeExpressionMayHaveTypeArguments(node) && node.typeArguments) { - var typeArguments_1 = node.typeArguments.map(getTypeOfNode); // TODO: GH#18217 + var typeArguments_1 = node.typeArguments.map(getTypeOfNode); while (typeArguments_1.length > typeParameters.length) { typeArguments_1.pop(); } @@ -46038,7 +38046,7 @@ var ts; if (!hasCorrectArity(node, args, candidate, signatureHelpTrailingComma)) { return undefined; } - if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, /*reportErrors*/ false)) { + if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) { candidateForArgumentError = candidate; return undefined; } @@ -46051,14 +38059,14 @@ var ts; } var candidate = void 0; var inferenceContext = originalCandidate.typeParameters ? - createInferenceContext(originalCandidate.typeParameters, originalCandidate, /*flags*/ ts.isInJavaScriptFile(node) ? 4 /* AnyDefault */ : 0 /* None */) : + createInferenceContext(originalCandidate.typeParameters, originalCandidate, ts.isInJavaScriptFile(node) ? 4 : 0) : undefined; while (true) { candidate = originalCandidate; if (candidate.typeParameters) { var typeArgumentTypes = void 0; if (typeArguments) { - var typeArgumentResult = checkTypeArguments(candidate, typeArguments, /*reportErrors*/ false); + var typeArgumentResult = checkTypeArguments(candidate, typeArguments, false); if (typeArgumentResult) { typeArgumentTypes = typeArgumentResult; } @@ -46073,7 +38081,7 @@ var ts; var isJavascript = ts.isInJavaScriptFile(candidate.declaration); candidate = getSignatureInstantiation(candidate, typeArgumentTypes, isJavascript); } - if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, /*reportErrors*/ false)) { + if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) { candidateForArgumentError = candidate; break; } @@ -46083,7 +38091,7 @@ var ts; } excludeCount--; if (excludeCount > 0) { - excludeArgument[excludeArgument.indexOf(/*value*/ true)] = false; + excludeArgument[excludeArgument.indexOf(true)] = false; } else { excludeArgument = undefined; @@ -46109,15 +38117,13 @@ var ts; return maxParamsIndex; } function resolveCallExpression(node, candidatesOutArray) { - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { var superType = checkSuperExpression(node.expression); if (isTypeAny(superType)) { - ts.forEach(node.arguments, checkExpresionNoReturn); // Still visit arguments so they get marked for visibility, etc + ts.forEach(node.arguments, checkExpresionNoReturn); return anySignature; } if (superType !== errorType) { - // In super call, the candidate signatures are the matching arity signatures of the base constructor function instantiated - // with the type arguments specified in the extends clause. var baseTypeNode = ts.getClassExtendsHeritageClauseElement(ts.getContainingClass(node)); if (baseTypeNode) { var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments, baseTypeNode); @@ -46132,52 +38138,33 @@ var ts; } var apparentType = getApparentType(funcType); if (apparentType === errorType) { - // Another error has already been reported return resolveErrorCall(node); } - // Technically, this signatures list may be incomplete. We are taking the apparent type, - // but we are not including call signatures that may have been added to the Object or - // Function interface, since they have none by default. This is a bit of a leap of faith - // that the user will not add any. - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); - // TS 1.0 Spec: 4.12 - // In an untyped function call no TypeArgs are permitted, Args can be any argument list, no contextual - // types are provided for the argument expressions, and the result is always of type Any. + var callSignatures = getSignaturesOfType(apparentType, 0); + var constructSignatures = getSignaturesOfType(apparentType, 1); if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, constructSignatures.length)) { - // The unknownType indicates that an error already occurred (and was reported). No - // need to report another error in this case. if (funcType !== errorType && node.typeArguments) { error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } return resolveUntypedCall(node); } - // If FuncExpr's apparent type(section 3.8.1) is a function type, the call is a typed function call. - // TypeScript employs overload resolution in typed function calls in order to support functions - // with multiple call signatures. if (!callSignatures.length) { if (constructSignatures.length) { error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); } else { - invocationError(node, apparentType, 0 /* Call */); + invocationError(node, apparentType, 0); } return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray); } - /** - * TS 1.0 spec: 4.12 - * If FuncExpr is of type Any, or of an object type that has no call or construct signatures - * but is a subtype of the Function interface, the call is an untyped function call. - */ function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) { - // We exclude union types because we may have a union of function types that happen to have no common signatures. - return isTypeAny(funcType) || isTypeAny(apparentFuncType) && funcType.flags & 65536 /* TypeParameter */ || - !numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & (262144 /* Union */ | 32768 /* Never */)) && isTypeAssignableTo(funcType, globalFunctionType); + return isTypeAny(funcType) || isTypeAny(apparentFuncType) && funcType.flags & 65536 || + !numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & (262144 | 32768)) && isTypeAssignableTo(funcType, globalFunctionType); } function resolveNewExpression(node, candidatesOutArray) { - if (node.arguments && languageVersion < 1 /* ES5 */) { + if (node.arguments && languageVersion < 1) { var spreadIndex = getSpreadArgumentIndex(node.arguments); if (spreadIndex >= 0) { error(node.arguments[spreadIndex], ts.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher); @@ -46187,50 +38174,29 @@ var ts; if (expressionType === silentNeverType) { return silentNeverSignature; } - // If expressionType's apparent type(section 3.8.1) is an object type with one or - // more construct signatures, the expression is processed in the same manner as a - // function call, but using the construct signatures as the initial set of candidate - // signatures for overload resolution. The result type of the function call becomes - // the result type of the operation. expressionType = getApparentType(expressionType); if (expressionType === errorType) { - // Another error has already been reported return resolveErrorCall(node); } - // TS 1.0 spec: 4.11 - // If expressionType is of type Any, Args can be any argument - // list and the result of the operation is of type Any. if (isTypeAny(expressionType)) { if (node.typeArguments) { error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } return resolveUntypedCall(node); } - // Technically, this signatures list may be incomplete. We are taking the apparent type, - // but we are not including construct signatures that may have been added to the Object or - // Function interface, since they have none by default. This is a bit of a leap of faith - // that the user will not add any. - var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); + var constructSignatures = getSignaturesOfType(expressionType, 1); if (constructSignatures.length) { if (!isConstructorAccessible(node, constructSignatures[0])) { return resolveErrorCall(node); } - // If the expression is a class of abstract type, then it cannot be instantiated. - // Note, only class declarations can be declared abstract. - // In the case of a merged class-module or class-interface declaration, - // only the class declaration node will have the Abstract flag set. var valueDecl = expressionType.symbol && ts.getClassLikeDeclarationOfSymbol(expressionType.symbol); - if (valueDecl && ts.hasModifier(valueDecl, 128 /* Abstract */)) { + if (valueDecl && ts.hasModifier(valueDecl, 128)) { error(node, ts.Diagnostics.Cannot_create_an_instance_of_an_abstract_class); return resolveErrorCall(node); } return resolveCall(node, constructSignatures, candidatesOutArray); } - // If expressionType's apparent type is an object type with no construct signatures but - // one or more call signatures, the expression is processed as a function call. A compile-time - // error occurs if the result of the function call is not Void. The type of the result of the - // operation is Any. It is an error to have a Void this type. - var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); + var callSignatures = getSignaturesOfType(expressionType, 0); if (callSignatures.length) { var signature = resolveCall(node, callSignatures, candidatesOutArray); if (!isJavaScriptConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) { @@ -46241,7 +38207,7 @@ var ts; } return signature; } - invocationError(node, expressionType, 1 /* Construct */); + invocationError(node, expressionType, 1); return resolveErrorCall(node); } function isConstructorAccessible(node, signature) { @@ -46249,14 +38215,12 @@ var ts; return true; } var declaration = signature.declaration; - var modifiers = ts.getSelectedModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */); - // Public constructor is accessible. + var modifiers = ts.getSelectedModifierFlags(declaration, 24); if (!modifiers) { return true; } var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol); var declaringClass = getDeclaredTypeOfSymbol(declaration.parent.symbol); - // A private or protected constructor can only be instantiated within its own class (or a subclass, for protected) if (!isNodeWithinClass(node, declaringClassDeclaration)) { var containingClass = ts.getContainingClass(node); if (containingClass) { @@ -46264,17 +38228,17 @@ var ts; var baseTypes = getBaseTypes(containingType); while (baseTypes.length) { var baseType = baseTypes[0]; - if (modifiers & 16 /* Protected */ && + if (modifiers & 16 && baseType.symbol === declaration.parent.symbol) { return true; } baseTypes = getBaseTypes(baseType); } } - if (modifiers & 8 /* Private */) { + if (modifiers & 8) { error(node, ts.Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); } - if (modifiers & 16 /* Protected */) { + if (modifiers & 16) { error(node, ts.Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); } return false; @@ -46282,7 +38246,7 @@ var ts; return true; } function invocationError(node, apparentType, kind) { - error(node, kind === 0 /* Call */ + error(node, kind === 0 ? ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures : ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature, typeToString(apparentType)); invocationErrorRecovery(apparentType, kind); @@ -46292,8 +38256,6 @@ var ts; return; } var importNode = getSymbolLinks(apparentType.symbol).originatingImport; - // Create a diagnostic on the originating import if possible onto which we can attach a quickfix - // An import call expression cannot be rewritten into another form to correct the error - the only solution is to use `.default` at the use-site if (importNode && !ts.isImportCall(importNode)) { var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) @@ -46305,94 +38267,72 @@ var ts; var tagType = checkExpression(node.tag); var apparentType = getApparentType(tagType); if (apparentType === errorType) { - // Another error has already been reported return resolveErrorCall(node); } - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + var callSignatures = getSignaturesOfType(apparentType, 0); + var constructSignatures = getSignaturesOfType(apparentType, 1); if (isUntypedFunctionCall(tagType, apparentType, callSignatures.length, constructSignatures.length)) { return resolveUntypedCall(node); } if (!callSignatures.length) { - invocationError(node, apparentType, 0 /* Call */); + invocationError(node, apparentType, 0); return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray); } - /** - * Gets the localized diagnostic head message to use for errors when resolving a decorator as a call expression. - */ function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: + case 235: + case 205: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; - case 149 /* Parameter */: + case 149: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; - case 152 /* PropertyDeclaration */: + case 152: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; default: return ts.Debug.fail(); } } - /** - * Resolves a decorator as if it were a call expression. - */ function resolveDecorator(node, candidatesOutArray) { var funcType = checkExpression(node.expression); var apparentType = getApparentType(funcType); if (apparentType === errorType) { return resolveErrorCall(node); } - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + var callSignatures = getSignaturesOfType(apparentType, 0); + var constructSignatures = getSignaturesOfType(apparentType, 1); if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, constructSignatures.length)) { return resolveUntypedCall(node); } if (isPotentiallyUncalledDecorator(node, callSignatures)) { - var nodeStr = ts.getTextOfNode(node.expression, /*includeTrivia*/ false); + var nodeStr = ts.getTextOfNode(node.expression, false); error(node, ts.Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0, nodeStr); return resolveErrorCall(node); } var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); if (!callSignatures.length) { - var errorInfo = ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, typeToString(apparentType)); + var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, typeToString(apparentType)); errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage); diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo)); - invocationErrorRecovery(apparentType, 0 /* Call */); + invocationErrorRecovery(apparentType, 0); return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } - /** - * Sometimes, we have a decorator that could accept zero arguments, - * but is receiving too many arguments as part of the decorator invocation. - * In those cases, a user may have meant to *call* the expression before using it as a decorator. - */ function isPotentiallyUncalledDecorator(decorator, signatures) { return signatures.length && ts.every(signatures, function (signature) { return signature.minArgumentCount === 0 && !signature.hasRestParameter && - signature.parameters.length < getEffectiveArgumentCount(decorator, /*args*/ undefined, signature); + signature.parameters.length < getEffectiveArgumentCount(decorator, undefined, signature); }); } - /** - * This function is similar to getResolvedSignature but is exclusively for trying to resolve JSX stateless-function component. - * The main reason we have to use this function instead of getResolvedSignature because, the caller of this function will already check the type of openingLikeElement's tagName - * and pass the type as elementType. The elementType can not be a union (as such case should be handled by the caller of this function) - * Note: at this point, we are still not sure whether the opening-like element is a stateless function component or not. - * @param openingLikeElement an opening-like JSX element to try to resolve as JSX stateless function - * @param elementType an element type of the opneing-like element by checking opening-like element's tagname. - * @param candidatesOutArray an array of signature to be filled in by the function. It is passed by signature help in the language service; - * the function will fill it up with appropriate candidate signatures - */ function getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray) { - ts.Debug.assert(!(elementType.flags & 262144 /* Union */)); - var callSignatures = elementType && getSignaturesOfType(elementType, 0 /* Call */); + ts.Debug.assert(!(elementType.flags & 262144)); + var callSignatures = elementType && getSignaturesOfType(elementType, 0); if (callSignatures && callSignatures.length > 0) { return resolveCall(openingLikeElement, callSignatures, candidatesOutArray); } @@ -46400,17 +38340,16 @@ var ts; } function resolveSignature(node, candidatesOutArray) { switch (node.kind) { - case 187 /* CallExpression */: + case 187: return resolveCallExpression(node, candidatesOutArray); - case 188 /* NewExpression */: + case 188: return resolveNewExpression(node, candidatesOutArray); - case 189 /* TaggedTemplateExpression */: + case 189: return resolveTaggedTemplateExpression(node, candidatesOutArray); - case 150 /* Decorator */: + case 150: return resolveDecorator(node, candidatesOutArray); - case 257 /* JsxOpeningElement */: - case 256 /* JsxSelfClosingElement */: - // This code-path is called by language service + case 257: + case 256: var exprTypes = checkExpression(node.tagName); return forEachType(exprTypes, function (exprType) { var sfcResult = getResolvedJsxStatelessFunctionSignature(node, exprType, candidatesOutArray); @@ -46426,41 +38365,21 @@ var ts; } throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } - /** - * Resolve a signature of a given call-like expression. - * @param node a call-like expression to try resolve a signature for - * @param candidatesOutArray an array of signature to be filled in by the function. It is passed by signature help in the language service; - * the function will fill it up with appropriate candidate signatures - * @return a signature of the call-like expression or undefined if one can't be found - */ function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); - // If getResolvedSignature has already been called, we will have cached the resolvedSignature. - // However, it is possible that either candidatesOutArray was not passed in the first time, - // or that a different candidatesOutArray was passed in. Therefore, we need to redo the work - // to correctly fill the candidatesOutArray. var cached = links.resolvedSignature; if (cached && cached !== resolvingSignature && !candidatesOutArray) { return cached; } links.resolvedSignature = resolvingSignature; var result = resolveSignature(node, candidatesOutArray); - // If signature resolution originated in control flow type analysis (for example to compute the - // assigned type in a flow assignment) we don't cache the result as it may be based on temporary - // types from the control flow analysis. links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; return result; } - /** - * Indicates whether a declaration can be treated as a constructor in a JavaScript - * file. - */ function isJavaScriptConstructor(node) { if (node && ts.isInJavaScriptFile(node)) { - // If the node has a @class tag, treat it like a constructor. if (ts.getJSDocClassTag(node)) return true; - // If the symbol of the node has members, treat it like a constructor. var symbol = ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) ? getSymbolOfNode(node) : ts.isVariableDeclaration(node) && node.initializer && ts.isFunctionExpression(node.initializer) ? getSymbolOfNode(node.initializer) : undefined; @@ -46499,10 +38418,10 @@ var ts; return false; } var parent = node.parent; - while (parent && parent.kind === 185 /* PropertyAccessExpression */) { + while (parent && parent.kind === 185) { parent = parent.parent; } - if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 58 /* EqualsToken */) { + if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 58) { var right = ts.getInitializerOfBinaryExpression(parent); return ts.isObjectLiteralExpression(right) && right; } @@ -46510,41 +38429,31 @@ var ts; function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); if (!links.inferredClassType) { - links.inferredClassType = createAnonymousType(symbol, getMembersOfSymbol(symbol) || emptySymbols, ts.emptyArray, ts.emptyArray, /*stringIndexType*/ undefined, /*numberIndexType*/ undefined); + links.inferredClassType = createAnonymousType(symbol, getMembersOfSymbol(symbol) || emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); } return links.inferredClassType; } function isInferredClassType(type) { return type.symbol - && ts.getObjectFlags(type) & 16 /* Anonymous */ + && ts.getObjectFlags(type) & 16 && getSymbolLinks(type.symbol).inferredClassType === type; } - /** - * Syntactically and semantically checks a call or new expression. - * @param node The call/new expression to be checked. - * @returns On success, the expression's signature's return type. On failure, anyType. - */ function checkCallExpression(node) { if (!checkGrammarTypeArguments(node, node.typeArguments)) checkGrammarArguments(node.arguments); var signature = getResolvedSignature(node); - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { return voidType; } - if (node.kind === 188 /* NewExpression */) { + if (node.kind === 188) { var declaration = signature.declaration; if (declaration && - declaration.kind !== 155 /* Constructor */ && - declaration.kind !== 159 /* ConstructSignature */ && - declaration.kind !== 164 /* ConstructorType */ && + declaration.kind !== 155 && + declaration.kind !== 159 && + declaration.kind !== 164 && !ts.isJSDocConstructSignature(declaration)) { - // When resolved signature is a call signature (and not a construct signature) the result type is any, unless - // the declaring function had members created through 'x.prototype.y = expr' or 'this.y = expr' psuedodeclarations - // in a JS file - // Note:JS inferred classes might come from a variable declaration instead of a function declaration. - // In this case, using getResolvedSymbol directly is required to avoid losing the members from the declaration. var funcSymbol = checkExpression(node.expression).symbol; - if (!funcSymbol && node.expression.kind === 71 /* Identifier */) { + if (!funcSymbol && node.expression.kind === 71) { funcSymbol = getResolvedSymbol(node.expression); } var type = funcSymbol && getJavaScriptClassType(funcSymbol); @@ -46557,14 +38466,11 @@ var ts; return anyType; } } - // In JavaScript files, calls to any identifier 'require' are treated as external module imports if (ts.isInJavaScriptFile(node) && isCommonJsRequire(node)) { return resolveExternalModuleTypeByLiteral(node.arguments[0]); } var returnType = getReturnTypeOfSignature(signature); - // Treat any call to the global 'Symbol' function that is part of a const variable or readonly property - // as a fresh unique symbol literal type. - if (returnType.flags & 3072 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) { + if (returnType.flags & 3072 && isSymbolOrSymbolForCall(node)) { return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent)); } var jsAssignmentType; @@ -46589,15 +38495,13 @@ var ts; if (!ts.isIdentifier(left) || left.escapedText !== "Symbol") { return false; } - // make sure `Symbol` is the global symbol - var globalESSymbol = getGlobalESSymbolConstructorSymbol(/*reportErrors*/ false); + var globalESSymbol = getGlobalESSymbolConstructorSymbol(false); if (!globalESSymbol) { return false; } - return globalESSymbol === resolveName(left, "Symbol", 67216319 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); + return globalESSymbol === resolveName(left, "Symbol", 67216319, undefined, undefined, false); } function checkImportCallExpression(node) { - // Check grammar of dynamic import if (!checkGrammarArguments(node.arguments)) checkGrammarImportCallExpression(node); if (node.arguments.length === 0) { @@ -46605,17 +38509,15 @@ var ts; } var specifier = node.arguments[0]; var specifierType = checkExpressionCached(specifier); - // Even though multiple arugments is grammatically incorrect, type-check extra arguments for completion for (var i = 1; i < node.arguments.length; ++i) { checkExpressionCached(node.arguments[i]); } - if (specifierType.flags & 8192 /* Undefined */ || specifierType.flags & 16384 /* Null */ || !isTypeAssignableTo(specifierType, stringType)) { + if (specifierType.flags & 8192 || specifierType.flags & 16384 || !isTypeAssignableTo(specifierType, stringType)) { error(specifier, ts.Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType)); } - // resolveExternalModuleName will return undefined if the moduleReferenceExpression is not a string literal var moduleSymbol = resolveExternalModuleName(node, specifier); if (moduleSymbol) { - var esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, /*dontRecursivelyResolve*/ true); + var esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, true); if (esModuleSymbol) { return createPromiseReturnType(node, getTypeWithSyntheticDefaultImportType(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol)); } @@ -46627,16 +38529,16 @@ var ts; var synthType = type; if (!synthType.syntheticType) { var file = ts.find(originalSymbol.declarations, ts.isSourceFile); - var hasSyntheticDefault = canHaveSyntheticDefault(file, originalSymbol, /*dontResolveAlias*/ false); + var hasSyntheticDefault = canHaveSyntheticDefault(file, originalSymbol, false); if (hasSyntheticDefault) { var memberTable = ts.createSymbolTable(); - var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */); + var newSymbol = createSymbol(2097152, "default"); newSymbol.target = resolveSymbol(symbol); - memberTable.set("default" /* Default */, newSymbol); - var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); - var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined); + memberTable.set("default", newSymbol); + var anonymousSymbol = createSymbol(2048, "__type"); + var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, undefined, undefined); anonymousSymbol.type = defaultContainingObject; - synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*typeFLags*/ 0, /*objectFlags*/ 0) : defaultContainingObject; + synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, 0, 0) : defaultContainingObject; } else { synthType.syntheticType = type; @@ -46647,36 +38549,33 @@ var ts; return type; } function isCommonJsRequire(node) { - if (!ts.isRequireCall(node, /*checkArgumentIsStringLiteralLike*/ true)) { + if (!ts.isRequireCall(node, true)) { return false; } - // Make sure require is not a local function if (!ts.isIdentifier(node.expression)) return ts.Debug.fail(); - var resolvedRequire = resolveName(node.expression, node.expression.escapedText, 67216319 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true); // TODO: GH#18217 + var resolvedRequire = resolveName(node.expression, node.expression.escapedText, 67216319, undefined, undefined, true); if (resolvedRequire === requireSymbol) { return true; } - // project includes symbol named 'require' - make sure that it is ambient and local non-alias - if (resolvedRequire.flags & 2097152 /* Alias */) { + if (resolvedRequire.flags & 2097152) { return false; } - var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */ - ? 234 /* FunctionDeclaration */ - : resolvedRequire.flags & 3 /* Variable */ - ? 232 /* VariableDeclaration */ - : 0 /* Unknown */; - if (targetDeclarationKind !== 0 /* Unknown */) { + var targetDeclarationKind = resolvedRequire.flags & 16 + ? 234 + : resolvedRequire.flags & 3 + ? 232 + : 0; + if (targetDeclarationKind !== 0) { var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind); - // function/variable declaration should be ambient - return !!decl && !!(decl.flags & 4194304 /* Ambient */); + return !!decl && !!(decl.flags & 4194304); } return false; } function checkTaggedTemplateExpression(node) { checkGrammarTypeArguments(node, node.typeArguments); - if (languageVersion < 2 /* ES2015 */) { - checkExternalEmitHelpers(node, 65536 /* MakeTemplateObject */); + if (languageVersion < 2) { + checkExternalEmitHelpers(node, 65536); } return getReturnTypeOfSignature(getResolvedSignature(node)); } @@ -46700,10 +38599,10 @@ var ts; } function checkMetaProperty(node) { checkGrammarMetaProperty(node); - if (node.keywordToken === 94 /* NewKeyword */) { + if (node.keywordToken === 94) { return checkNewTargetMetaProperty(node); } - if (node.keywordToken === 91 /* ImportKeyword */) { + if (node.keywordToken === 91) { return checkImportMetaProperty(node); } return ts.Debug.assertNever(node.keywordToken); @@ -46714,7 +38613,7 @@ var ts; error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target"); return errorType; } - else if (container.kind === 155 /* Constructor */) { + else if (container.kind === 155) { var symbol = getSymbolOfNode(container.parent); return getTypeOfSymbol(symbol); } @@ -46724,11 +38623,11 @@ var ts; } } function checkImportMetaProperty(node) { - if (languageVersion < 6 /* ESNext */ || moduleKind < ts.ModuleKind.ESNext) { + if (languageVersion < 6 || moduleKind < ts.ModuleKind.ESNext) { error(node, ts.Diagnostics.The_import_meta_meta_property_is_only_allowed_using_ESNext_for_the_target_and_module_compiler_options); } var file = ts.getSourceFileOfNode(node); - ts.Debug.assert(!!(file.flags & 1048576 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag."); + ts.Debug.assert(!!(file.flags & 1048576), "Containing file is missing import meta node flag."); ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module."); return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType; } @@ -46771,7 +38670,7 @@ var ts; var parameter = signature.thisParameter; if (!parameter || parameter.valueDeclaration && !parameter.valueDeclaration.type) { if (!parameter) { - signature.thisParameter = createSymbolWithType(context.thisParameter, /*type*/ undefined); + signature.thisParameter = createSymbolWithType(context.thisParameter, undefined); } assignTypeToParameterAndFixTypeParameters(signature.thisParameter, getTypeOfSymbol(context.thisParameter)); } @@ -46785,7 +38684,6 @@ var ts; } } if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) { - // parameter might be a transient symbol generated by use of `arguments` in the function body. var parameter = ts.last(signature.parameters); if (isTransientSymbol(parameter) || !ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) { var contextualParameterType = getTypeOfSymbol(ts.last(context.parameters)); @@ -46793,13 +38691,11 @@ var ts; } } } - // When contextual typing assigns a type to a parameter that contains a binding pattern, we also need to push - // the destructured type into the contained binding elements. function assignBindingElementTypes(pattern) { for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { - if (element.name.kind === 71 /* Identifier */) { + if (element.name.kind === 71) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } else { @@ -46813,8 +38709,7 @@ var ts; if (!links.type) { links.type = contextualType; var decl = parameter.valueDeclaration; - if (decl.name.kind !== 71 /* Identifier */) { - // if inference didn't come up with anything but {}, fall back to the binding pattern if present. + if (decl.name.kind !== 71) { if (links.type === emptyObjectType) { links.type = getTypeFromBindingPattern(decl.name); } @@ -46823,10 +38718,8 @@ var ts; } } function createPromiseType(promisedType) { - // creates a `Promise` type where `T` is the promisedType argument - var globalPromiseType = getGlobalPromiseType(/*reportErrors*/ true); + var globalPromiseType = getGlobalPromiseType(true); if (globalPromiseType !== emptyGenericType) { - // if the promised type is itself a promise, get the underlying type; otherwise, fallback to the promised type promisedType = getAwaitedType(promisedType) || emptyObjectType; return createTypeReference(globalPromiseType, [promisedType]); } @@ -46840,7 +38733,7 @@ var ts; ts.Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option); return errorType; } - else if (!getGlobalPromiseConstructorSymbol(/*reportErrors*/ true)) { + else if (!getGlobalPromiseConstructorSymbol(true)) { error(func, ts.isImportCall(func) ? ts.Diagnostics.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option : ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option); @@ -46853,24 +38746,20 @@ var ts; } var functionFlags = ts.getFunctionFlags(func); var type; - if (func.body.kind !== 213 /* Block */) { + if (func.body.kind !== 213) { type = checkExpressionCached(func.body, checkMode); - if (functionFlags & 2 /* Async */) { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body should be unwrapped to its awaited type, which we will wrap in - // the native Promise type later in this function. - type = checkAwaitedType(type, /*errorNode*/ func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); + if (functionFlags & 2) { + type = checkAwaitedType(type, func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } } else { var types = checkAndAggregateReturnExpressionTypes(func, checkMode); - if (functionFlags & 1 /* Generator */) { // Generator or AsyncGenerator function + if (functionFlags & 1) { types = ts.concatenate(checkAndAggregateYieldOperandTypes(func, checkMode), types); if (!types || types.length === 0) { - var iterableIteratorAny = functionFlags & 2 /* Async */ - ? createAsyncIterableIteratorType(anyType) // AsyncGenerator function - : createIterableIteratorType(anyType); // Generator function + var iterableIteratorAny = functionFlags & 2 + ? createAsyncIterableIteratorType(anyType) + : createIterableIteratorType(anyType); if (noImplicitAny) { error(func.asteriskToken, ts.Diagnostics.Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type, typeToString(iterableIteratorAny)); } @@ -46879,20 +38768,17 @@ var ts; } else { if (!types) { - // For an async function, the return type will not be never, but rather a Promise for never. - return functionFlags & 2 /* Async */ - ? createPromiseReturnType(func, neverType) // Async function - : neverType; // Normal function + return functionFlags & 2 + ? createPromiseReturnType(func, neverType) + : neverType; } if (types.length === 0) { - // For an async function, the return type will not be void, but rather a Promise for void. - return functionFlags & 2 /* Async */ - ? createPromiseReturnType(func, voidType) // Async function - : voidType; // Normal function + return functionFlags & 2 + ? createPromiseReturnType(func, voidType) + : voidType; } } - // Return a union of the return expression types. - type = getUnionType(types, 2 /* Subtype */); + type = getUnionType(types, 2); } var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!contextualSignature) { @@ -46903,14 +38789,14 @@ var ts; contextualSignature === getSignatureFromDeclaration(func) ? type : getReturnTypeOfSignature(contextualSignature); if (contextualType) { - switch (functionFlags & 3 /* AsyncGenerator */) { - case 3 /* AsyncGenerator */: - contextualType = getIteratedTypeOfGenerator(contextualType, /*isAsyncGenerator*/ true); + switch (functionFlags & 3) { + case 3: + contextualType = getIteratedTypeOfGenerator(contextualType, true); break; - case 1 /* Generator */: - contextualType = getIteratedTypeOfGenerator(contextualType, /*isAsyncGenerator*/ false); + case 1: + contextualType = getIteratedTypeOfGenerator(contextualType, false); break; - case 2 /* Async */: + case 2: contextualType = getPromisedTypeOfPromise(contextualType); break; } @@ -46918,15 +38804,12 @@ var ts; type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); } var widenedType = getWidenedType(type); - switch (functionFlags & 3 /* AsyncGenerator */) { - case 3 /* AsyncGenerator */: + switch (functionFlags & 3) { + case 3: return createAsyncIterableIteratorType(widenedType); - case 1 /* Generator */: + case 1: return createIterableIteratorType(widenedType); - case 2 /* Async */: - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body is awaited type of the body, wrapped in a native Promise type. + case 2: return createPromiseType(widenedType); default: return widenedType; @@ -46934,7 +38817,7 @@ var ts; } function checkAndAggregateYieldOperandTypes(func, checkMode) { var aggregatedTypes = []; - var isAsync = (ts.getFunctionFlags(func) & 2 /* Async */) !== 0; + var isAsync = (ts.getFunctionFlags(func) & 2) !== 0; ts.forEachYieldExpression(func.body, function (yieldExpression) { ts.pushIfUnique(aggregatedTypes, getYieldedTypeOfYieldExpression(yieldExpression, isAsync, checkMode)); }); @@ -46943,8 +38826,7 @@ var ts; function getYieldedTypeOfYieldExpression(node, isAsync, checkMode) { var errorNode = node.expression || node; var expressionType = node.expression ? checkExpressionCached(node.expression, checkMode) : undefinedWideningType; - // A `yield*` expression effectively yields everything that its operand yields - var yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(expressionType, errorNode, /*allowStringInput*/ false, isAsync) : expressionType; + var yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(expressionType, errorNode, false, isAsync) : expressionType; return !isAsync ? yieldedType : getAwaitedType(yieldedType, errorNode, node.asteriskToken ? ts.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member : ts.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); @@ -46964,15 +38846,14 @@ var ts; return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralType), switchTypes); } function functionHasImplicitReturn(func) { - if (!(func.flags & 128 /* HasImplicitReturn */)) { + if (!(func.flags & 128)) { return false; } - if (ts.some(func.body.statements, function (statement) { return statement.kind === 227 /* SwitchStatement */ && isExhaustiveSwitchStatement(statement); })) { + if (ts.some(func.body.statements, function (statement) { return statement.kind === 227 && isExhaustiveSwitchStatement(statement); })) { return false; } return true; } - /** NOTE: Return value of `[]` means a different thing than `undefined`. `[]` means func returns `void`, `undefined` means it returns `never`. */ function checkAndAggregateReturnExpressionTypes(func, checkMode) { var functionFlags = ts.getFunctionFlags(func); var aggregatedTypes = []; @@ -46982,14 +38863,10 @@ var ts; var expr = returnStatement.expression; if (expr) { var type = checkExpressionCached(expr, checkMode); - if (functionFlags & 2 /* Async */) { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body should be unwrapped to its awaited type, which should be wrapped in - // the native Promise type by the caller. + if (functionFlags & 2) { type = checkAwaitedType(type, func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } - if (type.flags & 32768 /* Never */) { + if (type.flags & 32768) { hasReturnOfTypeNever = true; } ts.pushIfUnique(aggregatedTypes, type); @@ -47003,52 +38880,36 @@ var ts; } if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression && !(isJavaScriptConstructor(func) && aggregatedTypes.some(function (t) { return t.symbol === func.symbol; }))) { - // Javascript "callable constructors", containing eg `if (!(this instanceof A)) return new A()` should not add undefined ts.pushIfUnique(aggregatedTypes, undefinedType); } return aggregatedTypes; } function mayReturnNever(func) { switch (func.kind) { - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 192: + case 193: return true; - case 154 /* MethodDeclaration */: - return func.parent.kind === 184 /* ObjectLiteralExpression */; + case 154: + return func.parent.kind === 184; default: return false; } } - /** - * TypeScript Specification 1.0 (6.3) - July 2014 - * An explicitly typed function whose return type isn't the Void type, - * the Any type, or a union type containing the Void or Any type as a constituent - * must have at least one return statement somewhere in its body. - * An exception to this rule is if the function implementation consists of a single 'throw' statement. - * - * @param returnType - return type of the function, can be undefined if return type is not explicitly specified - */ function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) { if (!produceDiagnostics) { return; } - // Functions with with an explicitly specified 'void' or 'any' return type don't need any return expressions. - if (returnType && maybeTypeOfKind(returnType, 3 /* AnyOrUnknown */ | 4096 /* Void */)) { + if (returnType && maybeTypeOfKind(returnType, 3 | 4096)) { return; } - // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check. - // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw - if (func.kind === 153 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 213 /* Block */ || !functionHasImplicitReturn(func)) { + if (func.kind === 153 || ts.nodeIsMissing(func.body) || func.body.kind !== 213 || !functionHasImplicitReturn(func)) { return; } - var hasExplicitReturn = func.flags & 256 /* HasExplicitReturn */; - if (returnType && returnType.flags & 32768 /* Never */) { + var hasExplicitReturn = func.flags & 256; + if (returnType && returnType.flags & 32768) { error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); } else if (returnType && !hasExplicitReturn) { - // minimal check: function has syntactic return type annotation and no explicit return statements in the body - // this function does not conform to the specification. - // NOTE: having returnType !== undefined is a precondition for entering this branch so func.type will always be present error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value); } else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) { @@ -47056,9 +38917,6 @@ var ts; } else if (compilerOptions.noImplicitReturns) { if (!returnType) { - // If return type annotation is omitted check if function has any explicit return statements. - // If it does not have any - its inferred return type is void - don't do any checks. - // Otherwise get inferred return type from function body and report error only if it is not void / anytype if (!hasExplicitReturn) { return; } @@ -47071,14 +38929,12 @@ var ts; } } function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) { - ts.Debug.assert(node.kind !== 154 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); - // The identityMapper object is used to indicate that function expressions are wildcards - if (checkMode === 1 /* SkipContextSensitive */ && isContextSensitive(node)) { + ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); + if (checkMode === 1 && isContextSensitive(node)) { return anyFunctionType; } - // Grammar checking var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 192 /* FunctionExpression */) { + if (!hasGrammarError && node.kind === 192) { checkGrammarForGenerator(node); } var links = getNodeLinks(node); @@ -47086,19 +38942,15 @@ var ts; if (isTypeAny(type)) { return type; } - // Check if function expression is contextually typed and assign parameter types if so. - if (!(links.flags & 1024 /* ContextChecked */)) { + if (!(links.flags & 1024)) { var contextualSignature = getContextualSignature(node); - // If a type check is started at a function expression that is an argument of a function call, obtaining the - // contextual type may recursively get back to here during overload resolution of the call. If so, we will have - // already assigned contextual types. - if (!(links.flags & 1024 /* ContextChecked */)) { - links.flags |= 1024 /* ContextChecked */; + if (!(links.flags & 1024)) { + links.flags |= 1024; if (contextualSignature) { - var signature = getSignaturesOfType(type, 0 /* Call */)[0]; + var signature = getSignaturesOfType(type, 0)[0]; if (isContextSensitive(node)) { var contextualMapper = getContextualMapper(node); - if (checkMode === 2 /* Inferential */) { + if (checkMode === 2) { inferFromAnnotatedParameters(signature, contextualSignature, contextualMapper); } var instantiatedContextualSignature = contextualMapper === identityMapper ? @@ -47119,42 +38971,31 @@ var ts; return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { - ts.Debug.assert(node.kind !== 154 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); var functionFlags = ts.getFunctionFlags(node); var returnTypeNode = ts.getEffectiveReturnTypeNode(node); var returnOrPromisedType = returnTypeNode && - ((functionFlags & 3 /* AsyncGenerator */) === 2 /* Async */ ? - checkAsyncFunctionReturnType(node) : // Async function - getTypeFromTypeNode(returnTypeNode)); // AsyncGenerator function, Generator function, or normal function - if ((functionFlags & 1 /* Generator */) === 0) { // Async function or normal function - // return is not necessary in the body of generators + ((functionFlags & 3) === 2 ? + checkAsyncFunctionReturnType(node) : + getTypeFromTypeNode(returnTypeNode)); + if ((functionFlags & 1) === 0) { checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); } if (node.body) { if (!returnTypeNode) { - // There are some checks that are only performed in getReturnTypeFromBody, that may produce errors - // we need. An example is the noImplicitAny errors resulting from widening the return expression - // of a function. Because checking of function expression bodies is deferred, there was never an - // appropriate time to do this during the main walk of the file (see the comment at the top of - // checkFunctionExpressionBodies). So it must be done now. getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } - if (node.body.kind === 213 /* Block */) { + if (node.body.kind === 213) { checkSourceElement(node.body); } else { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so we - // should not be checking assignability of a promise to the return type. Instead, we need to - // check assignability of the awaited type of the expression body against the promised type of - // its return type annotation. var exprType = checkExpression(node.body); if (returnOrPromisedType) { - if ((functionFlags & 3 /* AsyncGenerator */) === 2 /* Async */) { // Async function + if ((functionFlags & 3) === 2) { var awaitedType = checkAwaitedType(exprType, node.body, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); checkTypeAssignableTo(awaitedType, returnOrPromisedType, node.body); } - else { // Normal function + else { checkTypeAssignableTo(exprType, returnOrPromisedType, node.body); } } @@ -47162,39 +39003,28 @@ var ts; } } function checkArithmeticOperandType(operand, type, diagnostic) { - if (!isTypeAssignableToKind(type, 168 /* NumberLike */)) { + if (!isTypeAssignableToKind(type, 168)) { error(operand, diagnostic); return false; } return true; } function isReadonlySymbol(symbol) { - // The following symbols are considered read-only: - // Properties with a 'readonly' modifier - // Variables declared with 'const' - // Get accessors without matching set accessors - // Enum members - // Unions and intersections of the above (unions and intersections eagerly set isReadonly on creation) - return !!(ts.getCheckFlags(symbol) & 8 /* Readonly */ || - symbol.flags & 4 /* Property */ && ts.getDeclarationModifierFlagsFromSymbol(symbol) & 64 /* Readonly */ || - symbol.flags & 3 /* Variable */ && getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */ || - symbol.flags & 98304 /* Accessor */ && !(symbol.flags & 65536 /* SetAccessor */) || - symbol.flags & 8 /* EnumMember */); + return !!(ts.getCheckFlags(symbol) & 8 || + symbol.flags & 4 && ts.getDeclarationModifierFlagsFromSymbol(symbol) & 64 || + symbol.flags & 3 && getDeclarationNodeFlagsFromSymbol(symbol) & 2 || + symbol.flags & 98304 && !(symbol.flags & 65536) || + symbol.flags & 8); } function isReferenceToReadonlyEntity(expr, symbol) { if (isReadonlySymbol(symbol)) { - // Allow assignments to readonly properties within constructors of the same class declaration. - if (symbol.flags & 4 /* Property */ && - (expr.kind === 185 /* PropertyAccessExpression */ || expr.kind === 186 /* ElementAccessExpression */) && - expr.expression.kind === 99 /* ThisKeyword */) { - // Look for if this is the constructor for the class that `symbol` is a property of. + if (symbol.flags & 4 && + (expr.kind === 185 || expr.kind === 186) && + expr.expression.kind === 99) { var func = ts.getContainingFunction(expr); - if (!(func && func.kind === 155 /* Constructor */)) { + if (!(func && func.kind === 155)) { return true; } - // If func.parent is a class and symbol is a (readonly) property of that class, or - // if func is a constructor and symbol is a (readonly) parameter property declared in it, - // then symbol is writeable here. return !(func.parent === symbol.valueDeclaration.parent || func === symbol.valueDeclaration.parent); } return true; @@ -47202,22 +39032,21 @@ var ts; return false; } function isReferenceThroughNamespaceImport(expr) { - if (expr.kind === 185 /* PropertyAccessExpression */ || expr.kind === 186 /* ElementAccessExpression */) { + if (expr.kind === 185 || expr.kind === 186) { var node = ts.skipParentheses(expr.expression); - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol.flags & 2097152 /* Alias */) { + if (symbol.flags & 2097152) { var declaration = getDeclarationOfAliasSymbol(symbol); - return !!declaration && declaration.kind === 246 /* NamespaceImport */; + return !!declaration && declaration.kind === 246; } } } return false; } function checkReferenceExpression(expr, invalidReferenceMessage) { - // References are combinations of identifiers, parentheses, and property accesses. - var node = ts.skipOuterExpressions(expr, 2 /* Assertions */ | 1 /* Parentheses */); - if (node.kind !== 71 /* Identifier */ && node.kind !== 185 /* PropertyAccessExpression */ && node.kind !== 186 /* ElementAccessExpression */) { + var node = ts.skipOuterExpressions(expr, 2 | 1); + if (node.kind !== 71 && node.kind !== 185 && node.kind !== 186) { error(expr, invalidReferenceMessage); return false; } @@ -47226,7 +39055,7 @@ var ts; function checkDeleteExpression(node) { checkExpression(node.expression); var expr = ts.skipParentheses(node.expression); - if (expr.kind !== 185 /* PropertyAccessExpression */ && expr.kind !== 186 /* ElementAccessExpression */) { + if (expr.kind !== 185 && expr.kind !== 186) { error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference); return booleanType; } @@ -47246,9 +39075,8 @@ var ts; return undefinedWideningType; } function checkAwaitExpression(node) { - // Grammar checking if (produceDiagnostics) { - if (!(node.flags & 16384 /* AwaitContext */)) { + if (!(node.flags & 16384)) { grammarErrorOnFirstToken(node, ts.Diagnostics.await_expression_is_only_allowed_within_an_async_function); } if (isInParameterInitializerBeforeContainingFunction(node)) { @@ -47263,33 +39091,32 @@ var ts; if (operandType === silentNeverType) { return silentNeverType; } - if (node.operand.kind === 8 /* NumericLiteral */) { - if (node.operator === 38 /* MinusToken */) { + if (node.operand.kind === 8) { + if (node.operator === 38) { return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text)); } - else if (node.operator === 37 /* PlusToken */) { + else if (node.operator === 37) { return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text)); } } switch (node.operator) { - case 37 /* PlusToken */: - case 38 /* MinusToken */: - case 52 /* TildeToken */: + case 37: + case 38: + case 52: checkNonNullType(operandType, node.operand); - if (maybeTypeOfKind(operandType, 3072 /* ESSymbolLike */)) { + if (maybeTypeOfKind(operandType, 3072)) { error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator)); } return numberType; - case 51 /* ExclamationToken */: - var facts = getTypeFacts(operandType) & (1048576 /* Truthy */ | 2097152 /* Falsy */); - return facts === 1048576 /* Truthy */ ? falseType : - facts === 2097152 /* Falsy */ ? trueType : + case 51: + var facts = getTypeFacts(operandType) & (1048576 | 2097152); + return facts === 1048576 ? falseType : + facts === 2097152 ? trueType : booleanType; - case 43 /* PlusPlusToken */: - case 44 /* MinusMinusToken */: + case 43: + case 44: var ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); if (ok) { - // run check only if former checks succeeded to avoid reporting cascading errors checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access); } return numberType; @@ -47303,18 +39130,15 @@ var ts; } var ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); if (ok) { - // run check only if former checks succeeded to avoid reporting cascading errors checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access); } return numberType; } - // Return true if type might be of the given kind. A union or intersection type might be of a given - // kind if at least one constituent type is of the given kind. function maybeTypeOfKind(type, kind) { - if (type.flags & kind & ~134217728 /* GenericMappedType */ || kind & 134217728 /* GenericMappedType */ && isGenericMappedType(type)) { + if (type.flags & kind & ~134217728 || kind & 134217728 && isGenericMappedType(type)) { return true; } - if (type.flags & 786432 /* UnionOrIntersection */) { + if (type.flags & 786432) { var types = type.types; for (var _i = 0, types_16 = types; _i < types_16.length; _i++) { var t = types_16[_i]; @@ -47329,44 +39153,38 @@ var ts; if (source.flags & kind) { return true; } - if (strict && source.flags & (3 /* AnyOrUnknown */ | 4096 /* Void */ | 8192 /* Undefined */ | 16384 /* Null */)) { + if (strict && source.flags & (3 | 4096 | 8192 | 16384)) { return false; } - return !!(kind & 168 /* NumberLike */) && isTypeAssignableTo(source, numberType) || - !!(kind & 68 /* StringLike */) && isTypeAssignableTo(source, stringType) || - !!(kind & 272 /* BooleanLike */) && isTypeAssignableTo(source, booleanType) || - !!(kind & 4096 /* Void */) && isTypeAssignableTo(source, voidType) || - !!(kind & 32768 /* Never */) && isTypeAssignableTo(source, neverType) || - !!(kind & 16384 /* Null */) && isTypeAssignableTo(source, nullType) || - !!(kind & 8192 /* Undefined */) && isTypeAssignableTo(source, undefinedType) || - !!(kind & 1024 /* ESSymbol */) && isTypeAssignableTo(source, esSymbolType) || - !!(kind & 16777216 /* NonPrimitive */) && isTypeAssignableTo(source, nonPrimitiveType); + return !!(kind & 168) && isTypeAssignableTo(source, numberType) || + !!(kind & 68) && isTypeAssignableTo(source, stringType) || + !!(kind & 272) && isTypeAssignableTo(source, booleanType) || + !!(kind & 4096) && isTypeAssignableTo(source, voidType) || + !!(kind & 32768) && isTypeAssignableTo(source, neverType) || + !!(kind & 16384) && isTypeAssignableTo(source, nullType) || + !!(kind & 8192) && isTypeAssignableTo(source, undefinedType) || + !!(kind & 1024) && isTypeAssignableTo(source, esSymbolType) || + !!(kind & 16777216) && isTypeAssignableTo(source, nonPrimitiveType); } function allTypesAssignableToKind(source, kind, strict) { - return source.flags & 262144 /* Union */ ? + return source.flags & 262144 ? ts.every(source.types, function (subType) { return allTypesAssignableToKind(subType, kind, strict); }) : isTypeAssignableToKind(source, kind, strict); } function isConstEnumObjectType(type) { - return !!(ts.getObjectFlags(type) & 16 /* Anonymous */) && !!type.symbol && isConstEnumSymbol(type.symbol); + return !!(ts.getObjectFlags(type) & 16) && !!type.symbol && isConstEnumSymbol(type.symbol); } function isConstEnumSymbol(symbol) { - return (symbol.flags & 128 /* ConstEnum */) !== 0; + return (symbol.flags & 128) !== 0; } function checkInstanceOfExpression(left, right, leftType, rightType) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } - // TypeScript 1.0 spec (April 2014): 4.15.4 - // The instanceof operator requires the left operand to be of type Any, an object type, or a type parameter type, - // and the right operand to be of type Any, a subtype of the 'Function' interface type, or have a call or construct signature. - // The result is always of the Boolean primitive type. - // NOTE: do not raise error if leftType is unknown as related error was already reported if (!isTypeAny(leftType) && - allTypesAssignableToKind(leftType, 32764 /* Primitive */)) { + allTypesAssignableToKind(leftType, 32764)) { error(left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - // NOTE: do not raise error if right is unknown as related error was already reported if (!(isTypeAny(rightType) || typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { error(right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); } @@ -47378,14 +39196,10 @@ var ts; } leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); - // TypeScript 1.0 spec (April 2014): 4.15.5 - // 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 (!(isTypeComparableTo(leftType, stringType) || isTypeAssignableToKind(leftType, 168 /* NumberLike */ | 3072 /* ESSymbolLike */))) { + if (!(isTypeComparableTo(leftType, stringType) || isTypeAssignableToKind(leftType, 168 | 3072))) { error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol); } - if (!isTypeAssignableToKind(rightType, 16777216 /* NonPrimitive */ | 14745600 /* InstantiableNonPrimitive */)) { + if (!isTypeAssignableToKind(rightType, 16777216 | 14745600)) { 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; @@ -47401,11 +39215,10 @@ var ts; } return sourceType; } - /** Note: If property cannot be a SpreadAssignment, then allProperties does not need to be provided */ function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, allProperties) { - if (property.kind === 270 /* PropertyAssignment */ || property.kind === 271 /* ShorthandPropertyAssignment */) { + if (property.kind === 270 || property.kind === 271) { var name = property.name; - if (name.kind === 147 /* ComputedPropertyName */) { + if (name.kind === 147) { checkComputedPropertyName(name); } if (isComputedNonLiteralName(name)) { @@ -47415,14 +39228,13 @@ var ts; var type = isTypeAny(objectLiteralType) ? objectLiteralType : getTypeOfPropertyOfType(objectLiteralType, text) || - isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1 /* Number */) || - getIndexTypeOfType(objectLiteralType, 0 /* String */); + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) || + getIndexTypeOfType(objectLiteralType, 0); if (type) { - if (property.kind === 271 /* ShorthandPropertyAssignment */) { + if (property.kind === 271) { return checkDestructuringAssignment(property, type); } else { - // non-shorthand property assignments should always have initializers return checkDestructuringAssignment(property.initializer, type); } } @@ -47430,9 +39242,9 @@ var ts; error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name)); } } - else if (property.kind === 272 /* SpreadAssignment */) { - if (languageVersion < 6 /* ESNext */) { - checkExternalEmitHelpers(property, 4 /* Rest */); + else if (property.kind === 272) { + if (languageVersion < 6) { + checkExternalEmitHelpers(property, 4); } var nonRestNames = []; if (allProperties) { @@ -47450,13 +39262,10 @@ var ts; } function checkArrayLiteralAssignment(node, sourceType, checkMode) { var elements = node.elements; - if (languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) { - checkExternalEmitHelpers(node, 512 /* Read */); + if (languageVersion < 2 && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 512); } - // This elementType will be used if the specific property corresponding to this index is not - // present (aka the tuple element property). This call also checks that the parentType is in - // fact an iterable or array (depending on target language). - var elementType = checkIteratedTypeOrElementType(sourceType, node, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType; + var elementType = checkIteratedTypeOrElementType(sourceType, node, false, false) || errorType; for (var i = 0; i < elements.length; i++) { checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, checkMode); } @@ -47465,8 +39274,8 @@ var ts; function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) { var elements = node.elements; var element = elements[elementIndex]; - if (element.kind !== 206 /* OmittedExpression */) { - if (element.kind !== 204 /* SpreadElement */) { + if (element.kind !== 206) { + if (element.kind !== 204) { var propName = "" + elementIndex; var type = isTypeAny(sourceType) ? sourceType @@ -47477,8 +39286,6 @@ var ts; return checkDestructuringAssignment(element, type, checkMode); } else { - // We still need to check element expression here because we may need to set appropriate flag on the expression - // such as NodeCheckFlags.LexicalThis on "this"expression. checkExpression(element); if (isTupleType(sourceType)) { error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), getTypeReferenceArity(sourceType), elements.length); @@ -47494,7 +39301,7 @@ var ts; } else { var restExpression = element.expression; - if (restExpression.kind === 200 /* BinaryExpression */ && restExpression.operatorToken.kind === 58 /* EqualsToken */) { + if (restExpression.kind === 200 && restExpression.operatorToken.kind === 58) { error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); } else { @@ -47508,14 +39315,12 @@ var ts; } function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode) { var target; - if (exprOrAssignment.kind === 271 /* ShorthandPropertyAssignment */) { + if (exprOrAssignment.kind === 271) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { - // In strict null checking mode, if a default value of a non-undefined type is specified, remove - // undefined from the final type. if (strictNullChecks && - !(getFalsyFlags(checkExpression(prop.objectAssignmentInitializer)) & 8192 /* Undefined */)) { - sourceType = getTypeWithFacts(sourceType, 131072 /* NEUndefined */); + !(getFalsyFlags(checkExpression(prop.objectAssignmentInitializer)) & 8192)) { + sourceType = getTypeWithFacts(sourceType, 131072); } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, checkMode); } @@ -47524,91 +39329,80 @@ var ts; else { target = exprOrAssignment; } - if (target.kind === 200 /* BinaryExpression */ && target.operatorToken.kind === 58 /* EqualsToken */) { + if (target.kind === 200 && target.operatorToken.kind === 58) { checkBinaryExpression(target, checkMode); target = target.left; } - if (target.kind === 184 /* ObjectLiteralExpression */) { + if (target.kind === 184) { return checkObjectLiteralAssignment(target, sourceType); } - if (target.kind === 183 /* ArrayLiteralExpression */) { + if (target.kind === 183) { return checkArrayLiteralAssignment(target, sourceType, checkMode); } return checkReferenceAssignment(target, sourceType, checkMode); } function checkReferenceAssignment(target, sourceType, checkMode) { var targetType = checkExpression(target, checkMode); - var error = target.parent.kind === 272 /* SpreadAssignment */ ? + var error = target.parent.kind === 272 ? 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); + checkTypeAssignableTo(sourceType, targetType, target, undefined); } return sourceType; } - /** - * This is a *shallow* check: An expression is side-effect-free if the - * evaluation of the expression *itself* cannot produce side effects. - * For example, x++ / 3 is side-effect free because the / operator - * does not have side effects. - * The intent is to "smell test" an expression for correctness in positions where - * its value is discarded (e.g. the left side of the comma operator). - */ function isSideEffectFree(node) { node = ts.skipParentheses(node); switch (node.kind) { - case 71 /* Identifier */: - case 9 /* StringLiteral */: - case 12 /* RegularExpressionLiteral */: - case 189 /* TaggedTemplateExpression */: - case 202 /* TemplateExpression */: - case 13 /* NoSubstitutionTemplateLiteral */: - case 8 /* NumericLiteral */: - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: - case 95 /* NullKeyword */: - case 140 /* UndefinedKeyword */: - case 192 /* FunctionExpression */: - case 205 /* ClassExpression */: - case 193 /* ArrowFunction */: - case 183 /* ArrayLiteralExpression */: - case 184 /* ObjectLiteralExpression */: - case 195 /* TypeOfExpression */: - case 209 /* NonNullExpression */: - case 256 /* JsxSelfClosingElement */: - case 255 /* JsxElement */: + case 71: + case 9: + case 12: + case 189: + case 202: + case 13: + case 8: + case 101: + case 86: + case 95: + case 140: + case 192: + case 205: + case 193: + case 183: + case 184: + case 195: + case 209: + case 256: + case 255: return true; - case 201 /* ConditionalExpression */: + case 201: return isSideEffectFree(node.whenTrue) && isSideEffectFree(node.whenFalse); - case 200 /* BinaryExpression */: + case 200: if (ts.isAssignmentOperator(node.operatorToken.kind)) { return false; } return isSideEffectFree(node.left) && isSideEffectFree(node.right); - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: - // Unary operators ~, !, +, and - have no side effects. - // The rest do. + case 198: + case 199: switch (node.operator) { - case 51 /* ExclamationToken */: - case 37 /* PlusToken */: - case 38 /* MinusToken */: - case 52 /* TildeToken */: + case 51: + case 37: + case 38: + case 52: return true; } return false; - // Some forms listed here for clarity - case 196 /* VoidExpression */: // Explicit opt-out - case 190 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings - case 208 /* AsExpression */: // Not SEF, but can produce useful type warnings + case 196: + case 190: + case 208: default: return false; } } function isTypeEqualityComparableTo(source, target) { - return (target.flags & 24576 /* Nullable */) !== 0 || isTypeComparableTo(source, target); + return (target.flags & 24576) !== 0 || isTypeComparableTo(source, target); } function checkBinaryExpression(node, checkMode) { if (ts.isInJavaScriptFile(node) && ts.getAssignedJavascriptInitializer(node)) { @@ -47618,49 +39412,46 @@ var ts; } function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) { var operator = operatorToken.kind; - if (operator === 58 /* EqualsToken */ && (left.kind === 184 /* ObjectLiteralExpression */ || left.kind === 183 /* ArrayLiteralExpression */)) { + if (operator === 58 && (left.kind === 184 || left.kind === 183)) { return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode); } var leftType = checkExpression(left, checkMode); var rightType = checkExpression(right, checkMode); switch (operator) { - case 39 /* AsteriskToken */: - case 40 /* AsteriskAsteriskToken */: - case 61 /* AsteriskEqualsToken */: - case 62 /* AsteriskAsteriskEqualsToken */: - case 41 /* SlashToken */: - case 63 /* SlashEqualsToken */: - case 42 /* PercentToken */: - case 64 /* PercentEqualsToken */: - case 38 /* MinusToken */: - case 60 /* MinusEqualsToken */: - case 45 /* LessThanLessThanToken */: - case 65 /* LessThanLessThanEqualsToken */: - case 46 /* GreaterThanGreaterThanToken */: - case 66 /* GreaterThanGreaterThanEqualsToken */: - case 47 /* GreaterThanGreaterThanGreaterThanToken */: - case 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 49 /* BarToken */: - case 69 /* BarEqualsToken */: - case 50 /* CaretToken */: - case 70 /* CaretEqualsToken */: - case 48 /* AmpersandToken */: - case 68 /* AmpersandEqualsToken */: + case 39: + case 40: + case 61: + case 62: + case 41: + case 63: + case 42: + case 64: + case 38: + case 60: + case 45: + case 65: + case 46: + case 66: + case 47: + case 67: + case 49: + case 69: + case 50: + case 70: + case 48: + case 68: if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); var suggestedOperator = void 0; - // if a user tries to apply a bitwise operator to 2 boolean operands - // try and return them a helpful suggestion - if ((leftType.flags & 272 /* BooleanLike */) && - (rightType.flags & 272 /* BooleanLike */) && + if ((leftType.flags & 272) && + (rightType.flags & 272) && (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== undefined) { error(errorNode || operatorToken, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(operatorToken.kind), ts.tokenToString(suggestedOperator)); } else { - // otherwise just check each operand separately and report errors as normal var leftOk = checkArithmeticOperandType(left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); var rightOk = checkArithmeticOperandType(right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); if (leftOk && rightOk) { @@ -47668,31 +39459,25 @@ var ts; } } return numberType; - case 37 /* PlusToken */: - case 59 /* PlusEqualsToken */: + case 37: + case 59: if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } - if (!isTypeAssignableToKind(leftType, 68 /* StringLike */) && !isTypeAssignableToKind(rightType, 68 /* StringLike */)) { + if (!isTypeAssignableToKind(leftType, 68) && !isTypeAssignableToKind(rightType, 68)) { leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); } var resultType = void 0; - if (isTypeAssignableToKind(leftType, 168 /* NumberLike */, /*strict*/ true) && isTypeAssignableToKind(rightType, 168 /* NumberLike */, /*strict*/ true)) { - // Operands of an enum type are treated as having the primitive type Number. - // If both operands are of the Number primitive type, the result is of the Number primitive type. + if (isTypeAssignableToKind(leftType, 168, true) && isTypeAssignableToKind(rightType, 168, true)) { resultType = numberType; } - else if (isTypeAssignableToKind(leftType, 68 /* StringLike */, /*strict*/ true) || isTypeAssignableToKind(rightType, 68 /* StringLike */, /*strict*/ true)) { - // If one or both operands are of the String primitive type, the result is of the String primitive type. + else if (isTypeAssignableToKind(leftType, 68, true) || isTypeAssignableToKind(rightType, 68, true)) { resultType = stringType; } else if (isTypeAny(leftType) || isTypeAny(rightType)) { - // Otherwise, the result is of type Any. - // NOTE: unknown type here denotes error type. Old compiler treated this case as any type so do we. resultType = leftType === errorType || rightType === errorType ? errorType : anyType; } - // Symbols are not allowed at all in arithmetic expressions if (resultType && !checkForDisallowedESSymbolOperand(operator)) { return resultType; } @@ -47700,14 +39485,14 @@ var ts; reportOperatorError(); return anyType; } - if (operator === 59 /* PlusEqualsToken */) { + if (operator === 59) { checkAssignmentOperator(resultType); } return resultType; - case 27 /* LessThanToken */: - case 29 /* GreaterThanToken */: - case 30 /* LessThanEqualsToken */: - case 31 /* GreaterThanEqualsToken */: + case 27: + case 29: + case 30: + case 31: if (checkForDisallowedESSymbolOperand(operator)) { leftType = getBaseTypeOfLiteralType(checkNonNullType(leftType, left)); rightType = getBaseTypeOfLiteralType(checkNonNullType(rightType, right)); @@ -47716,10 +39501,10 @@ var ts; } } return booleanType; - case 32 /* EqualsEqualsToken */: - case 33 /* ExclamationEqualsToken */: - case 34 /* EqualsEqualsEqualsToken */: - case 35 /* ExclamationEqualsEqualsToken */: + case 32: + case 33: + case 34: + case 35: var leftIsLiteral = isLiteralType(leftType); var rightIsLiteral = isLiteralType(rightType); if (!leftIsLiteral || !rightIsLiteral) { @@ -47730,23 +39515,23 @@ var ts; reportOperatorError(); } return booleanType; - case 93 /* InstanceOfKeyword */: + case 93: return checkInstanceOfExpression(left, right, leftType, rightType); - case 92 /* InKeyword */: + case 92: return checkInExpression(left, right, leftType, rightType); - case 53 /* AmpersandAmpersandToken */: - return getTypeFacts(leftType) & 1048576 /* Truthy */ ? + case 53: + return getTypeFacts(leftType) & 1048576 ? getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) : leftType; - case 54 /* BarBarToken */: - return getTypeFacts(leftType) & 2097152 /* Falsy */ ? - getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) : + case 54: + return getTypeFacts(leftType) & 2097152 ? + getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2) : leftType; - case 58 /* EqualsToken */: + case 58: checkSpecialAssignment(left, right); checkAssignmentOperator(rightType); return getRegularTypeOfObjectLiteral(rightType); - case 26 /* CommaToken */: + case 26: if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isEvalNode(right)) { error(left, ts.Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects); } @@ -47756,14 +39541,14 @@ var ts; } function checkSpecialAssignment(left, right) { var special = ts.getSpecialPropertyAssignmentKind(left.parent); - if (special === 2 /* ModuleExports */) { + if (special === 2) { var rightType_1 = checkExpression(right, checkMode); for (var _i = 0, _a = getPropertiesOfObjectType(rightType_1); _i < _a.length; _i++) { var prop = _a[_i]; var propType = getTypeOfSymbol(prop); - if (propType.symbol && propType.symbol.flags & 32 /* Class */) { + if (propType.symbol && propType.symbol.flags & 32) { var name = prop.escapedName; - var symbol = resolveName(prop.valueDeclaration, name, 67901928 /* Type */, undefined, name, /*isUse*/ false); + var symbol = resolveName(prop.valueDeclaration, name, 67901928, undefined, name, false); if (symbol && symbol.declarations.some(ts.isJSDocTypedefTag)) { grammarErrorOnNode(symbol.declarations[0], ts.Diagnostics.Duplicate_identifier_0, ts.unescapeLeadingUnderscores(name)); return grammarErrorOnNode(prop.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0, ts.unescapeLeadingUnderscores(name)); @@ -47773,12 +39558,11 @@ var ts; } } function isEvalNode(node) { - return node.kind === 71 /* Identifier */ && node.escapedText === "eval"; + return node.kind === 71 && node.escapedText === "eval"; } - // Return true if there was no error, false if there was an error. function checkForDisallowedESSymbolOperand(operator) { - var offendingSymbolOperand = maybeTypeOfKind(leftType, 3072 /* ESSymbolLike */) ? left : - maybeTypeOfKind(rightType, 3072 /* ESSymbolLike */) ? right : + var offendingSymbolOperand = maybeTypeOfKind(leftType, 3072) ? left : + maybeTypeOfKind(rightType, 3072) ? right : undefined; if (offendingSymbolOperand) { error(offendingSymbolOperand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(operator)); @@ -47788,31 +39572,24 @@ var ts; } function getSuggestedBooleanOperator(operator) { switch (operator) { - case 49 /* BarToken */: - case 69 /* BarEqualsToken */: - return 54 /* BarBarToken */; - case 50 /* CaretToken */: - case 70 /* CaretEqualsToken */: - return 35 /* ExclamationEqualsEqualsToken */; - case 48 /* AmpersandToken */: - case 68 /* AmpersandEqualsToken */: - return 53 /* AmpersandAmpersandToken */; + case 49: + case 69: + return 54; + case 50: + case 70: + return 35; + case 48: + case 68: + return 53; default: return undefined; } } function checkAssignmentOperator(valueType) { if (produceDiagnostics && ts.isAssignmentOperator(operator)) { - // TypeScript 1.0 spec (April 2014): 4.17 - // An assignment of the form - // VarExpr = ValueExpr - // requires VarExpr to be classified as a reference - // A compound assignment furthermore requires VarExpr to be classified as a reference (section 4.1) - // and the type of the non-compound operation to be assignable to the type of VarExpr. if (checkReferenceExpression(left, ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access) && (!ts.isIdentifier(left) || ts.unescapeLeadingUnderscores(left.escapedText) !== "exports")) { - // to avoid cascading errors check assignability only if 'isReference' check succeeded and no errors were reported - checkTypeAssignableTo(valueType, leftType, left, /*headMessage*/ undefined); + checkTypeAssignableTo(valueType, leftType, left, undefined); } } } @@ -47836,9 +39613,8 @@ var ts; return false; } function checkYieldExpression(node) { - // Grammar checking if (produceDiagnostics) { - if (!(node.flags & 4096 /* YieldContext */) || isYieldExpressionInClass(node)) { + if (!(node.flags & 4096) || isYieldExpressionInClass(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body); } if (isInParameterInitializerBeforeContainingFunction(node)) { @@ -47849,58 +39625,45 @@ var ts; if (!func) return anyType; var functionFlags = ts.getFunctionFlags(func); - if (!(functionFlags & 1 /* Generator */)) { - // If the user's code is syntactically correct, the func should always have a star. After all, we are in a yield context. + if (!(functionFlags & 1)) { return anyType; } if (node.asteriskToken) { - // Async generator functions prior to ESNext require the __await, __asyncDelegator, - // and __asyncValues helpers - if ((functionFlags & 3 /* AsyncGenerator */) === 3 /* AsyncGenerator */ && - languageVersion < 6 /* ESNext */) { - checkExternalEmitHelpers(node, 26624 /* AsyncDelegatorIncludes */); + if ((functionFlags & 3) === 3 && + languageVersion < 6) { + checkExternalEmitHelpers(node, 26624); } - // Generator functions prior to ES2015 require the __values helper - if ((functionFlags & 3 /* AsyncGenerator */) === 1 /* Generator */ && - languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) { - checkExternalEmitHelpers(node, 256 /* Values */); + if ((functionFlags & 3) === 1 && + languageVersion < 2 && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 256); } } - var isAsync = (functionFlags & 2 /* Async */) !== 0; - var yieldedType = getYieldedTypeOfYieldExpression(node, isAsync); // TODO: GH#18217 - // There is no point in doing an assignability check if the function - // has no explicit return type because the return type is directly computed - // from the yield expressions. + var isAsync = (functionFlags & 2) !== 0; + var yieldedType = getYieldedTypeOfYieldExpression(node, isAsync); var returnType = ts.getEffectiveReturnTypeNode(func); if (returnType) { var signatureElementType = getIteratedTypeOfGenerator(getTypeFromTypeNode(returnType), isAsync) || anyType; - checkTypeAssignableTo(yieldedType, signatureElementType, node.expression || node, /*headMessage*/ undefined); + checkTypeAssignableTo(yieldedType, signatureElementType, node.expression || node, undefined); } - // Both yield and yield* expressions have type 'any' return anyType; } function checkConditionalExpression(node, checkMode) { checkExpression(node.condition); var type1 = checkExpression(node.whenTrue, checkMode); var type2 = checkExpression(node.whenFalse, checkMode); - return getUnionType([type1, type2], 2 /* Subtype */); + return getUnionType([type1, type2], 2); } function checkTemplateExpression(node) { - // We just want to check each expressions, but we are unconcerned with - // the type of each expression, as any value may be coerced into a string. - // It is worth asking whether this is what we really want though. - // A place where we actually *are* concerned with the expressions' types are - // in tagged templates. ts.forEach(node.templateSpans, function (templateSpan) { - if (maybeTypeOfKind(checkExpression(templateSpan.expression), 3072 /* ESSymbolLike */)) { + if (maybeTypeOfKind(checkExpression(templateSpan.expression), 3072)) { error(templateSpan.expression, ts.Diagnostics.Type_0_cannot_be_converted_to_type_1, typeToString(esSymbolType), typeToString(stringType)); } }); return stringType; } function getContextNode(node) { - if (node.kind === 263 /* JsxAttributes */) { - return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes) + if (node.kind === 263) { + return node.parent.parent; } return node; } @@ -47910,8 +39673,8 @@ var ts; var saveContextualMapper = context.contextualMapper; context.contextualType = contextualType; context.contextualMapper = contextualMapper; - var checkMode = contextualMapper === identityMapper ? 1 /* SkipContextSensitive */ : - contextualMapper ? 2 /* Inferential */ : 3 /* Contextual */; + var checkMode = contextualMapper === identityMapper ? 1 : + contextualMapper ? 2 : 3; var result = checkExpression(node, checkMode); context.contextualType = saveContextualType; context.contextualMapper = saveContextualMapper; @@ -47923,9 +39686,6 @@ var ts; if (checkMode) { return checkExpression(node, checkMode); } - // When computing a type that we're going to cache, we need to ignore any ongoing control flow - // analysis because variables may have transient types in indeterminable states. Moving flowLoopStart - // to the top of the stack ensures all transient types are computed from a known point. var saveFlowLoopStart = flowLoopStart; flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, checkMode); @@ -47935,16 +39695,16 @@ var ts; } function isTypeAssertion(node) { node = ts.skipParentheses(node); - return node.kind === 190 /* TypeAssertionExpression */ || node.kind === 208 /* AsExpression */; + return node.kind === 190 || node.kind === 208; } function checkDeclarationInitializer(declaration) { var initializer = ts.getEffectiveInitializer(declaration); - var type = getTypeOfExpression(initializer, /*cache*/ true); - var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || - (ts.getCombinedModifierFlags(declaration) & 64 /* Readonly */ && !ts.isParameterPropertyDeclaration(declaration)) || + var type = getTypeOfExpression(initializer, true); + var widened = ts.getCombinedNodeFlags(declaration) & 2 || + (ts.getCombinedModifierFlags(declaration) & 64 && !ts.isParameterPropertyDeclaration(declaration)) || isTypeAssertion(initializer) ? type : getWidenedLiteralType(type); if (ts.isInJavaScriptFile(declaration)) { - if (widened.flags & 24576 /* Nullable */) { + if (widened.flags & 24576) { if (noImplicitAny) { reportImplicitAnyError(declaration, anyType); } @@ -47961,26 +39721,21 @@ var ts; } function isLiteralOfContextualType(candidateType, contextualType) { if (contextualType) { - if (contextualType.flags & 786432 /* UnionOrIntersection */) { + if (contextualType.flags & 786432) { var types = contextualType.types; return ts.some(types, function (t) { return isLiteralOfContextualType(candidateType, t); }); } - if (contextualType.flags & 14745600 /* InstantiableNonPrimitive */) { - // If the contextual type is a type variable constrained to a primitive type, consider - // this a literal context for literals of that primitive type. For example, given a - // type parameter 'T extends string', infer string literal types for T. + if (contextualType.flags & 14745600) { var constraint = getBaseConstraintOfType(contextualType) || emptyObjectType; - return maybeTypeOfKind(constraint, 4 /* String */) && maybeTypeOfKind(candidateType, 64 /* StringLiteral */) || - maybeTypeOfKind(constraint, 8 /* Number */) && maybeTypeOfKind(candidateType, 128 /* NumberLiteral */) || - maybeTypeOfKind(constraint, 1024 /* ESSymbol */) && maybeTypeOfKind(candidateType, 2048 /* UniqueESSymbol */) || + return maybeTypeOfKind(constraint, 4) && maybeTypeOfKind(candidateType, 64) || + maybeTypeOfKind(constraint, 8) && maybeTypeOfKind(candidateType, 128) || + maybeTypeOfKind(constraint, 1024) && maybeTypeOfKind(candidateType, 2048) || isLiteralOfContextualType(candidateType, constraint); } - // If the contextual type is a literal of a particular primitive type, we consider this a - // literal context for all literals of that primitive type. - return !!(contextualType.flags & (64 /* StringLiteral */ | 1048576 /* Index */) && maybeTypeOfKind(candidateType, 64 /* StringLiteral */) || - contextualType.flags & 128 /* NumberLiteral */ && maybeTypeOfKind(candidateType, 128 /* NumberLiteral */) || - contextualType.flags & 256 /* BooleanLiteral */ && maybeTypeOfKind(candidateType, 256 /* BooleanLiteral */) || - contextualType.flags & 2048 /* UniqueESSymbol */ && maybeTypeOfKind(candidateType, 2048 /* UniqueESSymbol */)); + return !!(contextualType.flags & (64 | 1048576) && maybeTypeOfKind(candidateType, 64) || + contextualType.flags & 128 && maybeTypeOfKind(candidateType, 128) || + contextualType.flags & 256 && maybeTypeOfKind(candidateType, 256) || + contextualType.flags & 2048 && maybeTypeOfKind(candidateType, 2048)); } return false; } @@ -47993,28 +39748,21 @@ var ts; getWidenedLiteralLikeTypeForContextualType(type, contextualType); } function checkPropertyAssignment(node, checkMode) { - // Do not use hasDynamicName here, because that returns false for well known symbols. - // We want to perform checkComputedPropertyName for all computed properties, including - // well known symbols. - if (node.name.kind === 147 /* ComputedPropertyName */) { + if (node.name.kind === 147) { checkComputedPropertyName(node.name); } return checkExpressionForMutableLocation(node.initializer, checkMode); } function checkObjectLiteralMethod(node, checkMode) { - // Grammar checking checkGrammarMethod(node); - // Do not use hasDynamicName here, because that returns false for well known symbols. - // We want to perform checkComputedPropertyName for all computed properties, including - // well known symbols. - if (node.name.kind === 147 /* ComputedPropertyName */) { + if (node.name.kind === 147) { checkComputedPropertyName(node.name); } var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode); return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); } function instantiateTypeWithSingleGenericCallSignature(node, type, checkMode) { - if (checkMode === 2 /* Inferential */) { + if (checkMode === 2) { var signature = getSingleCallSignature(type); if (signature && signature.typeParameters) { var contextualType = getApparentTypeOfContextualType(node); @@ -48028,34 +39776,16 @@ 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. - * A cache argument of true indicates that if the function performs a full type check, it is ok - * to cache the result. - */ function getTypeOfExpression(node, cache) { - // 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 === 187 /* CallExpression */ && node.expression.kind !== 97 /* SuperKeyword */ && !ts.isRequireCall(node, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(node)) { + if (node.kind === 187 && node.expression.kind !== 97 && !ts.isRequireCall(node, true) && !isSymbolOrSymbolForCall(node)) { 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 cache ? checkExpressionCached(node) : checkExpression(node); } - /** - * 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. - * It is intended for uses where you know there is no contextual type, - * and requesting the contextual type might cause a circularity or other bad behaviour. - * It sets the contextual type of the node to any before calling getTypeOfExpression. - */ function getContextFreeTypeOfExpression(node) { var saveContextualType = node.contextualType; node.contextualType = anyType; @@ -48066,16 +39796,9 @@ var ts; function checkExpresionNoReturn(node) { 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 - // conjunction with the generic contextual type. When contextualMapper is equal to the identityMapper function - // object, it serves as an indicator that all contained function and arrow expressions should be considered to - // have the wildcard function type; this form of type check is used during overload resolution to exclude - // contextually typed function and arrow expressions in the initial phase. function checkExpression(node, checkMode) { var type; - if (node.kind === 146 /* QualifiedName */) { + if (node.kind === 146) { type = checkQualifiedName(node); } else { @@ -48083,14 +39806,10 @@ var ts; type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); } if (isConstEnumObjectType(type)) { - // enum object type for const enums are only permitted in: - // - 'left' in property access - // - 'object' in indexed access - // - target in rhs of import statement - var ok = (node.parent.kind === 185 /* PropertyAccessExpression */ && node.parent.expression === node) || - (node.parent.kind === 186 /* ElementAccessExpression */ && node.parent.expression === node) || - ((node.kind === 71 /* Identifier */ || node.kind === 146 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) || - (node.parent.kind === 165 /* TypeQuery */ && node.parent.exprName === node)); + var ok = (node.parent.kind === 185 && node.parent.expression === node) || + (node.parent.kind === 186 && node.parent.expression === node) || + ((node.kind === 71 || node.kind === 146) && isInRightSideOfImportOrExportAssignment(node) || + (node.parent.kind === 165 && node.parent.exprName === node)); if (!ok) { error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query); } @@ -48106,99 +39825,96 @@ var ts; } function checkExpressionWorker(node, checkMode) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return checkIdentifier(node); - case 99 /* ThisKeyword */: + case 99: return checkThisExpression(node); - case 97 /* SuperKeyword */: + case 97: return checkSuperExpression(node); - case 95 /* NullKeyword */: + case 95: return nullWideningType; - case 13 /* NoSubstitutionTemplateLiteral */: - case 9 /* StringLiteral */: + case 13: + case 9: return getFreshTypeOfLiteralType(getLiteralType(node.text)); - case 8 /* NumericLiteral */: + case 8: checkGrammarNumericLiteral(node); return getFreshTypeOfLiteralType(getLiteralType(+node.text)); - case 101 /* TrueKeyword */: + case 101: return trueType; - case 86 /* FalseKeyword */: + case 86: return falseType; - case 202 /* TemplateExpression */: + case 202: return checkTemplateExpression(node); - case 12 /* RegularExpressionLiteral */: + case 12: return globalRegExpType; - case 183 /* ArrayLiteralExpression */: + case 183: return checkArrayLiteral(node, checkMode); - case 184 /* ObjectLiteralExpression */: + case 184: return checkObjectLiteral(node, checkMode); - case 185 /* PropertyAccessExpression */: + case 185: return checkPropertyAccessExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return checkIndexedAccess(node); - case 187 /* CallExpression */: - if (node.expression.kind === 91 /* ImportKeyword */) { + case 187: + if (node.expression.kind === 91) { return checkImportCallExpression(node); } - /* falls through */ - case 188 /* NewExpression */: + case 188: return checkCallExpression(node); - case 189 /* TaggedTemplateExpression */: + case 189: return checkTaggedTemplateExpression(node); - case 191 /* ParenthesizedExpression */: + case 191: return checkParenthesizedExpression(node, checkMode); - case 205 /* ClassExpression */: + case 205: return checkClassExpression(node); - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 192: + case 193: return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode); - case 195 /* TypeOfExpression */: + case 195: return checkTypeOfExpression(node); - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: + case 190: + case 208: return checkAssertion(node); - case 209 /* NonNullExpression */: + case 209: return checkNonNullAssertion(node); - case 210 /* MetaProperty */: + case 210: return checkMetaProperty(node); - case 194 /* DeleteExpression */: + case 194: return checkDeleteExpression(node); - case 196 /* VoidExpression */: + case 196: return checkVoidExpression(node); - case 197 /* AwaitExpression */: + case 197: return checkAwaitExpression(node); - case 198 /* PrefixUnaryExpression */: + case 198: return checkPrefixUnaryExpression(node); - case 199 /* PostfixUnaryExpression */: + case 199: return checkPostfixUnaryExpression(node); - case 200 /* BinaryExpression */: + case 200: return checkBinaryExpression(node, checkMode); - case 201 /* ConditionalExpression */: + case 201: return checkConditionalExpression(node, checkMode); - case 204 /* SpreadElement */: + case 204: return checkSpreadExpression(node, checkMode); - case 206 /* OmittedExpression */: + case 206: return undefinedWideningType; - case 203 /* YieldExpression */: + case 203: return checkYieldExpression(node); - case 265 /* JsxExpression */: + case 265: return checkJsxExpression(node, checkMode); - case 255 /* JsxElement */: + case 255: return checkJsxElement(node, checkMode); - case 256 /* JsxSelfClosingElement */: + case 256: return checkJsxSelfClosingElement(node, checkMode); - case 259 /* JsxFragment */: + case 259: return checkJsxFragment(node, checkMode); - case 263 /* JsxAttributes */: + case 263: return checkJsxAttributes(node, checkMode); - case 257 /* JsxOpeningElement */: + case 257: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return errorType; } - // DECLARATION AND STATEMENT TYPE CHECKING function checkTypeParameter(node) { - // Grammar Checking if (node.expression) { grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected); } @@ -48221,15 +39937,11 @@ var ts; } } function checkParameter(node) { - // Grammar checking - // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the - // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code - // or if its FunctionBody is strict code(11.1.5). checkGrammarDecoratorsAndModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (ts.hasModifier(node, 92 /* ParameterPropertyModifier */)) { - if (!(func.kind === 155 /* Constructor */ && ts.nodeIsPresent(func.body))) { + if (ts.hasModifier(node, 92)) { + if (!(func.kind === 155 && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -48240,12 +39952,10 @@ var ts; if (func.parameters.indexOf(node) !== 0) { error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText); } - if (func.kind === 155 /* Constructor */ || func.kind === 159 /* ConstructSignature */ || func.kind === 164 /* ConstructorType */) { + if (func.kind === 155 || func.kind === 159 || func.kind === 164) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } } - // Only check rest parameter type if it's not a binding pattern. Since binding patterns are - // not allowed in a rest parameter, we already have an error from checkGrammarParameterList. if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isArrayType(getTypeOfSymbol(node.symbol))) { error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); } @@ -48254,7 +39964,7 @@ var ts; if (parameterList) { for (var i = 0; i < parameterList.length; i++) { var param = parameterList[i]; - if (param.name.kind === 71 /* Identifier */ && param.name.escapedText === parameter.escapedText) { + if (param.name.kind === 71 && param.name.escapedText === parameter.escapedText) { return i; } } @@ -48264,7 +39974,6 @@ var ts; function checkTypePredicate(node) { var parent = getTypePredicateParent(node); if (!parent) { - // The parent must not be valid. error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); return; } @@ -48283,10 +39992,8 @@ var ts; error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); } else { - var leadingError = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type); }; - checkTypeAssignableTo(typePredicate.type, getTypeOfNode(parent.parameters[typePredicate.parameterIndex]), // TODO: GH#18217 - node.type, - /*headMessage*/ undefined, leadingError); + var leadingError = function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type); }; + checkTypeAssignableTo(typePredicate.type, getTypeOfNode(parent.parameters[typePredicate.parameterIndex]), node.type, undefined, leadingError); } } else if (parameterName) { @@ -48307,13 +40014,13 @@ var ts; } function getTypePredicateParent(node) { switch (node.parent.kind) { - case 193 /* ArrowFunction */: - case 158 /* CallSignature */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 163 /* FunctionType */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: + case 193: + case 158: + case 234: + case 192: + case 163: + case 154: + case 153: var parent = node.parent; if (node === parent.type) { return parent; @@ -48327,11 +40034,11 @@ var ts; continue; } var name = element.name; - if (name.kind === 71 /* Identifier */ && name.escapedText === predicateVariableName) { + if (name.kind === 71 && name.escapedText === predicateVariableName) { error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name.kind === 181 /* ArrayBindingPattern */ || name.kind === 180 /* ObjectBindingPattern */) { + else if (name.kind === 181 || name.kind === 180) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) { return true; } @@ -48339,35 +40046,28 @@ var ts; } } function checkSignatureDeclaration(node) { - // Grammar checking - if (node.kind === 160 /* IndexSignature */) { + if (node.kind === 160) { checkGrammarIndexSignature(node); } - // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled - else if (node.kind === 163 /* FunctionType */ || node.kind === 234 /* FunctionDeclaration */ || node.kind === 164 /* ConstructorType */ || - node.kind === 158 /* CallSignature */ || node.kind === 155 /* Constructor */ || - node.kind === 159 /* ConstructSignature */) { + else if (node.kind === 163 || node.kind === 234 || node.kind === 164 || + node.kind === 158 || node.kind === 155 || + node.kind === 159) { checkGrammarFunctionLikeDeclaration(node); } var functionFlags = ts.getFunctionFlags(node); - if (!(functionFlags & 4 /* Invalid */)) { - // Async generators prior to ESNext require the __await and __asyncGenerator helpers - if ((functionFlags & 3 /* AsyncGenerator */) === 3 /* AsyncGenerator */ && languageVersion < 6 /* ESNext */) { - checkExternalEmitHelpers(node, 6144 /* AsyncGeneratorIncludes */); + if (!(functionFlags & 4)) { + if ((functionFlags & 3) === 3 && languageVersion < 6) { + checkExternalEmitHelpers(node, 6144); } - // Async functions prior to ES2017 require the __awaiter helper - if ((functionFlags & 3 /* AsyncGenerator */) === 2 /* Async */ && languageVersion < 4 /* ES2017 */) { - checkExternalEmitHelpers(node, 64 /* Awaiter */); + if ((functionFlags & 3) === 2 && languageVersion < 4) { + checkExternalEmitHelpers(node, 64); } - // Generator functions, Async functions, and Async Generator functions prior to - // ES2015 require the __generator helper - if ((functionFlags & 3 /* AsyncGenerator */) !== 0 /* Normal */ && languageVersion < 2 /* ES2015 */) { - checkExternalEmitHelpers(node, 128 /* Generator */); + if ((functionFlags & 3) !== 0 && languageVersion < 2) { + checkExternalEmitHelpers(node, 128); } } checkTypeParameters(node.typeParameters); ts.forEach(node.parameters, checkParameter); - // TODO(rbuckton): Should we start checking JSDoc types? if (node.type) { checkSourceElement(node.type); } @@ -48376,82 +40076,69 @@ var ts; var returnTypeNode = ts.getEffectiveReturnTypeNode(node); if (noImplicitAny && !returnTypeNode) { switch (node.kind) { - case 159 /* ConstructSignature */: + case 159: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 158 /* CallSignature */: + case 158: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } } if (returnTypeNode) { var functionFlags_1 = ts.getFunctionFlags(node); - if ((functionFlags_1 & (4 /* Invalid */ | 1 /* Generator */)) === 1 /* Generator */) { + if ((functionFlags_1 & (4 | 1)) === 1) { var returnType = getTypeFromTypeNode(returnTypeNode); if (returnType === voidType) { error(returnTypeNode, ts.Diagnostics.A_generator_cannot_have_a_void_type_annotation); } else { - var generatorElementType = getIteratedTypeOfGenerator(returnType, (functionFlags_1 & 2 /* Async */) !== 0) || anyType; - var iterableIteratorInstantiation = functionFlags_1 & 2 /* Async */ - ? createAsyncIterableIteratorType(generatorElementType) // AsyncGenerator function - : createIterableIteratorType(generatorElementType); // Generator function - // Naively, one could check that IterableIterator is assignable to the return type annotation. - // However, that would not catch the error in the following case. - // - // interface BadGenerator extends Iterable, Iterator { } - // function* g(): BadGenerator { } // Iterable and Iterator have different types! - // + var generatorElementType = getIteratedTypeOfGenerator(returnType, (functionFlags_1 & 2) !== 0) || anyType; + var iterableIteratorInstantiation = functionFlags_1 & 2 + ? createAsyncIterableIteratorType(generatorElementType) + : createIterableIteratorType(generatorElementType); checkTypeAssignableTo(iterableIteratorInstantiation, returnType, returnTypeNode); } } - else if ((functionFlags_1 & 3 /* AsyncGenerator */) === 2 /* Async */) { + else if ((functionFlags_1 & 3) === 2) { checkAsyncFunctionReturnType(node); } } - if (node.kind !== 160 /* IndexSignature */ && node.kind !== 284 /* JSDocFunctionType */) { + if (node.kind !== 160 && node.kind !== 284) { registerForUnusedIdentifiersCheck(node); } } } function checkClassForDuplicateDeclarations(node) { - var Declaration; - (function (Declaration) { - Declaration[Declaration["Getter"] = 1] = "Getter"; - Declaration[Declaration["Setter"] = 2] = "Setter"; - Declaration[Declaration["Method"] = 4] = "Method"; - Declaration[Declaration["Property"] = 3] = "Property"; - })(Declaration || (Declaration = {})); var instanceNames = ts.createUnderscoreEscapedMap(); var staticNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; - if (member.kind === 155 /* Constructor */) { + if (member.kind === 155) { for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { var param = _c[_b]; if (ts.isParameterPropertyDeclaration(param) && !ts.isBindingPattern(param.name)) { - addName(instanceNames, param.name, param.name.escapedText, 3 /* Property */); + addName(instanceNames, param.name, param.name.escapedText, 3); } } } else { - var isStatic = ts.hasModifier(member, 32 /* Static */); + var isStatic = ts.hasModifier(member, 32); var names = isStatic ? staticNames : instanceNames; var name = member.name; var memberName = name && ts.getPropertyNameForPropertyNameNode(name); if (name && memberName) { switch (member.kind) { - case 156 /* GetAccessor */: - addName(names, name, memberName, 1 /* Getter */); + case 156: + addName(names, name, memberName, 1); break; - case 157 /* SetAccessor */: - addName(names, name, memberName, 2 /* Setter */); + case 157: + addName(names, name, memberName, 2); break; - case 152 /* PropertyDeclaration */: - addName(names, name, memberName, 3 /* Property */); + case 152: + addName(names, name, memberName, 3); break; - case 154 /* MethodDeclaration */: - addName(names, name, memberName, 4 /* Method */); + case 154: + addName(names, name, memberName, 4); break; } } @@ -48460,8 +40147,8 @@ var ts; function addName(names, location, name, meaning) { var prev = names.get(name); if (prev) { - if (prev & 4 /* Method */) { - if (meaning !== 4 /* Method */) { + if (prev & 4) { + if (meaning !== 4) { error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location)); } } @@ -48477,22 +40164,11 @@ var ts; } } } - /** - * Static members being set on a constructor function may conflict with built-in properties - * of Function. Esp. in ECMAScript 5 there are non-configurable and non-writable - * built-in properties. This check issues a transpile error when a class has a static - * member with the same name as a non-writable built-in property. - * - * @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.3 - * @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.5 - * @see http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-constructor - * @see http://www.ecma-international.org/ecma-262/6.0/#sec-function-instances - */ function checkClassForStaticPropertyNameConflicts(node) { for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; var memberNameNode = member.name; - var isStatic = ts.hasModifier(member, 32 /* Static */); + var isStatic = ts.hasModifier(member, 32); if (isStatic && memberNameNode) { var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode); switch (memberName) { @@ -48513,15 +40189,15 @@ var ts; var names = ts.createMap(); for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; - if (member.kind === 151 /* PropertySignature */) { + if (member.kind === 151) { var memberName = void 0; var name = member.name; switch (name.kind) { - case 9 /* StringLiteral */: - case 8 /* NumericLiteral */: + case 9: + case 8: memberName = name.text; break; - case 71 /* Identifier */: + case 71: memberName = ts.idText(name); break; default: @@ -48538,17 +40214,12 @@ var ts; } } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 236 /* InterfaceDeclaration */) { + if (node.kind === 236) { var nodeSymbol = getSymbolOfNode(node); - // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration - // to prevent this run check only for the first declaration of a given kind if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { return; } } - // TypeScript 1.0 spec (April 2014) - // 3.7.4: An object type can contain at most one string index signature and one numeric index signature. - // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration var indexSymbol = getIndexSymbol(getSymbolOfNode(node)); if (indexSymbol) { var seenNumericIndexer = false; @@ -48558,7 +40229,7 @@ var ts; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 137 /* StringKeyword */: + case 137: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -48566,7 +40237,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 134 /* NumberKeyword */: + case 134: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -48580,37 +40251,28 @@ var ts; } } function checkPropertyDeclaration(node) { - // Grammar checking if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarProperty(node)) checkGrammarComputedPropertyName(node.name); checkVariableLikeDeclaration(node); } function checkMethodDeclaration(node) { - // Grammar checking if (!checkGrammarMethod(node)) checkGrammarComputedPropertyName(node.name); - // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration checkFunctionOrMethodDeclaration(node); - // Abstract methods cannot have an implementation. - // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node. - if (ts.hasModifier(node, 128 /* Abstract */) && node.kind === 154 /* MethodDeclaration */ && node.body) { + if (ts.hasModifier(node, 128) && node.kind === 154 && node.body) { error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name)); } } function checkConstructorDeclaration(node) { - // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function. checkSignatureDeclaration(node); - // Grammar check for checking only related to constructorDeclaration if (!checkGrammarConstructorTypeParameters(node)) checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); - // Only type check the symbol once if (node === firstDeclaration) { checkFunctionOrConstructorSymbol(symbol); } - // exit early in the case of signature - super checks are not relevant to them if (ts.nodeIsMissing(node.body)) { return; } @@ -48618,13 +40280,10 @@ var ts; return; } function isInstancePropertyWithInitializer(n) { - return n.kind === 152 /* PropertyDeclaration */ && - !ts.hasModifier(n, 32 /* Static */) && + return n.kind === 152 && + !ts.hasModifier(n, 32) && !!n.initializer; } - // TS 1.0 spec (April 2014): 8.3.2 - // Constructors of classes with no extends clause may not contain super calls, whereas - // constructors of derived classes must contain at least one super call somewhere in their function body. var containingClassDecl = node.parent; if (ts.getClassExtendsHeritageClauseElement(containingClassDecl)) { captureLexicalThis(node.parent, containingClassDecl); @@ -48634,21 +40293,14 @@ var ts; if (classExtendsNull) { error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); } - // The first statement in the body of a constructor (excluding prologue directives) must be a super call - // if both of the following are true: - // - The containing class is a derived class. - // - The constructor declares parameter properties - // or the containing class declares instance member variables with initializers. var superCallShouldBeFirst = ts.some(node.parent.members, isInstancePropertyWithInitializer) || - ts.some(node.parameters, function (p) { return ts.hasModifier(p, 92 /* ParameterPropertyModifier */); }); - // Skip past any prologue directives to find the first statement - // to ensure that it was a super call. + ts.some(node.parameters, function (p) { return ts.hasModifier(p, 92); }); 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]; - if (statement.kind === 216 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) { + if (statement.kind === 216 && ts.isSuperCall(statement.expression)) { superCallStatement = statement; break; } @@ -48668,46 +40320,38 @@ var ts; } function checkAccessorDeclaration(node) { if (produceDiagnostics) { - // Grammar checking accessors if (!checkGrammarFunctionLikeDeclaration(node) && !checkGrammarAccessor(node)) checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); - if (node.kind === 156 /* GetAccessor */) { - if (!(node.flags & 4194304 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 128 /* HasImplicitReturn */)) { - if (!(node.flags & 256 /* HasExplicitReturn */)) { + if (node.kind === 156) { + if (!(node.flags & 4194304) && ts.nodeIsPresent(node.body) && (node.flags & 128)) { + if (!(node.flags & 256)) { error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value); } } } - // Do not use hasDynamicName here, because that returns false for well known symbols. - // We want to perform checkComputedPropertyName for all computed properties, including - // well known symbols. - if (node.name.kind === 147 /* ComputedPropertyName */) { + if (node.name.kind === 147) { checkComputedPropertyName(node.name); } if (!hasNonBindableDynamicName(node)) { - // TypeScript 1.0 spec (April 2014): 8.4.3 - // Accessors for the same member name must specify the same accessibility. - var otherKind = node.kind === 156 /* GetAccessor */ ? 157 /* SetAccessor */ : 156 /* GetAccessor */; + var otherKind = node.kind === 156 ? 157 : 156; var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind); if (otherAccessor) { var nodeFlags = ts.getModifierFlags(node); var otherFlags = ts.getModifierFlags(otherAccessor); - if ((nodeFlags & 28 /* AccessibilityModifier */) !== (otherFlags & 28 /* AccessibilityModifier */)) { + if ((nodeFlags & 28) !== (otherFlags & 28)) { error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); } - if ((nodeFlags & 128 /* Abstract */) !== (otherFlags & 128 /* Abstract */)) { + if ((nodeFlags & 128) !== (otherFlags & 128)) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } - // TypeScript 1.0 spec (April 2014): 4.5 - // If both accessors include type annotations, the specified types must be identical. checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } var returnType = getTypeOfAccessors(getSymbolOfNode(node)); - if (node.kind === 156 /* GetAccessor */) { + if (node.kind === 156) { checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType); } } @@ -48747,21 +40391,20 @@ var ts; if (type !== errorType) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol) { - return symbol.flags & 524288 /* TypeAlias */ && getSymbolLinks(symbol).typeParameters || - (ts.getObjectFlags(type) & 4 /* Reference */ ? type.target.localTypeParameters : undefined); + return symbol.flags & 524288 && getSymbolLinks(symbol).typeParameters || + (ts.getObjectFlags(type) & 4 ? type.target.localTypeParameters : undefined); } } return undefined; } function checkTypeReferenceNode(node) { checkGrammarTypeArguments(node, node.typeArguments); - if (node.kind === 162 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJavaScriptFile(node) && !ts.isInJSDoc(node)) { + if (node.kind === 162 && node.typeName.jsdocDotPos !== undefined && !ts.isInJavaScriptFile(node) && !ts.isInJSDoc(node)) { grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments); } var type = getTypeFromTypeReference(node); if (type !== errorType) { if (node.typeArguments) { - // Do type argument local checks only if referenced type is successfully resolved ts.forEach(node.typeArguments, checkSourceElement); if (produceDiagnostics) { var typeParameters = getTypeParametersForTypeReference(node); @@ -48770,7 +40413,7 @@ var ts; } } } - if (type.flags & 32 /* Enum */ && getNodeLinks(node).resolvedSymbol.flags & 8 /* EnumMember */) { + if (type.flags & 32 && getNodeLinks(node).resolvedSymbol.flags & 8) { error(node, ts.Diagnostics.Enum_type_0_has_members_with_initializers_that_are_not_literals, typeToString(type)); } } @@ -48779,7 +40422,7 @@ var ts; var typeReferenceNode = ts.tryCast(node.parent, ts.isTypeReferenceType); if (!typeReferenceNode) return undefined; - var typeParameters = getTypeParametersForTypeReference(typeReferenceNode); // TODO: GH#18217 + var typeParameters = getTypeParametersForTypeReference(typeReferenceNode); var constraint = getConstraintOfTypeParameter(typeParameters[typeReferenceNode.typeArguments.indexOf(node)]); return constraint && instantiateType(constraint, createTypeMapper(typeParameters, getEffectiveTypeArguments(typeReferenceNode, typeParameters))); } @@ -48799,7 +40442,6 @@ var ts; checkSourceElement(node.elementType); } function checkTupleType(node) { - // Grammar checking var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes); if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) { grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); @@ -48810,22 +40452,19 @@ var ts; ts.forEach(node.types, checkSourceElement); } function checkIndexedAccessIndexType(type, accessNode) { - if (!(type.flags & 2097152 /* IndexedAccess */)) { + if (!(type.flags & 2097152)) { return type; } - // Check if the index type is assignable to 'keyof T' for the object type. var objectType = type.objectType; var indexType = type.indexType; - if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) { - if (accessNode.kind === 186 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) && - ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) { + if (isTypeAssignableTo(indexType, getIndexType(objectType, false))) { + if (accessNode.kind === 186 && ts.isAssignmentTarget(accessNode) && + ts.getObjectFlags(objectType) & 32 && getMappedTypeModifiers(objectType) & 1) { error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType)); } return type; } - // Check if we're indexing with a numeric type and if either object or index types - // is a generic type with a constraint that has a numeric index signature. - if (getIndexInfoOfType(getApparentType(objectType), 1 /* Number */) && isTypeAssignableToKind(indexType, 168 /* NumberLike */)) { + if (getIndexInfoOfType(getApparentType(objectType), 1) && isTypeAssignableToKind(indexType, 168)) { return type; } error(accessNode, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType)); @@ -48854,7 +40493,7 @@ var ts; ts.forEachChild(node, checkSourceElement); } function checkInferType(node) { - if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 171 /* ConditionalType */ && n.parent.extendsType === n; })) { + if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 171 && n.parent.extendsType === n; })) { grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type); } checkSourceElement(node.typeParameter); @@ -48864,21 +40503,18 @@ var ts; getTypeFromTypeNode(node); } function isPrivateWithinAmbient(node) { - return ts.hasModifier(node, 8 /* Private */) && !!(node.flags & 4194304 /* Ambient */); + return ts.hasModifier(node, 8) && !!(node.flags & 4194304); } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = ts.getCombinedModifierFlags(n); - // children of classes (even ambient classes) should not be marked as ambient or export - // because those flags have no useful semantics there. - if (n.parent.kind !== 236 /* InterfaceDeclaration */ && - n.parent.kind !== 235 /* ClassDeclaration */ && - n.parent.kind !== 205 /* ClassExpression */ && - n.flags & 4194304 /* Ambient */) { - if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) { - // It is nested in an ambient context, which means it is automatically exported - flags |= 1 /* Export */; + if (n.parent.kind !== 236 && + n.parent.kind !== 235 && + n.parent.kind !== 205 && + n.flags & 4194304) { + if (!(flags & 2) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) { + flags |= 1; } - flags |= 2 /* Ambient */; + flags |= 2; } return flags & flagsToCheck; } @@ -48887,32 +40523,25 @@ var ts; return; } function getCanonicalOverload(overloads, implementation) { - // Consider the canonical set of flags to be the flags of the bodyDeclaration or the first declaration - // Error on all deviations from this canonical set of flags - // The caveat is that if some overloads are defined in lib.d.ts, we don't want to - // report the errors on those. To achieve this, we will say that the implementation is - // the canonical signature only if it is in the same container as the first overload var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent; return implementationSharesContainerWithFirstOverload ? implementation : overloads[0]; } function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { - // Error if some overloads have a flag that is not shared by all overloads. To find the - // deviations, we XOR someOverloadFlags with allOverloadFlags var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; if (someButNotAllOverloadFlags !== 0) { var canonicalFlags_1 = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck); ts.forEach(overloads, function (o) { var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags_1; - if (deviation & 1 /* Export */) { + if (deviation & 1) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); } - else if (deviation & 2 /* Ambient */) { + else if (deviation & 2) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); } - else if (deviation & (8 /* Private */ | 16 /* Protected */)) { + else if (deviation & (8 | 16)) { error(ts.getNameOfDeclaration(o) || o, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); } - else if (deviation & 128 /* Abstract */) { + else if (deviation & 128) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); } }); @@ -48929,8 +40558,8 @@ var ts; }); } } - var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 8 /* Private */ | 16 /* Protected */ | 128 /* Abstract */; - var someNodeFlags = 0 /* None */; + var flagsToCheck = 1 | 2 | 8 | 16 | 128; + var someNodeFlags = 0; var allNodeFlags = flagsToCheck; var someHaveQuestionToken = false; var allHaveQuestionToken = true; @@ -48939,7 +40568,7 @@ var ts; var lastSeenNonAmbientDeclaration; var previousDeclaration; var declarations = symbol.declarations; - var isConstructor = (symbol.flags & 16384 /* Constructor */) !== 0; + var isConstructor = (symbol.flags & 16384) !== 0; function reportImplementationExpectedError(node) { if (node.name && ts.nodeIsMissing(node.name)) { return; @@ -48953,24 +40582,17 @@ var ts; seen = c === node; } }); - // We may be here because of some extra nodes between overloads that could not be parsed into a valid node. - // In this case the subsequent node is not really consecutive (.pos !== node.end), and we must ignore it here. if (subsequentNode && subsequentNode.pos === node.end) { if (subsequentNode.kind === node.kind) { var errorNode_1 = subsequentNode.name || subsequentNode; - // TODO: GH#17345: These are methods, so handle computed name case. (`Always allowing computed property names is *not* the correct behavior!) var subsequentName = subsequentNode.name; if (node.name && subsequentName && (ts.isComputedPropertyName(node.name) && ts.isComputedPropertyName(subsequentName) || !ts.isComputedPropertyName(node.name) && !ts.isComputedPropertyName(subsequentName) && ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) { - var reportError = (node.kind === 154 /* MethodDeclaration */ || node.kind === 153 /* MethodSignature */) && - ts.hasModifier(node, 32 /* Static */) !== ts.hasModifier(subsequentNode, 32 /* Static */); - // we can get here in two cases - // 1. mixed static and instance class members - // 2. something with the same name was defined before the set of overloads that prevents them from merging - // here we'll report error only for the first case since for second we should already report error in binder + var reportError = (node.kind === 154 || node.kind === 153) && + ts.hasModifier(node, 32) !== ts.hasModifier(subsequentNode, 32); if (reportError) { - var diagnostic = ts.hasModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; + var diagnostic = ts.hasModifier(node, 32) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; error(errorNode_1, diagnostic); } return; @@ -48986,9 +40608,7 @@ var ts; error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing); } else { - // Report different errors regarding non-consecutive blocks of declarations depending on whether - // the node in question is abstract. - if (ts.hasModifier(node, 128 /* Abstract */)) { + if (ts.hasModifier(node, 128)) { error(errorNode, ts.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive); } else { @@ -49001,19 +40621,12 @@ var ts; for (var _i = 0, declarations_4 = declarations; _i < declarations_4.length; _i++) { var current = declarations_4[_i]; var node = current; - var inAmbientContext = node.flags & 4194304 /* Ambient */; - var inAmbientContextOrInterface = node.parent.kind === 236 /* InterfaceDeclaration */ || node.parent.kind === 166 /* TypeLiteral */ || inAmbientContext; + var inAmbientContext = node.flags & 4194304; + var inAmbientContextOrInterface = node.parent.kind === 236 || node.parent.kind === 166 || inAmbientContext; if (inAmbientContextOrInterface) { - // check if declarations are consecutive only if they are non-ambient - // 1. ambient declarations can be interleaved - // i.e. this is legal - // declare function foo(); - // declare function bar(); - // declare function foo(); - // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one previousDeclaration = undefined; } - if (node.kind === 234 /* FunctionDeclaration */ || node.kind === 154 /* MethodDeclaration */ || node.kind === 153 /* MethodSignature */ || node.kind === 155 /* Constructor */) { + if (node.kind === 234 || node.kind === 154 || node.kind === 153 || node.kind === 155) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -49054,9 +40667,8 @@ var ts; error(ts.getNameOfDeclaration(declaration), ts.Diagnostics.Duplicate_function_implementation); }); } - // Abstract methods can't have an implementation -- in particular, they don't need one. if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !ts.hasModifier(lastSeenNonAmbientDeclaration, 128 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { + !ts.hasModifier(lastSeenNonAmbientDeclaration, 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { @@ -49079,30 +40691,25 @@ var ts; if (!produceDiagnostics) { return; } - // if localSymbol is defined on node then node itself is exported - check is required var symbol = node.localSymbol; if (!symbol) { - // local symbol is undefined => this declaration is non-exported. - // however symbol might contain other declarations that are exported symbol = getSymbolOfNode(node); if (!symbol.exportSymbol) { - // this is a pure local symbol (all declarations are non-exported) - no need to check anything return; } } - // run the check only for the first declaration in the list if (ts.getDeclarationOfKind(symbol, node.kind) !== node) { return; } - var exportedDeclarationSpaces = 0 /* None */; - var nonExportedDeclarationSpaces = 0 /* None */; - var defaultExportedDeclarationSpaces = 0 /* None */; + var exportedDeclarationSpaces = 0; + var nonExportedDeclarationSpaces = 0; + var defaultExportedDeclarationSpaces = 0; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var d = _a[_i]; var declarationSpaces = getDeclarationSpaces(d); - var effectiveDeclarationFlags = getEffectiveDeclarationFlags(d, 1 /* Export */ | 512 /* Default */); - if (effectiveDeclarationFlags & 1 /* Export */) { - if (effectiveDeclarationFlags & 512 /* Default */) { + var effectiveDeclarationFlags = getEffectiveDeclarationFlags(d, 1 | 512); + if (effectiveDeclarationFlags & 1) { + if (effectiveDeclarationFlags & 512) { defaultExportedDeclarationSpaces |= declarationSpaces; } else { @@ -49113,17 +40720,14 @@ var ts; nonExportedDeclarationSpaces |= declarationSpaces; } } - // Spaces for anything not declared a 'default export'. var nonDefaultExportedDeclarationSpaces = exportedDeclarationSpaces | nonExportedDeclarationSpaces; var commonDeclarationSpacesForExportsAndLocals = exportedDeclarationSpaces & nonExportedDeclarationSpaces; var commonDeclarationSpacesForDefaultAndNonDefault = defaultExportedDeclarationSpaces & nonDefaultExportedDeclarationSpaces; if (commonDeclarationSpacesForExportsAndLocals || commonDeclarationSpacesForDefaultAndNonDefault) { - // declaration spaces for exported and non-exported declarations intersect for (var _b = 0, _c = symbol.declarations; _b < _c.length; _b++) { var d = _c[_b]; var declarationSpaces = getDeclarationSpaces(d); var name = ts.getNameOfDeclaration(d); - // Only error on the declarations that contributed to the intersecting spaces. if (declarationSpaces & commonDeclarationSpacesForDefaultAndNonDefault) { error(name, ts.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead, ts.declarationNameToString(name)); } @@ -49132,51 +40736,40 @@ var ts; } } } - var DeclarationSpaces; - (function (DeclarationSpaces) { - DeclarationSpaces[DeclarationSpaces["None"] = 0] = "None"; - DeclarationSpaces[DeclarationSpaces["ExportValue"] = 1] = "ExportValue"; - DeclarationSpaces[DeclarationSpaces["ExportType"] = 2] = "ExportType"; - DeclarationSpaces[DeclarationSpaces["ExportNamespace"] = 4] = "ExportNamespace"; - })(DeclarationSpaces || (DeclarationSpaces = {})); function getDeclarationSpaces(decl) { var d = decl; switch (d.kind) { - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - // A jsdoc typedef and callback are, by definition, type aliases - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: - return 2 /* ExportType */; - case 239 /* ModuleDeclaration */: - return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */ - ? 4 /* ExportNamespace */ | 1 /* ExportValue */ - : 4 /* ExportNamespace */; - case 235 /* ClassDeclaration */: - case 238 /* EnumDeclaration */: - return 2 /* ExportType */ | 1 /* ExportValue */; - case 274 /* SourceFile */: - return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */; - case 249 /* ExportAssignment */: - // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values + case 236: + case 237: + case 297: + case 292: + return 2; + case 239: + return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 + ? 4 | 1 + : 4; + case 235: + case 238: + return 2 | 1; + case 274: + return 2 | 1 | 4; + case 249: if (!ts.isEntityNameExpression(d.expression)) { - return 1 /* ExportValue */; + return 1; } d = d.expression; - /* falls through */ - // The below options all declare an Alias, which is allowed to merge with other values within the importing module - case 243 /* ImportEqualsDeclaration */: - case 246 /* NamespaceImport */: - case 245 /* ImportClause */: - var result_3 = 0 /* None */; + case 243: + case 246: + case 245: + var result_3 = 0; var target = resolveAlias(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { result_3 |= getDeclarationSpaces(d); }); return result_3; - case 232 /* VariableDeclaration */: - case 182 /* BindingElement */: - case 234 /* FunctionDeclaration */: - case 248 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591 - return 1 /* ExportValue */; + case 232: + case 182: + case 234: + case 248: + return 1; default: return ts.Debug.fail(ts.Debug.showSyntaxKind(d)); } @@ -49186,21 +40779,7 @@ var ts; var promisedType = getPromisedTypeOfPromise(type, errorNode); return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage); } - /** - * Gets the "promised type" of a promise. - * @param type The type of the promise. - * @remarks The "promised type" of a type is the type of the "value" parameter of the "onfulfilled" callback. - */ function getPromisedTypeOfPromise(promise, errorNode) { - // - // { // promise - // then( // thenFunction - // onfulfilled: ( // onfulfilledParameterType - // value: T // valueParameterType - // ) => any - // ): any; - // } - // if (isTypeAny(promise)) { return undefined; } @@ -49208,40 +40787,33 @@ var ts; if (typeAsPromise.promisedTypeOfPromise) { return typeAsPromise.promisedTypeOfPromise; } - if (isReferenceToType(promise, getGlobalPromiseType(/*reportErrors*/ false))) { + if (isReferenceToType(promise, getGlobalPromiseType(false))) { return typeAsPromise.promisedTypeOfPromise = promise.typeArguments[0]; } - var thenFunction = getTypeOfPropertyOfType(promise, "then"); // TODO: GH#18217 + var thenFunction = getTypeOfPropertyOfType(promise, "then"); if (isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0 /* Call */) : ts.emptyArray; + var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : ts.emptyArray; if (thenSignatures.length === 0) { if (errorNode) { error(errorNode, ts.Diagnostics.A_promise_must_have_a_then_method); } return undefined; } - var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 524288 /* NEUndefinedOrNull */); + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 524288); if (isTypeAny(onfulfilledParameterType)) { return undefined; } - var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0 /* Call */); + var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0); if (onfulfilledParameterSignatures.length === 0) { if (errorNode) { error(errorNode, ts.Diagnostics.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback); } return undefined; } - return typeAsPromise.promisedTypeOfPromise = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature), 2 /* Subtype */); + return typeAsPromise.promisedTypeOfPromise = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature), 2); } - /** - * Gets the "awaited type" of a type. - * @param type The type to await. - * @remarks The "awaited type" of an expression is its "promised type" if the expression is a - * Promise-like type; otherwise, it is the type of the expression. This is used to reflect - * The runtime behavior of the `await` keyword. - */ function checkAwaitedType(type, errorNode, diagnosticMessage) { return getAwaitedType(type, errorNode, diagnosticMessage) || errorType; } @@ -49253,7 +40825,7 @@ var ts; if (isTypeAny(type)) { return typeAsAwaitable.awaitedTypeOfType = type; } - if (type.flags & 262144 /* Union */) { + if (type.flags & 262144) { var types = void 0; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var constituentType = _a[_i]; @@ -49267,45 +40839,11 @@ var ts; var promisedType = getPromisedTypeOfPromise(type); if (promisedType) { if (type.id === promisedType.id || awaitedTypeStack.indexOf(promisedType.id) >= 0) { - // Verify that we don't have a bad actor in the form of a promise whose - // promised type is the same as the promise type, or a mutually recursive - // promise. If so, we return undefined as we cannot guess the shape. If this - // were the actual case in the JavaScript, this Promise would never resolve. - // - // An example of a bad actor with a singly-recursive promise type might - // be: - // - // interface BadPromise { - // then( - // onfulfilled: (value: BadPromise) => any, - // onrejected: (error: any) => any): BadPromise; - // } - // The above interface will pass the PromiseLike check, and return a - // promised type of `BadPromise`. Since this is a self reference, we - // don't want to keep recursing ad infinitum. - // - // An example of a bad actor in the form of a mutually-recursive - // promise type might be: - // - // interface BadPromiseA { - // then( - // onfulfilled: (value: BadPromiseB) => any, - // onrejected: (error: any) => any): BadPromiseB; - // } - // - // interface BadPromiseB { - // then( - // onfulfilled: (value: BadPromiseA) => any, - // onrejected: (error: any) => any): BadPromiseA; - // } - // if (errorNode) { error(errorNode, ts.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method); } return undefined; } - // Keep track of the type we're about to unwrap to avoid bad recursive promise types. - // See the comments above for more information. awaitedTypeStack.push(type.id); var awaitedType = getAwaitedType(promisedType, errorNode, diagnosticMessage); awaitedTypeStack.pop(); @@ -49314,23 +40852,8 @@ var ts; } return typeAsAwaitable.awaitedTypeOfType = awaitedType; } - // The type was not a promise, so it could not be unwrapped any further. - // As long as the type does not have a callable "then" property, it is - // safe to return the type; otherwise, an error will be reported in - // the call to getNonThenableType and we will return undefined. - // - // An example of a non-promise "thenable" might be: - // - // await { then(): void {} } - // - // The "thenable" does not match the minimal definition for a promise. When - // a Promise/A+-compatible or ES6 promise tries to adopt this value, the promise - // will never settle. We treat this as an error to help flag an early indicator - // of a runtime problem. If the user wants to return this value from an async - // function, they would need to wrap it in some other value. If they want it to - // be treated as a promise, they can cast to . var thenFunction = getTypeOfPropertyOfType(type, "then"); - if (thenFunction && getSignaturesOfType(thenFunction, 0 /* Call */).length > 0) { + if (thenFunction && getSignaturesOfType(thenFunction, 0).length > 0) { if (errorNode) { if (!diagnosticMessage) return ts.Debug.fail(); @@ -49340,60 +40863,20 @@ var ts; } return typeAsAwaitable.awaitedTypeOfType = type; } - /** - * Checks the return type of an async function to ensure it is a compatible - * Promise implementation. - * - * This checks that an async function has a valid Promise-compatible return type, - * and returns the *awaited type* of the promise. An async function has a valid - * Promise-compatible return type if the resolved value of the return type has a - * construct signature that takes in an `initializer` function that in turn supplies - * a `resolve` function as one of its arguments and results in an object with a - * callable `then` signature. - * - * @param node The signature to check - */ function checkAsyncFunctionReturnType(node) { - // As part of our emit for an async function, we will need to emit the entity name of - // the return type annotation as an expression. To meet the necessary runtime semantics - // for __awaiter, we must also check that the type of the declaration (e.g. the static - // side or "constructor" of the promise type) is compatible `PromiseConstructorLike`. - // - // An example might be (from lib.es6.d.ts): - // - // interface Promise { ... } - // interface PromiseConstructor { - // new (...): Promise; - // } - // declare var Promise: PromiseConstructor; - // - // When an async function declares a return type annotation of `Promise`, we - // need to get the type of the `Promise` variable declaration above, which would - // be `PromiseConstructor`. - // - // The same case applies to a class: - // - // declare class Promise { - // constructor(...); - // then(...): Promise; - // } - // - var returnTypeNode = ts.getEffectiveReturnTypeNode(node); // TODO: GH#18217 + var returnTypeNode = ts.getEffectiveReturnTypeNode(node); var returnType = getTypeFromTypeNode(returnTypeNode); - if (languageVersion >= 2 /* ES2015 */) { + if (languageVersion >= 2) { if (returnType === errorType) { return errorType; } - var globalPromiseType = getGlobalPromiseType(/*reportErrors*/ true); + var globalPromiseType = getGlobalPromiseType(true); if (globalPromiseType !== emptyGenericType && !isReferenceToType(returnType, globalPromiseType)) { - // The promise type was not a valid type reference to the global promise type, so we - // report an error and return the unknown type. error(returnTypeNode, ts.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type); return errorType; } } else { - // Always mark the type node as referenced if it points to a value markTypeNodeAsReferenced(returnTypeNode); if (returnType === errorType) { return errorType; @@ -49403,10 +40886,10 @@ var ts; error(returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, typeToString(returnType)); return errorType; } - var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 67216319 /* Value */, /*ignoreErrors*/ true); + var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 67216319, true); var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType; if (promiseConstructorType === errorType) { - if (promiseConstructorName.kind === 71 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) { + if (promiseConstructorName.kind === 71 && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(false)) { error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option); } else { @@ -49414,57 +40897,50 @@ var ts; } return errorType; } - var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType(/*reportErrors*/ true); + var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType(true); if (globalPromiseConstructorLikeType === emptyObjectType) { - // If we couldn't resolve the global PromiseConstructorLike type we cannot verify - // compatibility with __awaiter. error(returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, ts.entityNameToString(promiseConstructorName)); return errorType; } if (!checkTypeAssignableTo(promiseConstructorType, globalPromiseConstructorLikeType, returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value)) { return errorType; } - // Verify there is no local declaration that could collide with the promise constructor. var rootName = promiseConstructorName && getFirstIdentifier(promiseConstructorName); - var collidingSymbol = getSymbol(node.locals, rootName.escapedText, 67216319 /* Value */); + var collidingSymbol = getSymbol(node.locals, rootName.escapedText, 67216319); if (collidingSymbol) { error(collidingSymbol.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions, ts.idText(rootName), ts.entityNameToString(promiseConstructorName)); return errorType; } } - // Get and return the awaited type of the return type. return checkAwaitedType(returnType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } - /** Check a decorator */ function checkDecorator(node) { var signature = getResolvedSignature(node); var returnType = getReturnTypeOfSignature(signature); - if (returnType.flags & 1 /* Any */) { + if (returnType.flags & 1) { return; } var expectedReturnType; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { - case 235 /* ClassDeclaration */: + case 235: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; - case 149 /* Parameter */: + case 149: expectedReturnType = voidType; - errorInfo = ts.chainDiagnosticMessages( - /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); + errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; - case 152 /* PropertyDeclaration */: + case 152: expectedReturnType = voidType; - errorInfo = ts.chainDiagnosticMessages( - /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); + errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - var methodType = getTypeOfNode(node.parent); // TODO: GH#18217 + case 154: + case 156: + case 157: + var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); break; @@ -49473,10 +40949,6 @@ var ts; } checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, function () { return errorInfo; }); } - /** - * If a TypeNode can be resolved to a value symbol imported from an external module, it is - * marked as referenced to prevent import elision. - */ function markTypeNodeAsReferenced(node) { markEntityNameOrEntityExpressionAsReference(node && ts.getEntityNameFromTypeNode(node)); } @@ -49484,22 +40956,15 @@ var ts; if (!typeName) return; var rootName = getFirstIdentifier(typeName); - var meaning = (typeName.kind === 71 /* Identifier */ ? 67901928 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */; - var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true); + var meaning = (typeName.kind === 71 ? 67901928 : 1920) | 2097152; + var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, undefined, undefined, true); if (rootSymbol - && rootSymbol.flags & 2097152 /* Alias */ + && rootSymbol.flags & 2097152 && symbolIsValue(rootSymbol) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))) { markAliasSymbolAsReferenced(rootSymbol); } } - /** - * This function marks the type used for metadata decorator as referenced if it is import - * from external module. - * This is different from markTypeNodeAsReferenced because it tries to simplify type nodes in - * union and intersection type - * @param node - */ function markDecoratorMedataDataTypeNodeAsReferenced(node) { var entityName = getEntityNameForDecoratorMetadata(node); if (entityName && ts.isEntityName(entityName)) { @@ -49509,32 +40974,25 @@ var ts; function getEntityNameForDecoratorMetadata(node) { if (node) { switch (node.kind) { - case 170 /* IntersectionType */: - case 169 /* UnionType */: + case 170: + case 169: var commonEntityName = void 0; for (var _i = 0, _a = node.types; _i < _a.length; _i++) { var typeNode = _a[_i]; - while (typeNode.kind === 173 /* ParenthesizedType */) { - typeNode = typeNode.type; // Skip parens if need be + while (typeNode.kind === 173) { + typeNode = typeNode.type; } - if (typeNode.kind === 131 /* NeverKeyword */) { - continue; // Always elide `never` from the union/intersection if possible + if (typeNode.kind === 131) { + continue; } - if (!strictNullChecks && (typeNode.kind === 95 /* NullKeyword */ || typeNode.kind === 140 /* UndefinedKeyword */)) { - continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks + if (!strictNullChecks && (typeNode.kind === 95 || typeNode.kind === 140)) { + continue; } var individualEntityName = getEntityNameForDecoratorMetadata(typeNode); if (!individualEntityName) { - // Individual is something like string number - // So it would be serialized to either that type or object - // Safe to return here return undefined; } if (commonEntityName) { - // Note this is in sync with the transformation that happens for type node. - // Keep this in sync with serializeUnionOrIntersectionType - // Verify if they refer to same entity and is identifier - // return undefined if they dont match because we would emit object if (!ts.isIdentifier(commonEntityName) || !ts.isIdentifier(individualEntityName) || commonEntityName.escapedText !== individualEntityName.escapedText) { @@ -49546,9 +41004,9 @@ var ts; } } return commonEntityName; - case 173 /* ParenthesizedType */: + case 173: return getEntityNameForDecoratorMetadata(node.type); - case 162 /* TypeReference */: + case 162: return node.typeName; } } @@ -49557,13 +41015,10 @@ var ts; var typeNode = ts.getEffectiveTypeAnnotationNode(node); return ts.isRestParameter(node) ? ts.getRestParameterElementType(typeNode) : typeNode; } - /** Check the decorators of a node */ function checkDecorators(node) { if (!node.decorators) { return; } - // skip this check for nodes that cannot have decorators. These should have already had an error reported by - // checkGrammarDecorators. if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) { return; } @@ -49571,15 +41026,14 @@ var ts; error(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning); } var firstDecorator = node.decorators[0]; - checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */); - if (node.kind === 149 /* Parameter */) { - checkExternalEmitHelpers(firstDecorator, 32 /* Param */); + checkExternalEmitHelpers(firstDecorator, 8); + if (node.kind === 149) { + checkExternalEmitHelpers(firstDecorator, 32); } if (compilerOptions.emitDecoratorMetadata) { - checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */); - // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator. + checkExternalEmitHelpers(firstDecorator, 16); switch (node.kind) { - case 235 /* ClassDeclaration */: + case 235: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) { @@ -49588,19 +41042,19 @@ var ts; } } break; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) { var parameter = _c[_b]; markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); } markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node)); break; - case 152 /* PropertyDeclaration */: + case 152: markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node)); break; - case 149 /* Parameter */: + case 149: markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node)); var containingSignature = node.parent; for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) { @@ -49622,7 +41076,6 @@ var ts; } function checkJSDocTypeAliasTag(node) { if (!node.typeExpression) { - // If the node had `@property` tags, `typeExpression` would have been set to the first property tag. error(node.name, ts.Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags); } if (node.name) { @@ -49634,21 +41087,18 @@ var ts; checkSourceElement(node.typeExpression); if (!ts.getParameterSymbolFromJSDoc(node)) { var decl = ts.getHostSignatureFromJSDoc(node); - // don't issue an error for invalid hosts -- just functions -- - // and give a better error message when the host function mentions `arguments` - // but the tag doesn't have an array type if (decl) { var i = ts.getJSDocTags(decl).filter(ts.isJSDocParameterTag).indexOf(node); if (i > -1 && i < decl.parameters.length && ts.isBindingPattern(decl.parameters[i].name)) { return; } if (!containsArgumentsReference(decl)) { - error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, ts.idText(node.name.kind === 146 /* QualifiedName */ ? node.name.right : node.name)); + error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, ts.idText(node.name.kind === 146 ? node.name.right : node.name)); } else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node && node.typeExpression && node.typeExpression.type && !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) { - error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 146 /* QualifiedName */ ? node.name.right : node.name)); + error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 146 ? node.name.right : node.name)); } } } @@ -49675,9 +41125,9 @@ var ts; } function getIdentifierFromEntityNameExpression(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return node; - case 185 /* PropertyAccessExpression */: + case 185: return node.name; default: return undefined; @@ -49687,63 +41137,41 @@ var ts; checkDecorators(node); checkSignatureDeclaration(node); var functionFlags = ts.getFunctionFlags(node); - // Do not use hasDynamicName here, because that returns false for well known symbols. - // We want to perform checkComputedPropertyName for all computed properties, including - // well known symbols. - if (node.name && node.name.kind === 147 /* ComputedPropertyName */) { - // This check will account for methods in class/interface declarations, - // as well as accessors in classes/object literals + if (node.name && node.name.kind === 147) { checkComputedPropertyName(node.name); } if (!hasNonBindableDynamicName(node)) { - // first we want to check the local symbol that contain this declaration - // - if node.localSymbol !== undefined - this is current declaration is exported and localSymbol points to the local symbol - // - if node.localSymbol === undefined - this node is non-exported so we can just pick the result of getSymbolOfNode var symbol = getSymbolOfNode(node); var localSymbol = node.localSymbol || symbol; - // Since the javascript won't do semantic analysis like typescript, - // if the javascript file comes before the typescript file and both contain same name functions, - // checkFunctionOrConstructorSymbol wouldn't be called if we didnt ignore javascript function. - var firstDeclaration = ts.find(localSymbol.declarations, - // Get first non javascript function declaration - function (declaration) { return declaration.kind === node.kind && !(declaration.flags & 65536 /* JavaScriptFile */); }); - // Only type check the symbol once + var firstDeclaration = ts.find(localSymbol.declarations, function (declaration) { return declaration.kind === node.kind && !(declaration.flags & 65536); }); if (node === firstDeclaration) { checkFunctionOrConstructorSymbol(localSymbol); } if (symbol.parent) { - // run check once for the first declaration if (ts.getDeclarationOfKind(symbol, node.kind) === node) { - // run check on export symbol to check that modifiers agree across all exported declarations checkFunctionOrConstructorSymbol(symbol); } } } - var body = node.kind === 153 /* MethodSignature */ ? undefined : node.body; + var body = node.kind === 153 ? undefined : node.body; checkSourceElement(body); var returnTypeNode = ts.getEffectiveReturnTypeNode(node); - if ((functionFlags & 1 /* Generator */) === 0) { // Async function or normal function - var returnOrPromisedType = returnTypeNode && (functionFlags & 2 /* Async */ - ? checkAsyncFunctionReturnType(node) // Async function - : getTypeFromTypeNode(returnTypeNode)); // normal function + if ((functionFlags & 1) === 0) { + var returnOrPromisedType = returnTypeNode && (functionFlags & 2 + ? checkAsyncFunctionReturnType(node) + : getTypeFromTypeNode(returnTypeNode)); checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); } if (produceDiagnostics && !returnTypeNode) { - // Report an implicit any error if there is no body, no explicit return type, and node is not a private method - // in an ambient context if (noImplicitAny && ts.nodeIsMissing(body) && !isPrivateWithinAmbient(node)) { reportImplicitAnyError(node, anyType); } - if (functionFlags & 1 /* Generator */ && ts.nodeIsPresent(body)) { - // A generator with a body and no type annotation can still cause errors. It can error if the - // yielded values have no common supertype, or it can give an implicit any error if it has no - // yielded values. The only way to trigger these errors is to try checking its return type. + if (functionFlags & 1 && ts.nodeIsPresent(body)) { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } } function registerForUnusedIdentifiersCheck(node) { - // May be in a call such as getTypeOfNode that happened to call this. But potentiallyUnusedIdentifiers is only defined in the scope of `checkSourceFile`. if (produceDiagnostics) { var sourceFile = ts.getSourceFileOfNode(node); var potentiallyUnusedIdentifiers = allPotentiallyUnusedIdentifiers.get(sourceFile.path); @@ -49751,8 +41179,6 @@ var ts; potentiallyUnusedIdentifiers = []; allPotentiallyUnusedIdentifiers.set(sourceFile.path, potentiallyUnusedIdentifiers); } - // TODO: GH#22580 - // Debug.assert(addToSeen(seenPotentiallyUnusedIdentifiers, getNodeId(node)), "Adding potentially-unused identifier twice"); potentiallyUnusedIdentifiers.push(node); } } @@ -49760,41 +41186,41 @@ var ts; for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) { var node = potentiallyUnusedIdentifiers_1[_i]; switch (node.kind) { - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: + case 235: + case 205: checkUnusedClassMembers(node, addDiagnostic); checkUnusedTypeParameters(node, addDiagnostic); break; - case 236 /* InterfaceDeclaration */: + case 236: checkUnusedTypeParameters(node, addDiagnostic); break; - case 274 /* SourceFile */: - case 239 /* ModuleDeclaration */: - case 213 /* Block */: - case 241 /* CaseBlock */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 274: + case 239: + case 213: + case 241: + case 220: + case 221: + case 222: checkUnusedLocalsAndParameters(node, addDiagnostic); break; - case 155 /* Constructor */: - case 192 /* FunctionExpression */: - case 234 /* FunctionDeclaration */: - case 193 /* ArrowFunction */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 155: + case 192: + case 234: + case 193: + case 154: + case 156: + case 157: if (node.body) { checkUnusedLocalsAndParameters(node, addDiagnostic); } checkUnusedTypeParameters(node, addDiagnostic); break; - case 153 /* MethodSignature */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 237 /* TypeAliasDeclaration */: + case 153: + case 158: + case 159: + case 163: + case 164: + case 237: checkUnusedTypeParameters(node, addDiagnostic); break; default: @@ -49805,43 +41231,41 @@ var ts; function errorUnusedLocal(declaration, name, addDiagnostic) { var node = ts.getNameOfDeclaration(declaration) || declaration; var message = isTypeDeclaration(declaration) ? ts.Diagnostics._0_is_declared_but_never_used : ts.Diagnostics._0_is_declared_but_its_value_is_never_read; - addDiagnostic(0 /* Local */, ts.createDiagnosticForNode(node, message, name)); + addDiagnostic(0, ts.createDiagnosticForNode(node, message, name)); } function parameterNameStartsWithUnderscore(parameterName) { return parameterName && isIdentifierThatStartsWithUnderScore(parameterName); } function isIdentifierThatStartsWithUnderScore(node) { - return ts.isIdentifier(node) && ts.idText(node).charCodeAt(0) === 95 /* _ */; + return ts.isIdentifier(node) && ts.idText(node).charCodeAt(0) === 95; } function checkUnusedClassMembers(node, addDiagnostic) { - if (!(node.flags & 4194304 /* Ambient */)) { + if (!(node.flags & 4194304)) { for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; switch (member.kind) { - case 154 /* MethodDeclaration */: - case 152 /* PropertyDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - if (member.kind === 157 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) { - // Already would have reported an error on the getter. + case 154: + case 152: + case 156: + case 157: + if (member.kind === 157 && member.symbol.flags & 32768) { break; } var symbol = getSymbolOfNode(member); - if (!symbol.isReferenced && ts.hasModifier(member, 8 /* Private */)) { - addDiagnostic(0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol))); + if (!symbol.isReferenced && ts.hasModifier(member, 8)) { + addDiagnostic(0, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol))); } break; - case 155 /* Constructor */: + case 155: for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { var parameter = _c[_b]; - if (!parameter.symbol.isReferenced && ts.hasModifier(parameter, 8 /* Private */)) { - addDiagnostic(0 /* Local */, ts.createDiagnosticForNode(parameter.name, ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read, ts.symbolName(parameter.symbol))); + if (!parameter.symbol.isReferenced && ts.hasModifier(parameter, 8)) { + addDiagnostic(0, ts.createDiagnosticForNode(parameter.name, ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read, ts.symbolName(parameter.symbol))); } } break; - case 160 /* IndexSignature */: - case 212 /* SemicolonClassElement */: - // Can't be private + case 160: + case 212: break; default: ts.Debug.fail(); @@ -49850,14 +41274,12 @@ var ts; } } function checkUnusedTypeParameters(node, addDiagnostic) { - // Only report errors on the last declaration for the type parameter container; - // this ensures that all uses have been accounted for. var typeParameters = ts.getEffectiveTypeParameterDeclarations(node); - if (!(node.flags & 4194304 /* Ambient */) && ts.last(getSymbolOfNode(node).declarations) === node) { + if (!(node.flags & 4194304) && ts.last(getSymbolOfNode(node).declarations) === node) { for (var _i = 0, typeParameters_2 = typeParameters; _i < typeParameters_2.length; _i++) { var typeParameter = typeParameters_2[_i]; - if (!(getMergedSymbol(typeParameter.symbol).isReferenced & 262144 /* TypeParameter */) && !isIdentifierThatStartsWithUnderScore(typeParameter.name)) { - addDiagnostic(1 /* Parameter */, ts.createDiagnosticForNode(typeParameter.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(typeParameter.symbol))); + if (!(getMergedSymbol(typeParameter.symbol).isReferenced & 262144) && !isIdentifierThatStartsWithUnderScore(typeParameter.name)) { + addDiagnostic(1, ts.createDiagnosticForNode(typeParameter.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(typeParameter.symbol))); } } } @@ -49876,16 +41298,13 @@ var ts; return ts.tryCast(ts.getRootDeclaration(node), ts.isParameter); } function checkUnusedLocalsAndParameters(nodeWithLocals, addDiagnostic) { - if (nodeWithLocals.flags & 4194304 /* Ambient */) + if (nodeWithLocals.flags & 4194304) return; - // Ideally we could use the ImportClause directly as a key, but must wait until we have full ES6 maps. So must store key along with value. var unusedImports = ts.createMap(); var unusedDestructures = ts.createMap(); var unusedVariables = ts.createMap(); nodeWithLocals.locals.forEach(function (local) { - // If it's purely a type parameter, ignore, will be checked in `checkUnusedTypeParameters`. - // If it's a type parameter merged with a parameter, check if the parameter-side is used. - if (local.flags & 262144 /* TypeParameter */ ? !(local.flags & 3 /* Variable */ && !(local.isReferenced & 3 /* Variable */)) : local.isReferenced || local.exportSymbol) { + if (local.flags & 262144 ? !(local.flags & 3 && !(local.isReferenced & 3)) : local.isReferenced || local.exportSymbol) { return; } for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { @@ -49896,7 +41315,6 @@ var ts; addToGroup(unusedImports, importClauseFromImported(declaration), declaration, getNodeId); } else if (ts.isBindingElement(declaration) && ts.isObjectBindingPattern(declaration.parent)) { - // In `{ a, ...b }, `a` is considered used since it removes a property from `b`. `b` may still be unused though. var lastElement = ts.last(declaration.parent.elements); if (declaration === lastElement || !ts.last(declaration.parent.elements).dotDotDotToken) { addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId); @@ -49912,7 +41330,7 @@ var ts; if (parameter) { var name = ts.getNameOfDeclaration(local.valueDeclaration); if (!ts.isParameterPropertyDeclaration(parameter) && !ts.parameterIsThisKeyword(parameter) && !parameterNameStartsWithUnderscore(name)) { - addDiagnostic(1 /* Parameter */, ts.createDiagnosticForNode(name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(local))); + addDiagnostic(1, ts.createDiagnosticForNode(name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(local))); } } else { @@ -49926,10 +41344,10 @@ var ts; var importDecl = importClause.parent; var nDeclarations = (importClause.name ? 1 : 0) + (importClause.namedBindings ? - (importClause.namedBindings.kind === 246 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length) + (importClause.namedBindings.kind === 246 ? 1 : importClause.namedBindings.elements.length) : 0); if (nDeclarations === unuseds.length) { - addDiagnostic(0 /* Local */, unuseds.length === 1 + addDiagnostic(0, unuseds.length === 1 ? ts.createDiagnosticForNode(importDecl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.first(unuseds).name)) : ts.createDiagnosticForNode(importDecl, ts.Diagnostics.All_imports_in_import_declaration_are_unused)); } @@ -49942,9 +41360,9 @@ var ts; }); unusedDestructures.forEach(function (_a) { var bindingPattern = _a[0], bindingElements = _a[1]; - var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */; + var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 : 0; if (bindingPattern.elements.length === bindingElements.length) { - if (bindingElements.length === 1 && bindingPattern.parent.kind === 232 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 233 /* VariableDeclarationList */) { + if (bindingElements.length === 1 && bindingPattern.parent.kind === 232 && bindingPattern.parent.parent.kind === 233) { addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId); } else { @@ -49963,38 +41381,37 @@ var ts; unusedVariables.forEach(function (_a) { var declarationList = _a[0], declarations = _a[1]; if (declarationList.declarations.length === declarations.length) { - addDiagnostic(0 /* Local */, declarations.length === 1 + addDiagnostic(0, declarations.length === 1 ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name)) - : ts.createDiagnosticForNode(declarationList.parent.kind === 214 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused)); + : ts.createDiagnosticForNode(declarationList.parent.kind === 214 ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused)); } else { for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) { var decl = declarations_5[_i]; - addDiagnostic(0 /* Local */, ts.createDiagnosticForNode(decl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(decl.name, ts.isIdentifier)))); + addDiagnostic(0, ts.createDiagnosticForNode(decl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(decl.name, ts.isIdentifier)))); } } }); } function bindingNameText(name) { switch (name.kind) { - case 71 /* Identifier */: + case 71: return ts.idText(name); - case 181 /* ArrayBindingPattern */: - case 180 /* ObjectBindingPattern */: + case 181: + case 180: return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name); default: return ts.Debug.assertNever(name); } } function isImportedDeclaration(node) { - return node.kind === 245 /* ImportClause */ || node.kind === 248 /* ImportSpecifier */ || node.kind === 246 /* NamespaceImport */; + return node.kind === 245 || node.kind === 248 || node.kind === 246; } function importClauseFromImported(decl) { - return decl.kind === 245 /* ImportClause */ ? decl : decl.kind === 246 /* NamespaceImport */ ? decl.parent : decl.parent.parent; + return decl.kind === 245 ? decl : decl.kind === 246 ? decl.parent : decl.parent.parent; } function checkBlock(node) { - // Grammar checking for SyntaxKind.Block - if (node.kind === 213 /* Block */) { + if (node.kind === 213) { checkGrammarStatementInAmbientContext(node); } if (ts.isFunctionOrModuleBlock(node)) { @@ -50010,8 +41427,7 @@ var ts; } } function checkCollisionWithArgumentsInGeneratedCode(node) { - // no rest parameters \ declaration context \ overload - no codegen impact - if (languageVersion >= 2 /* ES2015 */ || compilerOptions.noEmit || !ts.hasRestParameter(node) || node.flags & 4194304 /* Ambient */ || ts.nodeIsMissing(node.body)) { + if (languageVersion >= 2 || compilerOptions.noEmit || !ts.hasRestParameter(node) || node.flags & 4194304 || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { @@ -50024,31 +41440,27 @@ var ts; if (!(identifier && identifier.escapedText === name)) { return false; } - if (node.kind === 152 /* PropertyDeclaration */ || - node.kind === 151 /* PropertySignature */ || - node.kind === 154 /* MethodDeclaration */ || - node.kind === 153 /* MethodSignature */ || - node.kind === 156 /* GetAccessor */ || - node.kind === 157 /* SetAccessor */) { - // it is ok to have member named '_super' or '_this' - member access is always qualified + if (node.kind === 152 || + node.kind === 151 || + node.kind === 154 || + node.kind === 153 || + node.kind === 156 || + node.kind === 157) { return false; } - if (node.flags & 4194304 /* Ambient */) { - // ambient context - no codegen impact + if (node.flags & 4194304) { return false; } var root = ts.getRootDeclaration(node); - if (root.kind === 149 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { - // just an overload - no codegen impact + if (root.kind === 149 && ts.nodeIsMissing(root.parent.body)) { return false; } return true; } - // this function will run after checking the source file so 'CaptureThis' is correct for all nodes function checkIfThisIsCapturedInEnclosingScope(node) { ts.findAncestor(node, function (current) { - if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { - var isDeclaration_1 = node.kind !== 71 /* Identifier */; + if (getNodeCheckFlags(current) & 4) { + var isDeclaration_1 = node.kind !== 71; if (isDeclaration_1) { error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); } @@ -50062,8 +41474,8 @@ var ts; } function checkIfNewTargetIsCapturedInEnclosingScope(node) { ts.findAncestor(node, function (current) { - if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) { - var isDeclaration_2 = node.kind !== 71 /* Identifier */; + if (getNodeCheckFlags(current) & 8) { + var isDeclaration_2 = node.kind !== 71; if (isDeclaration_2) { error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference); } @@ -50076,96 +41488,57 @@ var ts; }); } function checkCollisionWithRequireExportsInGeneratedCode(node, name) { - // No need to check for require or exports for ES6 modules and later if (moduleKind >= ts.ModuleKind.ES2015 || compilerOptions.noEmit) { return; } if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } - // Uninstantiated modules shouldnt do this check - if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) { return; } - // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 274 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) { - // If the declaration happens to be in external module, report error that require and exports are reserved keywords + if (parent.kind === 274 && ts.isExternalOrCommonJsModule(parent)) { error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name)); } } function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) { - if (languageVersion >= 4 /* ES2017 */ || compilerOptions.noEmit || !needCollisionCheckForIdentifier(node, name, "Promise")) { + if (languageVersion >= 4 || compilerOptions.noEmit || !needCollisionCheckForIdentifier(node, name, "Promise")) { return; } - // Uninstantiated modules shouldnt do this check - if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) { return; } - // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 274 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 1024 /* HasAsyncFunctions */) { - // If the declaration happens to be in external module, report error that Promise is a reserved identifier. + if (parent.kind === 274 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 1024) { error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name)); } } function checkVarDeclaredNamesNotShadowed(node) { - // - ScriptBody : StatementList - // It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList - // also occurs in the VarDeclaredNames of StatementList. - // - Block : { StatementList } - // It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList - // also occurs in the VarDeclaredNames of StatementList. - // Variable declarations are hoisted to the top of their function scope. They can shadow - // block scoped declarations, which bind tighter. this will not be flagged as duplicate definition - // by the binder as the declaration scope is different. - // A non-initialized declaration is a no-op as the block declaration will resolve before the var - // declaration. the problem is if the declaration has an initializer. this will act as a write to the - // block declared value. this is fine for let, but not const. - // Only consider declarations with initializers, uninitialized const declarations will not - // step on a let/const variable. - // Do not consider const and const declarations, as duplicate block-scoped declarations - // are handled by the binder. - // We are only looking for const declarations that step on let\const declarations from a - // different scope. e.g.: - // { - // const x = 0; // localDeclarationSymbol obtained after name resolution will correspond to this declaration - // const x = 0; // symbol for this declaration will be 'symbol' - // } - // skip block-scoped variables and parameters - if ((ts.getCombinedNodeFlags(node) & 3 /* BlockScoped */) !== 0 || ts.isParameterDeclaration(node)) { + if ((ts.getCombinedNodeFlags(node) & 3) !== 0 || ts.isParameterDeclaration(node)) { return; } - // skip variable declarations that don't have initializers - // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern - // so we'll always treat binding elements as initialized - if (node.kind === 232 /* VariableDeclaration */ && !node.initializer) { + if (node.kind === 232 && !node.initializer) { return; } var symbol = getSymbolOfNode(node); - if (symbol.flags & 1 /* FunctionScopedVariable */) { + if (symbol.flags & 1) { if (!ts.isIdentifier(node.name)) return ts.Debug.fail(); - var localDeclarationSymbol = resolveName(node, node.name.escapedText, 3 /* Variable */, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); + var localDeclarationSymbol = resolveName(node, node.name.escapedText, 3, undefined, undefined, false); if (localDeclarationSymbol && localDeclarationSymbol !== symbol && - localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) { - if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) { - var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 233 /* VariableDeclarationList */); - var container = varDeclList.parent.kind === 214 /* VariableStatement */ && varDeclList.parent.parent + localDeclarationSymbol.flags & 2) { + if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3) { + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 233); + var container = varDeclList.parent.kind === 214 && varDeclList.parent.parent ? varDeclList.parent.parent : undefined; - // names of block-scoped and function scoped variables can collide only - // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting) var namesShareScope = container && - (container.kind === 213 /* Block */ && ts.isFunctionLike(container.parent) || - container.kind === 240 /* ModuleBlock */ || - container.kind === 239 /* ModuleDeclaration */ || - container.kind === 274 /* SourceFile */); - // here we know that function scoped variable is shadowed by block scoped one - // if they are defined in the same scope - binder has already reported redeclaration error - // otherwise if variable has an initializer - show error that initialization will fail - // since LHS will be block scoped name instead of function scoped + (container.kind === 213 && ts.isFunctionLike(container.parent) || + container.kind === 240 || + container.kind === 239 || + container.kind === 274); if (!namesShareScope) { var name = symbolToString(localDeclarationSymbol); error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name); @@ -50174,27 +41547,21 @@ var ts; } } } - // Check that a parameter initializer contains no references to parameters declared to the right of itself function checkParameterInitializer(node) { - if (ts.getRootDeclaration(node).kind !== 149 /* Parameter */) { + if (ts.getRootDeclaration(node).kind !== 149) { return; } var func = ts.getContainingFunction(node); visit(node.initializer); function visit(n) { if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { - // do not dive in types - // skip declaration names (i.e. in object literal expressions) return; } - if (n.kind === 185 /* PropertyAccessExpression */) { - // skip property names in property access expression + if (n.kind === 185) { return visit(n.expression); } - else if (n.kind === 71 /* Identifier */) { - // check FunctionLikeDeclaration.locals (stores parameters\function local variable) - // if it contains entry with a specified name - var symbol = resolveName(n, n.escapedText, 67216319 /* Value */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); + else if (n.kind === 71) { + var symbol = resolveName(n, n.escapedText, 67216319 | 2097152, undefined, undefined, false); if (!symbol || symbol === unknownSymbol || !symbol.valueDeclaration) { return; } @@ -50202,32 +41569,24 @@ var ts; error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); return; } - // locals map for function contain both parameters and function locals - // so we need to do a bit of extra work to check if reference is legal var enclosingContainer = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); if (enclosingContainer === func) { - if (symbol.valueDeclaration.kind === 149 /* Parameter */ || - symbol.valueDeclaration.kind === 182 /* BindingElement */) { - // it is ok to reference parameter in initializer if either - // - parameter is located strictly on the left of current parameter declaration + if (symbol.valueDeclaration.kind === 149 || + symbol.valueDeclaration.kind === 182) { if (symbol.valueDeclaration.pos < node.pos) { return; } - // - parameter is wrapped in function-like entity if (ts.findAncestor(n, function (current) { if (current === node.initializer) { return "quit"; } return ts.isFunctionLike(current.parent) || - // computed property names/initializers in instance property declaration of class like entities - // are executed in constructor and thus deferred - (current.parent.kind === 152 /* PropertyDeclaration */ && - !(ts.hasModifier(current.parent, 32 /* Static */)) && + (current.parent.kind === 152 && + !(ts.hasModifier(current.parent, 32)) && ts.isClassLike(current.parent.parent)); })) { return; } - // fall through to report error } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } @@ -50240,68 +41599,56 @@ var ts; function convertAutoToAny(type) { return type === autoType ? anyType : type === autoArrayType ? anyArrayType : type; } - // Check variable, parameter, or property declaration function checkVariableLikeDeclaration(node) { checkDecorators(node); if (!ts.isBindingElement(node)) { checkSourceElement(node.type); } - // JSDoc `function(string, string): string` syntax results in parameters with no name if (!node.name) { return; } - // For a computed property, just check the initializer and exit - // Do not use hasDynamicName here, because that returns false for well known symbols. - // We want to perform checkComputedPropertyName for all computed properties, including - // well known symbols. - if (node.name.kind === 147 /* ComputedPropertyName */) { + if (node.name.kind === 147) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } - if (node.kind === 182 /* BindingElement */) { - if (node.parent.kind === 180 /* ObjectBindingPattern */ && languageVersion < 6 /* ESNext */) { - checkExternalEmitHelpers(node, 4 /* Rest */); + if (node.kind === 182) { + if (node.parent.kind === 180 && languageVersion < 6) { + checkExternalEmitHelpers(node, 4); } - // check computed properties inside property names of binding elements - if (node.propertyName && node.propertyName.kind === 147 /* ComputedPropertyName */) { + if (node.propertyName && node.propertyName.kind === 147) { checkComputedPropertyName(node.propertyName); } - // check private/protected variable access var parent = node.parent.parent; var parentType = getTypeForBindingElementParent(parent); var name = node.propertyName || node.name; if (!ts.isBindingPattern(name)) { - var property = getPropertyOfType(parentType, ts.getTextOfPropertyName(name)); // TODO: GH#18217 - markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. + var property = getPropertyOfType(parentType, ts.getTextOfPropertyName(name)); + markPropertyAsReferenced(property, undefined, false); if (parent.initializer && property) { checkPropertyAccessibility(parent, parent.initializer, parentType, property); } } } - // For a binding pattern, check contained binding elements if (ts.isBindingPattern(node.name)) { - if (node.name.kind === 181 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) { - checkExternalEmitHelpers(node, 512 /* Read */); + if (node.name.kind === 181 && languageVersion < 2 && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 512); } ts.forEach(node.name.elements, checkSourceElement); } - // For a parameter declaration with an initializer, error and exit if the containing function doesn't have a body - if (node.initializer && ts.getRootDeclaration(node).kind === 149 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && ts.getRootDeclaration(node).kind === 149 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); return; } - // For a binding pattern, validate the initializer and exit if (ts.isBindingPattern(node.name)) { - // Don't validate for-in initializer as it is already an error - if (node.initializer && node.parent.parent.kind !== 221 /* ForInStatement */) { + if (node.initializer && node.parent.parent.kind !== 221) { var initializerType = checkExpressionCached(node.initializer); if (strictNullChecks && node.name.elements.length === 0) { checkNonNullType(initializerType, node); } else { - checkTypeAssignableTo(initializerType, getWidenedTypeForVariableLikeDeclaration(node), node, /*headMessage*/ undefined); + checkTypeAssignableTo(initializerType, getWidenedTypeForVariableLikeDeclaration(node), node, undefined); } checkParameterInitializer(node); } @@ -50310,35 +41657,30 @@ var ts; var symbol = getSymbolOfNode(node); var type = convertAutoToAny(getTypeOfSymbol(symbol)); if (node === symbol.valueDeclaration) { - // Node is the primary declaration of the symbol, just validate the initializer - // Don't validate for-in initializer as it is already an error var initializer = ts.getEffectiveInitializer(node); - if (initializer && node.parent.parent.kind !== 221 /* ForInStatement */) { - checkTypeAssignableTo(checkExpressionCached(initializer), type, node, /*headMessage*/ undefined); + if (initializer && node.parent.parent.kind !== 221) { + checkTypeAssignableTo(checkExpressionCached(initializer), type, node, undefined); checkParameterInitializer(node); } } else { - // Node is a secondary declaration, check that type is identical to primary declaration and check that - // initializer is consistent with type associated with the node var declarationType = convertAutoToAny(getWidenedTypeForVariableLikeDeclaration(node)); if (type !== errorType && declarationType !== errorType && !isTypeIdenticalTo(type, declarationType) && - !(symbol.flags & 67108864 /* JSContainer */)) { + !(symbol.flags & 67108864)) { errorNextVariableOrPropertyDeclarationMustHaveSameType(type, node, declarationType); } if (node.initializer) { - checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, /*headMessage*/ undefined); + checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined); } if (!areDeclarationFlagsIdentical(node, symbol.valueDeclaration)) { error(ts.getNameOfDeclaration(symbol.valueDeclaration), ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name)); error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name)); } } - if (node.kind !== 152 /* PropertyDeclaration */ && node.kind !== 151 /* PropertySignature */) { - // We know we don't have a binding pattern or computed name here + if (node.kind !== 152 && node.kind !== 151) { checkExportsOnMergedDeclarations(node); - if (node.kind === 232 /* VariableDeclaration */ || node.kind === 182 /* BindingElement */) { + if (node.kind === 232 || node.kind === 182) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithRequireExportsInGeneratedCode(node, node.name); @@ -50347,26 +41689,25 @@ var ts; } function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstType, nextDeclaration, nextType) { var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration); - var message = nextDeclaration.kind === 152 /* PropertyDeclaration */ || nextDeclaration.kind === 151 /* PropertySignature */ + var message = nextDeclaration.kind === 152 || nextDeclaration.kind === 151 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2; error(nextDeclarationName, message, ts.declarationNameToString(nextDeclarationName), typeToString(firstType), typeToString(nextType)); } function areDeclarationFlagsIdentical(left, right) { - if ((left.kind === 149 /* Parameter */ && right.kind === 232 /* VariableDeclaration */) || - (left.kind === 232 /* VariableDeclaration */ && right.kind === 149 /* Parameter */)) { - // Differences in optionality between parameters and variables are allowed. + if ((left.kind === 149 && right.kind === 232) || + (left.kind === 232 && right.kind === 149)) { return true; } if (ts.hasQuestionToken(left) !== ts.hasQuestionToken(right)) { return false; } - var interestingFlags = 8 /* Private */ | - 16 /* Protected */ | - 256 /* Async */ | - 128 /* Abstract */ | - 64 /* Readonly */ | - 32 /* Static */; + var interestingFlags = 8 | + 16 | + 256 | + 128 | + 64 | + 32; return ts.getSelectedModifierFlags(left, interestingFlags) === ts.getSelectedModifierFlags(right, interestingFlags); } function checkVariableDeclaration(node) { @@ -50378,47 +41719,41 @@ var ts; return checkVariableLikeDeclaration(node); } function checkVariableStatement(node) { - // Grammar checking if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarVariableDeclarationList(node.declarationList)) checkGrammarForDisallowedLetOrConstStatement(node); ts.forEach(node.declarationList.declarations, checkSourceElement); } function checkExpressionStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); } function checkIfStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); - if (node.thenStatement.kind === 215 /* EmptyStatement */) { + if (node.thenStatement.kind === 215) { error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); } checkSourceElement(node.elseStatement); } function checkDoStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); checkSourceElement(node.statement); checkExpression(node.expression); } function checkWhileStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.statement); } function checkForStatement(node) { - // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind === 233 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind === 233) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 233 /* VariableDeclarationList */) { + if (node.initializer.kind === 233) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -50438,42 +41773,27 @@ var ts; checkGrammarForInOrForOfStatement(node); if (node.awaitModifier) { var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node)); - if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 6 /* ESNext */) { - // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper - checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */); + if ((functionFlags & (4 | 2)) === 2 && languageVersion < 6) { + checkExternalEmitHelpers(node, 16384); } } - else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) { - // for..of prior to ES2015 requires the __values helper when downlevelIteration is enabled - checkExternalEmitHelpers(node, 256 /* ForOfIncludes */); + else if (compilerOptions.downlevelIteration && languageVersion < 2) { + checkExternalEmitHelpers(node, 256); } - // Check the LHS and RHS - // If the LHS is a declaration, just check it as a variable declaration, which will in turn check the RHS - // via checkRightHandSideOfForOf. - // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference. - // Then check that the RHS is assignable to it. - if (node.initializer.kind === 233 /* VariableDeclarationList */) { + if (node.initializer.kind === 233) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression, node.awaitModifier); - // There may be a destructuring assignment on the left side - if (varExpr.kind === 183 /* ArrayLiteralExpression */ || varExpr.kind === 184 /* ObjectLiteralExpression */) { - // iteratedType may be undefined. In this case, we still want to check the structure of - // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like - // to short circuit the type relation checking as much as possible, so we pass the unknownType. + if (varExpr.kind === 183 || varExpr.kind === 184) { checkDestructuringAssignment(varExpr, iteratedType || errorType); } else { var leftType = checkExpression(varExpr); checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access); - // iteratedType will be undefined if the rightType was missing properties/signatures - // required to get its iteratedType (like [Symbol.iterator] or next). This may be - // because we accessed properties from anyType, or it may have led to an error inside - // getElementTypeOfIterable. if (iteratedType) { - checkTypeAssignableTo(iteratedType, leftType, varExpr, /*headMessage*/ undefined); + checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined); } } } @@ -50483,15 +41803,9 @@ 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 - // VarDecl must be a variable declaration without a type annotation that declares a variable of type Any, - // and Expr must be an expression of type Any, an object type, or a type parameter type. - if (node.initializer.kind === 233 /* VariableDeclarationList */) { + if (node.initializer.kind === 233) { var variable = node.initializer.declarations[0]; if (variable && ts.isBindingPattern(variable.name)) { error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); @@ -50499,26 +41813,19 @@ var ts; checkForInOrForOfVariableDeclaration(node); } else { - // In a 'for-in' statement of the form - // for (Var in Expr) Statement - // Var must be an expression classified as a reference of type Any or the String primitive type, - // and Expr must be an expression of type Any, an object type, or a type parameter type. var varExpr = node.initializer; var leftType = checkExpression(varExpr); - if (varExpr.kind === 183 /* ArrayLiteralExpression */ || varExpr.kind === 184 /* ObjectLiteralExpression */) { + if (varExpr.kind === 183 || varExpr.kind === 184) { error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); } 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 { - // run check only former check succeeded to avoid cascading errors checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access); } } - // 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 (rightType === neverType || !isTypeAssignableToKind(rightType, 16777216 /* NonPrimitive */ | 14745600 /* InstantiableNonPrimitive */)) { + if (rightType === neverType || !isTypeAssignableToKind(rightType, 16777216 | 14745600)) { 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_but_here_has_type_0, typeToString(rightType)); } checkSourceElement(node.statement); @@ -50528,7 +41835,6 @@ var ts; } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; - // checkGrammarForInOrForOfStatement will check that there is exactly one declaration. if (variableDeclarationList.declarations.length >= 1) { var decl = variableDeclarationList.declarations[0]; checkVariableDeclaration(decl); @@ -50536,32 +41842,23 @@ var ts; } function checkRightHandSideOfForOf(rhsExpression, awaitModifier) { var expressionType = checkNonNullExpression(rhsExpression); - return checkIteratedTypeOrElementType(expressionType, rhsExpression, /*allowStringInput*/ true, awaitModifier !== undefined); + return checkIteratedTypeOrElementType(expressionType, rhsExpression, true, awaitModifier !== undefined); } function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables) { if (isTypeAny(inputType)) { return inputType; } - return getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, /*checkAssignability*/ true) || anyType; + return getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, true) || anyType; } - /** - * When consuming an iterable type in a for..of, spread, or iterator destructuring assignment - * we want to get the iterated type of an iterable for ES2015 or later, or the iterated type - * of a iterable (if defined globally) or element type of an array like for ES2015 or earlier. - */ function getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, checkAssignability) { if (inputType === neverType) { - reportTypeNotIterableError(errorNode, inputType, allowAsyncIterables); // TODO: GH#18217 + reportTypeNotIterableError(errorNode, inputType, allowAsyncIterables); return undefined; } - var uplevelIteration = languageVersion >= 2 /* ES2015 */; + var uplevelIteration = languageVersion >= 2; var downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration; - // Get the iterated type of an `Iterable` or `IterableIterator` only in ES2015 - // or higher, when inside of an async generator or for-await-if, or when - // downlevelIteration is requested. if (uplevelIteration || downlevelIteration || allowAsyncIterables) { - // We only report errors for an invalid iterable type in ES2015 or higher. - var iteratedType = getIteratedTypeOfIterable(inputType, uplevelIteration ? errorNode : undefined, allowAsyncIterables, /*allowSyncIterables*/ true, checkAssignability); + var iteratedType = getIteratedTypeOfIterable(inputType, uplevelIteration ? errorNode : undefined, allowAsyncIterables, true, checkAssignability); if (iteratedType || uplevelIteration) { return iteratedType; } @@ -50569,45 +41866,33 @@ var ts; var arrayType = inputType; var reportedError = false; var hasStringConstituent = false; - // If strings are permitted, remove any string-like constituents from the array type. - // This allows us to find other non-string element types from an array unioned with - // a string. if (allowStringInput) { - if (arrayType.flags & 262144 /* Union */) { - // 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. + if (arrayType.flags & 262144) { var arrayTypes = inputType.types; - var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 68 /* StringLike */); }); + var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 68); }); if (filteredTypes !== arrayTypes) { - arrayType = getUnionType(filteredTypes, 2 /* Subtype */); + arrayType = getUnionType(filteredTypes, 2); } } - else if (arrayType.flags & 68 /* StringLike */) { + else if (arrayType.flags & 68) { arrayType = neverType; } hasStringConstituent = arrayType !== inputType; if (hasStringConstituent) { - if (languageVersion < 1 /* ES5 */) { + if (languageVersion < 1) { if (errorNode) { error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher); reportedError = true; } } - // Now that we've removed all the StringLike types, if no constituents remain, then the entire - // arrayOrStringType was a string. - if (arrayType.flags & 32768 /* Never */) { + if (arrayType.flags & 32768) { return stringType; } } } if (!isArrayLikeType(arrayType)) { if (errorNode && !reportedError) { - // Which error we report depends on whether we allow strings or if there was a - // string constituent. For example, if the input type is number | string, we - // want to say that number is not an array type. But if the input was just - // number and string input is allowed, we want to say that number is not an - // array type or a string type. - var isIterable = !!getIteratedTypeOfIterable(inputType, /* errorNode */ undefined, allowAsyncIterables, /*allowSyncIterables*/ true, checkAssignability); + var isIterable = !!getIteratedTypeOfIterable(inputType, undefined, allowAsyncIterables, true, checkAssignability); var diagnostic = !allowStringInput || hasStringConstituent ? downlevelIteration ? ts.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator @@ -50623,54 +41908,15 @@ var ts; } return hasStringConstituent ? stringType : undefined; } - var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */); + var arrayElementType = getIndexTypeOfType(arrayType, 1); if (hasStringConstituent && arrayElementType) { - // This is just an optimization for the case where arrayOrStringType is string | string[] - if (arrayElementType.flags & 68 /* StringLike */) { + if (arrayElementType.flags & 68) { return stringType; } - return getUnionType([arrayElementType, stringType], 2 /* Subtype */); + return getUnionType([arrayElementType, stringType], 2); } return arrayElementType; } - /** - * We want to treat type as an iterable, and get the type it is an iterable of. The iterable - * must have the following structure (annotated with the names of the variables below): - * - * { // iterable - * [Symbol.iterator]: { // iteratorMethod - * (): Iterator - * } - * } - * - * For an async iterable, we expect the following structure: - * - * { // iterable - * [Symbol.asyncIterator]: { // iteratorMethod - * (): AsyncIterator - * } - * } - * - * T is the type we are after. At every level that involves analyzing return types - * of signatures, we union the return types of all the signatures. - * - * Another thing to note is that at any step of this process, we could run into a dead end, - * meaning either the property is missing, or we run into the anyType. If either of these things - * happens, we return undefined to signal that we could not find the iterated type. If a property - * is missing, and the previous step did not result in 'any', then we also give an error if the - * caller requested it. Then the caller can decide what to do in the case where there is no iterated - * type. This is different from returning anyType, because that would signify that we have matched the - * whole pattern and that T (above) is 'any'. - * - * For a **for-of** statement, `yield*` (in a normal generator), spread, array - * destructuring, or normal generator we will only ever look for a `[Symbol.iterator]()` - * method. - * - * For an async generator we will only ever look at the `[Symbol.asyncIterator]()` method. - * - * For a **for-await-of** statement or a `yield*` in an async generator we will look for - * the `[Symbol.asyncIterator]()` method first, and then the `[Symbol.iterator]()` method. - */ function getIteratedTypeOfIterable(type, errorNode, allowAsyncIterables, allowSyncIterables, checkAssignability) { if (isTypeAny(type)) { return undefined; @@ -50682,10 +41928,8 @@ var ts; if (typeAsIterable.iteratedTypeOfAsyncIterable) { return typeAsIterable.iteratedTypeOfAsyncIterable; } - // As an optimization, if the type is an instantiation of the global `AsyncIterable` - // or the global `AsyncIterableIterator` then just grab its type argument. - if (isReferenceToType(type, getGlobalAsyncIterableType(/*reportErrors*/ false)) || - isReferenceToType(type, getGlobalAsyncIterableIteratorType(/*reportErrors*/ false))) { + if (isReferenceToType(type, getGlobalAsyncIterableType(false)) || + isReferenceToType(type, getGlobalAsyncIterableIteratorType(false))) { return typeAsIterable.iteratedTypeOfAsyncIterable = type.typeArguments[0]; } } @@ -50693,10 +41937,8 @@ var ts; if (typeAsIterable.iteratedTypeOfIterable) { return typeAsIterable.iteratedTypeOfIterable; } - // As an optimization, if the type is an instantiation of the global `Iterable` or - // `IterableIterator` then just grab its type argument. - if (isReferenceToType(type, getGlobalIterableType(/*reportErrors*/ false)) || - isReferenceToType(type, getGlobalIterableIteratorType(/*reportErrors*/ false))) { + if (isReferenceToType(type, getGlobalIterableType(false)) || + isReferenceToType(type, getGlobalIterableIteratorType(false))) { return typeAsIterable.iteratedTypeOfIterable = type.typeArguments[0]; } } @@ -50705,21 +41947,17 @@ var ts; if (isTypeAny(methodType)) { return undefined; } - var signatures = methodType ? getSignaturesOfType(methodType, 0 /* Call */) : undefined; + var signatures = methodType ? getSignaturesOfType(methodType, 0) : undefined; if (!ts.some(signatures)) { if (errorNode) { - // only report on the first error reportTypeNotIterableError(errorNode, type, allowAsyncIterables); errorNode = undefined; } return undefined; } - var returnType = getUnionType(ts.map(signatures, getReturnTypeOfSignature), 2 /* Subtype */); - var iteratedType = getIteratedTypeOfIterator(returnType, errorNode, /*isAsyncIterator*/ !!asyncMethodType); + var returnType = getUnionType(ts.map(signatures, getReturnTypeOfSignature), 2); + var iteratedType = getIteratedTypeOfIterator(returnType, errorNode, !!asyncMethodType); if (checkAssignability && errorNode && iteratedType) { - // If `checkAssignability` was specified, we were called from - // `checkIteratedTypeOrElementType`. As such, we need to validate that - // the type passed in is actually an Iterable. checkTypeAssignableTo(type, asyncMethodType ? createAsyncIterableType(iteratedType) : createIterableType(iteratedType), errorNode); @@ -50734,28 +41972,6 @@ var ts; ? ts.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator : ts.Diagnostics.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator, typeToString(type)); } - /** - * This function has very similar logic as getIteratedTypeOfIterable, except that it operates on - * Iterators instead of Iterables. Here is the structure: - * - * { // iterator - * next: { // nextMethod - * (): { // nextResult - * value: T // nextValue - * } - * } - * } - * - * For an async iterator, we expect the following structure: - * - * { // iterator - * next: { // nextMethod - * (): PromiseLike<{ // nextResult - * value: T // nextValue - * }> - * } - * } - */ function getIteratedTypeOfIterator(type, errorNode, isAsyncIterator) { if (isTypeAny(type)) { return undefined; @@ -50764,21 +41980,17 @@ var ts; if (isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator) { return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator; } - // As an optimization, if the type is an instantiation of the global `Iterator` (for - // a non-async iterator) or the global `AsyncIterator` (for an async-iterator) then - // just grab its type argument. var getIteratorType = isAsyncIterator ? getGlobalAsyncIteratorType : getGlobalIteratorType; - if (isReferenceToType(type, getIteratorType(/*reportErrors*/ false))) { + if (isReferenceToType(type, getIteratorType(false))) { return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator = type.typeArguments[0] : typeAsIterator.iteratedTypeOfIterator = type.typeArguments[0]; } - // Both async and non-async iterators must have a `next` method. var nextMethod = getTypeOfPropertyOfType(type, "next"); if (isTypeAny(nextMethod)) { return undefined; } - var nextMethodSignatures = nextMethod ? getSignaturesOfType(nextMethod, 0 /* Call */) : ts.emptyArray; + var nextMethodSignatures = nextMethod ? getSignaturesOfType(nextMethod, 0) : ts.emptyArray; if (nextMethodSignatures.length === 0) { if (errorNode) { error(errorNode, isAsyncIterator @@ -50787,11 +41999,10 @@ var ts; } return undefined; } - var nextResult = getUnionType(ts.map(nextMethodSignatures, getReturnTypeOfSignature), 2 /* Subtype */); + var nextResult = getUnionType(ts.map(nextMethodSignatures, getReturnTypeOfSignature), 2); if (isTypeAny(nextResult)) { return undefined; } - // For an async iterator, we must get the awaited type of the return type. if (isAsyncIterator) { nextResult = getAwaitedTypeOfPromise(nextResult, errorNode, ts.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property); if (isTypeAny(nextResult)) { @@ -50811,37 +42022,28 @@ var ts; ? typeAsIterator.iteratedTypeOfAsyncIterator = nextValue : typeAsIterator.iteratedTypeOfIterator = nextValue; } - /** - * A generator may have a return type of `Iterator`, `Iterable`, or - * `IterableIterator`. An async generator may have a return type of `AsyncIterator`, - * `AsyncIterable`, or `AsyncIterableIterator`. This function can be used to extract - * the iterated type from this return type for contextual typing and verifying signatures. - */ function getIteratedTypeOfGenerator(returnType, isAsyncGenerator) { if (isTypeAny(returnType)) { return undefined; } - return getIteratedTypeOfIterable(returnType, /*errorNode*/ undefined, /*allowAsyncIterables*/ isAsyncGenerator, /*allowSyncIterables*/ !isAsyncGenerator, /*checkAssignability*/ false) - || getIteratedTypeOfIterator(returnType, /*errorNode*/ undefined, isAsyncGenerator); + return getIteratedTypeOfIterable(returnType, undefined, isAsyncGenerator, !isAsyncGenerator, false) + || getIteratedTypeOfIterator(returnType, undefined, isAsyncGenerator); } function checkBreakOrContinueStatement(node) { - // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) checkGrammarBreakOrContinueStatement(node); - // TODO: Check that target label is valid } function isGetAccessorWithAnnotatedSetAccessor(node) { - return node.kind === 156 /* GetAccessor */ - && ts.getEffectiveSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 157 /* SetAccessor */)) !== undefined; + return node.kind === 156 + && ts.getEffectiveSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 157)) !== undefined; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { - var unwrappedReturnType = (ts.getFunctionFlags(func) & 3 /* AsyncGenerator */) === 2 /* Async */ - ? getPromisedTypeOfPromise(returnType) // Async function - : returnType; // AsyncGenerator function, Generator function, or normal function - return !!unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 4096 /* Void */ | 3 /* AnyOrUnknown */); + var unwrappedReturnType = (ts.getFunctionFlags(func) & 3) === 2 + ? getPromisedTypeOfPromise(returnType) + : returnType; + return !!unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 4096 | 3); } function checkReturnStatement(node) { - // Grammar checking if (checkGrammarStatementInAmbientContext(node)) { return; } @@ -50853,34 +42055,27 @@ var ts; var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); var functionFlags = ts.getFunctionFlags(func); - var isGenerator = functionFlags & 1 /* Generator */; - if (strictNullChecks || node.expression || returnType.flags & 32768 /* Never */) { + var isGenerator = functionFlags & 1; + if (strictNullChecks || node.expression || returnType.flags & 32768) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; - if (isGenerator) { // AsyncGenerator function or Generator function - // A generator does not need its return expressions checked against its return type. - // Instead, the yield expressions are checked against the element type. - // TODO: Check return types of generators when return type tracking is added - // for generators. + if (isGenerator) { return; } - else if (func.kind === 157 /* SetAccessor */) { + else if (func.kind === 157) { if (node.expression) { error(node, ts.Diagnostics.Setters_cannot_return_a_value); } } - else if (func.kind === 155 /* Constructor */) { + else if (func.kind === 155) { if (node.expression && !checkTypeAssignableTo(exprType, returnType, node)) { error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } } else if (ts.getEffectiveReturnTypeNode(func) || isGetAccessorWithAnnotatedSetAccessor(func)) { - if (functionFlags & 2 /* Async */) { // Async function + if (functionFlags & 2) { var promisedType = getPromisedTypeOfPromise(returnType); var awaitedType = checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); if (promisedType) { - // If the function has a return type, but promisedType is - // undefined, an error will be reported in checkAsyncFunctionReturnType - // so we don't need to report one here. checkTypeAssignableTo(awaitedType, promisedType, node); } } @@ -50889,15 +42084,13 @@ var ts; } } } - else if (func.kind !== 155 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType) && !isGenerator) { - // The function has a return type, but the return statement doesn't have an expression. + else if (func.kind !== 155 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType) && !isGenerator) { error(node, ts.Diagnostics.Not_all_code_paths_return_a_value); } } function checkWithStatement(node) { - // Grammar checking for withStatement if (!checkGrammarStatementInAmbientContext(node)) { - if (node.flags & 16384 /* AwaitContext */) { + if (node.flags & 16384) { grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block); } } @@ -50910,15 +42103,13 @@ var ts; } } function checkSwitchStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); var firstDefaultClause; var hasDuplicateDefaultClause = false; var expressionType = checkExpression(node.expression); var expressionIsLiteral = isLiteralType(expressionType); ts.forEach(node.caseBlock.clauses, function (clause) { - // Grammar check for duplicate default clauses, skip if we already report duplicate default clause - if (clause.kind === 267 /* DefaultClause */ && !hasDuplicateDefaultClause) { + if (clause.kind === 267 && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -50930,10 +42121,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 266 /* CaseClause */) { - // TypeScript 1.0 spec (April 2014): 5.9 - // In a 'switch' statement, each 'case' expression must be of a type that is comparable - // to or from the type of the 'switch' expression. + if (produceDiagnostics && clause.kind === 266) { var caseType = checkExpression(clause.expression); var caseIsLiteral = isLiteralType(caseType); var comparedExpressionType = expressionType; @@ -50942,8 +42130,7 @@ var ts; comparedExpressionType = getBaseTypeOfLiteralType(expressionType); } if (!isTypeEqualityComparableTo(comparedExpressionType, caseType)) { - // expressionType is not comparable to caseType, try the reversed check and report errors if it fails - checkTypeComparableTo(caseType, comparedExpressionType, clause.expression, /*headMessage*/ undefined); + checkTypeComparableTo(caseType, comparedExpressionType, clause.expression, undefined); } } ts.forEach(clause.statements, checkSourceElement); @@ -50953,24 +42140,21 @@ var ts; } } function checkLabeledStatement(node) { - // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) { ts.findAncestor(node.parent, function (current) { if (ts.isFunctionLike(current)) { return "quit"; } - if (current.kind === 228 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) { + if (current.kind === 228 && current.label.escapedText === node.label.escapedText) { grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label)); return true; } return false; }); } - // ensure that label is unique checkSourceElement(node.statement); } function checkThrowStatement(node) { - // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) { if (node.expression === undefined) { grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here); @@ -50981,12 +42165,10 @@ var ts; } } function checkTryStatement(node) { - // Grammar checking checkGrammarStatementInAmbientContext(node); checkBlock(node.tryBlock); var catchClause = node.catchClause; if (catchClause) { - // Grammar checking if (catchClause.variableDeclaration) { if (catchClause.variableDeclaration.type) { grammarErrorOnFirstToken(catchClause.variableDeclaration.type, ts.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation); @@ -50999,7 +42181,7 @@ var ts; if (blockLocals_1) { ts.forEachKey(catchClause.locals, function (caughtName) { var blockLocal = blockLocals_1.get(caughtName); - if (blockLocal && (blockLocal.flags & 2 /* BlockScopedVariable */) !== 0) { + if (blockLocal && (blockLocal.flags & 2) !== 0) { grammarErrorOnNode(blockLocal.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, caughtName); } }); @@ -51013,28 +42195,25 @@ var ts; } } function checkIndexConstraints(type) { - var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */); - var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1); + var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0); + var stringIndexType = getIndexTypeOfType(type, 0); + var numberIndexType = getIndexTypeOfType(type, 1); if (stringIndexType || numberIndexType) { ts.forEach(getPropertiesOfObjectType(type), function (prop) { var propType = getTypeOfSymbol(prop); - checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */); - checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */); + checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0); + checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1); }); var classDeclaration = type.symbol.valueDeclaration; - if (ts.getObjectFlags(type) & 1 /* Class */ && ts.isClassLike(classDeclaration)) { + if (ts.getObjectFlags(type) & 1 && ts.isClassLike(classDeclaration)) { for (var _i = 0, _a = classDeclaration.members; _i < _a.length; _i++) { var member = _a[_i]; - // Only process instance properties with computed names here. - // Static properties cannot be in conflict with indexers, - // and properties with literal names were already checked. - if (!ts.hasModifier(member, 32 /* Static */) && hasNonBindableDynamicName(member)) { + if (!ts.hasModifier(member, 32) && hasNonBindableDynamicName(member)) { var symbol = getSymbolOfNode(member); var propType = getTypeOfSymbol(symbol); - checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */); - checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */); + checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0); + checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1); } } } @@ -51042,46 +42221,38 @@ var ts; var errorNode; if (stringIndexType && numberIndexType) { errorNode = declaredNumberIndexer || declaredStringIndexer; - // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer - if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) { - var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); }); + if (!errorNode && (ts.getObjectFlags(type) & 2)) { + var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); }); errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0]; } } - if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217 + if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType)); } function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) { - // ESSymbol properties apply to neither string nor numeric indexers. if (!indexType || ts.isKnownSymbol(prop)) { return; } var propDeclaration = prop.valueDeclaration; - // index is numeric and property name is not valid numeric literal - if (indexKind === 1 /* Number */ && !(propDeclaration ? isNumericName(ts.getNameOfDeclaration(propDeclaration)) : isNumericLiteralName(prop.escapedName))) { + if (indexKind === 1 && !(propDeclaration ? isNumericName(ts.getNameOfDeclaration(propDeclaration)) : isNumericLiteralName(prop.escapedName))) { return; } - // perform property check if property or indexer is declared in 'type' - // this allows us to rule out cases when both property and indexer are inherited from the base class var errorNode; if (propDeclaration && - (propDeclaration.kind === 200 /* BinaryExpression */ || - ts.getNameOfDeclaration(propDeclaration).kind === 147 /* ComputedPropertyName */ || + (propDeclaration.kind === 200 || + ts.getNameOfDeclaration(propDeclaration).kind === 147 || prop.parent === containingType.symbol)) { errorNode = propDeclaration; } else if (indexDeclaration) { errorNode = indexDeclaration; } - else if (ts.getObjectFlags(containingType) & 2 /* Interface */) { - // for interfaces property and indexer might be inherited from different bases - // check if any base class already has both property and indexer. - // check should be performed only if 'type' is the first type that brings property\indexer together + else if (ts.getObjectFlags(containingType) & 2) { var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); }); errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0]; } if (errorNode && !isTypeAssignableTo(propertyType, indexType)) { - var errorMessage = indexKind === 0 /* String */ + var errorMessage = indexKind === 0 ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType)); @@ -51089,8 +42260,6 @@ var ts; } } function checkTypeNameIsReserved(name, message) { - // TS 1.0 spec (April 2014): 3.6.1 - // The predefined type keywords are reserved and cannot be used as names of user defined types. switch (name.escapedText) { case "any": case "unknown": @@ -51103,18 +42272,12 @@ var ts; error(name, message, name.escapedText); } } - /** - * The name cannot be used as 'Object' of user defined types with special target. - */ function checkClassNameCollisionWithObject(name) { - if (languageVersion === 1 /* ES5 */ && name.escapedText === "Object" + if (languageVersion === 1 && name.escapedText === "Object" && moduleKind !== ts.ModuleKind.ES2015 && moduleKind !== ts.ModuleKind.ESNext) { - error(name, ts.Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ts.ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494 + error(name, ts.Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ts.ModuleKind[moduleKind]); } } - /** - * Check each type parameter and check that type parameters have no duplicate type parameter declarations - */ function checkTypeParameters(typeParameterDeclarations) { if (typeParameterDeclarations) { var seenDefault = false; @@ -51137,7 +42300,6 @@ var ts; } } } - /** Check that type parameter lists are identical across multiple declarations */ function checkTypeParameterListsIdentical(symbol) { if (symbol.declarations.length === 1) { return; @@ -51151,7 +42313,6 @@ var ts; } var type = getDeclaredTypeOfSymbol(symbol); if (!areTypeParametersIdentical(declarations, type.localTypeParameters)) { - // Report an error on every conflicting declaration. var name = symbolToString(symbol); for (var _i = 0, declarations_6 = declarations; _i < declarations_6.length; _i++) { var declaration = declarations_6[_i]; @@ -51165,7 +42326,6 @@ var ts; var minTypeArgumentCount = getMinTypeArgumentCount(targetParameters); for (var _i = 0, declarations_7 = declarations; _i < declarations_7.length; _i++) { var declaration = declarations_7[_i]; - // If this declaration has too few or too many type parameters, we report an error var sourceParameters = ts.getEffectiveTypeParameterDeclarations(declaration); var numTypeParameters = sourceParameters.length; if (numTypeParameters < minTypeArgumentCount || numTypeParameters > maxTypeArgumentCount) { @@ -51174,23 +42334,16 @@ var ts; for (var i = 0; i < numTypeParameters; i++) { var source = sourceParameters[i]; var target = targetParameters[i]; - // If the type parameter node does not have the same as the resolved type - // parameter at this position, we report an error. if (source.name.escapedText !== target.symbol.escapedName) { return false; } - // If the type parameter node does not have an identical constraint as the resolved - // type parameter at this position, we report an error. var sourceConstraint = source.constraint && getTypeFromTypeNode(source.constraint); var targetConstraint = getConstraintFromTypeParameter(target); if (sourceConstraint) { - // relax check if later interface augmentation has no constraint if (!targetConstraint || !isTypeIdenticalTo(sourceConstraint, targetConstraint)) { return false; } } - // If the type parameter node has a default and it is not identical to the default - // for the type parameter at this position, we report an error. var sourceDefault = source.default && getTypeFromTypeNode(source.default); var targetDefault = getDefaultFromTypeParameter(target); if (sourceDefault && targetDefault && !isTypeIdenticalTo(sourceDefault, targetDefault)) { @@ -51210,7 +42363,7 @@ var ts; registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { - if (!node.name && !ts.hasModifier(node, 512 /* Default */)) { + if (!node.name && !ts.hasModifier(node, 512)) { grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); } checkClassLikeDeclaration(node); @@ -51224,7 +42377,7 @@ var ts; checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); - if (!(node.flags & 4194304 /* Ambient */)) { + if (!(node.flags & 4194304)) { checkClassNameCollisionWithObject(node.name); } } @@ -51236,14 +42389,13 @@ var ts; var staticType = getTypeOfSymbol(symbol); checkTypeParameterListsIdentical(symbol); checkClassForDuplicateDeclarations(node); - // Only check for reserved static identifiers on non-ambient context. - if (!(node.flags & 4194304 /* Ambient */)) { + if (!(node.flags & 4194304)) { checkClassForStaticPropertyNameConflicts(node); } var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); if (baseTypeNode) { - if (languageVersion < 2 /* ES2015 */) { - checkExternalEmitHelpers(baseTypeNode.parent, 1 /* Extends */); + if (languageVersion < 2) { + checkExternalEmitHelpers(baseTypeNode.parent, 1); } var baseTypes = getBaseTypes(type); if (baseTypes.length && produceDiagnostics) { @@ -51262,18 +42414,14 @@ var ts; } } var baseWithThis = getTypeWithThisArgument(baseType_1, type.thisType); - if (!checkTypeAssignableTo(typeWithThis, baseWithThis, /*errorNode*/ undefined)) { + if (!checkTypeAssignableTo(typeWithThis, baseWithThis, undefined)) { issueMemberSpecificError(node, typeWithThis, baseWithThis, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); } checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseConstructorType.flags & 2162688 /* TypeVariable */ && !isMixinConstructorType(staticType)) { + if (baseConstructorType.flags & 2162688 && !isMixinConstructorType(staticType)) { error(node.name || node, ts.Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any); } - if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32 /* Class */) && !(baseConstructorType.flags & 2162688 /* TypeVariable */)) { - // When the static base type is a "class-like" constructor function (but not actually a class), we verify - // that all instantiated base constructor signatures return the same type. We can simply compare the type - // references (as opposed to checking the structure of the types) because elsewhere we have already checked - // that the base type is a class or interface type (and not, for example, an anonymous object type). + if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32) && !(baseConstructorType.flags & 2162688)) { var constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode); if (ts.forEach(constructors, function (sig) { return getReturnTypeOfSignature(sig) !== baseType_1; })) { error(baseTypeNode.expression, ts.Diagnostics.Base_constructors_must_all_have_the_same_return_type); @@ -51294,11 +42442,11 @@ var ts; var t = getTypeFromTypeNode(typeRefNode); if (t !== errorType) { if (isValidBaseType(t)) { - var genericDiag = t.symbol && t.symbol.flags & 32 /* Class */ ? + var genericDiag = t.symbol && t.symbol.flags & 32 ? ts.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass : ts.Diagnostics.Class_0_incorrectly_implements_interface_1; var baseWithThis = getTypeWithThisArgument(t, type.thisType); - if (!checkTypeAssignableTo(typeWithThis, baseWithThis, /*errorNode*/ undefined)) { + if (!checkTypeAssignableTo(typeWithThis, baseWithThis, undefined)) { issueMemberSpecificError(node, typeWithThis, baseWithThis, genericDiag); } } @@ -51316,7 +42464,6 @@ var ts; } } function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) { - // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible var issuedMemberError = false; var _loop_9 = function (member) { if (ts.hasStaticModifier(member)) { @@ -51327,9 +42474,8 @@ var ts; var prop = getPropertyOfType(typeWithThis, declaredProp.escapedName); var baseProp = getPropertyOfType(baseWithThis, declaredProp.escapedName); if (prop && baseProp) { - var rootChain = function () { return ts.chainDiagnosticMessages( - /*details*/ undefined, ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2, symbolToString(declaredProp), typeToString(typeWithThis), typeToString(baseWithThis)); }; - if (!checkTypeAssignableTo(getTypeOfSymbol(prop), getTypeOfSymbol(baseProp), member.name || member, /*message*/ undefined, rootChain)) { + var rootChain = function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2, symbolToString(declaredProp), typeToString(typeWithThis), typeToString(baseWithThis)); }; + if (!checkTypeAssignableTo(getTypeOfSymbol(prop), getTypeOfSymbol(baseProp), member.name || member, undefined, rootChain)) { issuedMemberError = true; } } @@ -51340,15 +42486,14 @@ var ts; _loop_9(member); } if (!issuedMemberError) { - // check again with diagnostics to generate a less-specific error checkTypeAssignableTo(typeWithThis, baseWithThis, node.name || node, broadDiag); } } function checkBaseTypeAccessibility(type, node) { - var signatures = getSignaturesOfType(type, 1 /* Construct */); + var signatures = getSignaturesOfType(type, 1); if (signatures.length) { var declaration = signatures[0].declaration; - if (declaration && ts.hasModifier(declaration, 8 /* Private */)) { + if (declaration && ts.hasModifier(declaration, 8)) { var typeClassDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol); if (!isNodeWithinClass(node, typeClassDeclaration)) { error(node, ts.Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private, getFullyQualifiedName(type.symbol)); @@ -51357,52 +42502,29 @@ var ts; } } function getTargetSymbol(s) { - // if symbol is instantiated its flags are not copied from the 'target' - // so we'll need to get back original 'target' symbol to work with correct set of flags - return ts.getCheckFlags(s) & 1 /* Instantiated */ ? s.target : s; + return ts.getCheckFlags(s) & 1 ? s.target : s; } function getClassOrInterfaceDeclarationsOfSymbol(symbol) { return ts.filter(symbol.declarations, function (d) { - return d.kind === 235 /* ClassDeclaration */ || d.kind === 236 /* InterfaceDeclaration */; + return d.kind === 235 || d.kind === 236; }); } function checkKindsOfPropertyMemberOverrides(type, baseType) { - // TypeScript 1.0 spec (April 2014): 8.2.3 - // A derived class inherits all members from its base class it doesn't override. - // Inheritance means that a derived class implicitly contains all non - overridden members of the base class. - // Both public and private property members are inherited, but only public property members can be overridden. - // A property member in a derived class is said to override a property member in a base class - // when the derived class property member has the same name and kind(instance or static) - // as the base class property member. - // The type of an overriding property member must be assignable(section 3.8.4) - // to the type of the overridden property member, or otherwise a compile - time error occurs. - // Base class instance member functions can be overridden by derived class instance member functions, - // but not by other kinds of members. - // Base class instance member variables and accessors can be overridden by - // derived class instance member variables and accessors, but not by other kinds of members. - // NOTE: assignability is checked in checkClassDeclaration var baseProperties = getPropertiesOfType(baseType); for (var _i = 0, baseProperties_1 = baseProperties; _i < baseProperties_1.length; _i++) { var baseProperty = baseProperties_1[_i]; var base = getTargetSymbol(baseProperty); - if (base.flags & 4194304 /* Prototype */) { + if (base.flags & 4194304) { continue; } - var derived = getTargetSymbol(getPropertyOfObjectType(type, base.escapedName)); // TODO: GH#18217 + var derived = getTargetSymbol(getPropertyOfObjectType(type, base.escapedName)); var baseDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(base); ts.Debug.assert(!!derived, "derived should point to something, even if it is the base class' declaration."); if (derived) { - // In order to resolve whether the inherited method was overridden in the base class or not, - // we compare the Symbols obtained. Since getTargetSymbol returns the symbol on the *uninstantiated* - // type declaration, derived and base resolve to the same symbol even in the case of generic classes. if (derived === base) { - // derived class inherits base without override/redeclaration var derivedClassDecl = ts.getClassLikeDeclarationOfSymbol(type.symbol); - // It is an error to inherit an abstract member without implementing it or being declared abstract. - // If there is no declaration for the derived class (as in the case of class expressions), - // then the class cannot be declared abstract. - if (baseDeclarationFlags & 128 /* Abstract */ && (!derivedClassDecl || !ts.hasModifier(derivedClassDecl, 128 /* Abstract */))) { - if (derivedClassDecl.kind === 205 /* ClassExpression */) { + if (baseDeclarationFlags & 128 && (!derivedClassDecl || !ts.hasModifier(derivedClassDecl, 128))) { + if (derivedClassDecl.kind === 205) { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType)); } else { @@ -51411,26 +42533,23 @@ var ts; } } else { - // derived overrides base. var derivedDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(derived); - if (baseDeclarationFlags & 8 /* Private */ || derivedDeclarationFlags & 8 /* Private */) { - // either base or derived property is private - not override, skip it + if (baseDeclarationFlags & 8 || derivedDeclarationFlags & 8) { continue; } - if (isPrototypeProperty(base) || base.flags & 98308 /* PropertyOrAccessor */ && derived.flags & 98308 /* PropertyOrAccessor */) { - // method is overridden with method or property/accessor is overridden with property/accessor - correct case + if (isPrototypeProperty(base) || base.flags & 98308 && derived.flags & 98308) { continue; } var errorMessage = void 0; if (isPrototypeProperty(base)) { - if (derived.flags & 98304 /* Accessor */) { + if (derived.flags & 98304) { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; } else { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; } } - else if (base.flags & 98304 /* Accessor */) { + else if (base.flags & 98304) { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; } else { @@ -51464,7 +42583,7 @@ var ts; ok = false; var typeName1 = typeToString(existing.containingType); var typeName2 = typeToString(base); - var errorInfo = ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2); + var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2); errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); } @@ -51474,7 +42593,7 @@ var ts; return ok; } function checkPropertyInitialization(node) { - if (!strictNullChecks || !strictPropertyInitialization || node.flags & 4194304 /* Ambient */) { + if (!strictNullChecks || !strictPropertyInitialization || node.flags & 4194304) { return; } var constructor = findConstructorDeclaration(node); @@ -51484,7 +42603,7 @@ var ts; var propName = member.name; if (ts.isIdentifier(propName)) { var type = getTypeOfSymbol(getSymbolOfNode(member)); - if (!(type.flags & 3 /* AnyOrUnknown */ || getFalsyFlags(type) & 8192 /* Undefined */)) { + if (!(type.flags & 3 || getFalsyFlags(type) & 8192)) { if (!constructor || !isPropertyInitializedInConstructor(propName, type, constructor)) { error(member.name, ts.Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor, ts.declarationNameToString(propName)); } @@ -51494,8 +42613,8 @@ var ts; } } function isInstancePropertyWithoutInitializer(node) { - return node.kind === 152 /* PropertyDeclaration */ && - !ts.hasModifier(node, 32 /* Static */ | 128 /* Abstract */) && + return node.kind === 152 && + !ts.hasModifier(node, 32 | 128) && !node.exclamationToken && !node.initializer; } @@ -51503,10 +42622,9 @@ var ts; var reference = ts.createPropertyAccess(ts.createThis(), propName); reference.flowNode = constructor.returnFlowNode; var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); - return !(getFalsyFlags(flowType) & 8192 /* Undefined */); + return !(getFalsyFlags(flowType) & 8192); } function checkInterfaceDeclaration(node) { - // Grammar checking if (!checkGrammarDecoratorsAndModifiers(node)) checkGrammarInterfaceDeclaration(node); checkTypeParameters(node.typeParameters); @@ -51515,12 +42633,10 @@ var ts; checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(symbol); - // Only check this symbol once - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 236 /* InterfaceDeclaration */); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 236); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); - // run subsequent checks only if first set succeeded if (checkInheritedPropertiesAreIdentical(type, node.name)) { for (var _i = 0, _a = getBaseTypes(type); _i < _a.length; _i++) { var baseType = _a[_i]; @@ -51544,7 +42660,6 @@ var ts; } } function checkTypeAliasDeclaration(node) { - // Grammar checking checkGrammarDecoratorsAndModifiers(node); checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0); checkTypeParameters(node.typeParameters); @@ -51553,8 +42668,8 @@ var ts; } function computeEnumMemberValues(node) { var nodeLinks = getNodeLinks(node); - if (!(nodeLinks.flags & 16384 /* EnumValuesComputed */)) { - nodeLinks.flags |= 16384 /* EnumValuesComputed */; + if (!(nodeLinks.flags & 16384)) { + nodeLinks.flags |= 16384; var autoValue = 0; for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; @@ -51577,15 +42692,9 @@ var ts; if (member.initializer) { return computeConstantValue(member); } - // In ambient enum declarations that specify no const modifier, enum member declarations that omit - // a value are considered computed members (as opposed to having auto-incremented values). - if (member.parent.flags & 4194304 /* Ambient */ && !ts.isConst(member.parent)) { + if (member.parent.flags & 4194304 && !ts.isConst(member.parent)) { return undefined; } - // If the member declaration specifies no value, the member is considered a constant enum member. - // If the member is the first member in the enum declaration, it is assigned the value zero. - // Otherwise, it is assigned the value of the immediately preceding member plus one, and an error - // occurs if the immediately preceding member is not a constant enum member. if (autoValue !== undefined) { return autoValue; } @@ -51596,7 +42705,7 @@ var ts; var enumKind = getEnumKind(getSymbolOfNode(member.parent)); var isConstEnum = ts.isConst(member.parent); var initializer = member.initializer; - var value = enumKind === 1 /* Literal */ && !isLiteralEnumMember(member) ? undefined : evaluate(initializer); + var value = enumKind === 1 && !isLiteralEnumMember(member) ? undefined : evaluate(initializer); if (value !== undefined) { if (isConstEnum && typeof value === "number" && !isFinite(value)) { error(initializer, isNaN(value) ? @@ -51604,77 +42713,76 @@ var ts; ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value); } } - else if (enumKind === 1 /* Literal */) { + else if (enumKind === 1) { error(initializer, ts.Diagnostics.Computed_values_are_not_permitted_in_an_enum_with_string_valued_members); return 0; } else if (isConstEnum) { error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression); } - else if (member.parent.flags & 4194304 /* Ambient */) { + else if (member.parent.flags & 4194304) { error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression); } else { - // Only here do we need to check that the initializer is assignable to the enum type. - checkTypeAssignableTo(checkExpression(initializer), getDeclaredTypeOfSymbol(getSymbolOfNode(member.parent)), initializer, /*headMessage*/ undefined); + checkTypeAssignableTo(checkExpression(initializer), getDeclaredTypeOfSymbol(getSymbolOfNode(member.parent)), initializer, undefined); } return value; function evaluate(expr) { switch (expr.kind) { - case 198 /* PrefixUnaryExpression */: + case 198: var value_2 = evaluate(expr.operand); if (typeof value_2 === "number") { switch (expr.operator) { - case 37 /* PlusToken */: return value_2; - case 38 /* MinusToken */: return -value_2; - case 52 /* TildeToken */: return ~value_2; + case 37: return value_2; + case 38: return -value_2; + case 52: return ~value_2; } } break; - case 200 /* BinaryExpression */: + case 200: var left = evaluate(expr.left); var right = evaluate(expr.right); if (typeof left === "number" && typeof right === "number") { switch (expr.operatorToken.kind) { - case 49 /* BarToken */: return left | right; - case 48 /* AmpersandToken */: return left & right; - case 46 /* GreaterThanGreaterThanToken */: return left >> right; - case 47 /* GreaterThanGreaterThanGreaterThanToken */: return left >>> right; - case 45 /* LessThanLessThanToken */: return left << right; - case 50 /* CaretToken */: return left ^ right; - case 39 /* AsteriskToken */: return left * right; - case 41 /* SlashToken */: return left / right; - case 37 /* PlusToken */: return left + right; - case 38 /* MinusToken */: return left - right; - case 42 /* PercentToken */: return left % right; - case 40 /* AsteriskAsteriskToken */: return Math.pow(left, right); + case 49: return left | right; + case 48: return left & right; + case 46: return left >> right; + case 47: return left >>> right; + case 45: return left << right; + case 50: return left ^ right; + case 39: return left * right; + case 41: return left / right; + case 37: return left + right; + case 38: return left - right; + case 42: return left % right; + case 40: return Math.pow(left, right); } } - else if (typeof left === "string" && typeof right === "string" && expr.operatorToken.kind === 37 /* PlusToken */) { + else if (typeof left === "string" && typeof right === "string" && expr.operatorToken.kind === 37) { return left + right; } break; - case 9 /* StringLiteral */: + case 9: return expr.text; - case 8 /* NumericLiteral */: + case 8: checkGrammarNumericLiteral(expr); return +expr.text; - case 191 /* ParenthesizedExpression */: + case 191: return evaluate(expr.expression); - case 71 /* Identifier */: + case 71: var identifier = expr; if (isInfinityOrNaNString(identifier.escapedText)) { return +(identifier.escapedText); } return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText); - case 186 /* ElementAccessExpression */: - case 185 /* PropertyAccessExpression */: + case 186: + case 185: var ex = expr; if (isConstantMemberAccess(ex)) { var type = getTypeOfExpression(ex.expression); - if (type.symbol && type.symbol.flags & 384 /* Enum */) { + if (type.symbol && type.symbol.flags & 384) { var name = void 0; - if (ex.kind === 185 /* PropertyAccessExpression */) { + if (ex.kind === 185) { name = ex.name.escapedText; } else { @@ -51705,16 +42813,15 @@ var ts; } } function isConstantMemberAccess(node) { - return node.kind === 71 /* Identifier */ || - node.kind === 185 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) || - node.kind === 186 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) && - node.argumentExpression.kind === 9 /* StringLiteral */; + return node.kind === 71 || + node.kind === 185 && isConstantMemberAccess(node.expression) || + node.kind === 186 && isConstantMemberAccess(node.expression) && + node.argumentExpression.kind === 9; } function checkEnumDeclaration(node) { if (!produceDiagnostics) { return; } - // Grammar checking checkGrammarDecoratorsAndModifiers(node); checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); @@ -51722,20 +42829,13 @@ var ts; checkExportsOnMergedDeclarations(node); computeEnumMemberValues(node); var enumIsConst = ts.isConst(node); - if (compilerOptions.isolatedModules && enumIsConst && node.flags & 4194304 /* Ambient */) { + if (compilerOptions.isolatedModules && enumIsConst && node.flags & 4194304) { error(node.name, ts.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided); } - // Spec 2014 - Section 9.3: - // It isn't possible for one enum declaration to continue the automatic numbering sequence of another, - // and when an enum type has multiple declarations, only one declaration is permitted to omit a value - // for the first member. - // - // Only perform this check once per symbol var enumSymbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind); if (node === firstDeclaration) { if (enumSymbol.declarations.length > 1) { - // check that const is placed\omitted on all enum declarations ts.forEach(enumSymbol.declarations, function (decl) { if (ts.isConstEnumDeclaration(decl) !== enumIsConst) { error(ts.getNameOfDeclaration(decl), ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const); @@ -51744,8 +42844,7 @@ var ts; } var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { - // return true if we hit a violation of the rule, false otherwise - if (declaration.kind !== 238 /* EnumDeclaration */) { + if (declaration.kind !== 238) { return false; } var enumDeclaration = declaration; @@ -51768,9 +42867,9 @@ var ts; var declarations = symbol.declarations; for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) { var declaration = declarations_8[_i]; - if ((declaration.kind === 235 /* ClassDeclaration */ || - (declaration.kind === 234 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && - !(declaration.flags & 4194304 /* Ambient */)) { + if ((declaration.kind === 235 || + (declaration.kind === 234 && ts.nodeIsPresent(declaration.body))) && + !(declaration.flags & 4194304)) { return declaration; } } @@ -51791,9 +42890,8 @@ var ts; } function checkModuleDeclaration(node) { if (produceDiagnostics) { - // Grammar checking var isGlobalAugmentation = ts.isGlobalScopeAugmentation(node); - var inAmbientContext = node.flags & 4194304 /* Ambient */; + var inAmbientContext = node.flags & 4194304; if (isGlobalAugmentation && !inAmbientContext) { error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context); } @@ -51802,11 +42900,10 @@ var ts; ? ts.Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file : ts.Diagnostics.A_namespace_declaration_is_only_allowed_in_a_namespace_or_module; if (checkGrammarModuleElementContext(node, contextErrorMessage)) { - // If we hit a module declaration in an illegal context, just bail out to avoid cascading errors. return; } if (!checkGrammarDecoratorsAndModifiers(node)) { - if (!inAmbientContext && node.name.kind === 9 /* StringLiteral */) { + if (!inAmbientContext && node.name.kind === 9) { grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); } } @@ -51816,8 +42913,7 @@ var ts; } checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); - // The following checks only apply on a non-ambient instantiated module declaration. - if (symbol.flags & 512 /* ValueModule */ + if (symbol.flags & 512 && symbol.declarations.length > 1 && !inAmbientContext && isInstantiatedModule(node, !!compilerOptions.preserveConstEnums || !!compilerOptions.isolatedModules)) { @@ -51830,22 +42926,15 @@ var ts; error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); } } - // if the module merges with a class declaration in the same lexical scope, - // we need to track this to ensure the correct emit. - var mergedClass = ts.getDeclarationOfKind(symbol, 235 /* ClassDeclaration */); + var mergedClass = ts.getDeclarationOfKind(symbol, 235); if (mergedClass && inSameLexicalScope(node, mergedClass)) { - getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */; + getNodeLinks(node).flags |= 32768; } } if (isAmbientExternalModule) { if (ts.isExternalModuleAugmentation(node)) { - // body of the augmentation should be checked for consistency only if augmentation was applied to its target (either global scope or module) - // otherwise we'll be swamped in cascading errors. - // We can detect if augmentation was applied using following rules: - // - augmentation for a global scope is always applied - // - augmentation for some external module is applied if symbol for augmentation is merged (it was combined with target module). - var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432 /* Transient */); + var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432); if (checkBody && node.body) { for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; @@ -51866,8 +42955,6 @@ var ts; error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations); } else { - // Node is not an augmentation and is not located on the script level. - // This means that this is declaration of ambient module that is located in other module or namespace which is prohibited. error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces); } } @@ -51882,51 +42969,43 @@ var ts; } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { - case 214 /* VariableStatement */: - // error each individual name in variable statement instead of marking the entire variable statement + case 214: for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; - case 249 /* ExportAssignment */: - case 250 /* ExportDeclaration */: + case 249: + case 250: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; - case 243 /* ImportEqualsDeclaration */: - case 244 /* ImportDeclaration */: + case 243: + case 244: grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; - case 182 /* BindingElement */: - case 232 /* VariableDeclaration */: + case 182: + case 232: var name = node.name; if (ts.isBindingPattern(name)) { for (var _b = 0, _c = name.elements; _b < _c.length; _b++) { var el = _c[_b]; - // mark individual names in binding pattern checkModuleAugmentationElement(el, isGlobalAugmentation); } break; } - // falls through - case 235 /* ClassDeclaration */: - case 238 /* EnumDeclaration */: - case 234 /* FunctionDeclaration */: - case 236 /* InterfaceDeclaration */: - case 239 /* ModuleDeclaration */: - case 237 /* TypeAliasDeclaration */: + case 235: + case 238: + case 234: + case 236: + case 239: + case 237: if (isGlobalAugmentation) { return; } var symbol = getSymbolOfNode(node); if (symbol) { - // module augmentations cannot introduce new names on the top level scope of the module - // this is done it two steps - // 1. quick check - if symbol for node is not merged - this is local symbol to this augmentation - report error - // 2. main check - report error if value declaration of the parent symbol is module augmentation) - var reportError = !(symbol.flags & 33554432 /* Transient */); + var reportError = !(symbol.flags & 33554432); if (!reportError) { - // symbol should not originate in augmentation reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } @@ -51935,45 +43014,38 @@ var ts; } function getFirstIdentifier(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return node; - case 146 /* QualifiedName */: + case 146: do { node = node.left; - } while (node.kind !== 71 /* Identifier */); + } while (node.kind !== 71); return node; - case 185 /* PropertyAccessExpression */: + case 185: do { node = node.expression; - } while (node.kind !== 71 /* Identifier */); + } while (node.kind !== 71); return node; } } function checkExternalImportOrExportDeclaration(node) { var moduleName = ts.getExternalModuleName(node); if (!moduleName || ts.nodeIsMissing(moduleName)) { - // Should be a parse error. return false; } if (!ts.isStringLiteral(moduleName)) { error(moduleName, ts.Diagnostics.String_literal_expected); return false; } - var inAmbientExternalModule = node.parent.kind === 240 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 274 /* SourceFile */ && !inAmbientExternalModule) { - error(moduleName, node.kind === 250 /* ExportDeclaration */ ? + var inAmbientExternalModule = node.parent.kind === 240 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 274 && !inAmbientExternalModule) { + error(moduleName, node.kind === 250 ? ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); return false; } if (inAmbientExternalModule && ts.isExternalModuleNameRelative(moduleName.text)) { - // we have already reported errors on top level imports\exports in external module augmentations in checkModuleDeclaration - // no need to do this again. if (!isTopLevelInExternalModuleAugmentation(node)) { - // TypeScript 1.0 spec (April 2013): 12.1.6 - // An ExternalImportDeclaration in an AmbientExternalModuleDeclaration may reference - // other external modules only through top - level external module names. - // Relative external module names are not permitted. error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name); return false; } @@ -51984,26 +43056,19 @@ var ts; var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target !== unknownSymbol) { - // For external modules symbol represent local symbol for an alias. - // This local symbol will merge any other local declarations (excluding other aliases) - // and symbol.flags will contains combined representation for all merged declaration. - // Based on symbol.flags we can compute a set of excluded meanings (meaning that resolved alias should not have, - // otherwise it will conflict with some local declaration). Note that in addition to normal flags we include matching SymbolFlags.Export* - // in order to prevent collisions with declarations that were exported from the current module (they still contribute to local names). - var excludedMeanings = (symbol.flags & (67216319 /* Value */ | 1048576 /* ExportValue */) ? 67216319 /* Value */ : 0) | - (symbol.flags & 67901928 /* Type */ ? 67901928 /* Type */ : 0) | - (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0); + var excludedMeanings = (symbol.flags & (67216319 | 1048576) ? 67216319 : 0) | + (symbol.flags & 67901928 ? 67901928 : 0) | + (symbol.flags & 1920 ? 1920 : 0); if (target.flags & excludedMeanings) { - var message = node.kind === 252 /* ExportSpecifier */ ? + var message = node.kind === 252 ? ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 : ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0; error(node, message, symbolToString(symbol)); } - // Don't allow to re-export something with no value side when `--isolatedModules` is set. if (compilerOptions.isolatedModules - && node.kind === 252 /* ExportSpecifier */ - && !(target.flags & 67216319 /* Value */) - && !(node.flags & 4194304 /* Ambient */)) { + && node.kind === 252 + && !(target.flags & 67216319) + && !(node.flags & 4194304)) { error(node, ts.Diagnostics.Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided); } } @@ -52015,7 +43080,6 @@ var ts; } function checkImportDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { - // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. return; } if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { @@ -52028,7 +43092,7 @@ var ts; checkImportBinding(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 246 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 246) { checkImportBinding(importClause.namedBindings); } else { @@ -52043,33 +43107,30 @@ var ts; } function checkImportEqualsDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { - // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. return; } checkGrammarDecoratorsAndModifiers(node); if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) { checkImportBinding(node); - if (ts.hasModifier(node, 1 /* Export */)) { + if (ts.hasModifier(node, 1)) { markExportAsReferenced(node); } - if (node.moduleReference.kind !== 254 /* ExternalModuleReference */) { + if (node.moduleReference.kind !== 254) { var target = resolveAlias(getSymbolOfNode(node)); if (target !== unknownSymbol) { - if (target.flags & 67216319 /* Value */) { - // Target is a value symbol, check that it is not hidden by a local declaration with the same name + if (target.flags & 67216319) { var moduleName = getFirstIdentifier(node.moduleReference); - if (!(resolveEntityName(moduleName, 67216319 /* Value */ | 1920 /* Namespace */).flags & 1920 /* Namespace */)) { + if (!(resolveEntityName(moduleName, 67216319 | 1920).flags & 1920)) { error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName)); } } - if (target.flags & 67901928 /* Type */) { + if (target.flags & 67901928) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); } } } else { - if (moduleKind >= ts.ModuleKind.ES2015 && !(node.flags & 4194304 /* Ambient */)) { - // Import equals declaration is deprecated in es6 or above + if (moduleKind >= ts.ModuleKind.ES2015 && !(node.flags & 4194304)) { grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead); } } @@ -52077,7 +43138,6 @@ var ts; } function checkExportDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) { - // If we hit an export in an illegal context, just bail out to avoid cascading errors. return; } if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { @@ -52085,30 +43145,27 @@ var ts; } if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) { if (node.exportClause) { - // export { x, y } - // export { x, y } from "foo" ts.forEach(node.exportClause.elements, checkExportSpecifier); - var inAmbientExternalModule = node.parent.kind === 240 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 240 /* ModuleBlock */ && - !node.moduleSpecifier && node.flags & 4194304 /* Ambient */; - if (node.parent.kind !== 274 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) { + var inAmbientExternalModule = node.parent.kind === 240 && ts.isAmbientModule(node.parent.parent); + var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 240 && + !node.moduleSpecifier && node.flags & 4194304; + if (node.parent.kind !== 274 && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) { error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); } } else { - // export * from "foo" var moduleSymbol_2 = resolveExternalModuleName(node, node.moduleSpecifier); if (moduleSymbol_2 && hasExportAssignmentSymbol(moduleSymbol_2)) { error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol_2)); } if (moduleKind !== ts.ModuleKind.System && moduleKind !== ts.ModuleKind.ES2015 && moduleKind !== ts.ModuleKind.ESNext) { - checkExternalEmitHelpers(node, 32768 /* ExportStar */); + checkExternalEmitHelpers(node, 32768); } } } } function checkGrammarModuleElementContext(node, errorMessage) { - var isInAppropriateContext = node.parent.kind === 274 /* SourceFile */ || node.parent.kind === 240 /* ModuleBlock */ || node.parent.kind === 239 /* ModuleDeclaration */; + var isInAppropriateContext = node.parent.kind === 274 || node.parent.kind === 240 || node.parent.kind === 239; if (!isInAppropriateContext) { grammarErrorOnFirstToken(node, errorMessage); } @@ -52117,13 +43174,11 @@ var ts; function checkExportSpecifier(node) { checkAliasSymbol(node); if (compilerOptions.declaration) { - collectLinkedAliases(node.propertyName || node.name, /*setVisibility*/ true); + collectLinkedAliases(node.propertyName || node.name, true); } if (!node.parent.parent.moduleSpecifier) { var exportedName = node.propertyName || node.name; - // find immediate value referenced by exported name (SymbolFlags.Alias is set so we don't chase down aliases) - var symbol = resolveName(exportedName, exportedName.escapedText, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, - /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true); + var symbol = resolveName(exportedName, exportedName.escapedText, 67216319 | 67901928 | 1920 | 2097152, undefined, undefined, true); if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, ts.idText(exportedName)); } @@ -52134,11 +43189,10 @@ var ts; } function checkExportAssignment(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) { - // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors. return; } - var container = node.parent.kind === 274 /* SourceFile */ ? node.parent : node.parent.parent; - if (container.kind === 239 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { + var container = node.parent.kind === 274 ? node.parent : node.parent.parent; + if (container.kind === 239 && !ts.isAmbientModule(container)) { if (node.isExportEquals) { error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); } @@ -52147,30 +43201,27 @@ var ts; } return; } - // Grammar checking if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } - if (node.expression.kind === 71 /* Identifier */) { + if (node.expression.kind === 71) { markExportAsReferenced(node); if (compilerOptions.declaration) { - collectLinkedAliases(node.expression, /*setVisibility*/ true); + collectLinkedAliases(node.expression, true); } } else { checkExpressionCached(node.expression); } checkExternalModuleExports(container); - if ((node.flags & 4194304 /* Ambient */) && !ts.isEntityNameExpression(node.expression)) { + if ((node.flags & 4194304) && !ts.isEntityNameExpression(node.expression)) { grammarErrorOnNode(node.expression, ts.Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context); } - if (node.isExportEquals && !(node.flags & 4194304 /* Ambient */)) { + if (node.isExportEquals && !(node.flags & 4194304)) { if (moduleKind >= ts.ModuleKind.ES2015) { - // export assignment is not supported in es6 modules grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead); } else if (moduleKind === ts.ModuleKind.System) { - // system modules does not support export assignment grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system); } } @@ -52189,7 +43240,6 @@ var ts; error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); } } - // Checks for export * conflicts var exports_1 = getExportsOfModule(moduleSymbol); if (exports_1) { exports_1.forEach(function (_a, id) { @@ -52197,15 +43247,11 @@ var ts; if (id === "__export") { return; } - // ECMA262: 15.2.1.1 It is a Syntax Error if the ExportedNames of ModuleItemList contains any duplicate entries. - // (TS Exceptions: namespaces, function overloads, enums, and interfaces) - if (flags & (1920 /* Namespace */ | 64 /* Interface */ | 384 /* Enum */)) { + if (flags & (1920 | 64 | 384)) { return; } var exportedDeclarationsCount = ts.countWhere(declarations, isNotOverloadAndNotAccessor); - if (flags & 524288 /* TypeAlias */ && exportedDeclarationsCount <= 2) { - // it is legal to merge type alias with other values - // so count should be either 1 (just type alias) or 2 (type alias + merged value) + if (flags & 524288 && exportedDeclarationsCount <= 2) { return; } if (exportedDeclarationsCount > 1) { @@ -52222,11 +43268,10 @@ var ts; } } function isNotAccessor(declaration) { - // Accessors check for their own matching duplicates, and in contexts where they are valid, there are already duplicate identifier checks return !ts.isAccessor(declaration); } function isNotOverload(declaration) { - return (declaration.kind !== 234 /* FunctionDeclaration */ && declaration.kind !== 154 /* MethodDeclaration */) || + return (declaration.kind !== 234 && declaration.kind !== 154) || !!declaration.body; } function checkSourceElement(node) { @@ -52241,153 +43286,150 @@ var ts; } var kind = node.kind; if (cancellationToken) { - // Only bother checking on a few construct kinds. We don't want to be excessively - // hitting the cancellation token on every node we check. switch (kind) { - case 239 /* ModuleDeclaration */: - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 234 /* FunctionDeclaration */: + case 239: + case 235: + case 236: + case 234: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { - case 148 /* TypeParameter */: + case 148: return checkTypeParameter(node); - case 149 /* Parameter */: + case 149: return checkParameter(node); - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: + case 152: + case 151: return checkPropertyDeclaration(node); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 158 /* CallSignature */: - case 159 /* ConstructSignature */: - case 160 /* IndexSignature */: + case 163: + case 164: + case 158: + case 159: + case 160: return checkSignatureDeclaration(node); - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: + case 154: + case 153: return checkMethodDeclaration(node); - case 155 /* Constructor */: + case 155: return checkConstructorDeclaration(node); - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return checkAccessorDeclaration(node); - case 162 /* TypeReference */: + case 162: return checkTypeReferenceNode(node); - case 161 /* TypePredicate */: + case 161: return checkTypePredicate(node); - case 165 /* TypeQuery */: + case 165: return checkTypeQuery(node); - case 166 /* TypeLiteral */: + case 166: return checkTypeLiteral(node); - case 167 /* ArrayType */: + case 167: return checkArrayType(node); - case 168 /* TupleType */: + case 168: return checkTupleType(node); - case 169 /* UnionType */: - case 170 /* IntersectionType */: + case 169: + case 170: return checkUnionOrIntersectionType(node); - case 173 /* ParenthesizedType */: + case 173: return checkSourceElement(node.type); - case 175 /* TypeOperator */: + case 175: return checkTypeOperator(node); - case 171 /* ConditionalType */: + case 171: return checkConditionalType(node); - case 172 /* InferType */: + case 172: return checkInferType(node); - case 179 /* ImportType */: + case 179: return checkImportType(node); - case 290 /* JSDocAugmentsTag */: + case 290: return checkJSDocAugmentsTag(node); - case 297 /* JSDocTypedefTag */: - case 292 /* JSDocCallbackTag */: + case 297: + case 292: return checkJSDocTypeAliasTag(node); - case 293 /* JSDocParameterTag */: + case 293: return checkJSDocParameterTag(node); - case 284 /* JSDocFunctionType */: + case 284: checkSignatureDeclaration(node); - // falls through - case 282 /* JSDocNonNullableType */: - case 281 /* JSDocNullableType */: - case 279 /* JSDocAllType */: - case 280 /* JSDocUnknownType */: - case 287 /* JSDocTypeLiteral */: + case 282: + case 281: + case 279: + case 280: + case 287: checkJSDocTypeIsInJsFile(node); ts.forEachChild(node, checkSourceElement); return; - case 285 /* JSDocVariadicType */: + case 285: checkJSDocVariadicType(node); return; - case 278 /* JSDocTypeExpression */: + case 278: return checkSourceElement(node.type); - case 176 /* IndexedAccessType */: + case 176: return checkIndexedAccessType(node); - case 177 /* MappedType */: + case 177: return checkMappedType(node); - case 234 /* FunctionDeclaration */: + case 234: return checkFunctionDeclaration(node); - case 213 /* Block */: - case 240 /* ModuleBlock */: + case 213: + case 240: return checkBlock(node); - case 214 /* VariableStatement */: + case 214: return checkVariableStatement(node); - case 216 /* ExpressionStatement */: + case 216: return checkExpressionStatement(node); - case 217 /* IfStatement */: + case 217: return checkIfStatement(node); - case 218 /* DoStatement */: + case 218: return checkDoStatement(node); - case 219 /* WhileStatement */: + case 219: return checkWhileStatement(node); - case 220 /* ForStatement */: + case 220: return checkForStatement(node); - case 221 /* ForInStatement */: + case 221: return checkForInStatement(node); - case 222 /* ForOfStatement */: + case 222: return checkForOfStatement(node); - case 223 /* ContinueStatement */: - case 224 /* BreakStatement */: + case 223: + case 224: return checkBreakOrContinueStatement(node); - case 225 /* ReturnStatement */: + case 225: return checkReturnStatement(node); - case 226 /* WithStatement */: + case 226: return checkWithStatement(node); - case 227 /* SwitchStatement */: + case 227: return checkSwitchStatement(node); - case 228 /* LabeledStatement */: + case 228: return checkLabeledStatement(node); - case 229 /* ThrowStatement */: + case 229: return checkThrowStatement(node); - case 230 /* TryStatement */: + case 230: return checkTryStatement(node); - case 232 /* VariableDeclaration */: + case 232: return checkVariableDeclaration(node); - case 182 /* BindingElement */: + case 182: return checkBindingElement(node); - case 235 /* ClassDeclaration */: + case 235: return checkClassDeclaration(node); - case 236 /* InterfaceDeclaration */: + case 236: return checkInterfaceDeclaration(node); - case 237 /* TypeAliasDeclaration */: + case 237: return checkTypeAliasDeclaration(node); - case 238 /* EnumDeclaration */: + case 238: return checkEnumDeclaration(node); - case 239 /* ModuleDeclaration */: + case 239: return checkModuleDeclaration(node); - case 244 /* ImportDeclaration */: + case 244: return checkImportDeclaration(node); - case 243 /* ImportEqualsDeclaration */: + case 243: return checkImportEqualsDeclaration(node); - case 250 /* ExportDeclaration */: + case 250: return checkExportDeclaration(node); - case 249 /* ExportAssignment */: + case 249: return checkExportAssignment(node); - case 215 /* EmptyStatement */: - case 231 /* DebuggerStatement */: + case 215: + case 231: checkGrammarStatementInAmbientContext(node); return; - case 253 /* MissingDeclaration */: + case 253: return checkMissingDeclaration(node); } } @@ -52399,7 +43441,6 @@ var ts; function checkJSDocVariadicType(node) { checkJSDocTypeIsInJsFile(node); checkSourceElement(node.type); - // Only legal location is in the *last* parameter tag or last parameter of a JSDoc function. var parent = node.parent; if (ts.isParameter(parent) && ts.isJSDocFunctionType(parent.parent)) { if (ts.last(parent.parent.parameters) !== parent) { @@ -52417,7 +43458,6 @@ var ts; } var param = ts.getParameterSymbolFromJSDoc(paramTag); if (!param) { - // We will error in `checkJSDocParameterTag`. return; } var host = ts.getHostSignatureFromJSDoc(paramTag); @@ -52430,16 +43470,8 @@ var ts; var parent = node.parent; var paramTag = node.parent.parent; if (ts.isJSDocTypeExpression(node.parent) && ts.isJSDocParameterTag(paramTag)) { - // Else we will add a diagnostic, see `checkJSDocVariadicType`. var host_1 = ts.getHostSignatureFromJSDoc(paramTag); if (host_1) { - /* - Only return an array type if the corresponding parameter is marked as a rest parameter, or if there are no parameters. - So in the following situation we will not create an array type: - /** @param {...number} a * / - function f(a) {} - Because `a` will just be of type `number | undefined`. A synthetic `...args` will also be added, which *will* get an array type. - */ var lastParamDeclaration = ts.lastOrUndefined(host_1.parameters); var symbol = ts.getParameterSymbolFromJSDoc(paramTag); if (!lastParamDeclaration || @@ -52453,15 +43485,6 @@ var ts; } return addOptionality(type); } - // Function and class expression bodies are checked after all statements in the enclosing body. This is - // to ensure constructs like the following are permitted: - // const foo = function () { - // const s = foo(); - // return "hello"; - // } - // Here, performing a full type check of the body of the function expression whilst in the process of - // determining the type of foo would cause foo to be given type any because of the recursive reference. - // Delaying the type check of the body ensures foo has been assigned a type. function checkNodeDeferred(node) { if (deferredNodes) { deferredNodes.push(node); @@ -52471,17 +43494,17 @@ var ts; for (var _i = 0, _a = deferredNodes; _i < _a.length; _i++) { var node = _a[_i]; switch (node.kind) { - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: + case 192: + case 193: + case 154: + case 153: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: checkAccessorDeclaration(node); break; - case 205 /* ClassExpression */: + case 205: checkClassExpressionDeferred(node); break; } @@ -52495,9 +43518,9 @@ var ts; } function unusedIsError(kind) { switch (kind) { - case 0 /* Local */: + case 0: return !!compilerOptions.noUnusedLocals; - case 1 /* Parameter */: + case 1: return !!compilerOptions.noUnusedParameters; default: return ts.Debug.assertNever(kind); @@ -52506,17 +43529,12 @@ var ts; function getPotentiallyUnusedIdentifiers(sourceFile) { return allPotentiallyUnusedIdentifiers.get(sourceFile.path) || ts.emptyArray; } - // Fully type check a source file and collect the relevant diagnostics. function checkSourceFileWorker(node) { var links = getNodeLinks(node); - if (!(links.flags & 1 /* TypeChecked */)) { - // If skipLibCheck is enabled, skip type checking if file is a declaration file. - // If skipDefaultLibCheck is enabled, skip type checking if file contains a - // '/// ' directive. + if (!(links.flags & 1)) { if (compilerOptions.skipLibCheck && node.isDeclarationFile || compilerOptions.skipDefaultLibCheck && node.hasNoDefaultLib) { return; } - // Grammar checking checkGrammarSourceFile(node); ts.clear(potentialThisCollisions); ts.clear(potentialNewTargetCollisions); @@ -52545,14 +43563,11 @@ var ts; ts.forEach(potentialNewTargetCollisions, checkIfNewTargetIsCapturedInEnclosingScope); ts.clear(potentialNewTargetCollisions); } - links.flags |= 1 /* TypeChecked */; + links.flags |= 1; } } function getDiagnostics(sourceFile, ct) { try { - // Record the cancellation token so it can be checked later on during checkSourceElement. - // Do this in a finally block so we can ensure that it gets reset back to nothing after - // this call is done. cancellationToken = ct; return getDiagnosticsWorker(sourceFile); } @@ -52563,29 +43578,20 @@ var ts; function getDiagnosticsWorker(sourceFile) { throwIfNonDiagnosticsProducing(); if (sourceFile) { - // Some global diagnostics are deferred until they are needed and - // may not be reported in the firt call to getGlobalDiagnostics. - // We should catch these changes and report them. var previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); var previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length; checkSourceFile(sourceFile); var semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); var currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); if (currentGlobalDiagnostics !== previousGlobalDiagnostics) { - // If the arrays are not the same reference, new diagnostics were added. var deferredGlobalDiagnostics = ts.relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, ts.compareDiagnostics); return ts.concatenate(deferredGlobalDiagnostics, semanticDiagnostics); } else if (previousGlobalDiagnosticsSize === 0 && currentGlobalDiagnostics.length > 0) { - // If the arrays are the same reference, but the length has changed, a single - // new diagnostic was added as DiagnosticCollection attempts to reuse the - // same array. return ts.concatenate(currentGlobalDiagnostics, semanticDiagnostics); } return semanticDiagnostics; } - // Global diagnostics are always added when a file is not provided to - // getDiagnostics ts.forEach(host.getSourceFiles(), checkSourceFile); return diagnostics.getDiagnostics(); } @@ -52598,10 +43604,8 @@ var ts; throw new Error("Trying to get diagnostics from a type checker that does not produce them."); } } - // Language service support function getSymbolsInScope(location, meaning) { - if (location.flags & 8388608 /* InWithStatement */) { - // We cannot answer semantic questions within a with block, do not proceed any further + if (location.flags & 8388608) { return []; } var symbols = ts.createSymbolTable(); @@ -52614,31 +43618,24 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 239 /* ModuleDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */); + case 239: + copySymbols(getSymbolOfNode(location).exports, meaning & 2623475); break; - case 238 /* EnumDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */); + case 238: + copySymbols(getSymbolOfNode(location).exports, meaning & 8); break; - case 205 /* ClassExpression */: + case 205: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } - // falls through - // this fall-through is necessary because we would like to handle - // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - // If we didn't come from static member of class or interface, - // add the type parameters into the symbol table - // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol. - // Note: that the memberFlags come from previous iteration. + case 235: + case 236: if (!isStatic) { - copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 67901928 /* Type */); + copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 67901928); } break; - case 192 /* FunctionExpression */: + case 192: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); @@ -52648,24 +43645,14 @@ var ts; if (ts.introducesArgumentsExoticObject(location)) { copySymbol(argumentsSymbol, meaning); } - isStatic = ts.hasModifier(location, 32 /* Static */); + isStatic = ts.hasModifier(location, 32); location = location.parent; } copySymbols(globals, meaning); } - /** - * Copy the given symbol into symbol tables if the symbol has the given meaning - * and it doesn't already existed in the symbol table - * @param key a key for storing in symbol table; if undefined, use symbol.name - * @param symbol the symbol to be added into symbol table - * @param meaning meaning of symbol to filter by before adding to symbol table - */ function copySymbol(symbol, meaning) { if (ts.getCombinedLocalAndExportSymbolFlags(symbol) & meaning) { var id = symbol.escapedName; - // We will copy all symbol regardless of its reserved name because - // symbolsToArray will check whether the key is a reserved name and - // it will not copy symbol with reserved name to the array if (!symbols.has(id)) { symbols.set(id, symbol); } @@ -52680,34 +43667,33 @@ var ts; } } function isTypeDeclarationName(name) { - return name.kind === 71 /* Identifier */ && + return name.kind === 71 && isTypeDeclaration(name.parent) && name.parent.name === name; } function isTypeDeclaration(node) { switch (node.kind) { - case 148 /* TypeParameter */: - case 235 /* ClassDeclaration */: - case 236 /* InterfaceDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 238 /* EnumDeclaration */: + case 148: + case 235: + case 236: + case 237: + case 238: return true; default: return false; } } - // True if the given identifier is part of a type reference function isTypeReferenceIdentifier(node) { - while (node.parent.kind === 146 /* QualifiedName */) { + while (node.parent.kind === 146) { node = node.parent; } - return node.parent.kind === 162 /* TypeReference */; + return node.parent.kind === 162; } function isHeritageClauseElementIdentifier(node) { - while (node.parent.kind === 185 /* PropertyAccessExpression */) { + while (node.parent.kind === 185) { node = node.parent; } - return node.parent.kind === 207 /* ExpressionWithTypeArguments */; + return node.parent.kind === 207; } function forEachEnclosingClass(node, callback) { var result; @@ -52735,13 +43721,13 @@ var ts; return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 146 /* QualifiedName */) { + while (nodeOnRightSide.parent.kind === 146) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 243 /* ImportEqualsDeclaration */) { + if (nodeOnRightSide.parent.kind === 243) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined; } - if (nodeOnRightSide.parent.kind === 249 /* ExportAssignment */) { + if (nodeOnRightSide.parent.kind === 249) { return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined; } return undefined; @@ -52752,12 +43738,12 @@ var ts; function getSpecialPropertyAssignmentSymbolFromEntityName(entityName) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { - case 1 /* ExportsProperty */: - case 3 /* PrototypeProperty */: + case 1: + case 3: return getSymbolOfNode(entityName.parent); - case 4 /* ThisProperty */: - case 2 /* ModuleExports */: - case 5 /* Property */: + case 4: + case 2: + case 5: return getSymbolOfNode(entityName.parent.parent); } } @@ -52767,7 +43753,7 @@ var ts; node = parent; parent = parent.parent; } - if (parent && parent.kind === 179 /* ImportType */ && parent.qualifier === node) { + if (parent && parent.kind === 179 && parent.qualifier === node) { return parent; } return undefined; @@ -52777,27 +43763,23 @@ var ts; return getSymbolOfNode(entityName.parent); } if (ts.isInJavaScriptFile(entityName) && - entityName.parent.kind === 185 /* PropertyAccessExpression */ && + entityName.parent.kind === 185 && entityName.parent === entityName.parent.parent.left) { - // Check if this is a special property assignment var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(entityName); if (specialPropertyAssignmentSymbol) { return specialPropertyAssignmentSymbol; } } - if (entityName.parent.kind === 249 /* ExportAssignment */ && ts.isEntityNameExpression(entityName)) { - // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression - var success = resolveEntityName(entityName, - /*all meanings*/ 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true); + if (entityName.parent.kind === 249 && ts.isEntityNameExpression(entityName)) { + var success = resolveEntityName(entityName, 67216319 | 67901928 | 1920 | 2097152, true); if (success && success !== unknownSymbol) { return success; } } else if (!ts.isPropertyAccessExpression(entityName) && isInRightSideOfImportOrExportAssignment(entityName)) { - // Since we already checked for ExportAssignment, this really could only be an Import - var importEqualsDeclaration = ts.getAncestor(entityName, 243 /* ImportEqualsDeclaration */); + var importEqualsDeclaration = ts.getAncestor(entityName, 243); ts.Debug.assert(importEqualsDeclaration !== undefined); - return getSymbolOfPartOfRightHandSideOfImportEquals(entityName, /*dontResolveAlias*/ true); + return getSymbolOfPartOfRightHandSideOfImportEquals(entityName, true); } if (!ts.isPropertyAccessExpression(entityName)) { var possibleImportNode = isImportTypeQualifierPart(entityName); @@ -52811,50 +43793,47 @@ var ts; entityName = entityName.parent; } if (isHeritageClauseElementIdentifier(entityName)) { - var meaning = 0 /* None */; - // In an interface or class, we're definitely interested in a type. - if (entityName.parent.kind === 207 /* ExpressionWithTypeArguments */) { - meaning = 67901928 /* Type */; - // In a class 'extends' clause we are also looking for a value. + var meaning = 0; + if (entityName.parent.kind === 207) { + meaning = 67901928; if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { - meaning |= 67216319 /* Value */; + meaning |= 67216319; } } else { - meaning = 1920 /* Namespace */; + meaning = 1920; } - meaning |= 2097152 /* Alias */; + meaning |= 2097152; var entityNameSymbol = ts.isEntityNameExpression(entityName) ? resolveEntityName(entityName, meaning) : undefined; if (entityNameSymbol) { return entityNameSymbol; } } - if (entityName.parent.kind === 293 /* JSDocParameterTag */) { + if (entityName.parent.kind === 293) { return ts.getParameterSymbolFromJSDoc(entityName.parent); } - if (entityName.parent.kind === 148 /* TypeParameter */ && entityName.parent.parent.kind === 296 /* JSDocTemplateTag */) { - ts.Debug.assert(!ts.isInJavaScriptFile(entityName)); // Otherwise `isDeclarationName` would have been true. + if (entityName.parent.kind === 148 && entityName.parent.parent.kind === 296) { + ts.Debug.assert(!ts.isInJavaScriptFile(entityName)); var typeParameter = ts.getTypeParameterFromJsDoc(entityName.parent); return typeParameter && typeParameter.symbol; } if (ts.isExpressionNode(entityName)) { if (ts.nodeIsMissing(entityName)) { - // Missing entity name. return undefined; } - if (entityName.kind === 71 /* Identifier */) { + if (entityName.kind === 71) { if (ts.isJSXTagName(entityName) && isJsxIntrinsicIdentifier(entityName)) { var symbol = getIntrinsicTagSymbol(entityName.parent); return symbol === unknownSymbol ? undefined : symbol; } - return resolveEntityName(entityName, 67216319 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true); + return resolveEntityName(entityName, 67216319, false, true); } - else if (entityName.kind === 185 /* PropertyAccessExpression */ || entityName.kind === 146 /* QualifiedName */) { + else if (entityName.kind === 185 || entityName.kind === 146) { var links = getNodeLinks(entityName); if (links.resolvedSymbol) { return links.resolvedSymbol; } - if (entityName.kind === 185 /* PropertyAccessExpression */) { + if (entityName.kind === 185) { checkPropertyAccessExpression(entityName); } else { @@ -52864,41 +43843,38 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 162 /* TypeReference */ ? 67901928 /* Type */ : 1920 /* Namespace */; - return resolveEntityName(entityName, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true); + var meaning = entityName.parent.kind === 162 ? 67901928 : 1920; + return resolveEntityName(entityName, meaning, false, true); } - else if (entityName.parent.kind === 262 /* JsxAttribute */) { + else if (entityName.parent.kind === 262) { return getJsxAttributePropertySymbol(entityName.parent); } - if (entityName.parent.kind === 161 /* TypePredicate */) { - return resolveEntityName(entityName, /*meaning*/ 1 /* FunctionScopedVariable */); + if (entityName.parent.kind === 161) { + return resolveEntityName(entityName, 1); } - // Do we want to return undefined here? return undefined; } function getSymbolAtLocation(node) { - if (node.kind === 274 /* SourceFile */) { + if (node.kind === 274) { return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; } var parent = node.parent; var grandParent = parent.parent; - if (node.flags & 8388608 /* InWithStatement */) { - // We cannot answer semantic questions within a with block, do not proceed any further + if (node.flags & 8388608) { return undefined; } if (isDeclarationNameOrImportPropertyName(node)) { - // This is a declaration, call getSymbolOfNode return getSymbolOfNode(parent); } else if (ts.isLiteralComputedPropertyDeclarationName(node)) { return getSymbolOfNode(parent.parent); } - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { if (isInRightSideOfImportOrExportAssignment(node)) { return getSymbolOfEntityNameOrPropertyAccessExpression(node); } - else if (parent.kind === 182 /* BindingElement */ && - grandParent.kind === 180 /* ObjectBindingPattern */ && + else if (parent.kind === 182 && + grandParent.kind === 180 && node === parent.propertyName) { var typeOfPattern = getTypeOfNode(grandParent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.escapedText); @@ -52908,12 +43884,12 @@ var ts; } } switch (node.kind) { - case 71 /* Identifier */: - case 185 /* PropertyAccessExpression */: - case 146 /* QualifiedName */: + case 71: + case 185: + case 146: return getSymbolOfEntityNameOrPropertyAccessExpression(node); - case 99 /* ThisKeyword */: - var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); + case 99: + var container = ts.getThisContainer(node, false); if (ts.isFunctionLike(container)) { var sig = getSignatureFromDeclaration(container); if (sig.thisParameter) { @@ -52923,64 +43899,54 @@ var ts; if (ts.isInExpressionContext(node)) { return checkExpression(node).symbol; } - // falls through - case 174 /* ThisType */: + case 174: return getTypeFromThisTypeNode(node).symbol; - case 97 /* SuperKeyword */: + case 97: return checkExpression(node).symbol; - case 123 /* ConstructorKeyword */: - // constructor keyword for an overload, should take us to the definition if it exist + case 123: var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 155 /* Constructor */) { + if (constructorDeclaration && constructorDeclaration.kind === 155) { return constructorDeclaration.parent.symbol; } return undefined; - case 9 /* StringLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: - // 1). import x = require("./mo/*gotToDefinitionHere*/d") - // 2). External module name in an import declaration - // 3). Dynamic import call or require in javascript - // 4). type A = import("./f/*gotToDefinitionHere*/oo") + case 9: + case 13: if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || - ((node.parent.kind === 244 /* ImportDeclaration */ || node.parent.kind === 250 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) || - ((ts.isInJavaScriptFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) || + ((node.parent.kind === 244 || node.parent.kind === 250) && node.parent.moduleSpecifier === node) || + ((ts.isInJavaScriptFile(node) && ts.isRequireCall(node.parent, false)) || ts.isImportCall(node.parent)) || (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) { return resolveExternalModuleName(node, node); } - // falls through - case 8 /* NumericLiteral */: - // index access + case 8: var objectType = ts.isElementAccessExpression(parent) ? parent.argumentExpression === node ? getTypeOfExpression(parent.expression) : undefined : ts.isLiteralTypeNode(parent) && ts.isIndexedAccessTypeNode(grandParent) ? getTypeFromTypeNode(grandParent.objectType) : undefined; return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text)); - case 79 /* DefaultKeyword */: - case 89 /* FunctionKeyword */: - case 36 /* EqualsGreaterThanToken */: + case 79: + case 89: + case 36: return getSymbolOfNode(node.parent); - case 179 /* ImportType */: + case 179: return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal) : undefined; default: return undefined; } } function getShorthandAssignmentValueSymbol(location) { - if (location && location.kind === 271 /* ShorthandPropertyAssignment */) { - return resolveEntityName(location.name, 67216319 /* Value */ | 2097152 /* Alias */); + if (location && location.kind === 271) { + return resolveEntityName(location.name, 67216319 | 2097152); } return undefined; } - /** Returns the target of an export specifier without following aliases */ function getExportSpecifierLocalTargetSymbol(node) { return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : - resolveEntityName(node.propertyName || node.name, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); + resolveEntityName(node.propertyName || node.name, 67216319 | 67901928 | 1920 | 2097152); } function getTypeOfNode(node) { - if (node.flags & 8388608 /* InWithStatement */) { - // We cannot answer semantic questions within a with block, do not proceed any further + if (node.flags & 8388608) { return errorType; } if (ts.isPartOfTypeNode(node)) { @@ -52996,15 +43962,12 @@ var ts; return getRegularTypeOfExpression(node); } if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) { - // A SyntaxKind.ExpressionWithTypeArguments is considered a type node, except when it occurs in the - // extends clause of a class. We handle that case here. var classNode = ts.getContainingClass(node); var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classNode)); var baseType = getBaseTypes(classType)[0]; return baseType && getTypeWithThisArgument(baseType, classType.thisType); } if (isTypeDeclaration(node)) { - // In this case, we call getSymbolOfNode instead of getSymbolAtLocation because it is a declaration var symbol = getSymbolOfNode(node); return getDeclaredTypeOfSymbol(symbol); } @@ -53013,7 +43976,6 @@ var ts; return symbol && getDeclaredTypeOfSymbol(symbol); } if (ts.isDeclaration(node)) { - // In this case, we call getSymbolOfNode instead of getSymbolAtLocation because it is a declaration var symbol = getSymbolOfNode(node); return getTypeOfSymbol(symbol); } @@ -53022,7 +43984,7 @@ var ts; return symbol && getTypeOfSymbol(symbol); } if (ts.isBindingPattern(node)) { - return getTypeForVariableLikeDeclaration(node.parent, /*includeOptionality*/ true); + return getTypeForVariableLikeDeclaration(node.parent, true); } if (isInRightSideOfImportOrExportAssignment(node)) { var symbol = getSymbolAtLocation(node); @@ -53033,48 +43995,26 @@ var ts; } return errorType; } - // Gets the type of object literal or array literal of destructuring assignment. - // { a } from - // for ( { a } of elems) { - // } - // [ a ] from - // [a] = [ some array ...] function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { - ts.Debug.assert(expr.kind === 184 /* ObjectLiteralExpression */ || expr.kind === 183 /* ArrayLiteralExpression */); - // If this is from "for of" - // for ( { a } of elems) { - // } - if (expr.parent.kind === 222 /* ForOfStatement */) { + ts.Debug.assert(expr.kind === 184 || expr.kind === 183); + if (expr.parent.kind === 222) { var iteratedType = checkRightHandSideOfForOf(expr.parent.expression, expr.parent.awaitModifier); return checkDestructuringAssignment(expr, iteratedType || errorType); } - // If this is from "for" initializer - // for ({a } = elems[0];.....) { } - if (expr.parent.kind === 200 /* BinaryExpression */) { + if (expr.parent.kind === 200) { var iteratedType = getTypeOfExpression(expr.parent.right); return checkDestructuringAssignment(expr, iteratedType || errorType); } - // If this is from nested object binding pattern - // for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) { - if (expr.parent.kind === 270 /* PropertyAssignment */) { + if (expr.parent.kind === 270) { var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); - return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || errorType, expr.parent); // TODO: GH#18217 + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || errorType, expr.parent); } - // Array literal assignment - array destructuring pattern - ts.Debug.assert(expr.parent.kind === 183 /* ArrayLiteralExpression */); - // [{ property1: p1, property2 }] = elems; + ts.Debug.assert(expr.parent.kind === 183); var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); - var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || errorType, expr.parent, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType; - return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, expr.parent.elements.indexOf(expr), elementType || errorType); // TODO: GH#18217 + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || errorType, expr.parent, false, false) || errorType; + return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, expr.parent.elements.indexOf(expr), elementType || errorType); } - // Gets the property symbol corresponding to the property in destructuring assignment - // 'property1' from - // for ( { property1: a } of elems) { - // } - // 'property1' at location 'a' from: - // [a] = [ property1, property2 ] function getPropertySymbolOfDestructuringAssignment(location) { - // Get the type of the object or array literal and then look for property of given name in the type var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent); return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.escapedText); } @@ -53084,18 +44024,12 @@ var ts; } return getRegularTypeOfLiteralType(getTypeOfExpression(expr)); } - /** - * Gets either the static or instance type of a class element, based on - * whether the element is declared as "static". - */ function getParentTypeOfClassElement(node) { var classSymbol = getSymbolOfNode(node.parent); - return ts.hasModifier(node, 32 /* Static */) + return ts.hasModifier(node, 32) ? getTypeOfSymbol(classSymbol) : getDeclaredTypeOfSymbol(classSymbol); } - // Return the list of properties of the given type, augmented with properties from Function - // if the type has call or construct signatures function getAugmentedPropertiesOfType(type) { type = getApparentType(type); var propsByName = ts.createSymbolTable(getPropertiesOfType(type)); @@ -53116,10 +44050,10 @@ var ts; return roots ? ts.flatMap(roots, getRootSymbols) : [symbol]; } function getImmediateRootSymbols(symbol) { - if (ts.getCheckFlags(symbol) & 6 /* Synthetic */) { + if (ts.getCheckFlags(symbol) & 6) { return ts.mapDefined(getSymbolLinks(symbol).containingType.types, function (type) { return getPropertyOfType(type, symbol.escapedName); }); } - else if (symbol.flags & 33554432 /* Transient */) { + else if (symbol.flags & 33554432) { var _a = symbol, leftSpread = _a.leftSpread, rightSpread = _a.rightSpread, syntheticOrigin = _a.syntheticOrigin; return leftSpread ? [leftSpread, rightSpread] : syntheticOrigin ? [syntheticOrigin] @@ -53135,12 +44069,11 @@ var ts; } return target; } - // Emitter support function isArgumentsLocalBinding(nodeIn) { if (!ts.isGeneratedIdentifier(nodeIn)) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { - var isPropertyName_1 = node.parent.kind === 185 /* PropertyAccessExpression */ && node.parent.name === node; + var isPropertyName_1 = node.parent.kind === 185 && node.parent.name === node; return !isPropertyName_1 && getReferencedValueSymbol(node) === argumentsSymbol; } } @@ -53149,57 +44082,42 @@ var ts; function moduleExportsSomeValue(moduleReferenceExpression) { var moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression); if (!moduleSymbol || ts.isShorthandAmbientModuleSymbol(moduleSymbol)) { - // If the module is not found or is shorthand, assume that it may export a value. return true; } var hasExportAssignment = hasExportAssignmentSymbol(moduleSymbol); - // if module has export assignment then 'resolveExternalModuleSymbol' will return resolved symbol for export assignment - // otherwise it will return moduleSymbol itself moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); var symbolLinks = getSymbolLinks(moduleSymbol); if (symbolLinks.exportsSomeValue === undefined) { - // for export assignments - check if resolved symbol for RHS is itself a value - // otherwise - check if at least one export is value symbolLinks.exportsSomeValue = hasExportAssignment - ? !!(moduleSymbol.flags & 67216319 /* Value */) + ? !!(moduleSymbol.flags & 67216319) : ts.forEachEntry(getExportsOfModule(moduleSymbol), isValue); } return symbolLinks.exportsSomeValue; function isValue(s) { s = resolveSymbol(s); - return s && !!(s.flags & 67216319 /* Value */); + return s && !!(s.flags & 67216319); } } function isNameOfModuleOrEnumDeclaration(node) { return ts.isModuleOrEnumDeclaration(node.parent) && node === 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. function getReferencedExportContainer(nodeIn, prefixLocals) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { - // When resolving the export container for the name of a module or enum - // declaration, we need to start resolution at the declaration's container. - // Otherwise, we could incorrectly resolve the export container as the - // declaration if it contains an exported member with the same name. - var symbol = getReferencedValueSymbol(node, /*startInDeclarationContainer*/ isNameOfModuleOrEnumDeclaration(node)); + var symbol = getReferencedValueSymbol(node, isNameOfModuleOrEnumDeclaration(node)); if (symbol) { - if (symbol.flags & 1048576 /* ExportValue */) { - // If we reference an exported entity within the same module declaration, then whether - // we prefix depends on the kind of entity. SymbolFlags.ExportHasLocal encompasses all the - // kinds that we do NOT prefix. + if (symbol.flags & 1048576) { var exportSymbol = getMergedSymbol(symbol.exportSymbol); - if (!prefixLocals && exportSymbol.flags & 944 /* ExportHasLocal */ && !(exportSymbol.flags & 3 /* Variable */)) { + if (!prefixLocals && exportSymbol.flags & 944 && !(exportSymbol.flags & 3)) { return undefined; } symbol = exportSymbol; } var parentSymbol_1 = getParentOfSymbol(symbol); if (parentSymbol_1) { - if (parentSymbol_1.flags & 512 /* ValueModule */ && parentSymbol_1.valueDeclaration.kind === 274 /* SourceFile */) { + if (parentSymbol_1.flags & 512 && parentSymbol_1.valueDeclaration.kind === 274) { var symbolFile = parentSymbol_1.valueDeclaration; var referenceFile = ts.getSourceFileOfNode(node); - // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined. var symbolIsUmdExport = symbolFile !== referenceFile; return symbolIsUmdExport ? undefined : symbolFile; } @@ -53208,50 +44126,30 @@ var ts; } } } - // When resolved as an expression identifier, if the given node references an import, return the declaration of - // that import. Otherwise, return undefined. function getReferencedImportDeclaration(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { var symbol = getReferencedValueSymbol(node); - // We should only get the declaration of an alias if there isn't a local value - // declaration for the symbol - if (isNonLocalAlias(symbol, /*excludes*/ 67216319 /* Value */)) { + if (isNonLocalAlias(symbol, 67216319)) { return getDeclarationOfAliasSymbol(symbol); } } return undefined; } function isSymbolOfDeclarationWithCollidingName(symbol) { - if (symbol.flags & 418 /* BlockScoped */) { + if (symbol.flags & 418) { var links = getSymbolLinks(symbol); if (links.isDeclarationWithCollidingName === undefined) { var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); if (ts.isStatementWithLocals(container)) { var nodeLinks_1 = getNodeLinks(symbol.valueDeclaration); - if (resolveName(container.parent, symbol.escapedName, 67216319 /* Value */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)) { - // redeclaration - always should be renamed + if (resolveName(container.parent, symbol.escapedName, 67216319, undefined, undefined, false)) { links.isDeclarationWithCollidingName = true; } - else if (nodeLinks_1.flags & 131072 /* CapturedBlockScopedBinding */) { - // binding is captured in the function - // should be renamed if: - // - binding is not top level - top level bindings never collide with anything - // AND - // - binding is not declared in loop, should be renamed to avoid name reuse across siblings - // let a, b - // { let x = 1; a = () => x; } - // { let x = 100; b = () => x; } - // console.log(a()); // should print '1' - // console.log(b()); // should print '100' - // OR - // - binding is declared inside loop but not in inside initializer of iteration statement or directly inside loop body - // * variables from initializer are passed to rewritten loop body as parameters so they are not captured directly - // * variables that are declared immediately in loop body will become top level variable after loop is rewritten and thus - // they will not collide with anything - var isDeclaredInLoop = nodeLinks_1.flags & 262144 /* BlockScopedBindingInLoop */; - var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false); - var inLoopBodyBlock = container.kind === 213 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false); + else if (nodeLinks_1.flags & 131072) { + var isDeclaredInLoop = nodeLinks_1.flags & 262144; + var inLoopInitializer = ts.isIterationStatement(container, false); + var inLoopBodyBlock = container.kind === 213 && ts.isIterationStatement(container.parent, false); links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock)); } else { @@ -53263,9 +44161,6 @@ var ts; } return false; } - // When resolved as an expression identifier, if the given node references a nested block scoped entity with - // a name that either hides an existing name or might hide it when compiled downlevel, - // return the declaration of that entity. Otherwise, return undefined. function getReferencedDeclarationWithCollidingName(nodeIn) { if (!ts.isGeneratedIdentifier(nodeIn)) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); @@ -53278,8 +44173,6 @@ var ts; } return undefined; } - // Return true if the given node is a declaration of a nested block scoped entity with a name that either hides an - // existing name or might hide a name when compiled downlevel function isDeclarationWithCollidingName(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isDeclaration); if (node) { @@ -53292,18 +44185,18 @@ var ts; } function isValueAliasDeclaration(node) { switch (node.kind) { - case 243 /* ImportEqualsDeclaration */: - case 245 /* ImportClause */: - case 246 /* NamespaceImport */: - case 248 /* ImportSpecifier */: - case 252 /* ExportSpecifier */: + case 243: + case 245: + case 246: + case 248: + case 252: return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol); - case 250 /* ExportDeclaration */: + case 250: var exportClause = node.exportClause; return !!exportClause && ts.some(exportClause.elements, isValueAliasDeclaration); - case 249 /* ExportAssignment */: + case 249: return node.expression - && node.expression.kind === 71 /* Identifier */ + && node.expression.kind === 71 ? isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) : true; } @@ -53311,8 +44204,7 @@ var ts; } function isTopLevelValueImportEqualsWithEntityName(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration); - if (node === undefined || node.parent.kind !== 274 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) { - // parent is not source file or it is not reference to internal module + if (node === undefined || node.parent.kind !== 274 || !ts.isInternalModuleImportEqualsDeclaration(node)) { return false; } var isValue = isAliasResolvedToValue(getSymbolOfNode(node)); @@ -53323,9 +44215,7 @@ var ts; if (target === unknownSymbol) { return true; } - // const enums and modules that contain only const enums are not considered values from the emit perspective - // unless 'preserveConstEnums' option is set to true - return !!(target.flags & 67216319 /* Value */) && + return !!(target.flags & 67216319) && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { @@ -53337,9 +44227,8 @@ var ts; if (symbol && getSymbolLinks(symbol).referenced) { return true; } - var target = getSymbolLinks(symbol).target; // TODO: GH#18217 - if (target && ts.getModifierFlags(node) & 1 /* Export */ && target.flags & 67216319 /* Value */) { - // An `export import ... =` of a value symbol is always considered referenced + var target = getSymbolLinks(symbol).target; + if (target && ts.getModifierFlags(node) & 1 && target.flags & 67216319) { return true; } } @@ -53351,21 +44240,10 @@ var ts; function isImplementationOfOverload(node) { if (ts.nodeIsPresent(node.body)) { if (ts.isGetAccessor(node) || ts.isSetAccessor(node)) - return false; // Get or set accessors can never be overload implementations, but can have up to 2 signatures + return false; var symbol = getSymbolOfNode(node); var signaturesOfSymbol = getSignaturesOfSymbol(symbol); - // If this function body corresponds to function with multiple signature, it is implementation of overload - // e.g.: function foo(a: string): string; - // function foo(a: number): number; - // function foo(a: any) { // This is implementation of the overloads - // return a; - // } return signaturesOfSymbol.length > 1 || - // If there is single signature for the symbol, it is overload if that signature isn't coming from the node - // e.g.: function foo(a: string): string; - // function foo(a: any) { // This is implementation of the overloads - // return a; - // } (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node); } return false; @@ -53375,13 +44253,13 @@ var ts; !isOptionalParameter(parameter) && !ts.isJSDocParameterTag(parameter) && !!parameter.initializer && - !ts.hasModifier(parameter, 92 /* ParameterPropertyModifier */); + !ts.hasModifier(parameter, 92); } function isOptionalUninitializedParameterProperty(parameter) { return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && - ts.hasModifier(parameter, 92 /* ParameterPropertyModifier */); + ts.hasModifier(parameter, 92); } function getNodeCheckFlags(node) { return getNodeLinks(node).flags || 0; @@ -53392,20 +44270,19 @@ var ts; } function canHaveConstantValue(node) { switch (node.kind) { - case 273 /* EnumMember */: - case 185 /* PropertyAccessExpression */: - case 186 /* ElementAccessExpression */: + case 273: + case 185: + case 186: return true; } return false; } function getConstantValue(node) { - if (node.kind === 273 /* EnumMember */) { + if (node.kind === 273) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol && (symbol.flags & 8 /* EnumMember */)) { - // inline property\index accesses only for const enums + if (symbol && (symbol.flags & 8)) { if (ts.isConstEnumDeclaration(symbol.valueDeclaration.parent)) { return getEnumMemberValue(symbol.valueDeclaration); } @@ -53413,10 +44290,9 @@ var ts; return undefined; } function isFunctionType(type) { - return !!(type.flags & 131072 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0; + return !!(type.flags & 131072) && getSignaturesOfType(type, 0).length > 0; } function getTypeReferenceSerializationKind(typeNameIn, location) { - // ensure both `typeName` and `location` are parse tree nodes. var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName); if (!typeName) return ts.TypeReferenceSerializationKind.Unknown; @@ -53425,12 +44301,10 @@ var ts; if (!location) return ts.TypeReferenceSerializationKind.Unknown; } - // Resolve the symbol as a value to ensure the type can be reached at runtime during emit. - var valueSymbol = resolveEntityName(typeName, 67216319 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location); - // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer. - var typeSymbol = resolveEntityName(typeName, 67901928 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location); + var valueSymbol = resolveEntityName(typeName, 67216319, true, false, location); + var typeSymbol = resolveEntityName(typeName, 67901928, true, false, location); if (valueSymbol && valueSymbol === typeSymbol) { - var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(/*reportErrors*/ false); + var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false); if (globalPromiseSymbol && valueSymbol === globalPromiseSymbol) { return ts.TypeReferenceSerializationKind.Promise; } @@ -53439,7 +44313,6 @@ var ts; return ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue; } } - // We might not be able to resolve type symbol so use unknown type in that case (eg error case) if (!typeSymbol) { return ts.TypeReferenceSerializationKind.Unknown; } @@ -53447,25 +44320,25 @@ var ts; if (type === errorType) { return ts.TypeReferenceSerializationKind.Unknown; } - else if (type.flags & 3 /* AnyOrUnknown */) { + else if (type.flags & 3) { return ts.TypeReferenceSerializationKind.ObjectType; } - else if (isTypeAssignableToKind(type, 4096 /* Void */ | 24576 /* Nullable */ | 32768 /* Never */)) { + else if (isTypeAssignableToKind(type, 4096 | 24576 | 32768)) { return ts.TypeReferenceSerializationKind.VoidNullableOrNeverType; } - else if (isTypeAssignableToKind(type, 272 /* BooleanLike */)) { + else if (isTypeAssignableToKind(type, 272)) { return ts.TypeReferenceSerializationKind.BooleanType; } - else if (isTypeAssignableToKind(type, 168 /* NumberLike */)) { + else if (isTypeAssignableToKind(type, 168)) { return ts.TypeReferenceSerializationKind.NumberLikeType; } - else if (isTypeAssignableToKind(type, 68 /* StringLike */)) { + else if (isTypeAssignableToKind(type, 68)) { return ts.TypeReferenceSerializationKind.StringLikeType; } else if (isTupleType(type)) { return ts.TypeReferenceSerializationKind.ArrayLikeType; } - else if (isTypeAssignableToKind(type, 3072 /* ESSymbolLike */)) { + else if (isTypeAssignableToKind(type, 3072)) { return ts.TypeReferenceSerializationKind.ESSymbolType; } else if (isFunctionType(type)) { @@ -53481,37 +44354,36 @@ var ts; function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) { var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor); if (!declaration) { - return ts.createToken(119 /* AnyKeyword */); + return ts.createToken(119); } - // Get type of the symbol if this is the valid symbol otherwise get type at location var symbol = getSymbolOfNode(declaration); - var type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) + var type = symbol && !(symbol.flags & (2048 | 131072)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType; - if (type.flags & 2048 /* UniqueESSymbol */ && + if (type.flags & 2048 && type.symbol === symbol) { - flags |= 1048576 /* AllowUniqueESSymbolType */; + flags |= 1048576; } if (addUndefined) { type = getOptionalType(type); } - return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024, tracker); } function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) { var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike); if (!signatureDeclaration) { - return ts.createToken(119 /* AnyKeyword */); + return ts.createToken(119); } var signature = getSignatureFromDeclaration(signatureDeclaration); - return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024, tracker); } function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) { var expr = ts.getParseTreeNode(exprIn, ts.isExpression); if (!expr) { - return ts.createToken(119 /* AnyKeyword */); + return ts.createToken(119); } var type = getWidenedType(getRegularTypeOfExpression(expr)); - return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024, tracker); } function hasGlobalName(name) { return globals.has(ts.escapeLeadingUnderscores(name)); @@ -53523,14 +44395,12 @@ var ts; } var location = reference; 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 = reference.parent; if (ts.isDeclaration(parent) && reference === parent.name) { location = getDeclarationContainer(parent); } } - return resolveName(location, reference.escapedText, 67216319 /* Value */ | 1048576 /* ExportValue */ | 2097152 /* Alias */, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true); + return resolveName(location, reference.escapedText, 67216319 | 1048576 | 2097152, undefined, undefined, true); } function getReferencedValueDeclaration(referenceIn) { if (!ts.isGeneratedIdentifier(referenceIn)) { @@ -53547,7 +44417,7 @@ var ts; function isLiteralConstDeclaration(node) { if (ts.isConst(node)) { var type = getTypeOfSymbol(getSymbolOfNode(node)); - return !!(type.flags & 192 /* StringOrNumberLiteral */ && type.flags & 33554432 /* FreshLiteral */); + return !!(type.flags & 192 && type.flags & 33554432); } return false; } @@ -53559,12 +44429,9 @@ var ts; return literalTypeToNode(type); } function createResolver() { - // this variable and functions that use it are deliberately moved here from the outer scope - // to avoid scope pollution var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); var fileToDirective; if (resolvedTypeReferenceDirectives) { - // populate reverse mapping: file path -> type reference directive that was resolved to this file fileToDirective = ts.createMap(); resolvedTypeReferenceDirectives.forEach(function (resolvedDirective, key) { if (!resolvedDirective || !resolvedDirective.resolvedFileName) { @@ -53581,13 +44448,11 @@ var ts; isDeclarationWithCollidingName: isDeclarationWithCollidingName, isValueAliasDeclaration: function (node) { node = ts.getParseTreeNode(node); - // Synthesized nodes are always treated like values. return node ? isValueAliasDeclaration(node) : true; }, hasGlobalName: hasGlobalName, isReferencedAliasDeclaration: function (node, checkChildren) { node = ts.getParseTreeNode(node); - // Synthesized nodes are always treated as referenced. return node ? isReferencedAliasDeclaration(node, checkChildren) : true; }, getNodeCheckFlags: function (node) { @@ -53622,17 +44487,17 @@ var ts; isLateBound: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isDeclaration); var symbol = node && getSymbolOfNode(node); - return !!(symbol && ts.getCheckFlags(symbol) & 1024 /* Late */); + return !!(symbol && ts.getCheckFlags(symbol) & 1024); }, getJsxFactoryEntity: function (location) { return location ? (getJsxNamespace(location), (ts.getSourceFileOfNode(location).localJsxFactory || _jsxFactoryEntity)) : _jsxFactoryEntity; }, getAllAccessorDeclarations: function (accessor) { - accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217 - var otherKind = accessor.kind === 157 /* SetAccessor */ ? 156 /* GetAccessor */ : 157 /* SetAccessor */; + accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); + var otherKind = accessor.kind === 157 ? 156 : 157; var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind); var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor; var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor; - var setAccessor = accessor.kind === 157 /* SetAccessor */ ? accessor : otherAccessor; - var getAccessor = accessor.kind === 156 /* GetAccessor */ ? accessor : otherAccessor; + var setAccessor = accessor.kind === 157 ? accessor : otherAccessor; + var getAccessor = accessor.kind === 156 ? accessor : otherAccessor; return { firstAccessor: firstAccessor, secondAccessor: secondAccessor, @@ -53642,38 +44507,29 @@ var ts; } }; function isInHeritageClause(node) { - return node.parent && node.parent.kind === 207 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 268 /* HeritageClause */; + return node.parent && node.parent.kind === 207 && node.parent.parent && node.parent.parent.kind === 268; } - // defined here to avoid outer scope pollution function getTypeReferenceDirectivesForEntityName(node) { - // program does not have any files with type reference directives - bail out if (!fileToDirective) { return undefined; } - // property access can only be used as values, or types when within an expression with type arguments inside a heritage clause - // qualified names can only be used as types\namespaces - // identifiers are treated as values only if they appear in type queries - var meaning = 67901928 /* Type */ | 1920 /* Namespace */; - if ((node.kind === 71 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 185 /* PropertyAccessExpression */ && !isInHeritageClause(node))) { - meaning = 67216319 /* Value */ | 1048576 /* ExportValue */; + var meaning = 67901928 | 1920; + if ((node.kind === 71 && isInTypeQuery(node)) || (node.kind === 185 && !isInHeritageClause(node))) { + meaning = 67216319 | 1048576; } - var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true); + var symbol = resolveEntityName(node, meaning, true); return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined; } - // defined here to avoid outer scope pollution function getTypeReferenceDirectivesForSymbol(symbol, meaning) { - // program does not have any files with type reference directives - bail out if (!fileToDirective) { return undefined; } if (!isSymbolFromTypeDeclarationFile(symbol)) { return undefined; } - // check what declarations in the symbol can contribute to the target meaning var typeReferenceDirectives; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; - // check meaning of the local symbol to see if declaration needs to be analyzed further if (decl.symbol && decl.symbol.flags & meaning) { var file = ts.getSourceFileOfNode(decl); var typeReferenceDirective = fileToDirective.get(file.path); @@ -53681,7 +44537,6 @@ var ts; (typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective); } else { - // found at least one entry that does not originate from type reference directive return undefined; } } @@ -53689,12 +44544,9 @@ var ts; return typeReferenceDirectives; } function isSymbolFromTypeDeclarationFile(symbol) { - // bail out if symbol does not have associated declarations (i.e. this is transient symbol created for property in binding pattern) if (!symbol.declarations) { return false; } - // walk the parent chain for symbols to make sure that top level parent symbol is in the global scope - // external modules cannot define or contribute to type declaration files var current = symbol; while (true) { var parent = getParentOfSymbol(current); @@ -53705,10 +44557,9 @@ var ts; break; } } - if (current.valueDeclaration && current.valueDeclaration.kind === 274 /* SourceFile */ && current.flags & 512 /* ValueModule */) { + if (current.valueDeclaration && current.valueDeclaration.kind === 274 && current.flags & 512) { return false; } - // check that at least one declaration of top level symbol originates from type declaration file for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; var file = ts.getSourceFileOfNode(decl); @@ -53720,20 +44571,18 @@ var ts; } } function getExternalModuleFileFromDeclaration(declaration) { - var specifier = declaration.kind === 239 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration); - var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217 + var specifier = declaration.kind === 239 ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration); + var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, undefined); if (!moduleSymbol) { return undefined; } - return ts.getDeclarationOfKind(moduleSymbol, 274 /* SourceFile */); + return ts.getDeclarationOfKind(moduleSymbol, 274); } function initializeTypeChecker() { - // Bind all source files and propagate errors for (var _i = 0, _a = host.getSourceFiles(); _i < _a.length; _i++) { var file = _a[_i]; ts.bindSourceFile(file, compilerOptions); } - // Initialize global symbol table var augmentations; for (var _b = 0, _c = host.getSourceFiles(); _b < _c.length; _b++) { var file = _c[_b]; @@ -53747,7 +44596,6 @@ var ts; (augmentations || (augmentations = [])).push(file.moduleAugmentations); } if (file.symbol && file.symbol.globalExports) { - // Merge in UMD exports with first-in-wins semantics (see #9771) var source = file.symbol.globalExports; source.forEach(function (sourceSymbol, id) { if (!globals.has(id)) { @@ -53756,15 +44604,7 @@ var ts; }); } } - // We do global augmentations separately from module augmentations (and before creating global types) because they - // 1. Affect global types. We won't have the correct global types until global augmentations are merged. Also, - // 2. Module augmentation instantiation requires creating the type of a module, which, in turn, can require - // checking for an export or property on the module (if export=) which, in turn, can fall back to the - // apparent type of the module - either globalObjectType or globalFunctionType - which wouldn't exist if we - // did module augmentations prior to finalizing the global types. if (augmentations) { - // merge _global_ module augmentations. - // this needs to be done after global symbol table is initialized to make sure that all ambient modules are indexed for (var _d = 0, augmentations_1 = augmentations; _d < augmentations_1.length; _d++) { var list = augmentations_1[_d]; for (var _e = 0, list_1 = list; _e < list_1.length; _e++) { @@ -53775,31 +44615,26 @@ var ts; } } } - // Setup global builtins addToSymbolTable(globals, builtinGlobals, ts.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0); getSymbolLinks(undefinedSymbol).type = undefinedWideningType; - getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments", /*arity*/ 0, /*reportErrors*/ true); + getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments", 0, true); getSymbolLinks(unknownSymbol).type = errorType; - // Initialize special types - globalArrayType = getGlobalType("Array", /*arity*/ 1, /*reportErrors*/ true); - globalObjectType = getGlobalType("Object", /*arity*/ 0, /*reportErrors*/ true); - globalFunctionType = getGlobalType("Function", /*arity*/ 0, /*reportErrors*/ true); - globalStringType = getGlobalType("String", /*arity*/ 0, /*reportErrors*/ true); - globalNumberType = getGlobalType("Number", /*arity*/ 0, /*reportErrors*/ true); - globalBooleanType = getGlobalType("Boolean", /*arity*/ 0, /*reportErrors*/ true); - globalRegExpType = getGlobalType("RegExp", /*arity*/ 0, /*reportErrors*/ true); + globalArrayType = getGlobalType("Array", 1, true); + globalObjectType = getGlobalType("Object", 0, true); + globalFunctionType = getGlobalType("Function", 0, true); + globalStringType = getGlobalType("String", 0, true); + globalNumberType = getGlobalType("Number", 0, true); + globalBooleanType = getGlobalType("Boolean", 0, true); + globalRegExpType = getGlobalType("RegExp", 0, true); anyArrayType = createArrayType(anyType); autoArrayType = createArrayType(autoType); if (autoArrayType === emptyObjectType) { - // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); } - globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1); + globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", 1); anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType; - globalThisType = getGlobalTypeOrUndefined("ThisType", /*arity*/ 1); + globalThisType = getGlobalTypeOrUndefined("ThisType", 1); if (augmentations) { - // merge _nonglobal_ module augmentations. - // this needs to be done after global symbol table is initialized to make sure that all ambient modules are indexed for (var _f = 0, augmentations_2 = augmentations; _f < augmentations_2.length; _f++) { var list = augmentations_2[_f]; for (var _g = 0, list_2 = list; _g < list_2.length; _g++) { @@ -53814,14 +44649,14 @@ var ts; function checkExternalEmitHelpers(location, helpers) { if ((requestedExternalEmitHelpers & helpers) !== helpers && compilerOptions.importHelpers) { var sourceFile = ts.getSourceFileOfNode(location); - if (ts.isEffectiveExternalModule(sourceFile, compilerOptions) && !(location.flags & 4194304 /* Ambient */)) { + if (ts.isEffectiveExternalModule(sourceFile, compilerOptions) && !(location.flags & 4194304)) { var helpersModule = resolveHelpersModule(sourceFile, location); if (helpersModule !== unknownSymbol) { var uncheckedHelpers = helpers & ~requestedExternalEmitHelpers; - for (var helper = 1 /* FirstEmitHelper */; helper <= 65536 /* LastEmitHelper */; helper <<= 1) { + for (var helper = 1; helper <= 65536; helper <<= 1) { if (uncheckedHelpers & helper) { var name = getHelperName(helper); - var symbol = getSymbol(helpersModule.exports, ts.escapeLeadingUnderscores(name), 67216319 /* Value */); + var symbol = getSymbol(helpersModule.exports, ts.escapeLeadingUnderscores(name), 67216319); if (!symbol) { error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1, ts.externalHelpersModuleNameText, name); } @@ -53834,23 +44669,23 @@ var ts; } function getHelperName(helper) { switch (helper) { - case 1 /* Extends */: return "__extends"; - case 2 /* Assign */: return "__assign"; - case 4 /* Rest */: return "__rest"; - case 8 /* Decorate */: return "__decorate"; - case 16 /* Metadata */: return "__metadata"; - case 32 /* Param */: return "__param"; - case 64 /* Awaiter */: return "__awaiter"; - case 128 /* Generator */: return "__generator"; - case 256 /* Values */: return "__values"; - case 512 /* Read */: return "__read"; - case 1024 /* Spread */: return "__spread"; - case 2048 /* Await */: return "__await"; - case 4096 /* AsyncGenerator */: return "__asyncGenerator"; - case 8192 /* AsyncDelegator */: return "__asyncDelegator"; - case 16384 /* AsyncValues */: return "__asyncValues"; - case 32768 /* ExportStar */: return "__exportStar"; - case 65536 /* MakeTemplateObject */: return "__makeTemplateObject"; + case 1: return "__extends"; + case 2: return "__assign"; + case 4: return "__rest"; + case 8: return "__decorate"; + case 16: return "__metadata"; + case 32: return "__param"; + case 64: return "__awaiter"; + case 128: return "__generator"; + case 256: return "__values"; + case 512: return "__read"; + case 1024: return "__spread"; + case 2048: return "__await"; + case 4096: return "__asyncGenerator"; + case 8192: return "__asyncDelegator"; + case 16384: return "__asyncValues"; + case 32768: return "__exportStar"; + case 65536: return "__makeTemplateObject"; default: return ts.Debug.fail("Unrecognized helper"); } } @@ -53860,7 +44695,6 @@ var ts; } return externalHelpersModule; } - // GRAMMAR CHECKING function checkGrammarDecoratorsAndModifiers(node) { return checkGrammarDecorators(node) || checkGrammarModifiers(node); } @@ -53869,14 +44703,14 @@ var ts; return false; } if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) { - if (node.kind === 154 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) { + if (node.kind === 154 && !ts.nodeIsPresent(node.body)) { return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload); } else { return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here); } } - else if (node.kind === 156 /* GetAccessor */ || node.kind === 157 /* SetAccessor */) { + else if (node.kind === 156 || node.kind === 157) { var accessors = ts.getAllAccessorDeclarations(node.parent.members, node); if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name); @@ -53890,44 +44724,44 @@ var ts; return quickResult; } var lastStatic, lastDeclare, lastAsync, lastReadonly; - var flags = 0 /* None */; + var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 132 /* ReadonlyKeyword */) { - if (node.kind === 151 /* PropertySignature */ || node.kind === 153 /* MethodSignature */) { + if (modifier.kind !== 132) { + if (node.kind === 151 || node.kind === 153) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); } - if (node.kind === 160 /* IndexSignature */) { + if (node.kind === 160) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { - case 76 /* ConstKeyword */: - if (node.kind !== 238 /* EnumDeclaration */ && node.parent.kind === 235 /* ClassDeclaration */) { - return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(76 /* ConstKeyword */)); + case 76: + if (node.kind !== 238 && node.parent.kind === 235) { + return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(76)); } break; - case 114 /* PublicKeyword */: - case 113 /* ProtectedKeyword */: - case 112 /* PrivateKeyword */: + case 114: + case 113: + case 112: var text = visibilityToString(ts.modifierToFlag(modifier.kind)); - if (flags & 28 /* AccessibilityModifier */) { + if (flags & 28) { return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen); } - else if (flags & 32 /* Static */) { + else if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); } - else if (flags & 64 /* Readonly */) { + else if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "readonly"); } - else if (flags & 256 /* Async */) { + else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } - else if (node.parent.kind === 240 /* ModuleBlock */ || node.parent.kind === 274 /* SourceFile */) { + else if (node.parent.kind === 240 || node.parent.kind === 274) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); } - else if (flags & 128 /* Abstract */) { - if (modifier.kind === 112 /* PrivateKeyword */) { + else if (flags & 128) { + if (modifier.kind === 112) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract"); } else { @@ -53936,157 +44770,152 @@ var ts; } flags |= ts.modifierToFlag(modifier.kind); break; - case 115 /* StaticKeyword */: - if (flags & 32 /* Static */) { + case 115: + if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static"); } - else if (flags & 64 /* Readonly */) { + else if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly"); } - else if (flags & 256 /* Async */) { + else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } - else if (node.parent.kind === 240 /* ModuleBlock */ || node.parent.kind === 274 /* SourceFile */) { + else if (node.parent.kind === 240 || node.parent.kind === 274) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); } - else if (node.kind === 149 /* Parameter */) { + else if (node.kind === 149) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } - else if (flags & 128 /* Abstract */) { + else if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } - flags |= 32 /* Static */; + flags |= 32; lastStatic = modifier; break; - case 132 /* ReadonlyKeyword */: - if (flags & 64 /* Readonly */) { + case 132: + if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } - else if (node.kind !== 152 /* PropertyDeclaration */ && node.kind !== 151 /* PropertySignature */ && node.kind !== 160 /* IndexSignature */ && node.kind !== 149 /* Parameter */) { - // If node.kind === SyntaxKind.Parameter, checkParameter report an error if it's not a parameter property. + else if (node.kind !== 152 && node.kind !== 151 && node.kind !== 160 && node.kind !== 149) { return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } - flags |= 64 /* Readonly */; + flags |= 64; lastReadonly = modifier; break; - case 84 /* ExportKeyword */: - if (flags & 1 /* Export */) { + case 84: + if (flags & 1) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export"); } - else if (flags & 2 /* Ambient */) { + else if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); } - else if (flags & 128 /* Abstract */) { + else if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "abstract"); } - else if (flags & 256 /* Async */) { + else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.kind === 235) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 149 /* Parameter */) { + else if (node.kind === 149) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } - flags |= 1 /* Export */; + flags |= 1; break; - case 79 /* DefaultKeyword */: - var container = node.parent.kind === 274 /* SourceFile */ ? node.parent : node.parent.parent; - if (container.kind === 239 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { + case 79: + var container = node.parent.kind === 274 ? node.parent : node.parent.parent; + if (container.kind === 239 && !ts.isAmbientModule(container)) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module); } - flags |= 512 /* Default */; + flags |= 512; break; - case 124 /* DeclareKeyword */: - if (flags & 2 /* Ambient */) { + case 124: + if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare"); } - else if (flags & 256 /* Async */) { + else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.kind === 235) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 149 /* Parameter */) { + else if (node.kind === 149) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if ((node.parent.flags & 4194304 /* Ambient */) && node.parent.kind === 240 /* ModuleBlock */) { + else if ((node.parent.flags & 4194304) && node.parent.kind === 240) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } - flags |= 2 /* Ambient */; + flags |= 2; lastDeclare = modifier; break; - case 117 /* AbstractKeyword */: - if (flags & 128 /* Abstract */) { + case 117: + if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } - if (node.kind !== 235 /* ClassDeclaration */) { - if (node.kind !== 154 /* MethodDeclaration */ && - node.kind !== 152 /* PropertyDeclaration */ && - node.kind !== 156 /* GetAccessor */ && - node.kind !== 157 /* SetAccessor */) { + if (node.kind !== 235) { + if (node.kind !== 154 && + node.kind !== 152 && + node.kind !== 156 && + node.kind !== 157) { return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); } - if (!(node.parent.kind === 235 /* ClassDeclaration */ && ts.hasModifier(node.parent, 128 /* Abstract */))) { + if (!(node.parent.kind === 235 && ts.hasModifier(node.parent, 128))) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } - if (flags & 32 /* Static */) { + if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } - if (flags & 8 /* Private */) { + if (flags & 8) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "private", "abstract"); } } - flags |= 128 /* Abstract */; + flags |= 128; break; - case 120 /* AsyncKeyword */: - if (flags & 256 /* Async */) { + case 120: + if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async"); } - else if (flags & 2 /* Ambient */ || node.parent.flags & 4194304 /* Ambient */) { + else if (flags & 2 || node.parent.flags & 4194304) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.kind === 149 /* Parameter */) { + else if (node.kind === 149) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } - flags |= 256 /* Async */; + flags |= 256; lastAsync = modifier; break; } } - if (node.kind === 155 /* Constructor */) { - if (flags & 32 /* Static */) { + if (node.kind === 155) { + if (flags & 32) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } - if (flags & 128 /* Abstract */) { - return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract"); // TODO: GH#18217 + if (flags & 128) { + return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract"); } - else if (flags & 256 /* Async */) { + else if (flags & 256) { return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async"); } - else if (flags & 64 /* Readonly */) { + else if (flags & 64) { return grammarErrorOnNode(lastReadonly, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "readonly"); } return false; } - else if ((node.kind === 244 /* ImportDeclaration */ || node.kind === 243 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) { + else if ((node.kind === 244 || node.kind === 243) && flags & 2) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 149 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) { + else if (node.kind === 149 && (flags & 92) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); } - else if (node.kind === 149 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && node.dotDotDotToken) { + else if (node.kind === 149 && (flags & 92) && node.dotDotDotToken) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } - if (flags & 256 /* Async */) { + if (flags & 256) { return checkGrammarAsyncModifier(node, lastAsync); } return false; } - /** - * true | false: Early return this value from checkGrammarModifiers. - * undefined: Need to do full checking on the modifiers. - */ function reportObviousModifierErrors(node) { return !node.modifiers ? false @@ -54096,38 +44925,38 @@ var ts; } function shouldReportBadModifier(node) { switch (node.kind) { - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 155 /* Constructor */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 160 /* IndexSignature */: - case 239 /* ModuleDeclaration */: - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: - case 250 /* ExportDeclaration */: - case 249 /* ExportAssignment */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: - case 149 /* Parameter */: + case 156: + case 157: + case 155: + case 152: + case 151: + case 154: + case 153: + case 160: + case 239: + case 244: + case 243: + case 250: + case 249: + case 192: + case 193: + case 149: return false; default: - if (node.parent.kind === 240 /* ModuleBlock */ || node.parent.kind === 274 /* SourceFile */) { + if (node.parent.kind === 240 || node.parent.kind === 274) { return false; } switch (node.kind) { - case 234 /* FunctionDeclaration */: - return nodeHasAnyModifiersExcept(node, 120 /* AsyncKeyword */); - case 235 /* ClassDeclaration */: - return nodeHasAnyModifiersExcept(node, 117 /* AbstractKeyword */); - case 236 /* InterfaceDeclaration */: - case 214 /* VariableStatement */: - case 237 /* TypeAliasDeclaration */: + case 234: + return nodeHasAnyModifiersExcept(node, 120); + case 235: + return nodeHasAnyModifiersExcept(node, 117); + case 236: + case 214: + case 237: return true; - case 238 /* EnumDeclaration */: - return nodeHasAnyModifiersExcept(node, 76 /* ConstKeyword */); + case 238: + return nodeHasAnyModifiersExcept(node, 76); default: ts.Debug.fail(); return false; @@ -54139,10 +44968,10 @@ var ts; } function checkGrammarAsyncModifier(node, asyncModifier) { switch (node.kind) { - case 154 /* MethodDeclaration */: - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - case 193 /* ArrowFunction */: + case 154: + case 234: + case 192: + case 193: return false; } return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async"); @@ -54171,7 +45000,7 @@ var ts; if (i !== (parameterCount - 1)) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); } - if (!(parameter.flags & 4194304 /* Ambient */)) { // Allow `...foo,` in ambient declarations; see GH#23070 + if (!(parameter.flags & 4194304)) { checkGrammarForDisallowedTrailingComma(parameters, ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); } if (ts.isBindingPattern(parameter.name)) { @@ -54196,7 +45025,6 @@ var ts; } } function checkGrammarFunctionLikeDeclaration(node) { - // Prevent cascading error by short-circuit var file = ts.getSourceFileOfNode(node); return checkGrammarDecoratorsAndModifiers(node) || checkGrammarTypeParameterList(node.typeParameters, file) || checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); @@ -54239,12 +45067,12 @@ var ts; if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - if (parameter.type.kind !== 137 /* StringKeyword */ && parameter.type.kind !== 134 /* NumberKeyword */) { + if (parameter.type.kind !== 137 && parameter.type.kind !== 134) { var type = getTypeFromTypeNode(parameter.type); - if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) { + if (type.flags & 4 || type.flags & 8) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(getTypeFromTypeNode(node.type))); } - if (type.flags & 262144 /* Union */ && allTypesAssignableToKind(type, 64 /* StringLiteral */, /*strict*/ true)) { + if (type.flags & 262144 && allTypesAssignableToKind(type, 64, true)) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead); } return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); @@ -54255,7 +45083,6 @@ var ts; return false; } function checkGrammarIndexSignature(node) { - // Prevent cascading error by short-circuit return checkGrammarDecoratorsAndModifiers(node) || checkGrammarIndexSignatureParameters(node); } function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) { @@ -54275,7 +45102,7 @@ var ts; if (args) { for (var _i = 0, args_5 = args; _i < args_5.length; _i++) { var arg = args_5[_i]; - if (arg.kind === 206 /* OmittedExpression */) { + if (arg.kind === 206) { return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -54305,7 +45132,7 @@ var ts; if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) { for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) { var heritageClause = _a[_i]; - if (heritageClause.token === 85 /* ExtendsKeyword */) { + if (heritageClause.token === 85) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } @@ -54318,13 +45145,12 @@ var ts; seenExtendsClause = true; } else { - ts.Debug.assert(heritageClause.token === 108 /* ImplementsKeyword */); + ts.Debug.assert(heritageClause.token === 108); if (seenImplementsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen); } seenImplementsClause = true; } - // Grammar checking heritageClause inside class declaration checkGrammarHeritageClause(heritageClause); } } @@ -54334,39 +45160,37 @@ var ts; if (node.heritageClauses) { for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) { var heritageClause = _a[_i]; - if (heritageClause.token === 85 /* ExtendsKeyword */) { + if (heritageClause.token === 85) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } seenExtendsClause = true; } else { - ts.Debug.assert(heritageClause.token === 108 /* ImplementsKeyword */); + ts.Debug.assert(heritageClause.token === 108); return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause); } - // Grammar checking heritageClause inside class declaration checkGrammarHeritageClause(heritageClause); } } return false; } function checkGrammarComputedPropertyName(node) { - // If node is not a computedPropertyName, just skip the grammar checking - if (node.kind !== 147 /* ComputedPropertyName */) { + if (node.kind !== 147) { return false; } var computedPropertyName = node; - if (computedPropertyName.expression.kind === 200 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 26 /* CommaToken */) { + if (computedPropertyName.expression.kind === 200 && computedPropertyName.expression.operatorToken.kind === 26) { return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name); } return false; } function checkGrammarForGenerator(node) { if (node.asteriskToken) { - ts.Debug.assert(node.kind === 234 /* FunctionDeclaration */ || - node.kind === 192 /* FunctionExpression */ || - node.kind === 154 /* MethodDeclaration */); - if (node.flags & 4194304 /* Ambient */) { + ts.Debug.assert(node.kind === 234 || + node.kind === 192 || + node.kind === 154); + if (node.flags & 4194304) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } if (!node.body) { @@ -54378,64 +45202,43 @@ var ts; return !!questionToken && grammarErrorOnNode(questionToken, message); } function checkGrammarObjectLiteralExpression(node, inDestructuring) { - var Flags; - (function (Flags) { - Flags[Flags["Property"] = 1] = "Property"; - Flags[Flags["GetAccessor"] = 2] = "GetAccessor"; - Flags[Flags["SetAccessor"] = 4] = "SetAccessor"; - Flags[Flags["GetOrSetAccessor"] = 6] = "GetOrSetAccessor"; - })(Flags || (Flags = {})); var seen = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var prop = _a[_i]; - if (prop.kind === 272 /* SpreadAssignment */) { + if (prop.kind === 272) { continue; } var name = prop.name; - if (name.kind === 147 /* ComputedPropertyName */) { - // If the name is not a ComputedPropertyName, the grammar checking will skip it + if (name.kind === 147) { checkGrammarComputedPropertyName(name); } - if (prop.kind === 271 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { - // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern - // outside of destructuring it is a syntax error + if (prop.kind === 271 && !inDestructuring && prop.objectAssignmentInitializer) { return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment); } - // Modifiers are never allowed on properties except for 'async' on a method declaration if (prop.modifiers) { - for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955 + for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { var mod = _c[_b]; - if (mod.kind !== 120 /* AsyncKeyword */ || prop.kind !== 154 /* MethodDeclaration */) { + if (mod.kind !== 120 || prop.kind !== 154) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } } } - // ECMA-262 11.1.5 Object Initializer - // If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true - // a.This production is contained in strict code and IsDataDescriptor(previous) is true and - // IsDataDescriptor(propId.descriptor) is true. - // b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true. - // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. - // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true - // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields var currentKind = void 0; switch (prop.kind) { - case 270 /* PropertyAssignment */: - case 271 /* ShorthandPropertyAssignment */: - // Grammar checking for computedPropertyName and shorthandPropertyAssignment + case 270: + case 271: checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); - if (name.kind === 8 /* NumericLiteral */) { + if (name.kind === 8) { checkGrammarNumericLiteral(name); } - // falls through - case 154 /* MethodDeclaration */: - currentKind = 1 /* Property */; + case 154: + currentKind = 1; break; - case 156 /* GetAccessor */: - currentKind = 2 /* GetAccessor */; + case 156: + currentKind = 2; break; - case 157 /* SetAccessor */: - currentKind = 4 /* SetAccessor */; + case 157: + currentKind = 4; break; default: throw ts.Debug.assertNever(prop, "Unexpected syntax kind:" + prop.kind); @@ -54449,11 +45252,11 @@ var ts; seen.set(effectiveName, currentKind); } else { - if (currentKind === 1 /* Property */ && existingKind === 1 /* Property */) { + if (currentKind === 1 && existingKind === 1) { grammarErrorOnNode(name, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name)); } - else if ((currentKind & 6 /* GetOrSetAccessor */) && (existingKind & 6 /* GetOrSetAccessor */)) { - if (existingKind !== 6 /* GetOrSetAccessor */ && currentKind !== existingKind) { + else if ((currentKind & 6) && (existingKind & 6)) { + if (existingKind !== 6 && currentKind !== existingKind) { seen.set(effectiveName, currentKind | existingKind); } else { @@ -54471,7 +45274,7 @@ var ts; var seen = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) { var attr = _a[_i]; - if (attr.kind === 264 /* JsxSpreadAttribute */) { + if (attr.kind === 264) { continue; } var name = attr.name, initializer = attr.initializer; @@ -54481,7 +45284,7 @@ var ts; else { return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } - if (initializer && initializer.kind === 265 /* JsxExpression */ && !initializer.expression) { + if (initializer && initializer.kind === 265 && !initializer.expression) { return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } @@ -54490,40 +45293,33 @@ var ts; if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } - if (forInOrOfStatement.kind === 222 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) { - if ((forInOrOfStatement.flags & 16384 /* AwaitContext */) === 0 /* None */) { + if (forInOrOfStatement.kind === 222 && forInOrOfStatement.awaitModifier) { + if ((forInOrOfStatement.flags & 16384) === 0) { return grammarErrorOnNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator); } } - if (forInOrOfStatement.initializer.kind === 233 /* VariableDeclarationList */) { + if (forInOrOfStatement.initializer.kind === 233) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; - // declarations.length can be zero if there is an error in variable declaration in for-of or for-in - // See http://www.ecma-international.org/ecma-262/6.0/#sec-for-in-and-for-of-statements for details - // For example: - // var let = 10; - // for (let of [1,2,3]) {} // this is invalid ES6 syntax - // for (let in [1,2,3]) {} // this is invalid ES6 syntax - // We will then want to skip on grammar checking on variableList declaration if (!declarations.length) { return false; } if (declarations.length > 1) { - var diagnostic = forInOrOfStatement.kind === 221 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 221 ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement; return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic); } var firstDeclaration = declarations[0]; if (firstDeclaration.initializer) { - var diagnostic = forInOrOfStatement.kind === 221 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 221 ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer; return grammarErrorOnNode(firstDeclaration.name, diagnostic); } if (firstDeclaration.type) { - var diagnostic = forInOrOfStatement.kind === 221 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 221 ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation; return grammarErrorOnNode(firstDeclaration, diagnostic); @@ -54534,27 +45330,27 @@ var ts; } function checkGrammarAccessor(accessor) { var kind = accessor.kind; - if (languageVersion < 1 /* ES5 */) { + if (languageVersion < 1) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } - else if (accessor.flags & 4194304 /* Ambient */) { + else if (accessor.flags & 4194304) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); } - else if (accessor.body === undefined && !ts.hasModifier(accessor, 128 /* Abstract */)) { + else if (accessor.body === undefined && !ts.hasModifier(accessor, 128)) { return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); } - else if (accessor.body && ts.hasModifier(accessor, 128 /* Abstract */)) { + else if (accessor.body && ts.hasModifier(accessor, 128)) { return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation); } else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } else if (!doesAccessorHaveCorrectParameterCount(accessor)) { - return grammarErrorOnNode(accessor.name, kind === 156 /* GetAccessor */ ? + return grammarErrorOnNode(accessor.name, kind === 156 ? ts.Diagnostics.A_get_accessor_cannot_have_parameters : ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } - else if (kind === 157 /* SetAccessor */) { + else if (kind === 157) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } @@ -54573,45 +45369,41 @@ var ts; } return false; } - /** Does the accessor have the right number of parameters? - * A get accessor has no parameters or a single `this` parameter. - * A set accessor has one parameter or a `this` parameter and one more parameter. - */ function doesAccessorHaveCorrectParameterCount(accessor) { - return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 156 /* GetAccessor */ ? 0 : 1); + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 156 ? 0 : 1); } function getAccessorThisParameter(accessor) { - if (accessor.parameters.length === (accessor.kind === 156 /* GetAccessor */ ? 1 : 2)) { + if (accessor.parameters.length === (accessor.kind === 156 ? 1 : 2)) { return ts.getThisParameter(accessor); } } function checkGrammarTypeOperatorNode(node) { - if (node.operator === 141 /* UniqueKeyword */) { - if (node.type.kind !== 138 /* SymbolKeyword */) { - return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(138 /* SymbolKeyword */)); + if (node.operator === 141) { + if (node.type.kind !== 138) { + return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(138)); } var parent = ts.walkUpParenthesizedTypes(node.parent); switch (parent.kind) { - case 232 /* VariableDeclaration */: + case 232: var decl = parent; - if (decl.name.kind !== 71 /* Identifier */) { + if (decl.name.kind !== 71) { return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name); } if (!ts.isVariableDeclarationInVariableStatement(decl)) { return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement); } - if (!(decl.parent.flags & 2 /* Const */)) { + if (!(decl.parent.flags & 2)) { return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const); } break; - case 152 /* PropertyDeclaration */: - if (!ts.hasModifier(parent, 32 /* Static */) || - !ts.hasModifier(parent, 64 /* Readonly */)) { + case 152: + if (!ts.hasModifier(parent, 32) || + !ts.hasModifier(parent, 64)) { return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly); } break; - case 151 /* PropertySignature */: - if (!ts.hasModifier(parent, 64 /* Readonly */)) { + case 151: + if (!ts.hasModifier(parent, 64)) { return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly); } break; @@ -54629,10 +45421,9 @@ var ts; if (checkGrammarFunctionLikeDeclaration(node)) { return true; } - if (node.kind === 154 /* MethodDeclaration */) { - if (node.parent.kind === 184 /* ObjectLiteralExpression */) { - // We only disallow modifier on a method declaration if it is a property of object-literal-expression - if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 120 /* AsyncKeyword */)) { + if (node.kind === 154) { + if (node.parent.kind === 184) { + if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 120)) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { @@ -54647,22 +45438,17 @@ var ts; } } if (ts.isClassLike(node.parent)) { - // Technically, computed properties in ambient contexts is disallowed - // for property declarations and accessors too, not just methods. - // However, property declarations disallow computed names in general, - // and accessors are not allowed in ambient contexts in general, - // so this error only really matters for methods. - if (node.flags & 4194304 /* Ambient */) { + if (node.flags & 4194304) { return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } - else if (node.kind === 154 /* MethodDeclaration */ && !node.body) { + else if (node.kind === 154 && !node.body) { return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } } - else if (node.parent.kind === 236 /* InterfaceDeclaration */) { + else if (node.parent.kind === 236) { return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } - else if (node.parent.kind === 166 /* TypeLiteral */) { + else if (node.parent.kind === 166) { return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } } @@ -54673,27 +45459,23 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 228 /* LabeledStatement */: + case 228: if (node.label && current.label.escapedText === node.label.escapedText) { - // found matching label - verify that label usage is correct - // continue can only target labels that are on iteration statements - var isMisplacedContinueLabel = node.kind === 223 /* ContinueStatement */ - && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true); + var isMisplacedContinueLabel = node.kind === 223 + && !ts.isIterationStatement(current.statement, true); if (isMisplacedContinueLabel) { return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); } return false; } break; - case 227 /* SwitchStatement */: - if (node.kind === 224 /* BreakStatement */ && !node.label) { - // unlabeled break within switch statement - ok + case 227: + if (node.kind === 224 && !node.label) { return false; } break; default: - if (ts.isIterationStatement(current, /*lookInLabeledStatement*/ false) && !node.label) { - // unlabeled break or continue within iteration statement - ok + if (ts.isIterationStatement(current, false) && !node.label) { return false; } break; @@ -54701,13 +45483,13 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 224 /* BreakStatement */ + var message = node.kind === 224 ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement; return grammarErrorOnNode(node, message); } else { - var message = node.kind === 224 /* BreakStatement */ + var message = node.kind === 224 ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement; return grammarErrorOnNode(node, message); @@ -54720,26 +45502,25 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); } checkGrammarForDisallowedTrailingComma(elements, ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); - if (node.name.kind === 181 /* ArrayBindingPattern */ || node.name.kind === 180 /* ObjectBindingPattern */) { + if (node.name.kind === 181 || node.name.kind === 180) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (node.propertyName) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_have_a_property_name); } if (node.initializer) { - // Error on equals token which immediately precedes the initializer return grammarErrorAtPos(node, node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); } } } function isStringOrNumberLiteralExpression(expr) { - return expr.kind === 9 /* StringLiteral */ || expr.kind === 8 /* NumericLiteral */ || - expr.kind === 198 /* PrefixUnaryExpression */ && expr.operator === 38 /* MinusToken */ && - expr.operand.kind === 8 /* NumericLiteral */; + return expr.kind === 9 || expr.kind === 8 || + expr.kind === 198 && expr.operator === 38 && + expr.operand.kind === 8; } function checkGrammarVariableDeclaration(node) { - if (node.parent.parent.kind !== 221 /* ForInStatement */ && node.parent.parent.kind !== 222 /* ForOfStatement */) { - if (node.flags & 4194304 /* Ambient */) { + if (node.parent.parent.kind !== 221 && node.parent.parent.kind !== 222) { + if (node.flags & 4194304) { if (node.initializer) { if (ts.isConst(node) && !node.type) { if (!isStringOrNumberLiteralExpression(node.initializer)) { @@ -54747,13 +45528,11 @@ var ts; } } else { - // Error on equals token which immediate precedes the initializer var equalsTokenLength = "=".length; return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } } if (node.initializer && !(ts.isConst(node) && isStringOrNumberLiteralExpression(node.initializer))) { - // Error on equals token which immediate precedes the initializer var equalsTokenLength = "=".length; return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } @@ -54767,24 +45546,18 @@ var ts; } } } - if (node.exclamationToken && (node.parent.parent.kind !== 214 /* VariableStatement */ || !node.type || node.initializer || node.flags & 4194304 /* Ambient */)) { + if (node.exclamationToken && (node.parent.parent.kind !== 214 || !node.type || node.initializer || node.flags & 4194304)) { return grammarErrorOnNode(node.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context); } if (compilerOptions.module !== ts.ModuleKind.ES2015 && compilerOptions.module !== ts.ModuleKind.ESNext && compilerOptions.module !== ts.ModuleKind.System && !compilerOptions.noEmit && - !(node.parent.parent.flags & 4194304 /* Ambient */) && ts.hasModifier(node.parent.parent, 1 /* Export */)) { + !(node.parent.parent.flags & 4194304) && ts.hasModifier(node.parent.parent, 1)) { checkESModuleMarker(node.name); } var checkLetConstNames = (ts.isLet(node) || ts.isConst(node)); - // 1. LexicalDeclaration : LetOrConst BindingList ; - // It is a Syntax Error if the BoundNames of BindingList contains "let". - // 2. ForDeclaration: ForDeclaration : LetOrConst ForBinding - // It is a Syntax Error if the BoundNames of ForDeclaration contains "let". - // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code - // and its Identifier is eval or arguments return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name); } function checkESModuleMarker(name) { - if (name.kind === 71 /* Identifier */) { + if (name.kind === 71) { if (ts.idText(name) === "__esModule") { return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules); } @@ -54801,8 +45574,8 @@ var ts; return false; } function checkGrammarNameInLetOrConstDeclarations(name) { - if (name.kind === 71 /* Identifier */) { - if (name.originalKeywordKind === 110 /* LetKeyword */) { + if (name.kind === 71) { + if (name.originalKeywordKind === 110) { return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations); } } @@ -54829,15 +45602,15 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 217 /* IfStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 226 /* WithStatement */: - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 217: + case 218: + case 219: + case 226: + case 220: + case 221: + case 222: return false; - case 228 /* LabeledStatement */: + case 228: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -54855,12 +45628,12 @@ var ts; function checkGrammarMetaProperty(node) { var escapedText = node.name.escapedText; switch (node.keywordToken) { - case 94 /* NewKeyword */: + case 94: if (escapedText !== "target") { return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target"); } break; - case 91 /* ImportKeyword */: + case 91: if (escapedText !== "meta") { return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta"); } @@ -54914,7 +45687,7 @@ var ts; return true; } } - else if (node.parent.kind === 236 /* InterfaceDeclaration */) { + else if (node.parent.kind === 236) { if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } @@ -54922,7 +45695,7 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } - else if (node.parent.kind === 166 /* TypeLiteral */) { + else if (node.parent.kind === 166) { if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } @@ -54930,35 +45703,23 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_type_literal_property_cannot_have_an_initializer); } } - if (node.flags & 4194304 /* Ambient */ && node.initializer) { + if (node.flags & 4194304 && node.initializer) { return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer || - node.flags & 4194304 /* Ambient */ || ts.hasModifier(node, 32 /* Static */ | 128 /* Abstract */))) { + node.flags & 4194304 || ts.hasModifier(node, 32 | 128))) { return grammarErrorOnNode(node.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context); } } function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { - // A declare modifier is required for any top level .d.ts declaration except export=, export default, export as namespace - // interfaces and imports categories: - // - // DeclarationElement: - // ExportAssignment - // export_opt InterfaceDeclaration - // export_opt TypeAliasDeclaration - // export_opt ImportDeclaration - // export_opt ExternalImportDeclaration - // export_opt AmbientDeclaration - // - // TODO: The spec needs to be amended to reflect this grammar. - if (node.kind === 236 /* InterfaceDeclaration */ || - node.kind === 237 /* TypeAliasDeclaration */ || - node.kind === 244 /* ImportDeclaration */ || - node.kind === 243 /* ImportEqualsDeclaration */ || - node.kind === 250 /* ExportDeclaration */ || - node.kind === 249 /* ExportAssignment */ || - node.kind === 242 /* NamespaceExportDeclaration */ || - ts.hasModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) { + if (node.kind === 236 || + node.kind === 237 || + node.kind === 244 || + node.kind === 243 || + node.kind === 250 || + node.kind === 249 || + node.kind === 242 || + ts.hasModifier(node, 2 | 1 | 512)) { return false; } return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); @@ -54966,7 +45727,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var decl = _a[_i]; - if (ts.isDeclaration(decl) || decl.kind === 214 /* VariableStatement */) { + if (ts.isDeclaration(decl) || decl.kind === 214) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -54975,54 +45736,42 @@ var ts; return false; } function checkGrammarSourceFile(node) { - return !!(node.flags & 4194304 /* Ambient */) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node); + return !!(node.flags & 4194304) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node); } function checkGrammarStatementInAmbientContext(node) { - if (node.flags & 4194304 /* Ambient */) { - // An accessors is already reported about the ambient context + if (node.flags & 4194304) { if (ts.isAccessor(node.parent)) { return getNodeLinks(node).hasReportedStatementInAmbientContext = true; } - // Find containing block which is either Block, ModuleBlock, SourceFile var links = getNodeLinks(node); if (!links.hasReportedStatementInAmbientContext && ts.isFunctionLike(node.parent)) { return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts); } - // We are either parented by another statement, or some sort of block. - // If we're in a block, we only want to really report an error once - // to prevent noisiness. So use a bit on the block to indicate if - // this has already been reported, and don't report if it has. - // - if (node.parent.kind === 213 /* Block */ || node.parent.kind === 240 /* ModuleBlock */ || node.parent.kind === 274 /* SourceFile */) { + if (node.parent.kind === 213 || node.parent.kind === 240 || node.parent.kind === 274) { var links_1 = getNodeLinks(node.parent); - // Check if the containing block ever report this error if (!links_1.hasReportedStatementInAmbientContext) { return links_1.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); } } else { - // We must be parented by a statement. If so, there's no need - // to report the error as our parent will have already done it. - // Debug.assert(isStatement(node.parent)); } } return false; } function checkGrammarNumericLiteral(node) { - // Grammar checking - if (node.numericLiteralFlags & 32 /* Octal */) { + if (node.numericLiteralFlags & 32) { var diagnosticMessage = void 0; - if (languageVersion >= 1 /* ES5 */) { + if (languageVersion >= 1) { diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0; } - else if (ts.isChildOfNodeWithKind(node, 178 /* LiteralType */)) { + else if (ts.isChildOfNodeWithKind(node, 178)) { diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0; } - else if (ts.isChildOfNodeWithKind(node, 273 /* EnumMember */)) { + else if (ts.isChildOfNodeWithKind(node, 273)) { diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0; } if (diagnosticMessage) { - var withMinus = ts.isPrefixUnaryExpression(node.parent) && node.parent.operator === 38 /* MinusToken */; + var withMinus = ts.isPrefixUnaryExpression(node.parent) && node.parent.operator === 38; var literal = (withMinus ? "-" : "") + "0o" + node.text; return grammarErrorOnNode(withMinus ? node.parent : node, diagnosticMessage, literal); } @@ -55033,7 +45782,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); if (!hasParseDiagnostics(sourceFile)) { var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos); - diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), /*length*/ 0, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), 0, message, arg0, arg1, arg2)); return true; } return false; @@ -55042,7 +45791,6 @@ var ts; if (!ambientModulesCache) { ambientModulesCache = []; globals.forEach(function (global, sym) { - // No need to `unescapeLeadingUnderscores`, an escaped symbol is never an ambient module. if (ambientModuleSymbolRegex.test(sym)) { ambientModulesCache.push(global); } @@ -55061,8 +45809,6 @@ var ts; if (nodeArguments.length !== 1) { return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument); } - // see: parseArgumentOrArrayLiteralElement...we use this function which parse arguments of callExpression to parse specifier for dynamic import. - // parseArgumentOrArrayLiteralElement allows spread element to be in an argument list which is not allowed as specifier in dynamic import. if (ts.isSpreadElement(nodeArguments[0])) { return grammarErrorOnNode(nodeArguments[0], ts.Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element); } @@ -55070,11 +45816,10 @@ var ts; } } ts.createTypeChecker = createTypeChecker; - /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */ function isDeclarationNameOrImportPropertyName(name) { switch (name.parent.kind) { - case 248 /* ImportSpecifier */: - case 252 /* ExportSpecifier */: + case 248: + case 252: return ts.isIdentifier(name); default: return ts.isDeclarationName(name); @@ -55082,40 +45827,36 @@ var ts; } function isSomeImportDeclaration(decl) { switch (decl.kind) { - case 245 /* ImportClause */: // For default import - case 243 /* ImportEqualsDeclaration */: - case 246 /* NamespaceImport */: - case 248 /* ImportSpecifier */: // For rename import `x as y` + case 245: + case 243: + case 246: + case 248: return true; - case 71 /* Identifier */: - // For regular import, `decl` is an Identifier under the ImportSpecifier. - return decl.parent.kind === 248 /* ImportSpecifier */; + case 71: + return decl.parent.kind === 248; default: return false; } } var JsxNames; (function (JsxNames) { - // tslint:disable variable-name JsxNames.JSX = "JSX"; JsxNames.IntrinsicElements = "IntrinsicElements"; JsxNames.ElementClass = "ElementClass"; - JsxNames.ElementAttributesPropertyNameContainer = "ElementAttributesProperty"; // TODO: Deprecate and remove support + JsxNames.ElementAttributesPropertyNameContainer = "ElementAttributesProperty"; JsxNames.ElementChildrenAttributeNameContainer = "ElementChildrenAttribute"; JsxNames.Element = "Element"; JsxNames.IntrinsicAttributes = "IntrinsicAttributes"; JsxNames.IntrinsicClassAttributes = "IntrinsicClassAttributes"; - // tslint:enable variable-name })(JsxNames || (JsxNames = {})); })(ts || (ts = {})); var ts; (function (ts) { function createSynthesizedNode(kind) { var node = ts.createNode(kind, -1, -1); - node.flags |= 8 /* Synthesized */; + node.flags |= 8; return node; } - /* @internal */ function updateNode(updated, original) { if (updated !== original) { setOriginalNode(updated, original); @@ -55125,9 +45866,6 @@ var ts; return updated; } ts.updateNode = updateNode; - /** - * Make `elements` into a `NodeArray`. If `elements` is `undefined`, returns an empty `NodeArray`. - */ function createNodeArray(elements, hasTrailingComma) { if (!elements || elements === ts.emptyArray) { elements = []; @@ -55142,14 +45880,7 @@ var ts; return array; } ts.createNodeArray = createNodeArray; - /** - * Creates a shallow, memberwise clone of a node with no source map location. - */ - /* @internal */ function getSynthesizedClone(node) { - // We don't use "clone" from core.ts here, as we need to preserve the prototype chain of - // the original node. We also need to exclude specific properties and only include own- - // properties (to skip members already defined on the shared prototype). if (node === undefined) { return node; } @@ -55182,20 +45913,20 @@ var ts; } ts.createLiteral = createLiteral; function createNumericLiteral(value) { - var node = createSynthesizedNode(8 /* NumericLiteral */); + var node = createSynthesizedNode(8); node.text = value; node.numericLiteralFlags = 0; return node; } ts.createNumericLiteral = createNumericLiteral; function createStringLiteral(text) { - var node = createSynthesizedNode(9 /* StringLiteral */); + var node = createSynthesizedNode(9); node.text = text; return node; } ts.createStringLiteral = createStringLiteral; function createRegularExpressionLiteral(text) { - var node = createSynthesizedNode(12 /* RegularExpressionLiteral */); + var node = createSynthesizedNode(12); node.text = text; return node; } @@ -55206,10 +45937,10 @@ var ts; return node; } function createIdentifier(text, typeArguments) { - var node = createSynthesizedNode(71 /* Identifier */); + var node = createSynthesizedNode(71); node.escapedText = ts.escapeLeadingUnderscores(text); - node.originalKeywordKind = text ? ts.stringToToken(text) : 0 /* Unknown */; - node.autoGenerateFlags = 0 /* None */; + node.originalKeywordKind = text ? ts.stringToToken(text) : 0; + node.autoGenerateFlags = 0; node.autoGenerateId = 0; if (typeArguments) { node.typeArguments = createNodeArray(typeArguments); @@ -55226,31 +45957,29 @@ var ts; var nextAutoGenerateId = 0; function createTempVariable(recordTempVariable, reservedInNestedScopes) { var name = createIdentifier(""); - name.autoGenerateFlags = 1 /* Auto */; + name.autoGenerateFlags = 1; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; if (recordTempVariable) { recordTempVariable(name); } if (reservedInNestedScopes) { - name.autoGenerateFlags |= 8 /* ReservedInNestedScopes */; + name.autoGenerateFlags |= 8; } return name; } ts.createTempVariable = createTempVariable; - /** Create a unique temporary variable for use in a loop. */ function createLoopVariable() { var name = createIdentifier(""); - name.autoGenerateFlags = 2 /* Loop */; + name.autoGenerateFlags = 2; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; } ts.createLoopVariable = createLoopVariable; - /** Create a unique name based on the supplied text. */ function createUniqueName(text) { var name = createIdentifier(text); - name.autoGenerateFlags = 3 /* Unique */; + name.autoGenerateFlags = 3; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; @@ -55258,100 +45987,95 @@ var ts; ts.createUniqueName = createUniqueName; function createOptimisticUniqueName(text) { var name = createIdentifier(text); - name.autoGenerateFlags = 3 /* Unique */ | 16 /* Optimistic */; + name.autoGenerateFlags = 3 | 16; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; } ts.createOptimisticUniqueName = createOptimisticUniqueName; - /** Create a unique name based on the supplied text. This does not consider names injected by the transformer. */ function createFileLevelUniqueName(text) { var name = createOptimisticUniqueName(text); - name.autoGenerateFlags |= 32 /* FileLevel */; + name.autoGenerateFlags |= 32; return name; } ts.createFileLevelUniqueName = createFileLevelUniqueName; function getGeneratedNameForNode(node, flags) { var name = createIdentifier(ts.isIdentifier(node) ? ts.idText(node) : ""); - name.autoGenerateFlags = 4 /* Node */ | flags; + name.autoGenerateFlags = 4 | flags; name.autoGenerateId = nextAutoGenerateId; name.original = node; nextAutoGenerateId++; return name; } ts.getGeneratedNameForNode = getGeneratedNameForNode; - // Punctuation function createToken(token) { return createSynthesizedNode(token); } ts.createToken = createToken; - // Reserved words function createSuper() { - return createSynthesizedNode(97 /* SuperKeyword */); + return createSynthesizedNode(97); } ts.createSuper = createSuper; function createThis() { - return createSynthesizedNode(99 /* ThisKeyword */); + return createSynthesizedNode(99); } ts.createThis = createThis; function createNull() { - return createSynthesizedNode(95 /* NullKeyword */); + return createSynthesizedNode(95); } ts.createNull = createNull; function createTrue() { - return createSynthesizedNode(101 /* TrueKeyword */); + return createSynthesizedNode(101); } ts.createTrue = createTrue; function createFalse() { - return createSynthesizedNode(86 /* FalseKeyword */); + return createSynthesizedNode(86); } ts.createFalse = createFalse; - // Modifiers function createModifier(kind) { return createToken(kind); } ts.createModifier = createModifier; function createModifiersFromModifierFlags(flags) { var result = []; - if (flags & 1 /* Export */) { - result.push(createModifier(84 /* ExportKeyword */)); + if (flags & 1) { + result.push(createModifier(84)); } - if (flags & 2 /* Ambient */) { - result.push(createModifier(124 /* DeclareKeyword */)); + if (flags & 2) { + result.push(createModifier(124)); } - if (flags & 512 /* Default */) { - result.push(createModifier(79 /* DefaultKeyword */)); + if (flags & 512) { + result.push(createModifier(79)); } - if (flags & 2048 /* Const */) { - result.push(createModifier(76 /* ConstKeyword */)); + if (flags & 2048) { + result.push(createModifier(76)); } - if (flags & 4 /* Public */) { - result.push(createModifier(114 /* PublicKeyword */)); + if (flags & 4) { + result.push(createModifier(114)); } - if (flags & 8 /* Private */) { - result.push(createModifier(112 /* PrivateKeyword */)); + if (flags & 8) { + result.push(createModifier(112)); } - if (flags & 16 /* Protected */) { - result.push(createModifier(113 /* ProtectedKeyword */)); + if (flags & 16) { + result.push(createModifier(113)); } - if (flags & 128 /* Abstract */) { - result.push(createModifier(117 /* AbstractKeyword */)); + if (flags & 128) { + result.push(createModifier(117)); } - if (flags & 32 /* Static */) { - result.push(createModifier(115 /* StaticKeyword */)); + if (flags & 32) { + result.push(createModifier(115)); } - if (flags & 64 /* Readonly */) { - result.push(createModifier(132 /* ReadonlyKeyword */)); + if (flags & 64) { + result.push(createModifier(132)); } - if (flags & 256 /* Async */) { - result.push(createModifier(120 /* AsyncKeyword */)); + if (flags & 256) { + result.push(createModifier(120)); } return result; } ts.createModifiersFromModifierFlags = createModifiersFromModifierFlags; - // Names function createQualifiedName(left, right) { - var node = createSynthesizedNode(146 /* QualifiedName */); + var node = createSynthesizedNode(146); node.left = left; node.right = asName(right); return node; @@ -55365,13 +46089,13 @@ var ts; } ts.updateQualifiedName = updateQualifiedName; function parenthesizeForComputedName(expression) { - return (ts.isBinaryExpression(expression) && expression.operatorToken.kind === 26 /* CommaToken */) || - expression.kind === 302 /* CommaListExpression */ ? + return (ts.isBinaryExpression(expression) && expression.operatorToken.kind === 26) || + expression.kind === 302 ? createParen(expression) : expression; } function createComputedPropertyName(expression) { - var node = createSynthesizedNode(147 /* ComputedPropertyName */); + var node = createSynthesizedNode(147); node.expression = parenthesizeForComputedName(expression); return node; } @@ -55382,9 +46106,8 @@ var ts; : node; } ts.updateComputedPropertyName = updateComputedPropertyName; - // Signature elements function createTypeParameterDeclaration(name, constraint, defaultType) { - var node = createSynthesizedNode(148 /* TypeParameter */); + var node = createSynthesizedNode(148); node.name = asName(name); node.constraint = constraint; node.default = defaultType; @@ -55400,7 +46123,7 @@ var ts; } ts.updateTypeParameterDeclaration = updateTypeParameterDeclaration; function createParameter(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) { - var node = createSynthesizedNode(149 /* Parameter */); + var node = createSynthesizedNode(149); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.dotDotDotToken = dotDotDotToken; @@ -55424,7 +46147,7 @@ var ts; } ts.updateParameter = updateParameter; function createDecorator(expression) { - var node = createSynthesizedNode(150 /* Decorator */); + var node = createSynthesizedNode(150); node.expression = ts.parenthesizeForAccess(expression); return node; } @@ -55435,9 +46158,8 @@ var ts; : node; } ts.updateDecorator = updateDecorator; - // Type Elements function createPropertySignature(modifiers, name, questionToken, type, initializer) { - var node = createSynthesizedNode(151 /* PropertySignature */); + var node = createSynthesizedNode(151); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.questionToken = questionToken; @@ -55457,12 +46179,12 @@ var ts; } ts.updatePropertySignature = updatePropertySignature; function createProperty(decorators, modifiers, name, questionOrExclamationToken, type, initializer) { - var node = createSynthesizedNode(152 /* PropertyDeclaration */); + var node = createSynthesizedNode(152); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); - node.questionToken = questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 55 /* QuestionToken */ ? questionOrExclamationToken : undefined; - node.exclamationToken = questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 51 /* ExclamationToken */ ? questionOrExclamationToken : undefined; + node.questionToken = questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 55 ? questionOrExclamationToken : undefined; + node.exclamationToken = questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 51 ? questionOrExclamationToken : undefined; node.type = type; node.initializer = initializer; return node; @@ -55472,8 +46194,8 @@ var ts; return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name - || node.questionToken !== (questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 55 /* QuestionToken */ ? questionOrExclamationToken : undefined) - || node.exclamationToken !== (questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 51 /* ExclamationToken */ ? questionOrExclamationToken : undefined) + || node.questionToken !== (questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 55 ? questionOrExclamationToken : undefined) + || node.exclamationToken !== (questionOrExclamationToken !== undefined && questionOrExclamationToken.kind === 51 ? questionOrExclamationToken : undefined) || node.type !== type || node.initializer !== initializer ? updateNode(createProperty(decorators, modifiers, name, questionOrExclamationToken, type, initializer), node) @@ -55481,7 +46203,7 @@ var ts; } ts.updateProperty = updateProperty; function createMethodSignature(typeParameters, parameters, type, name, questionToken) { - var node = createSignatureDeclaration(153 /* MethodSignature */, typeParameters, parameters, type); + var node = createSignatureDeclaration(153, typeParameters, parameters, type); node.name = asName(name); node.questionToken = questionToken; return node; @@ -55498,7 +46220,7 @@ var ts; } ts.updateMethodSignature = updateMethodSignature; function createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) { - var node = createSynthesizedNode(154 /* MethodDeclaration */); + var node = createSynthesizedNode(154); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; @@ -55526,7 +46248,7 @@ var ts; } ts.updateMethod = updateMethod; function createConstructor(decorators, modifiers, parameters, body) { - var node = createSynthesizedNode(155 /* Constructor */); + var node = createSynthesizedNode(155); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.typeParameters = undefined; @@ -55546,7 +46268,7 @@ var ts; } ts.updateConstructor = updateConstructor; function createGetAccessor(decorators, modifiers, name, parameters, type, body) { - var node = createSynthesizedNode(156 /* GetAccessor */); + var node = createSynthesizedNode(156); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -55569,7 +46291,7 @@ var ts; } ts.updateGetAccessor = updateGetAccessor; function createSetAccessor(decorators, modifiers, name, parameters, body) { - var node = createSynthesizedNode(157 /* SetAccessor */); + var node = createSynthesizedNode(157); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -55590,7 +46312,7 @@ var ts; } ts.updateSetAccessor = updateSetAccessor; function createCallSignature(typeParameters, parameters, type) { - return createSignatureDeclaration(158 /* CallSignature */, typeParameters, parameters, type); + return createSignatureDeclaration(158, typeParameters, parameters, type); } ts.createCallSignature = createCallSignature; function updateCallSignature(node, typeParameters, parameters, type) { @@ -55598,7 +46320,7 @@ var ts; } ts.updateCallSignature = updateCallSignature; function createConstructSignature(typeParameters, parameters, type) { - return createSignatureDeclaration(159 /* ConstructSignature */, typeParameters, parameters, type); + return createSignatureDeclaration(159, typeParameters, parameters, type); } ts.createConstructSignature = createConstructSignature; function updateConstructSignature(node, typeParameters, parameters, type) { @@ -55606,7 +46328,7 @@ var ts; } ts.updateConstructSignature = updateConstructSignature; function createIndexSignature(decorators, modifiers, parameters, type) { - var node = createSynthesizedNode(160 /* IndexSignature */); + var node = createSynthesizedNode(160); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.parameters = createNodeArray(parameters); @@ -55623,7 +46345,6 @@ var ts; : node; } ts.updateIndexSignature = updateIndexSignature; - /* @internal */ function createSignatureDeclaration(kind, typeParameters, parameters, type, typeArguments) { var node = createSynthesizedNode(kind); node.typeParameters = asNodeArray(typeParameters); @@ -55640,13 +46361,12 @@ var ts; ? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node) : node; } - // Types function createKeywordTypeNode(kind) { return createSynthesizedNode(kind); } ts.createKeywordTypeNode = createKeywordTypeNode; function createTypePredicateNode(parameterName, type) { - var node = createSynthesizedNode(161 /* TypePredicate */); + var node = createSynthesizedNode(161); node.parameterName = asName(parameterName); node.type = type; return node; @@ -55660,7 +46380,7 @@ var ts; } ts.updateTypePredicateNode = updateTypePredicateNode; function createTypeReferenceNode(typeName, typeArguments) { - var node = createSynthesizedNode(162 /* TypeReference */); + var node = createSynthesizedNode(162); node.typeName = asName(typeName); node.typeArguments = typeArguments && ts.parenthesizeTypeParameters(typeArguments); return node; @@ -55674,7 +46394,7 @@ var ts; } ts.updateTypeReferenceNode = updateTypeReferenceNode; function createFunctionTypeNode(typeParameters, parameters, type) { - return createSignatureDeclaration(163 /* FunctionType */, typeParameters, parameters, type); + return createSignatureDeclaration(163, typeParameters, parameters, type); } ts.createFunctionTypeNode = createFunctionTypeNode; function updateFunctionTypeNode(node, typeParameters, parameters, type) { @@ -55682,7 +46402,7 @@ var ts; } ts.updateFunctionTypeNode = updateFunctionTypeNode; function createConstructorTypeNode(typeParameters, parameters, type) { - return createSignatureDeclaration(164 /* ConstructorType */, typeParameters, parameters, type); + return createSignatureDeclaration(164, typeParameters, parameters, type); } ts.createConstructorTypeNode = createConstructorTypeNode; function updateConstructorTypeNode(node, typeParameters, parameters, type) { @@ -55690,7 +46410,7 @@ var ts; } ts.updateConstructorTypeNode = updateConstructorTypeNode; function createTypeQueryNode(exprName) { - var node = createSynthesizedNode(165 /* TypeQuery */); + var node = createSynthesizedNode(165); node.exprName = exprName; return node; } @@ -55702,7 +46422,7 @@ var ts; } ts.updateTypeQueryNode = updateTypeQueryNode; function createTypeLiteralNode(members) { - var node = createSynthesizedNode(166 /* TypeLiteral */); + var node = createSynthesizedNode(166); node.members = createNodeArray(members); return node; } @@ -55714,7 +46434,7 @@ var ts; } ts.updateTypeLiteralNode = updateTypeLiteralNode; function createArrayTypeNode(elementType) { - var node = createSynthesizedNode(167 /* ArrayType */); + var node = createSynthesizedNode(167); node.elementType = ts.parenthesizeArrayTypeMember(elementType); return node; } @@ -55726,7 +46446,7 @@ var ts; } ts.updateArrayTypeNode = updateArrayTypeNode; function createTupleTypeNode(elementTypes) { - var node = createSynthesizedNode(168 /* TupleType */); + var node = createSynthesizedNode(168); node.elementTypes = createNodeArray(elementTypes); return node; } @@ -55738,7 +46458,7 @@ var ts; } ts.updateTypleTypeNode = updateTypleTypeNode; function createUnionTypeNode(types) { - return createUnionOrIntersectionTypeNode(169 /* UnionType */, types); + return createUnionOrIntersectionTypeNode(169, types); } ts.createUnionTypeNode = createUnionTypeNode; function updateUnionTypeNode(node, types) { @@ -55746,7 +46466,7 @@ var ts; } ts.updateUnionTypeNode = updateUnionTypeNode; function createIntersectionTypeNode(types) { - return createUnionOrIntersectionTypeNode(170 /* IntersectionType */, types); + return createUnionOrIntersectionTypeNode(170, types); } ts.createIntersectionTypeNode = createIntersectionTypeNode; function updateIntersectionTypeNode(node, types) { @@ -55765,7 +46485,7 @@ var ts; : node; } function createConditionalTypeNode(checkType, extendsType, trueType, falseType) { - var node = createSynthesizedNode(171 /* ConditionalType */); + var node = createSynthesizedNode(171); node.checkType = ts.parenthesizeConditionalTypeMember(checkType); node.extendsType = ts.parenthesizeConditionalTypeMember(extendsType); node.trueType = trueType; @@ -55783,7 +46503,7 @@ var ts; } ts.updateConditionalTypeNode = updateConditionalTypeNode; function createInferTypeNode(typeParameter) { - var node = createSynthesizedNode(172 /* InferType */); + var node = createSynthesizedNode(172); node.typeParameter = typeParameter; return node; } @@ -55795,7 +46515,7 @@ var ts; } ts.updateInferTypeNode = updateInferTypeNode; function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) { - var node = createSynthesizedNode(179 /* ImportType */); + var node = createSynthesizedNode(179); node.argument = argument; node.qualifier = qualifier; node.typeArguments = asNodeArray(typeArguments); @@ -55813,7 +46533,7 @@ var ts; } ts.updateImportTypeNode = updateImportTypeNode; function createParenthesizedType(type) { - var node = createSynthesizedNode(173 /* ParenthesizedType */); + var node = createSynthesizedNode(173); node.type = type; return node; } @@ -55825,12 +46545,12 @@ var ts; } ts.updateParenthesizedType = updateParenthesizedType; function createThisTypeNode() { - return createSynthesizedNode(174 /* ThisType */); + return createSynthesizedNode(174); } ts.createThisTypeNode = createThisTypeNode; function createTypeOperatorNode(operatorOrType, type) { - var node = createSynthesizedNode(175 /* TypeOperator */); - node.operator = typeof operatorOrType === "number" ? operatorOrType : 128 /* KeyOfKeyword */; + var node = createSynthesizedNode(175); + node.operator = typeof operatorOrType === "number" ? operatorOrType : 128; node.type = ts.parenthesizeElementTypeMember(typeof operatorOrType === "number" ? type : operatorOrType); return node; } @@ -55840,7 +46560,7 @@ var ts; } ts.updateTypeOperatorNode = updateTypeOperatorNode; function createIndexedAccessTypeNode(objectType, indexType) { - var node = createSynthesizedNode(176 /* IndexedAccessType */); + var node = createSynthesizedNode(176); node.objectType = ts.parenthesizeElementTypeMember(objectType); node.indexType = indexType; return node; @@ -55854,7 +46574,7 @@ var ts; } ts.updateIndexedAccessTypeNode = updateIndexedAccessTypeNode; function createMappedTypeNode(readonlyToken, typeParameter, questionToken, type) { - var node = createSynthesizedNode(177 /* MappedType */); + var node = createSynthesizedNode(177); node.readonlyToken = readonlyToken; node.typeParameter = typeParameter; node.questionToken = questionToken; @@ -55872,7 +46592,7 @@ var ts; } ts.updateMappedTypeNode = updateMappedTypeNode; function createLiteralTypeNode(literal) { - var node = createSynthesizedNode(178 /* LiteralType */); + var node = createSynthesizedNode(178); node.literal = literal; return node; } @@ -55883,9 +46603,8 @@ var ts; : node; } ts.updateLiteralTypeNode = updateLiteralTypeNode; - // Binding Patterns function createObjectBindingPattern(elements) { - var node = createSynthesizedNode(180 /* ObjectBindingPattern */); + var node = createSynthesizedNode(180); node.elements = createNodeArray(elements); return node; } @@ -55897,7 +46616,7 @@ var ts; } ts.updateObjectBindingPattern = updateObjectBindingPattern; function createArrayBindingPattern(elements) { - var node = createSynthesizedNode(181 /* ArrayBindingPattern */); + var node = createSynthesizedNode(181); node.elements = createNodeArray(elements); return node; } @@ -55909,7 +46628,7 @@ var ts; } ts.updateArrayBindingPattern = updateArrayBindingPattern; function createBindingElement(dotDotDotToken, propertyName, name, initializer) { - var node = createSynthesizedNode(182 /* BindingElement */); + var node = createSynthesizedNode(182); node.dotDotDotToken = dotDotDotToken; node.propertyName = asName(propertyName); node.name = asName(name); @@ -55926,9 +46645,8 @@ var ts; : node; } ts.updateBindingElement = updateBindingElement; - // Expression function createArrayLiteral(elements, multiLine) { - var node = createSynthesizedNode(183 /* ArrayLiteralExpression */); + var node = createSynthesizedNode(183); node.elements = ts.parenthesizeListElements(createNodeArray(elements)); if (multiLine) node.multiLine = true; @@ -55942,7 +46660,7 @@ var ts; } ts.updateArrayLiteral = updateArrayLiteral; function createObjectLiteral(properties, multiLine) { - var node = createSynthesizedNode(184 /* ObjectLiteralExpression */); + var node = createSynthesizedNode(184); node.properties = createNodeArray(properties); if (multiLine) node.multiLine = true; @@ -55956,16 +46674,14 @@ var ts; } ts.updateObjectLiteral = updateObjectLiteral; function createPropertyAccess(expression, name) { - var node = createSynthesizedNode(185 /* PropertyAccessExpression */); + var node = createSynthesizedNode(185); node.expression = ts.parenthesizeForAccess(expression); - node.name = asName(name); // TODO: GH#18217 - setEmitFlags(node, 131072 /* NoIndentation */); + node.name = asName(name); + setEmitFlags(node, 131072); return node; } ts.createPropertyAccess = createPropertyAccess; function updatePropertyAccess(node, expression, name) { - // Because we are updating existed propertyAccess we want to inherit its emitFlags - // instead of using the default from createPropertyAccess return node.expression !== expression || node.name !== name ? updateNode(setEmitFlags(createPropertyAccess(expression, name), ts.getEmitFlags(node)), node) @@ -55973,7 +46689,7 @@ var ts; } ts.updatePropertyAccess = updatePropertyAccess; function createElementAccess(expression, index) { - var node = createSynthesizedNode(186 /* ElementAccessExpression */); + var node = createSynthesizedNode(186); node.expression = ts.parenthesizeForAccess(expression); node.argumentExpression = asExpression(index); return node; @@ -55987,7 +46703,7 @@ var ts; } ts.updateElementAccess = updateElementAccess; function createCall(expression, typeArguments, argumentsArray) { - var node = createSynthesizedNode(187 /* CallExpression */); + var node = createSynthesizedNode(187); node.expression = ts.parenthesizeForAccess(expression); node.typeArguments = asNodeArray(typeArguments); node.arguments = ts.parenthesizeListElements(createNodeArray(argumentsArray)); @@ -56003,7 +46719,7 @@ var ts; } ts.updateCall = updateCall; function createNew(expression, typeArguments, argumentsArray) { - var node = createSynthesizedNode(188 /* NewExpression */); + var node = createSynthesizedNode(188); node.expression = ts.parenthesizeForNew(expression); node.typeArguments = asNodeArray(typeArguments); node.arguments = argumentsArray ? ts.parenthesizeListElements(createNodeArray(argumentsArray)) : undefined; @@ -56019,7 +46735,7 @@ var ts; } ts.updateNew = updateNew; function createTaggedTemplate(tag, typeArgumentsOrTemplate, template) { - var node = createSynthesizedNode(189 /* TaggedTemplateExpression */); + var node = createSynthesizedNode(189); node.tag = ts.parenthesizeForAccess(tag); if (template) { node.typeArguments = asNodeArray(typeArgumentsOrTemplate); @@ -56042,7 +46758,7 @@ var ts; } ts.updateTaggedTemplate = updateTaggedTemplate; function createTypeAssertion(type, expression) { - var node = createSynthesizedNode(190 /* TypeAssertionExpression */); + var node = createSynthesizedNode(190); node.type = type; node.expression = ts.parenthesizePrefixOperand(expression); return node; @@ -56056,7 +46772,7 @@ var ts; } ts.updateTypeAssertion = updateTypeAssertion; function createParen(expression) { - var node = createSynthesizedNode(191 /* ParenthesizedExpression */); + var node = createSynthesizedNode(191); node.expression = expression; return node; } @@ -56068,7 +46784,7 @@ var ts; } ts.updateParen = updateParen; function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { - var node = createSynthesizedNode(192 /* FunctionExpression */); + var node = createSynthesizedNode(192); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; node.name = asName(name); @@ -56092,12 +46808,12 @@ var ts; } ts.updateFunctionExpression = updateFunctionExpression; function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { - var node = createSynthesizedNode(193 /* ArrowFunction */); + var node = createSynthesizedNode(193); node.modifiers = asNodeArray(modifiers); node.typeParameters = asNodeArray(typeParameters); node.parameters = createNodeArray(parameters); node.type = type; - node.equalsGreaterThanToken = equalsGreaterThanToken || createToken(36 /* EqualsGreaterThanToken */); + node.equalsGreaterThanToken = equalsGreaterThanToken || createToken(36); node.body = ts.parenthesizeConciseBody(body); return node; } @@ -56111,7 +46827,7 @@ var ts; } else { equalsGreaterThanToken = ts.cast(equalsGreaterThanTokenOrBody, function (n) { - return n.kind === 36 /* EqualsGreaterThanToken */; + return n.kind === 36; }); body = bodyOrUndefined; } @@ -56126,7 +46842,7 @@ var ts; } ts.updateArrowFunction = updateArrowFunction; function createDelete(expression) { - var node = createSynthesizedNode(194 /* DeleteExpression */); + var node = createSynthesizedNode(194); node.expression = ts.parenthesizePrefixOperand(expression); return node; } @@ -56138,7 +46854,7 @@ var ts; } ts.updateDelete = updateDelete; function createTypeOf(expression) { - var node = createSynthesizedNode(195 /* TypeOfExpression */); + var node = createSynthesizedNode(195); node.expression = ts.parenthesizePrefixOperand(expression); return node; } @@ -56150,7 +46866,7 @@ var ts; } ts.updateTypeOf = updateTypeOf; function createVoid(expression) { - var node = createSynthesizedNode(196 /* VoidExpression */); + var node = createSynthesizedNode(196); node.expression = ts.parenthesizePrefixOperand(expression); return node; } @@ -56162,7 +46878,7 @@ var ts; } ts.updateVoid = updateVoid; function createAwait(expression) { - var node = createSynthesizedNode(197 /* AwaitExpression */); + var node = createSynthesizedNode(197); node.expression = ts.parenthesizePrefixOperand(expression); return node; } @@ -56174,7 +46890,7 @@ var ts; } ts.updateAwait = updateAwait; function createPrefix(operator, operand) { - var node = createSynthesizedNode(198 /* PrefixUnaryExpression */); + var node = createSynthesizedNode(198); node.operator = operator; node.operand = ts.parenthesizePrefixOperand(operand); return node; @@ -56187,7 +46903,7 @@ var ts; } ts.updatePrefix = updatePrefix; function createPostfix(operand, operator) { - var node = createSynthesizedNode(199 /* PostfixUnaryExpression */); + var node = createSynthesizedNode(199); node.operand = ts.parenthesizePostfixOperand(operand); node.operator = operator; return node; @@ -56200,12 +46916,12 @@ var ts; } ts.updatePostfix = updatePostfix; function createBinary(left, operator, right) { - var node = createSynthesizedNode(200 /* BinaryExpression */); + var node = createSynthesizedNode(200); var operatorToken = asToken(operator); var operatorKind = operatorToken.kind; - node.left = ts.parenthesizeBinaryOperand(operatorKind, left, /*isLeftSideOfBinary*/ true, /*leftOperand*/ undefined); + node.left = ts.parenthesizeBinaryOperand(operatorKind, left, true, undefined); node.operatorToken = operatorToken; - node.right = ts.parenthesizeBinaryOperand(operatorKind, right, /*isLeftSideOfBinary*/ false, node.left); + node.right = ts.parenthesizeBinaryOperand(operatorKind, right, false, node.left); return node; } ts.createBinary = createBinary; @@ -56217,11 +46933,11 @@ var ts; } ts.updateBinary = updateBinary; function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) { - var node = createSynthesizedNode(201 /* ConditionalExpression */); + var node = createSynthesizedNode(201); node.condition = ts.parenthesizeForConditionalHead(condition); - node.questionToken = whenFalse ? questionTokenOrWhenTrue : createToken(55 /* QuestionToken */); + node.questionToken = whenFalse ? questionTokenOrWhenTrue : createToken(55); node.whenTrue = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenTrueOrWhenFalse : questionTokenOrWhenTrue); - node.colonToken = whenFalse ? colonToken : createToken(56 /* ColonToken */); + node.colonToken = whenFalse ? colonToken : createToken(56); node.whenFalse = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenFalse : whenTrueOrWhenFalse); return node; } @@ -56247,7 +46963,7 @@ var ts; } ts.updateConditional = updateConditional; function createTemplateExpression(head, templateSpans) { - var node = createSynthesizedNode(202 /* TemplateExpression */); + var node = createSynthesizedNode(202); node.head = head; node.templateSpans = createNodeArray(templateSpans); return node; @@ -56261,33 +46977,33 @@ var ts; } ts.updateTemplateExpression = updateTemplateExpression; function createTemplateHead(text) { - var node = createSynthesizedNode(14 /* TemplateHead */); + var node = createSynthesizedNode(14); node.text = text; return node; } ts.createTemplateHead = createTemplateHead; function createTemplateMiddle(text) { - var node = createSynthesizedNode(15 /* TemplateMiddle */); + var node = createSynthesizedNode(15); node.text = text; return node; } ts.createTemplateMiddle = createTemplateMiddle; function createTemplateTail(text) { - var node = createSynthesizedNode(16 /* TemplateTail */); + var node = createSynthesizedNode(16); node.text = text; return node; } ts.createTemplateTail = createTemplateTail; function createNoSubstitutionTemplateLiteral(text) { - var node = createSynthesizedNode(13 /* NoSubstitutionTemplateLiteral */); + var node = createSynthesizedNode(13); node.text = text; return node; } ts.createNoSubstitutionTemplateLiteral = createNoSubstitutionTemplateLiteral; function createYield(asteriskTokenOrExpression, expression) { - var node = createSynthesizedNode(203 /* YieldExpression */); - node.asteriskToken = asteriskTokenOrExpression && asteriskTokenOrExpression.kind === 39 /* AsteriskToken */ ? asteriskTokenOrExpression : undefined; - node.expression = asteriskTokenOrExpression && asteriskTokenOrExpression.kind !== 39 /* AsteriskToken */ ? asteriskTokenOrExpression : expression; + var node = createSynthesizedNode(203); + node.asteriskToken = asteriskTokenOrExpression && asteriskTokenOrExpression.kind === 39 ? asteriskTokenOrExpression : undefined; + node.expression = asteriskTokenOrExpression && asteriskTokenOrExpression.kind !== 39 ? asteriskTokenOrExpression : expression; return node; } ts.createYield = createYield; @@ -56299,7 +47015,7 @@ var ts; } ts.updateYield = updateYield; function createSpread(expression) { - var node = createSynthesizedNode(204 /* SpreadElement */); + var node = createSynthesizedNode(204); node.expression = ts.parenthesizeExpressionForList(expression); return node; } @@ -56311,7 +47027,7 @@ var ts; } ts.updateSpread = updateSpread; function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) { - var node = createSynthesizedNode(205 /* ClassExpression */); + var node = createSynthesizedNode(205); node.decorators = undefined; node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56332,11 +47048,11 @@ var ts; } ts.updateClassExpression = updateClassExpression; function createOmittedExpression() { - return createSynthesizedNode(206 /* OmittedExpression */); + return createSynthesizedNode(206); } ts.createOmittedExpression = createOmittedExpression; function createExpressionWithTypeArguments(typeArguments, expression) { - var node = createSynthesizedNode(207 /* ExpressionWithTypeArguments */); + var node = createSynthesizedNode(207); node.expression = ts.parenthesizeForAccess(expression); node.typeArguments = asNodeArray(typeArguments); return node; @@ -56350,7 +47066,7 @@ var ts; } ts.updateExpressionWithTypeArguments = updateExpressionWithTypeArguments; function createAsExpression(expression, type) { - var node = createSynthesizedNode(208 /* AsExpression */); + var node = createSynthesizedNode(208); node.expression = expression; node.type = type; return node; @@ -56364,7 +47080,7 @@ var ts; } ts.updateAsExpression = updateAsExpression; function createNonNullExpression(expression) { - var node = createSynthesizedNode(209 /* NonNullExpression */); + var node = createSynthesizedNode(209); node.expression = ts.parenthesizeForAccess(expression); return node; } @@ -56376,7 +47092,7 @@ var ts; } ts.updateNonNullExpression = updateNonNullExpression; function createMetaProperty(keywordToken, name) { - var node = createSynthesizedNode(210 /* MetaProperty */); + var node = createSynthesizedNode(210); node.keywordToken = keywordToken; node.name = name; return node; @@ -56388,9 +47104,8 @@ var ts; : node; } ts.updateMetaProperty = updateMetaProperty; - // Misc function createTemplateSpan(expression, literal) { - var node = createSynthesizedNode(211 /* TemplateSpan */); + var node = createSynthesizedNode(211); node.expression = expression; node.literal = literal; return node; @@ -56404,21 +47119,19 @@ var ts; } ts.updateTemplateSpan = updateTemplateSpan; function createSemicolonClassElement() { - return createSynthesizedNode(212 /* SemicolonClassElement */); + return createSynthesizedNode(212); } ts.createSemicolonClassElement = createSemicolonClassElement; - // Element function createBlock(statements, multiLine) { - var block = createSynthesizedNode(213 /* Block */); + var block = createSynthesizedNode(213); block.statements = createNodeArray(statements); if (multiLine) block.multiLine = multiLine; return block; } ts.createBlock = createBlock; - /* @internal */ function createExpressionStatement(expression) { - var node = createSynthesizedNode(216 /* ExpressionStatement */); + var node = createSynthesizedNode(216); node.expression = expression; return node; } @@ -56430,7 +47143,7 @@ var ts; } ts.updateBlock = updateBlock; function createVariableStatement(modifiers, declarationList) { - var node = createSynthesizedNode(214 /* VariableStatement */); + var node = createSynthesizedNode(214); node.decorators = undefined; node.modifiers = asNodeArray(modifiers); node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList; @@ -56445,7 +47158,7 @@ var ts; } ts.updateVariableStatement = updateVariableStatement; function createEmptyStatement() { - return createSynthesizedNode(215 /* EmptyStatement */); + return createSynthesizedNode(215); } ts.createEmptyStatement = createEmptyStatement; function createStatement(expression) { @@ -56459,7 +47172,7 @@ var ts; } ts.updateStatement = updateStatement; function createIf(expression, thenStatement, elseStatement) { - var node = createSynthesizedNode(217 /* IfStatement */); + var node = createSynthesizedNode(217); node.expression = expression; node.thenStatement = thenStatement; node.elseStatement = elseStatement; @@ -56475,7 +47188,7 @@ var ts; } ts.updateIf = updateIf; function createDo(statement, expression) { - var node = createSynthesizedNode(218 /* DoStatement */); + var node = createSynthesizedNode(218); node.statement = statement; node.expression = expression; return node; @@ -56489,7 +47202,7 @@ var ts; } ts.updateDo = updateDo; function createWhile(expression, statement) { - var node = createSynthesizedNode(219 /* WhileStatement */); + var node = createSynthesizedNode(219); node.expression = expression; node.statement = statement; return node; @@ -56503,7 +47216,7 @@ var ts; } ts.updateWhile = updateWhile; function createFor(initializer, condition, incrementor, statement) { - var node = createSynthesizedNode(220 /* ForStatement */); + var node = createSynthesizedNode(220); node.initializer = initializer; node.condition = condition; node.incrementor = incrementor; @@ -56521,7 +47234,7 @@ var ts; } ts.updateFor = updateFor; function createForIn(initializer, expression, statement) { - var node = createSynthesizedNode(221 /* ForInStatement */); + var node = createSynthesizedNode(221); node.initializer = initializer; node.expression = expression; node.statement = statement; @@ -56537,7 +47250,7 @@ var ts; } ts.updateForIn = updateForIn; function createForOf(awaitModifier, initializer, expression, statement) { - var node = createSynthesizedNode(222 /* ForOfStatement */); + var node = createSynthesizedNode(222); node.awaitModifier = awaitModifier; node.initializer = initializer; node.expression = expression; @@ -56555,7 +47268,7 @@ var ts; } ts.updateForOf = updateForOf; function createContinue(label) { - var node = createSynthesizedNode(223 /* ContinueStatement */); + var node = createSynthesizedNode(223); node.label = asName(label); return node; } @@ -56567,7 +47280,7 @@ var ts; } ts.updateContinue = updateContinue; function createBreak(label) { - var node = createSynthesizedNode(224 /* BreakStatement */); + var node = createSynthesizedNode(224); node.label = asName(label); return node; } @@ -56579,7 +47292,7 @@ var ts; } ts.updateBreak = updateBreak; function createReturn(expression) { - var node = createSynthesizedNode(225 /* ReturnStatement */); + var node = createSynthesizedNode(225); node.expression = expression; return node; } @@ -56591,7 +47304,7 @@ var ts; } ts.updateReturn = updateReturn; function createWith(expression, statement) { - var node = createSynthesizedNode(226 /* WithStatement */); + var node = createSynthesizedNode(226); node.expression = expression; node.statement = statement; return node; @@ -56605,7 +47318,7 @@ var ts; } ts.updateWith = updateWith; function createSwitch(expression, caseBlock) { - var node = createSynthesizedNode(227 /* SwitchStatement */); + var node = createSynthesizedNode(227); node.expression = ts.parenthesizeExpressionForList(expression); node.caseBlock = caseBlock; return node; @@ -56619,7 +47332,7 @@ var ts; } ts.updateSwitch = updateSwitch; function createLabel(label, statement) { - var node = createSynthesizedNode(228 /* LabeledStatement */); + var node = createSynthesizedNode(228); node.label = asName(label); node.statement = statement; return node; @@ -56633,7 +47346,7 @@ var ts; } ts.updateLabel = updateLabel; function createThrow(expression) { - var node = createSynthesizedNode(229 /* ThrowStatement */); + var node = createSynthesizedNode(229); node.expression = expression; return node; } @@ -56645,7 +47358,7 @@ var ts; } ts.updateThrow = updateThrow; function createTry(tryBlock, catchClause, finallyBlock) { - var node = createSynthesizedNode(230 /* TryStatement */); + var node = createSynthesizedNode(230); node.tryBlock = tryBlock; node.catchClause = catchClause; node.finallyBlock = finallyBlock; @@ -56661,11 +47374,11 @@ var ts; } ts.updateTry = updateTry; function createDebuggerStatement() { - return createSynthesizedNode(231 /* DebuggerStatement */); + return createSynthesizedNode(231); } ts.createDebuggerStatement = createDebuggerStatement; function createVariableDeclaration(name, type, initializer) { - var node = createSynthesizedNode(232 /* VariableDeclaration */); + var node = createSynthesizedNode(232); node.name = asName(name); node.type = type; node.initializer = initializer !== undefined ? ts.parenthesizeExpressionForList(initializer) : undefined; @@ -56681,9 +47394,9 @@ var ts; } ts.updateVariableDeclaration = updateVariableDeclaration; function createVariableDeclarationList(declarations, flags) { - if (flags === void 0) { flags = 0 /* None */; } - var node = createSynthesizedNode(233 /* VariableDeclarationList */); - node.flags |= flags & 3 /* BlockScoped */; + if (flags === void 0) { flags = 0; } + var node = createSynthesizedNode(233); + node.flags |= flags & 3; node.declarations = createNodeArray(declarations); return node; } @@ -56695,7 +47408,7 @@ var ts; } ts.updateVariableDeclarationList = updateVariableDeclarationList; function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { - var node = createSynthesizedNode(234 /* FunctionDeclaration */); + var node = createSynthesizedNode(234); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; @@ -56721,7 +47434,7 @@ var ts; } ts.updateFunctionDeclaration = updateFunctionDeclaration; function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) { - var node = createSynthesizedNode(235 /* ClassDeclaration */); + var node = createSynthesizedNode(235); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56743,7 +47456,7 @@ var ts; } ts.updateClassDeclaration = updateClassDeclaration; function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) { - var node = createSynthesizedNode(236 /* InterfaceDeclaration */); + var node = createSynthesizedNode(236); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56765,7 +47478,7 @@ var ts; } ts.updateInterfaceDeclaration = updateInterfaceDeclaration; function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) { - var node = createSynthesizedNode(237 /* TypeAliasDeclaration */); + var node = createSynthesizedNode(237); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56785,7 +47498,7 @@ var ts; } ts.updateTypeAliasDeclaration = updateTypeAliasDeclaration; function createEnumDeclaration(decorators, modifiers, name, members) { - var node = createSynthesizedNode(238 /* EnumDeclaration */); + var node = createSynthesizedNode(238); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56803,9 +47516,9 @@ var ts; } ts.updateEnumDeclaration = updateEnumDeclaration; function createModuleDeclaration(decorators, modifiers, name, body, flags) { - if (flags === void 0) { flags = 0 /* None */; } - var node = createSynthesizedNode(239 /* ModuleDeclaration */); - node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 512 /* GlobalAugmentation */); + if (flags === void 0) { flags = 0; } + var node = createSynthesizedNode(239); + node.flags |= flags & (16 | 4 | 512); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = name; @@ -56823,7 +47536,7 @@ var ts; } ts.updateModuleDeclaration = updateModuleDeclaration; function createModuleBlock(statements) { - var node = createSynthesizedNode(240 /* ModuleBlock */); + var node = createSynthesizedNode(240); node.statements = createNodeArray(statements); return node; } @@ -56835,7 +47548,7 @@ var ts; } ts.updateModuleBlock = updateModuleBlock; function createCaseBlock(clauses) { - var node = createSynthesizedNode(241 /* CaseBlock */); + var node = createSynthesizedNode(241); node.clauses = createNodeArray(clauses); return node; } @@ -56847,7 +47560,7 @@ var ts; } ts.updateCaseBlock = updateCaseBlock; function createNamespaceExportDeclaration(name) { - var node = createSynthesizedNode(242 /* NamespaceExportDeclaration */); + var node = createSynthesizedNode(242); node.name = asName(name); return node; } @@ -56859,7 +47572,7 @@ var ts; } ts.updateNamespaceExportDeclaration = updateNamespaceExportDeclaration; function createImportEqualsDeclaration(decorators, modifiers, name, moduleReference) { - var node = createSynthesizedNode(243 /* ImportEqualsDeclaration */); + var node = createSynthesizedNode(243); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); @@ -56877,7 +47590,7 @@ var ts; } ts.updateImportEqualsDeclaration = updateImportEqualsDeclaration; function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) { - var node = createSynthesizedNode(244 /* ImportDeclaration */); + var node = createSynthesizedNode(244); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.importClause = importClause; @@ -56895,7 +47608,7 @@ var ts; } ts.updateImportDeclaration = updateImportDeclaration; function createImportClause(name, namedBindings) { - var node = createSynthesizedNode(245 /* ImportClause */); + var node = createSynthesizedNode(245); node.name = name; node.namedBindings = namedBindings; return node; @@ -56909,7 +47622,7 @@ var ts; } ts.updateImportClause = updateImportClause; function createNamespaceImport(name) { - var node = createSynthesizedNode(246 /* NamespaceImport */); + var node = createSynthesizedNode(246); node.name = name; return node; } @@ -56921,7 +47634,7 @@ var ts; } ts.updateNamespaceImport = updateNamespaceImport; function createNamedImports(elements) { - var node = createSynthesizedNode(247 /* NamedImports */); + var node = createSynthesizedNode(247); node.elements = createNodeArray(elements); return node; } @@ -56933,7 +47646,7 @@ var ts; } ts.updateNamedImports = updateNamedImports; function createImportSpecifier(propertyName, name) { - var node = createSynthesizedNode(248 /* ImportSpecifier */); + var node = createSynthesizedNode(248); node.propertyName = propertyName; node.name = name; return node; @@ -56947,11 +47660,11 @@ var ts; } ts.updateImportSpecifier = updateImportSpecifier; function createExportAssignment(decorators, modifiers, isExportEquals, expression) { - var node = createSynthesizedNode(249 /* ExportAssignment */); + var node = createSynthesizedNode(249); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.isExportEquals = isExportEquals; - node.expression = isExportEquals ? ts.parenthesizeBinaryOperand(58 /* EqualsToken */, expression, /*isLeftSideOfBinary*/ false, /*leftOperand*/ undefined) : ts.parenthesizeDefaultExpression(expression); + node.expression = isExportEquals ? ts.parenthesizeBinaryOperand(58, expression, false, undefined) : ts.parenthesizeDefaultExpression(expression); return node; } ts.createExportAssignment = createExportAssignment; @@ -56964,7 +47677,7 @@ var ts; } ts.updateExportAssignment = updateExportAssignment; function createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier) { - var node = createSynthesizedNode(250 /* ExportDeclaration */); + var node = createSynthesizedNode(250); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.exportClause = exportClause; @@ -56982,7 +47695,7 @@ var ts; } ts.updateExportDeclaration = updateExportDeclaration; function createNamedExports(elements) { - var node = createSynthesizedNode(251 /* NamedExports */); + var node = createSynthesizedNode(251); node.elements = createNodeArray(elements); return node; } @@ -56994,7 +47707,7 @@ var ts; } ts.updateNamedExports = updateNamedExports; function createExportSpecifier(propertyName, name) { - var node = createSynthesizedNode(252 /* ExportSpecifier */); + var node = createSynthesizedNode(252); node.propertyName = asName(propertyName); node.name = asName(name); return node; @@ -57007,9 +47720,8 @@ var ts; : node; } ts.updateExportSpecifier = updateExportSpecifier; - // Module references function createExternalModuleReference(expression) { - var node = createSynthesizedNode(254 /* ExternalModuleReference */); + var node = createSynthesizedNode(254); node.expression = expression; return node; } @@ -57020,9 +47732,8 @@ var ts; : node; } ts.updateExternalModuleReference = updateExternalModuleReference; - // JSX function createJsxElement(openingElement, children, closingElement) { - var node = createSynthesizedNode(255 /* JsxElement */); + var node = createSynthesizedNode(255); node.openingElement = openingElement; node.children = createNodeArray(children); node.closingElement = closingElement; @@ -57038,7 +47749,7 @@ var ts; } ts.updateJsxElement = updateJsxElement; function createJsxSelfClosingElement(tagName, typeArguments, attributes) { - var node = createSynthesizedNode(256 /* JsxSelfClosingElement */); + var node = createSynthesizedNode(256); node.tagName = tagName; node.typeArguments = typeArguments && createNodeArray(typeArguments); node.attributes = attributes; @@ -57054,7 +47765,7 @@ var ts; } ts.updateJsxSelfClosingElement = updateJsxSelfClosingElement; function createJsxOpeningElement(tagName, typeArguments, attributes) { - var node = createSynthesizedNode(257 /* JsxOpeningElement */); + var node = createSynthesizedNode(257); node.tagName = tagName; node.typeArguments = typeArguments && createNodeArray(typeArguments); node.attributes = attributes; @@ -57070,7 +47781,7 @@ var ts; } ts.updateJsxOpeningElement = updateJsxOpeningElement; function createJsxClosingElement(tagName) { - var node = createSynthesizedNode(258 /* JsxClosingElement */); + var node = createSynthesizedNode(258); node.tagName = tagName; return node; } @@ -57082,7 +47793,7 @@ var ts; } ts.updateJsxClosingElement = updateJsxClosingElement; function createJsxFragment(openingFragment, children, closingFragment) { - var node = createSynthesizedNode(259 /* JsxFragment */); + var node = createSynthesizedNode(259); node.openingFragment = openingFragment; node.children = createNodeArray(children); node.closingFragment = closingFragment; @@ -57098,7 +47809,7 @@ var ts; } ts.updateJsxFragment = updateJsxFragment; function createJsxAttribute(name, initializer) { - var node = createSynthesizedNode(262 /* JsxAttribute */); + var node = createSynthesizedNode(262); node.name = name; node.initializer = initializer; return node; @@ -57112,7 +47823,7 @@ var ts; } ts.updateJsxAttribute = updateJsxAttribute; function createJsxAttributes(properties) { - var node = createSynthesizedNode(263 /* JsxAttributes */); + var node = createSynthesizedNode(263); node.properties = createNodeArray(properties); return node; } @@ -57124,7 +47835,7 @@ var ts; } ts.updateJsxAttributes = updateJsxAttributes; function createJsxSpreadAttribute(expression) { - var node = createSynthesizedNode(264 /* JsxSpreadAttribute */); + var node = createSynthesizedNode(264); node.expression = expression; return node; } @@ -57136,7 +47847,7 @@ var ts; } ts.updateJsxSpreadAttribute = updateJsxSpreadAttribute; function createJsxExpression(dotDotDotToken, expression) { - var node = createSynthesizedNode(265 /* JsxExpression */); + var node = createSynthesizedNode(265); node.dotDotDotToken = dotDotDotToken; node.expression = expression; return node; @@ -57148,9 +47859,8 @@ var ts; : node; } ts.updateJsxExpression = updateJsxExpression; - // Clauses function createCaseClause(expression, statements) { - var node = createSynthesizedNode(266 /* CaseClause */); + var node = createSynthesizedNode(266); node.expression = ts.parenthesizeExpressionForList(expression); node.statements = createNodeArray(statements); return node; @@ -57164,7 +47874,7 @@ var ts; } ts.updateCaseClause = updateCaseClause; function createDefaultClause(statements) { - var node = createSynthesizedNode(267 /* DefaultClause */); + var node = createSynthesizedNode(267); node.statements = createNodeArray(statements); return node; } @@ -57176,7 +47886,7 @@ var ts; } ts.updateDefaultClause = updateDefaultClause; function createHeritageClause(token, types) { - var node = createSynthesizedNode(268 /* HeritageClause */); + var node = createSynthesizedNode(268); node.token = token; node.types = createNodeArray(types); return node; @@ -57189,7 +47899,7 @@ var ts; } ts.updateHeritageClause = updateHeritageClause; function createCatchClause(variableDeclaration, block) { - var node = createSynthesizedNode(269 /* CatchClause */); + var node = createSynthesizedNode(269); node.variableDeclaration = ts.isString(variableDeclaration) ? createVariableDeclaration(variableDeclaration) : variableDeclaration; node.block = block; return node; @@ -57202,9 +47912,8 @@ var ts; : node; } ts.updateCatchClause = updateCatchClause; - // Property assignments function createPropertyAssignment(name, initializer) { - var node = createSynthesizedNode(270 /* PropertyAssignment */); + var node = createSynthesizedNode(270); node.name = asName(name); node.questionToken = undefined; node.initializer = ts.parenthesizeExpressionForList(initializer); @@ -57219,7 +47928,7 @@ var ts; } ts.updatePropertyAssignment = updatePropertyAssignment; function createShorthandPropertyAssignment(name, objectAssignmentInitializer) { - var node = createSynthesizedNode(271 /* ShorthandPropertyAssignment */); + var node = createSynthesizedNode(271); node.name = asName(name); node.objectAssignmentInitializer = objectAssignmentInitializer !== undefined ? ts.parenthesizeExpressionForList(objectAssignmentInitializer) : undefined; return node; @@ -57233,8 +47942,8 @@ var ts; } ts.updateShorthandPropertyAssignment = updateShorthandPropertyAssignment; function createSpreadAssignment(expression) { - var node = createSynthesizedNode(272 /* SpreadAssignment */); - node.expression = expression !== undefined ? ts.parenthesizeExpressionForList(expression) : undefined; // TODO: GH#18217 + var node = createSynthesizedNode(272); + node.expression = expression !== undefined ? ts.parenthesizeExpressionForList(expression) : undefined; return node; } ts.createSpreadAssignment = createSpreadAssignment; @@ -57244,9 +47953,8 @@ var ts; : node; } ts.updateSpreadAssignment = updateSpreadAssignment; - // Enum function createEnumMember(name, initializer) { - var node = createSynthesizedNode(273 /* EnumMember */); + var node = createSynthesizedNode(273); node.name = asName(name); node.initializer = initializer && ts.parenthesizeExpressionForList(initializer); return node; @@ -57259,7 +47967,6 @@ var ts; : node; } ts.updateEnumMember = updateEnumMember; - // Top-level nodes function updateSourceFileNode(node, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) { if (node.statements !== statements || (isDeclarationFile !== undefined && node.isDeclarationFile !== isDeclarationFile) || @@ -57267,7 +47974,7 @@ var ts; (typeReferences !== undefined && node.typeReferenceDirectives !== typeReferences) || (libReferences !== undefined && node.libReferenceDirectives !== libReferences) || (hasNoDefaultLib !== undefined && node.hasNoDefaultLib !== hasNoDefaultLib)) { - var updated = createSynthesizedNode(274 /* SourceFile */); + var updated = createSynthesizedNode(274); updated.flags |= node.flags; updated.statements = createNodeArray(statements); updated.endOfFileToken = node.endOfFileToken; @@ -57332,9 +48039,6 @@ var ts; return node; } ts.updateSourceFileNode = updateSourceFileNode; - /** - * Creates a shallow, memberwise clone of a node for mutation. - */ function getMutableClone(node) { var clone = getSynthesizedClone(node); clone.pos = node.pos; @@ -57343,54 +48047,29 @@ var ts; return clone; } ts.getMutableClone = getMutableClone; - // Transformation nodes - /** - * Creates a synthetic statement to act as a placeholder for a not-emitted statement in - * order to preserve comments. - * - * @param original The original statement. - */ function createNotEmittedStatement(original) { - var node = createSynthesizedNode(300 /* NotEmittedStatement */); + var node = createSynthesizedNode(300); node.original = original; setTextRange(node, original); return node; } ts.createNotEmittedStatement = createNotEmittedStatement; - /** - * Creates a synthetic element to act as a placeholder for the end of an emitted declaration in - * order to properly emit exports. - */ - /* @internal */ function createEndOfDeclarationMarker(original) { - var node = createSynthesizedNode(304 /* EndOfDeclarationMarker */); + var node = createSynthesizedNode(304); node.emitNode = {}; node.original = original; return node; } ts.createEndOfDeclarationMarker = createEndOfDeclarationMarker; - /** - * Creates a synthetic element to act as a placeholder for the beginning of a merged declaration in - * order to properly emit exports. - */ - /* @internal */ function createMergeDeclarationMarker(original) { - var node = createSynthesizedNode(303 /* MergeDeclarationMarker */); + var node = createSynthesizedNode(303); node.emitNode = {}; node.original = original; return node; } ts.createMergeDeclarationMarker = createMergeDeclarationMarker; - /** - * Creates a synthetic expression to act as a placeholder for a not-emitted expression in - * order to preserve comments or sourcemap positions. - * - * @param expression The inner expression to emit. - * @param original The original outer expression. - * @param location The location for the expression. Defaults to the positions from "original" if provided. - */ function createPartiallyEmittedExpression(expression, original) { - var node = createSynthesizedNode(301 /* PartiallyEmittedExpression */); + var node = createSynthesizedNode(301); node.expression = expression; node.original = original; setTextRange(node, original); @@ -57406,17 +48085,17 @@ var ts; ts.updatePartiallyEmittedExpression = updatePartiallyEmittedExpression; function flattenCommaElements(node) { if (ts.nodeIsSynthesized(node) && !ts.isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) { - if (node.kind === 302 /* CommaListExpression */) { + if (node.kind === 302) { return node.elements; } - if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26 /* CommaToken */) { + if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) { return [node.left, node.right]; } } return node; } function createCommaList(elements) { - var node = createSynthesizedNode(302 /* CommaListExpression */); + var node = createSynthesizedNode(302); node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements)); return node; } @@ -57429,21 +48108,21 @@ var ts; ts.updateCommaList = updateCommaList; function createBundle(sourceFiles, prepends) { if (prepends === void 0) { prepends = ts.emptyArray; } - var node = ts.createNode(275 /* Bundle */); + var node = ts.createNode(275); node.prepends = prepends; node.sourceFiles = sourceFiles; return node; } ts.createBundle = createBundle; function createUnparsedSourceFile(text, map) { - var node = ts.createNode(276 /* UnparsedSource */); + var node = ts.createNode(276); node.text = text; node.sourceMapText = map; return node; } ts.createUnparsedSourceFile = createUnparsedSourceFile; function createInputFiles(javascript, declaration, javascriptMapText, declarationMapText) { - var node = ts.createNode(277 /* InputFiles */); + var node = ts.createNode(277); node.javascriptText = javascript; node.javascriptMapText = javascriptMapText; node.declarationText = declaration; @@ -57460,70 +48139,55 @@ var ts; } ts.updateBundle = updateBundle; function createImmediatelyInvokedFunctionExpression(statements, param, paramValue) { - return createCall(createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ param ? [param] : [], - /*type*/ undefined, createBlock(statements, /*multiLine*/ true)), - /*typeArguments*/ undefined, - /*argumentsArray*/ paramValue ? [paramValue] : []); + return createCall(createFunctionExpression(undefined, undefined, undefined, undefined, param ? [param] : [], undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []); } ts.createImmediatelyInvokedFunctionExpression = createImmediatelyInvokedFunctionExpression; function createImmediatelyInvokedArrowFunction(statements, param, paramValue) { - return createCall(createArrowFunction( - /*modifiers*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ param ? [param] : [], - /*type*/ undefined, - /*equalsGreaterThanToken*/ undefined, createBlock(statements, /*multiLine*/ true)), - /*typeArguments*/ undefined, - /*argumentsArray*/ paramValue ? [paramValue] : []); + return createCall(createArrowFunction(undefined, undefined, param ? [param] : [], undefined, undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []); } ts.createImmediatelyInvokedArrowFunction = createImmediatelyInvokedArrowFunction; function createComma(left, right) { - return createBinary(left, 26 /* CommaToken */, right); + return createBinary(left, 26, right); } ts.createComma = createComma; function createLessThan(left, right) { - return createBinary(left, 27 /* LessThanToken */, right); + return createBinary(left, 27, right); } ts.createLessThan = createLessThan; function createAssignment(left, right) { - return createBinary(left, 58 /* EqualsToken */, right); + return createBinary(left, 58, right); } ts.createAssignment = createAssignment; function createStrictEquality(left, right) { - return createBinary(left, 34 /* EqualsEqualsEqualsToken */, right); + return createBinary(left, 34, right); } ts.createStrictEquality = createStrictEquality; function createStrictInequality(left, right) { - return createBinary(left, 35 /* ExclamationEqualsEqualsToken */, right); + return createBinary(left, 35, right); } ts.createStrictInequality = createStrictInequality; function createAdd(left, right) { - return createBinary(left, 37 /* PlusToken */, right); + return createBinary(left, 37, right); } ts.createAdd = createAdd; function createSubtract(left, right) { - return createBinary(left, 38 /* MinusToken */, right); + return createBinary(left, 38, right); } ts.createSubtract = createSubtract; function createPostfixIncrement(operand) { - return createPostfix(operand, 43 /* PlusPlusToken */); + return createPostfix(operand, 43); } ts.createPostfixIncrement = createPostfixIncrement; function createLogicalAnd(left, right) { - return createBinary(left, 53 /* AmpersandAmpersandToken */, right); + return createBinary(left, 53, right); } ts.createLogicalAnd = createLogicalAnd; function createLogicalOr(left, right) { - return createBinary(left, 54 /* BarBarToken */, right); + return createBinary(left, 54, right); } ts.createLogicalOr = createLogicalOr; function createLogicalNot(operand) { - return createPrefix(51 /* ExclamationToken */, operand); + return createPrefix(51, operand); } ts.createLogicalNot = createLogicalNot; function createVoidZero() { @@ -57531,14 +48195,13 @@ var ts; } ts.createVoidZero = createVoidZero; function createExportDefault(expression) { - return createExportAssignment(/*decorators*/ undefined, /*modifiers*/ undefined, /*isExportEquals*/ false, expression); + return createExportAssignment(undefined, undefined, false, expression); } ts.createExportDefault = createExportDefault; function createExternalModuleExport(exportName) { - return createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, createNamedExports([createExportSpecifier(/*propertyName*/ undefined, exportName)])); + return createExportDeclaration(undefined, undefined, createNamedExports([createExportSpecifier(undefined, exportName)])); } ts.createExternalModuleExport = createExternalModuleExport; - // Utilities function asName(name) { return ts.isString(name) ? createIdentifier(name) : name; } @@ -57551,17 +48214,7 @@ var ts; function asToken(value) { return typeof value === "number" ? createToken(value) : value; } - /** - * Clears any EmitNode entries from parse-tree nodes. - * @param sourceFile A source file. - */ function disposeEmitNodes(sourceFile) { - // During transformation we may need to annotate a parse tree node with transient - // transformation properties. As parse tree nodes live longer than transformation - // nodes, we need to make sure we reclaim any memory allocated for custom ranges - // from these nodes to ensure we do not hold onto entire subtrees just for position - // information. We also need to reset these nodes to a pre-transformation state - // for incremental parsing scenarios so that we do not impact later emit. sourceFile = ts.getSourceFileOfNode(ts.getParseTreeNode(sourceFile)); var emitNode = sourceFile && sourceFile.emitNode; var annotatedNodes = emitNode && emitNode.annotatedNodes; @@ -57573,18 +48226,10 @@ var ts; } } ts.disposeEmitNodes = disposeEmitNodes; - /** - * Associates a node with the current transformation, initializing - * various transient transformation properties. - */ - /* @internal */ function getOrCreateEmitNode(node) { if (!node.emitNode) { if (ts.isParseTreeNode(node)) { - // To avoid holding onto transformation artifacts, we keep track of any - // parse tree node we are annotating. This allows us to clean them up after - // all transformations have completed. - if (node.kind === 274 /* SourceFile */) { + if (node.kind === 274) { return node.emitNode = { annotatedNodes: [node] }; } var sourceFile = ts.getSourceFileOfNode(node); @@ -57603,61 +48248,38 @@ var ts; return range; } ts.setTextRange = setTextRange; - /** - * Sets flags that control emit behavior of a node. - */ function setEmitFlags(node, emitFlags) { getOrCreateEmitNode(node).flags = emitFlags; return node; } ts.setEmitFlags = setEmitFlags; - /** - * Sets flags that control emit behavior of a node. - */ - /* @internal */ function addEmitFlags(node, emitFlags) { var emitNode = getOrCreateEmitNode(node); emitNode.flags = emitNode.flags | emitFlags; return node; } ts.addEmitFlags = addEmitFlags; - /** - * Gets a custom text range to use when emitting source maps. - */ 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. - */ function setSourceMapRange(node, range) { getOrCreateEmitNode(node).sourceMapRange = range; return node; } ts.setSourceMapRange = setSourceMapRange; - // tslint:disable-next-line variable-name var SourceMapSource; - /** - * Create an external source map source file reference - */ function createSourceMapSource(fileName, text, skipTrivia) { return new (SourceMapSource || (SourceMapSource = ts.objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia); } ts.createSourceMapSource = createSourceMapSource; - /** - * Gets the TextRange to use for source maps for a token of a node. - */ 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. - */ function setTokenSourceMapRange(node, token, range) { var emitNode = getOrCreateEmitNode(node); var tokenSourceMapRanges = emitNode.tokenSourceMapRanges || (emitNode.tokenSourceMapRanges = []); @@ -57665,35 +48287,21 @@ var ts; return node; } ts.setTokenSourceMapRange = setTokenSourceMapRange; - /** - * Gets a custom text range to use when emitting comments. - */ - /*@internal*/ function getStartsOnNewLine(node) { var emitNode = node.emitNode; return emitNode && emitNode.startsOnNewLine; } ts.getStartsOnNewLine = getStartsOnNewLine; - /** - * Sets a custom text range to use when emitting comments. - */ - /*@internal*/ function setStartsOnNewLine(node, newLine) { getOrCreateEmitNode(node).startsOnNewLine = newLine; return node; } ts.setStartsOnNewLine = setStartsOnNewLine; - /** - * Gets a custom text range to use when emitting comments. - */ function getCommentRange(node) { var emitNode = node.emitNode; return (emitNode && emitNode.commentRange) || node; } ts.getCommentRange = getCommentRange; - /** - * Sets a custom text range to use when emitting comments. - */ function setCommentRange(node, range) { getOrCreateEmitNode(node).commentRange = range; return node; @@ -57736,35 +48344,23 @@ var ts; return node; } ts.moveSyntheticComments = moveSyntheticComments; - /** - * Gets the constant value to emit for an expression. - */ function getConstantValue(node) { var emitNode = node.emitNode; return emitNode && emitNode.constantValue; } ts.getConstantValue = getConstantValue; - /** - * Sets the constant value to emit for an expression. - */ function setConstantValue(node, value) { var emitNode = getOrCreateEmitNode(node); emitNode.constantValue = value; return node; } ts.setConstantValue = setConstantValue; - /** - * 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; - /** - * Add EmitHelpers to a node. - */ function addEmitHelpers(node, helpers) { if (ts.some(helpers)) { var emitNode = getOrCreateEmitNode(node); @@ -57776,9 +48372,6 @@ var ts; return node; } ts.addEmitHelpers = addEmitHelpers; - /** - * Removes an EmitHelper from a node. - */ function removeEmitHelper(node, helper) { var emitNode = node.emitNode; if (emitNode) { @@ -57790,17 +48383,11 @@ var ts; 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; @@ -57823,16 +48410,15 @@ var ts; } } ts.moveEmitHelpers = moveEmitHelpers; - /* @internal */ function compareEmitHelpers(x, y) { if (x === y) - return 0 /* EqualTo */; + return 0; if (x.priority === y.priority) - return 0 /* EqualTo */; + return 0; if (x.priority === undefined) - return 1 /* GreaterThan */; + return 1; if (y.priority === undefined) - return -1 /* LessThan */; + return -1; return ts.compareValues(x.priority, y.priority); } ts.compareEmitHelpers = compareEmitHelpers; @@ -57850,7 +48436,6 @@ var ts; var flags = sourceEmitNode.flags, leadingComments = sourceEmitNode.leadingComments, trailingComments = sourceEmitNode.trailingComments, commentRange = sourceEmitNode.commentRange, sourceMapRange = sourceEmitNode.sourceMapRange, tokenSourceMapRanges = sourceEmitNode.tokenSourceMapRanges, constantValue = sourceEmitNode.constantValue, helpers = sourceEmitNode.helpers, startsOnNewLine = sourceEmitNode.startsOnNewLine; if (!destEmitNode) destEmitNode = {}; - // We are using `.slice()` here in case `destEmitNode.leadingComments` is pushed to later. if (leadingComments) destEmitNode.leadingComments = ts.addRange(leadingComments.slice(), destEmitNode.leadingComments); if (trailingComments) @@ -57880,7 +48465,6 @@ var ts; return destRanges; } })(ts || (ts = {})); -/* @internal */ (function (ts) { ts.nullTransformationContext = { enableEmitNotification: ts.noop, @@ -57916,21 +48500,19 @@ var ts; var expression = ts.setTextRange(ts.isIdentifier(memberName) ? ts.createPropertyAccess(target, memberName) : ts.createElementAccess(target, memberName), memberName); - ts.getOrCreateEmitNode(expression).flags |= 64 /* NoNestedSourceMaps */; + ts.getOrCreateEmitNode(expression).flags |= 64; return expression; } } ts.createMemberAccessForPropertyName = createMemberAccessForPropertyName; function createFunctionCall(func, thisArg, argumentsList, location) { - return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "call"), - /*typeArguments*/ undefined, [ + return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "call"), undefined, [ thisArg ].concat(argumentsList)), location); } ts.createFunctionCall = createFunctionCall; function createFunctionApply(func, thisArg, argumentsExpression, location) { - return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "apply"), - /*typeArguments*/ undefined, [ + return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "apply"), undefined, [ thisArg, argumentsExpression ]), location); @@ -57941,27 +48523,20 @@ var ts; if (start !== undefined) { argumentsList.push(typeof start === "number" ? ts.createLiteral(start) : start); } - return ts.createCall(ts.createPropertyAccess(array, "slice"), /*typeArguments*/ undefined, argumentsList); + return ts.createCall(ts.createPropertyAccess(array, "slice"), undefined, argumentsList); } ts.createArraySlice = createArraySlice; function createArrayConcat(array, values) { - return ts.createCall(ts.createPropertyAccess(array, "concat"), - /*typeArguments*/ undefined, values); + return ts.createCall(ts.createPropertyAccess(array, "concat"), undefined, values); } ts.createArrayConcat = createArrayConcat; function createMathPow(left, right, location) { - return ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Math"), "pow"), - /*typeArguments*/ undefined, [left, right]), location); + return ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Math"), "pow"), undefined, [left, right]), location); } ts.createMathPow = createMathPow; function createReactNamespace(reactNamespace, parent) { - // To ensure the emit resolver can properly resolve the namespace, we need to - // treat this identifier as if it were a source tree node by clearing the `Synthesized` - // flag and setting a parent node. var react = ts.createIdentifier(reactNamespace || "React"); - react.flags &= ~8 /* Synthesized */; - // Set the parent that is in parse tree - // this makes sure that parent chain is intact for checker to traverse complete scope tree + react.flags &= ~8; react.parent = ts.getParseTreeNode(parent); return react; } @@ -58001,8 +48576,7 @@ var ts; argumentsList.push(children[0]); } } - return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), - /*typeArguments*/ undefined, argumentsList), location); + return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location); } ts.createExpressionForJsxElement = createExpressionForJsxElement; function createExpressionForJsxFragment(jsxFactoryEntity, reactNamespace, children, parentElement, location) { @@ -58021,13 +48595,11 @@ var ts; argumentsList.push(children[0]); } } - return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), - /*typeArguments*/ undefined, argumentsList), location); + return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location); } ts.createExpressionForJsxFragment = createExpressionForJsxFragment; - // Helpers function getHelperName(name) { - return ts.setEmitFlags(ts.createIdentifier(name), 4096 /* HelperName */ | 2 /* AdviseOnEmitNode */); + return ts.setEmitFlags(ts.createIdentifier(name), 4096 | 2); } ts.getHelperName = getHelperName; var valuesHelper = { @@ -58037,8 +48609,7 @@ var ts; }; function createValuesHelper(context, expression, location) { context.requestEmitHelper(valuesHelper); - return ts.setTextRange(ts.createCall(getHelperName("__values"), - /*typeArguments*/ undefined, [expression]), location); + return ts.setTextRange(ts.createCall(getHelperName("__values"), undefined, [expression]), location); } ts.createValuesHelper = createValuesHelper; var readHelper = { @@ -58048,8 +48619,7 @@ var ts; }; function createReadHelper(context, iteratorRecord, count, location) { context.requestEmitHelper(readHelper); - return ts.setTextRange(ts.createCall(getHelperName("__read"), - /*typeArguments*/ undefined, count !== undefined + return ts.setTextRange(ts.createCall(getHelperName("__read"), undefined, count !== undefined ? [iteratorRecord, ts.createLiteral(count)] : [iteratorRecord]), location); } @@ -58062,23 +48632,18 @@ var ts; function createSpreadHelper(context, argumentList, location) { context.requestEmitHelper(readHelper); context.requestEmitHelper(spreadHelper); - return ts.setTextRange(ts.createCall(getHelperName("__spread"), - /*typeArguments*/ undefined, argumentList), location); + return ts.setTextRange(ts.createCall(getHelperName("__spread"), undefined, argumentList), location); } ts.createSpreadHelper = createSpreadHelper; - // Utilities function createForOfBindingStatement(node, boundValue) { if (ts.isVariableDeclarationList(node)) { var firstDeclaration = ts.first(node.declarations); - var updatedDeclaration = ts.updateVariableDeclaration(firstDeclaration, firstDeclaration.name, - /*typeNode*/ undefined, boundValue); - return ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.updateVariableDeclarationList(node, [updatedDeclaration])), - /*location*/ node); + var updatedDeclaration = ts.updateVariableDeclaration(firstDeclaration, firstDeclaration.name, undefined, boundValue); + return ts.setTextRange(ts.createVariableStatement(undefined, ts.updateVariableDeclarationList(node, [updatedDeclaration])), node); } else { - var updatedExpression = ts.setTextRange(ts.createAssignment(node, boundValue), /*location*/ node); - return ts.setTextRange(ts.createStatement(updatedExpression), /*location*/ node); + var updatedExpression = ts.setTextRange(ts.createAssignment(node, boundValue), node); + return ts.setTextRange(ts.createStatement(updatedExpression), node); } } ts.createForOfBindingStatement = createForOfBindingStatement; @@ -58087,7 +48652,7 @@ var ts; return ts.updateBlock(dest, ts.setTextRange(ts.createNodeArray([source].concat(dest.statements)), dest.statements)); } else { - return ts.createBlock(ts.createNodeArray([dest, source]), /*multiLine*/ true); + return ts.createBlock(ts.createNodeArray([dest, source]), true); } } ts.insertLeadingStatement = insertLeadingStatement; @@ -58095,7 +48660,7 @@ var ts; if (!outermostLabeledStatement) { return node; } - var updated = ts.updateLabel(outermostLabeledStatement, outermostLabeledStatement.label, outermostLabeledStatement.statement.kind === 228 /* LabeledStatement */ + var updated = ts.updateLabel(outermostLabeledStatement, outermostLabeledStatement.label, outermostLabeledStatement.statement.kind === 228 ? restoreEnclosingLabel(node, outermostLabeledStatement.statement) : node); if (afterRestoreLabelCallback) { @@ -58107,19 +48672,19 @@ var ts; function shouldBeCapturedInTempVariable(node, cacheIdentifiers) { var target = ts.skipParentheses(node); switch (target.kind) { - case 71 /* Identifier */: + case 71: return cacheIdentifiers; - case 99 /* ThisKeyword */: - case 8 /* NumericLiteral */: - case 9 /* StringLiteral */: + case 99: + case 8: + case 9: return false; - case 183 /* ArrayLiteralExpression */: + case 183: var elements = target.elements; if (elements.length === 0) { return false; } return true; - case 184 /* ObjectLiteralExpression */: + case 184: return target.properties.length > 0; default: return true; @@ -58127,28 +48692,27 @@ var ts; } function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers) { if (cacheIdentifiers === void 0) { cacheIdentifiers = false; } - var callee = skipOuterExpressions(expression, 7 /* All */); + var callee = skipOuterExpressions(expression, 7); var thisArg; var target; if (ts.isSuperProperty(callee)) { thisArg = ts.createThis(); target = callee; } - else if (callee.kind === 97 /* SuperKeyword */) { + else if (callee.kind === 97) { thisArg = ts.createThis(); - target = languageVersion < 2 /* ES2015 */ + target = languageVersion < 2 ? ts.setTextRange(ts.createIdentifier("_super"), callee) : callee; } - else if (ts.getEmitFlags(callee) & 4096 /* HelperName */) { + else if (ts.getEmitFlags(callee) & 4096) { thisArg = ts.createVoidZero(); target = parenthesizeForAccess(callee); } else { switch (callee.kind) { - case 185 /* PropertyAccessExpression */: { + case 185: { if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { - // for `a.b()` target is `(_a = a).b` and thisArg is `_a` thisArg = ts.createTempVariable(recordTempVariable); target = ts.createPropertyAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.name); ts.setTextRange(target, callee); @@ -58159,9 +48723,8 @@ var ts; } break; } - case 186 /* ElementAccessExpression */: { + case 186: { if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { - // for `a[b]()` target is `(_a = a)[b]` and thisArg is `_a` thisArg = ts.createTempVariable(recordTempVariable); target = ts.createElementAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.argumentExpression); ts.setTextRange(target, callee); @@ -58173,7 +48736,6 @@ var ts; break; } default: { - // for `a()` target is `a` and thisArg is `void 0` thisArg = ts.createVoidZero(); target = parenthesizeForAccess(expression); break; @@ -58184,8 +48746,6 @@ var ts; } ts.createCallBinding = createCallBinding; function inlineExpressions(expressions) { - // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call - // stack size exceeded" errors. return expressions.length > 10 ? ts.createCommaList(expressions) : ts.reduceLeft(expressions, ts.createComma); @@ -58216,14 +48776,14 @@ var ts; ts.createExpressionForPropertyName = createExpressionForPropertyName; function createExpressionForObjectLiteralElementLike(node, property, receiver) { switch (property.kind) { - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return createExpressionForAccessorDeclaration(node.properties, property, receiver, !!node.multiLine); - case 270 /* PropertyAssignment */: + case 270: return createExpressionForPropertyAssignment(property, receiver); - case 271 /* ShorthandPropertyAssignment */: + case 271: return createExpressionForShorthandPropertyAssignment(property, receiver); - case 154 /* MethodDeclaration */: + case 154: return createExpressionForMethodDeclaration(property, receiver); } } @@ -58233,24 +48793,14 @@ var ts; if (property === firstAccessor) { var properties_9 = []; if (getAccessor) { - var getterFunction = ts.createFunctionExpression(getAccessor.modifiers, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, getAccessor.parameters, - /*type*/ undefined, getAccessor.body // TODO: GH#18217 - ); + var getterFunction = ts.createFunctionExpression(getAccessor.modifiers, undefined, undefined, undefined, getAccessor.parameters, undefined, getAccessor.body); ts.setTextRange(getterFunction, getAccessor); ts.setOriginalNode(getterFunction, getAccessor); var getter = ts.createPropertyAssignment("get", getterFunction); properties_9.push(getter); } if (setAccessor) { - var setterFunction = ts.createFunctionExpression(setAccessor.modifiers, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, setAccessor.parameters, - /*type*/ undefined, setAccessor.body // TODO: GH#18217 - ); + var setterFunction = ts.createFunctionExpression(setAccessor.modifiers, undefined, undefined, undefined, setAccessor.parameters, undefined, setAccessor.body); ts.setTextRange(setterFunction, setAccessor); ts.setOriginalNode(setterFunction, setAccessor); var setter = ts.createPropertyAssignment("set", setterFunction); @@ -58258,108 +48808,48 @@ var ts; } properties_9.push(ts.createPropertyAssignment("enumerable", ts.createTrue())); properties_9.push(ts.createPropertyAssignment("configurable", ts.createTrue())); - var expression = ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), - /*typeArguments*/ undefined, [ + var expression = ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [ receiver, createExpressionForPropertyName(property.name), ts.createObjectLiteral(properties_9, multiLine) - ]), - /*location*/ firstAccessor); + ]), firstAccessor); return ts.aggregateTransformFlags(expression); } return undefined; } function createExpressionForPropertyAssignment(property, receiver) { - return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, /*location*/ property.name), property.initializer), property), property)); + return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, property.name), property.initializer), property), property)); } function createExpressionForShorthandPropertyAssignment(property, receiver) { - return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, /*location*/ property.name), ts.getSynthesizedClone(property.name)), - /*location*/ property), - /*original*/ property)); + return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, property.name), ts.getSynthesizedClone(property.name)), property), property)); } function createExpressionForMethodDeclaration(method, receiver) { - return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, method.name, /*location*/ method.name), ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(method.modifiers, method.asteriskToken, - /*name*/ undefined, - /*typeParameters*/ undefined, method.parameters, - /*type*/ undefined, method.body // TODO: GH#18217 - ), - /*location*/ method), - /*original*/ method)), - /*location*/ method), - /*original*/ method)); + return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, method.name, method.name), ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(method.modifiers, method.asteriskToken, undefined, undefined, method.parameters, undefined, method.body), method), method)), method), method)); } - /** - * Gets the internal name of a declaration. This is primarily used for declarations that can be - * referred to by name in the body of an ES5 class function body. An internal name will *never* - * be prefixed with an module or namespace export modifier like "exports." when emitted as an - * expression. An internal name will also *never* be renamed due to a collision with a block - * scoped variable. - * - * @param node The declaration. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getInternalName(node, allowComments, allowSourceMaps) { - return getName(node, allowComments, allowSourceMaps, 16384 /* LocalName */ | 32768 /* InternalName */); + return getName(node, allowComments, allowSourceMaps, 16384 | 32768); } ts.getInternalName = getInternalName; - /** - * Gets whether an identifier should only be referred to by its internal name. - */ function isInternalName(node) { - return (ts.getEmitFlags(node) & 32768 /* InternalName */) !== 0; + return (ts.getEmitFlags(node) & 32768) !== 0; } ts.isInternalName = isInternalName; - /** - * Gets the local name of a declaration. This is primarily used for declarations that can be - * referred to by name in the declaration's immediate scope (classes, enums, namespaces). A - * local name will *never* be prefixed with an module or namespace export modifier like - * "exports." when emitted as an expression. - * - * @param node The declaration. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getLocalName(node, allowComments, allowSourceMaps) { - return getName(node, allowComments, allowSourceMaps, 16384 /* LocalName */); + return getName(node, allowComments, allowSourceMaps, 16384); } ts.getLocalName = getLocalName; - /** - * Gets whether an identifier should only be referred to by its local name. - */ function isLocalName(node) { - return (ts.getEmitFlags(node) & 16384 /* LocalName */) !== 0; + return (ts.getEmitFlags(node) & 16384) !== 0; } ts.isLocalName = isLocalName; - /** - * Gets the export name of a declaration. This is primarily used for declarations that can be - * referred to by name in the declaration's immediate scope (classes, enums, namespaces). An - * export name will *always* be prefixed with an module or namespace export modifier like - * `"exports."` when emitted as an expression if the name points to an exported symbol. - * - * @param node The declaration. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getExportName(node, allowComments, allowSourceMaps) { - return getName(node, allowComments, allowSourceMaps, 8192 /* ExportName */); + return getName(node, allowComments, allowSourceMaps, 8192); } ts.getExportName = getExportName; - /** - * Gets whether an identifier should only be referred to by its export representation if the - * name points to an exported symbol. - */ function isExportName(node) { - return (ts.getEmitFlags(node) & 8192 /* ExportName */) !== 0; + return (ts.getEmitFlags(node) & 8192) !== 0; } ts.isExportName = isExportName; - /** - * Gets the name of a declaration for use in declarations. - * - * @param node The declaration. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getDeclarationName(node, allowComments, allowSourceMaps) { return getName(node, allowComments, allowSourceMaps); } @@ -58371,49 +48861,30 @@ var ts; var name = ts.getMutableClone(nodeName); emitFlags |= ts.getEmitFlags(nodeName); if (!allowSourceMaps) - emitFlags |= 48 /* NoSourceMap */; + emitFlags |= 48; if (!allowComments) - emitFlags |= 1536 /* NoComments */; + emitFlags |= 1536; if (emitFlags) ts.setEmitFlags(name, emitFlags); return name; } return ts.getGeneratedNameForNode(node); } - /** - * Gets the exported name of a declaration for use in expressions. - * - * An exported name will *always* be prefixed with an module or namespace export modifier like - * "exports." if the name points to an exported symbol. - * - * @param ns The namespace identifier. - * @param node The declaration. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getExternalModuleOrNamespaceExportName(ns, node, allowComments, allowSourceMaps) { - if (ns && ts.hasModifier(node, 1 /* Export */)) { + if (ns && ts.hasModifier(node, 1)) { return getNamespaceMemberName(ns, getName(node), allowComments, allowSourceMaps); } return getExportName(node, allowComments, allowSourceMaps); } ts.getExternalModuleOrNamespaceExportName = getExternalModuleOrNamespaceExportName; - /** - * Gets a namespace-qualified name for use in expressions. - * - * @param ns The namespace identifier. - * @param name The name. - * @param allowComments A value indicating whether comments may be emitted for the name. - * @param allowSourceMaps A value indicating whether source maps may be emitted for the name. - */ function getNamespaceMemberName(ns, name, allowComments, allowSourceMaps) { var qualifiedName = ts.createPropertyAccess(ns, ts.nodeIsSynthesized(name) ? name : ts.getSynthesizedClone(name)); ts.setTextRange(qualifiedName, name); var emitFlags = 0; if (!allowSourceMaps) - emitFlags |= 48 /* NoSourceMap */; + emitFlags |= 48; if (!allowComments) - emitFlags |= 1536 /* NoComments */; + emitFlags |= 1536; if (emitFlags) ts.setEmitFlags(qualifiedName, emitFlags); return qualifiedName; @@ -58430,7 +48901,7 @@ var ts; ts.setOriginalNode(updated, node); ts.setTextRange(updated, node); if (ts.getStartsOnNewLine(node)) { - ts.setStartsOnNewLine(updated, /*newLine*/ true); + ts.setStartsOnNewLine(updated, true); } ts.aggregateTransformFlags(updated); return updated; @@ -58439,28 +48910,11 @@ var ts; function isUseStrictPrologue(node) { return ts.isStringLiteral(node.expression) && node.expression.text === "use strict"; } - /** - * Add any necessary prologue-directives into target statement-array. - * The function needs to be called during each transformation step. - * This function needs to be called whenever we transform the statement - * list of a source file, namespace, or function-like body. - * - * @param target: result statements array - * @param source: origin statements array - * @param ensureUseStrict: boolean determining whether the function need to add prologue-directives - * @param visitor: Optional callback used to visit any custom prologue directives. - */ function addPrologue(target, source, ensureUseStrict, visitor) { var offset = addStandardPrologue(target, source, ensureUseStrict); return addCustomPrologue(target, source, offset, visitor); } ts.addPrologue = addPrologue; - /** - * Add just the standard (string-expression) prologue-directives into target statement-array. - * The function needs to be called during each transformation step. - * This function needs to be called whenever we transform the statement - * list of a source file, namespace, or function-like body. - */ function addStandardPrologue(target, source, ensureUseStrict) { ts.Debug.assert(target.length === 0, "Prologue directives should be at the first statement in the target statements array"); var foundUseStrict = false; @@ -58489,7 +48943,7 @@ var ts; var numStatements = source.length; while (statementOffset !== undefined && statementOffset < numStatements) { var statement = source[statementOffset]; - if (ts.getEmitFlags(statement) & 1048576 /* CustomPrologue */) { + if (ts.getEmitFlags(statement) & 1048576) { ts.append(target, visitor ? ts.visitNode(statement, visitor, ts.isStatement) : statement); } else { @@ -58507,11 +48961,6 @@ var ts; && isUseStrictPrologue(firstStatement); } ts.startsWithUseStrict = startsWithUseStrict; - /** - * Ensures "use strict" directive is added - * - * @param statements An array of statements - */ function ensureUseStrict(statements) { var foundUseStrict = false; for (var _i = 0, statements_3 = statements; _i < statements_3.length; _i++) { @@ -58534,19 +48983,9 @@ var ts; return statements; } ts.ensureUseStrict = ensureUseStrict; - /** - * Wraps the operand to a BinaryExpression in parentheses if they are needed to preserve the intended - * order of operations. - * - * @param binaryOperator The operator for the BinaryExpression. - * @param operand The operand for the BinaryExpression. - * @param isLeftSideOfBinary A value indicating whether the operand is the left side of the - * BinaryExpression. - */ function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { var skipped = ts.skipPartiallyEmittedExpressions(operand); - // If the resulting expression is already parenthesized, we do not need to do any further processing. - if (skipped.kind === 191 /* ParenthesizedExpression */) { + if (skipped.kind === 191) { return operand; } return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) @@ -58554,131 +48993,55 @@ var ts; : operand; } ts.parenthesizeBinaryOperand = parenthesizeBinaryOperand; - /** - * Determines whether the operand to a BinaryExpression needs to be parenthesized. - * - * @param binaryOperator The operator for the BinaryExpression. - * @param operand The operand for the BinaryExpression. - * @param isLeftSideOfBinary A value indicating whether the operand is the left side of the - * BinaryExpression. - */ function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { - // If the operand has lower precedence, then it needs to be parenthesized to preserve the - // intent of the expression. For example, if the operand is `a + b` and the operator is - // `*`, then we need to parenthesize the operand to preserve the intended order of - // operations: `(a + b) * x`. - // - // If the operand has higher precedence, then it does not need to be parenthesized. For - // example, if the operand is `a * b` and the operator is `+`, then we do not need to - // parenthesize to preserve the intended order of operations: `a * b + x`. - // - // If the operand has the same precedence, then we need to check the associativity of - // the operator based on whether this is the left or right operand of the expression. - // - // For example, if `a / d` is on the right of operator `*`, we need to parenthesize - // to preserve the intended order of operations: `x * (a / d)` - // - // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve - // the intended order of operations: `(a ** b) ** c` - var binaryOperatorPrecedence = ts.getOperatorPrecedence(200 /* BinaryExpression */, binaryOperator); - var binaryOperatorAssociativity = ts.getOperatorAssociativity(200 /* BinaryExpression */, binaryOperator); + var binaryOperatorPrecedence = ts.getOperatorPrecedence(200, binaryOperator); + var binaryOperatorAssociativity = ts.getOperatorAssociativity(200, binaryOperator); var emittedOperand = ts.skipPartiallyEmittedExpressions(operand); var operandPrecedence = ts.getExpressionPrecedence(emittedOperand); switch (ts.compareValues(operandPrecedence, binaryOperatorPrecedence)) { - case -1 /* LessThan */: - // If the operand is the right side of a right-associative binary operation - // and is a yield expression, then we do not need parentheses. + case -1: if (!isLeftSideOfBinary - && binaryOperatorAssociativity === 1 /* Right */ - && operand.kind === 203 /* YieldExpression */) { + && binaryOperatorAssociativity === 1 + && operand.kind === 203) { return false; } return true; - case 1 /* GreaterThan */: + case 1: return false; - case 0 /* EqualTo */: + case 0: if (isLeftSideOfBinary) { - // No need to parenthesize the left operand when the binary operator is - // left associative: - // (a*b)/x -> a*b/x - // (a**b)/x -> a**b/x - // - // Parentheses are needed for the left operand when the binary operator is - // right associative: - // (a/b)**x -> (a/b)**x - // (a**b)**x -> (a**b)**x - return binaryOperatorAssociativity === 1 /* Right */; + return binaryOperatorAssociativity === 1; } else { if (ts.isBinaryExpression(emittedOperand) && emittedOperand.operatorToken.kind === binaryOperator) { - // No need to parenthesize the right operand when the binary operator and - // operand are the same and one of the following: - // x*(a*b) => x*a*b - // x|(a|b) => x|a|b - // x&(a&b) => x&a&b - // x^(a^b) => x^a^b if (operatorHasAssociativeProperty(binaryOperator)) { return false; } - // No need to parenthesize the right operand when the binary operator - // is plus (+) if both the left and right operands consist solely of either - // literals of the same kind or binary plus (+) expressions for literals of - // the same kind (recursively). - // "a"+(1+2) => "a"+(1+2) - // "a"+("b"+"c") => "a"+"b"+"c" - if (binaryOperator === 37 /* PlusToken */) { - var leftKind = leftOperand ? getLiteralKindOfBinaryPlusOperand(leftOperand) : 0 /* Unknown */; + if (binaryOperator === 37) { + var leftKind = leftOperand ? getLiteralKindOfBinaryPlusOperand(leftOperand) : 0; if (ts.isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(emittedOperand)) { return false; } } } - // No need to parenthesize the right operand when the operand is right - // associative: - // x/(a**b) -> x/a**b - // x**(a**b) -> x**a**b - // - // Parentheses are needed for the right operand when the operand is left - // associative: - // x/(a*b) -> x/(a*b) - // x**(a/b) -> x**(a/b) var operandAssociativity = ts.getExpressionAssociativity(emittedOperand); - return operandAssociativity === 0 /* Left */; + return operandAssociativity === 0; } } } - /** - * Determines whether a binary operator is mathematically associative. - * - * @param binaryOperator The binary operator. - */ function operatorHasAssociativeProperty(binaryOperator) { - // The following operators are associative in JavaScript: - // (a*b)*c -> a*(b*c) -> a*b*c - // (a|b)|c -> a|(b|c) -> a|b|c - // (a&b)&c -> a&(b&c) -> a&b&c - // (a^b)^c -> a^(b^c) -> a^b^c - // - // While addition is associative in mathematics, JavaScript's `+` is not - // guaranteed to be associative as it is overloaded with string concatenation. - return binaryOperator === 39 /* AsteriskToken */ - || binaryOperator === 49 /* BarToken */ - || binaryOperator === 48 /* AmpersandToken */ - || binaryOperator === 50 /* CaretToken */; + return binaryOperator === 39 + || binaryOperator === 49 + || binaryOperator === 48 + || binaryOperator === 50; } - /** - * This function determines whether an expression consists of a homogeneous set of - * literal expressions or binary plus expressions that all share the same literal kind. - * It is used to determine whether the right-hand operand of a binary plus expression can be - * emitted without parentheses. - */ function getLiteralKindOfBinaryPlusOperand(node) { node = ts.skipPartiallyEmittedExpressions(node); if (ts.isLiteralKind(node.kind)) { return node.kind; } - if (node.kind === 200 /* BinaryExpression */ && node.operatorToken.kind === 37 /* PlusToken */) { + if (node.kind === 200 && node.operatorToken.kind === 37) { if (node.cachedLiteralKind !== undefined) { return node.cachedLiteralKind; } @@ -58686,66 +49049,46 @@ var ts; var literalKind = ts.isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(node.right) ? leftKind - : 0 /* Unknown */; + : 0; node.cachedLiteralKind = literalKind; return literalKind; } - return 0 /* Unknown */; + return 0; } function parenthesizeForConditionalHead(condition) { - var conditionalPrecedence = ts.getOperatorPrecedence(201 /* ConditionalExpression */, 55 /* QuestionToken */); + var conditionalPrecedence = ts.getOperatorPrecedence(201, 55); var emittedCondition = ts.skipPartiallyEmittedExpressions(condition); var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition); - if (ts.compareValues(conditionPrecedence, conditionalPrecedence) === -1 /* LessThan */) { + if (ts.compareValues(conditionPrecedence, conditionalPrecedence) === -1) { return ts.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 var emittedExpression = ts.skipPartiallyEmittedExpressions(e); - return emittedExpression.kind === 200 /* BinaryExpression */ && emittedExpression.operatorToken.kind === 26 /* CommaToken */ || - emittedExpression.kind === 302 /* CommaListExpression */ + return emittedExpression.kind === 200 && emittedExpression.operatorToken.kind === 26 || + emittedExpression.kind === 302 ? ts.createParen(e) : e; } ts.parenthesizeSubexpressionOfConditionalExpression = parenthesizeSubexpressionOfConditionalExpression; - /** - * [Per the spec](https://tc39.github.io/ecma262/#prod-ExportDeclaration), `export default` accepts _AssigmentExpression_ but - * has a lookahead restriction for `function`, `async function`, and `class`. - * - * Basically, that means we need to parenthesize in the following cases: - * - * - BinaryExpression of CommaToken - * - CommaList (synthetic list of multiple comma expressions) - * - FunctionExpression - * - ClassExpression - */ function parenthesizeDefaultExpression(e) { var check = ts.skipPartiallyEmittedExpressions(e); - return (check.kind === 205 /* ClassExpression */ || - check.kind === 192 /* FunctionExpression */ || - check.kind === 302 /* CommaListExpression */ || - ts.isBinaryExpression(check) && check.operatorToken.kind === 26 /* CommaToken */) + return (check.kind === 205 || + check.kind === 192 || + check.kind === 302 || + ts.isBinaryExpression(check) && check.operatorToken.kind === 26) ? ts.createParen(e) : e; } ts.parenthesizeDefaultExpression = parenthesizeDefaultExpression; - /** - * Wraps an expression in parentheses if it is needed in order to use the expression - * as the expression of a NewExpression node. - * - * @param expression The Expression node. - */ function parenthesizeForNew(expression) { - var leftmostExpr = getLeftmostExpression(expression, /*stopAtCallExpressions*/ true); + var leftmostExpr = getLeftmostExpression(expression, true); switch (leftmostExpr.kind) { - case 187 /* CallExpression */: + case 187: return ts.createParen(expression); - case 188 /* NewExpression */: + case 188: return !leftmostExpr.arguments ? ts.createParen(expression) : expression; @@ -58753,22 +49096,10 @@ var ts; return parenthesizeForAccess(expression); } ts.parenthesizeForNew = parenthesizeForNew; - /** - * Wraps an expression in parentheses if it is needed in order to use the expression for - * property or element access. - * - * @param expr The expression node. - */ function parenthesizeForAccess(expression) { - // isLeftHandSideExpression is almost the correct criterion for when it is not necessary - // to parenthesize the expression before a dot. The known exception is: - // - // NewExpression: - // new C.x -> not the same as (new C).x - // var emittedExpression = ts.skipPartiallyEmittedExpressions(expression); if (ts.isLeftHandSideExpression(emittedExpression) - && (emittedExpression.kind !== 188 /* NewExpression */ || emittedExpression.arguments)) { + && (emittedExpression.kind !== 188 || emittedExpression.arguments)) { return expression; } return ts.setTextRange(ts.createParen(expression), expression); @@ -58806,7 +49137,7 @@ var ts; function parenthesizeExpressionForList(expression) { var emittedExpression = ts.skipPartiallyEmittedExpressions(expression); var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression); - var commaPrecedence = ts.getOperatorPrecedence(200 /* BinaryExpression */, 26 /* CommaToken */); + var commaPrecedence = ts.getOperatorPrecedence(200, 26); return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(ts.createParen(expression), expression); @@ -58817,29 +49148,29 @@ var ts; if (ts.isCallExpression(emittedExpression)) { var callee = emittedExpression.expression; var kind = ts.skipPartiallyEmittedExpressions(callee).kind; - if (kind === 192 /* FunctionExpression */ || kind === 193 /* ArrowFunction */) { + if (kind === 192 || kind === 193) { var mutableCall = ts.getMutableClone(emittedExpression); mutableCall.expression = ts.setTextRange(ts.createParen(callee), callee); - return recreateOuterExpressions(expression, mutableCall, 4 /* PartiallyEmittedExpressions */); + return recreateOuterExpressions(expression, mutableCall, 4); } } - var leftmostExpressionKind = getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind; - if (leftmostExpressionKind === 184 /* ObjectLiteralExpression */ || leftmostExpressionKind === 192 /* FunctionExpression */) { + var leftmostExpressionKind = getLeftmostExpression(emittedExpression, false).kind; + if (leftmostExpressionKind === 184 || leftmostExpressionKind === 192) { return ts.setTextRange(ts.createParen(expression), expression); } return expression; } ts.parenthesizeExpressionForExpressionStatement = parenthesizeExpressionForExpressionStatement; function parenthesizeConditionalTypeMember(member) { - return member.kind === 171 /* ConditionalType */ ? ts.createParenthesizedType(member) : member; + return member.kind === 171 ? ts.createParenthesizedType(member) : member; } ts.parenthesizeConditionalTypeMember = parenthesizeConditionalTypeMember; function parenthesizeElementTypeMember(member) { switch (member.kind) { - case 169 /* UnionType */: - case 170 /* IntersectionType */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: + case 169: + case 170: + case 163: + case 164: return ts.createParenthesizedType(member); } return parenthesizeConditionalTypeMember(member); @@ -58847,9 +49178,9 @@ var ts; ts.parenthesizeElementTypeMember = parenthesizeElementTypeMember; function parenthesizeArrayTypeMember(member) { switch (member.kind) { - case 165 /* TypeQuery */: - case 175 /* TypeOperator */: - case 172 /* InferType */: + case 165: + case 175: + case 172: return ts.createParenthesizedType(member); } return parenthesizeElementTypeMember(member); @@ -58875,25 +49206,24 @@ var ts; function getLeftmostExpression(node, stopAtCallExpressions) { while (true) { switch (node.kind) { - case 199 /* PostfixUnaryExpression */: + case 199: node = node.operand; continue; - case 200 /* BinaryExpression */: + case 200: node = node.left; continue; - case 201 /* ConditionalExpression */: + case 201: node = node.condition; continue; - case 187 /* CallExpression */: + case 187: if (stopAtCallExpressions) { return node; } - // falls through - case 186 /* ElementAccessExpression */: - case 185 /* PropertyAccessExpression */: + case 186: + case 185: node = node.expression; continue; - case 301 /* PartiallyEmittedExpression */: + case 301: node = node.expression; continue; } @@ -58901,46 +49231,39 @@ var ts; } } function parenthesizeConciseBody(body) { - if (!ts.isBlock(body) && getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 184 /* ObjectLiteralExpression */) { + if (!ts.isBlock(body) && getLeftmostExpression(body, false).kind === 184) { return ts.setTextRange(ts.createParen(body), body); } return body; } ts.parenthesizeConciseBody = parenthesizeConciseBody; - var OuterExpressionKinds; - (function (OuterExpressionKinds) { - OuterExpressionKinds[OuterExpressionKinds["Parentheses"] = 1] = "Parentheses"; - OuterExpressionKinds[OuterExpressionKinds["Assertions"] = 2] = "Assertions"; - OuterExpressionKinds[OuterExpressionKinds["PartiallyEmittedExpressions"] = 4] = "PartiallyEmittedExpressions"; - OuterExpressionKinds[OuterExpressionKinds["All"] = 7] = "All"; - })(OuterExpressionKinds = ts.OuterExpressionKinds || (ts.OuterExpressionKinds = {})); function isOuterExpression(node, kinds) { - if (kinds === void 0) { kinds = 7 /* All */; } + if (kinds === void 0) { kinds = 7; } switch (node.kind) { - case 191 /* ParenthesizedExpression */: - return (kinds & 1 /* Parentheses */) !== 0; - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: - case 209 /* NonNullExpression */: - return (kinds & 2 /* Assertions */) !== 0; - case 301 /* PartiallyEmittedExpression */: - return (kinds & 4 /* PartiallyEmittedExpressions */) !== 0; + case 191: + return (kinds & 1) !== 0; + case 190: + case 208: + case 209: + return (kinds & 2) !== 0; + case 301: + return (kinds & 4) !== 0; } return false; } ts.isOuterExpression = isOuterExpression; function skipOuterExpressions(node, kinds) { - if (kinds === void 0) { kinds = 7 /* All */; } + if (kinds === void 0) { kinds = 7; } var previousNode; do { previousNode = node; - if (kinds & 1 /* Parentheses */) { + if (kinds & 1) { node = ts.skipParentheses(node); } - if (kinds & 2 /* Assertions */) { + if (kinds & 2) { node = skipAssertions(node); } - if (kinds & 4 /* PartiallyEmittedExpressions */) { + if (kinds & 4) { node = ts.skipPartiallyEmittedExpressions(node); } } while (previousNode !== node); @@ -58948,7 +49271,7 @@ var ts; } ts.skipOuterExpressions = skipOuterExpressions; function skipAssertions(node) { - while (ts.isAssertionExpression(node) || node.kind === 209 /* NonNullExpression */) { + while (ts.isAssertionExpression(node) || node.kind === 209) { node = node.expression; } return node; @@ -58956,29 +49279,15 @@ var ts; ts.skipAssertions = skipAssertions; function updateOuterExpression(outerExpression, expression) { switch (outerExpression.kind) { - case 191 /* ParenthesizedExpression */: return ts.updateParen(outerExpression, expression); - case 190 /* TypeAssertionExpression */: return ts.updateTypeAssertion(outerExpression, outerExpression.type, expression); - case 208 /* AsExpression */: return ts.updateAsExpression(outerExpression, expression, outerExpression.type); - case 209 /* NonNullExpression */: return ts.updateNonNullExpression(outerExpression, expression); - case 301 /* PartiallyEmittedExpression */: return ts.updatePartiallyEmittedExpression(outerExpression, expression); + case 191: return ts.updateParen(outerExpression, expression); + case 190: return ts.updateTypeAssertion(outerExpression, outerExpression.type, expression); + case 208: return ts.updateAsExpression(outerExpression, expression, outerExpression.type); + case 209: return ts.updateNonNullExpression(outerExpression, expression); + case 301: return ts.updatePartiallyEmittedExpression(outerExpression, expression); } } - /** - * Determines whether a node is a parenthesized expression that can be ignored when recreating outer expressions. - * - * A parenthesized expression can be ignored when all of the following are true: - * - * - It's `pos` and `end` are not -1 - * - It does not have a custom source map range - * - It does not have a custom comment range - * - It does not have synthetic leading or trailing comments - * - * If an outermost parenthesized expression is ignored, but the containing expression requires a parentheses around - * the expression to maintain precedence, a new parenthesized expression should be created automatically when - * the containing expression is created/updated. - */ function isIgnorableParen(node) { - return node.kind === 191 /* ParenthesizedExpression */ + return node.kind === 191 && ts.nodeIsSynthesized(node) && ts.nodeIsSynthesized(ts.getSourceMapRange(node)) && ts.nodeIsSynthesized(ts.getCommentRange(node)) @@ -58986,7 +49295,7 @@ var ts; && !ts.some(ts.getSyntheticTrailingComments(node)); } function recreateOuterExpressions(outerExpression, innerExpression, kinds) { - if (kinds === void 0) { kinds = 7 /* All */; } + if (kinds === void 0) { kinds = 7; } if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { return updateOuterExpression(outerExpression, recreateOuterExpressions(outerExpression.expression, innerExpression)); } @@ -58994,7 +49303,7 @@ var ts; } ts.recreateOuterExpressions = recreateOuterExpressions; function startOnNewLine(node) { - return ts.setStartsOnNewLine(node, /*newLine*/ true); + return ts.setStartsOnNewLine(node, true); } ts.startOnNewLine = startOnNewLine; function getExternalHelpersModuleName(node) { @@ -59034,35 +49343,24 @@ var ts; } } ts.getOrCreateExternalHelpersModuleNameIfNeeded = getOrCreateExternalHelpersModuleNameIfNeeded; - /** - * Get the name of that target module from an import or export declaration - */ function getLocalNameForExternalImport(node, sourceFile) { var namespaceDeclaration = ts.getNamespaceDeclarationNode(node); if (namespaceDeclaration && !ts.isDefaultImport(node)) { var name = namespaceDeclaration.name; return ts.isGeneratedIdentifier(name) ? name : ts.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name)); } - if (node.kind === 244 /* ImportDeclaration */ && node.importClause) { + if (node.kind === 244 && node.importClause) { return ts.getGeneratedNameForNode(node); } - if (node.kind === 250 /* ExportDeclaration */ && node.moduleSpecifier) { + if (node.kind === 250 && node.moduleSpecifier) { return ts.getGeneratedNameForNode(node); } return undefined; } ts.getLocalNameForExternalImport = getLocalNameForExternalImport; - /** - * Get the name of a target module from an import/export declaration as should be written in the emitted output. - * The emitted output name can be different from the input if: - * 1. The module has a /// - * 2. --out or --outFile is used, making the name relative to the rootDir - * 3- The containing SourceFile has an entry in renamedDependencies for the import as requested by some module loaders (e.g. System). - * Otherwise, a new StringLiteral node representing the module name will be returned. - */ function getExternalModuleNameLiteral(importNode, sourceFile, host, resolver, compilerOptions) { - var moduleName = ts.getExternalModuleName(importNode); // TODO: GH#18217 - if (moduleName.kind === 9 /* StringLiteral */) { + var moduleName = ts.getExternalModuleName(importNode); + if (moduleName.kind === 9) { return tryGetModuleNameFromDeclaration(importNode, host, resolver, compilerOptions) || tryRenameExternalModule(moduleName, sourceFile) || ts.getSynthesizedClone(moduleName); @@ -59070,21 +49368,10 @@ var ts; return undefined; } ts.getExternalModuleNameLiteral = getExternalModuleNameLiteral; - /** - * Some bundlers (SystemJS builder) sometimes want to rename dependencies. - * Here we check if alternative name was provided for a given moduleName and return it if possible. - */ function tryRenameExternalModule(moduleName, sourceFile) { var rename = sourceFile.renamedDependencies && sourceFile.renamedDependencies.get(moduleName.text); return rename && ts.createLiteral(rename); } - /** - * Get the name of a module as should be written in the emitted output. - * The emitted output name can be different from the input if: - * 1. The module has a /// - * 2. --out or --outFile is used, making the name relative to the rootDir - * Otherwise, a new StringLiteral node representing the module name will be returned. - */ function tryGetModuleNameFromFile(file, host, options) { if (!file) { return undefined; @@ -59101,140 +49388,66 @@ var ts; function tryGetModuleNameFromDeclaration(declaration, host, resolver, compilerOptions) { return tryGetModuleNameFromFile(resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions); } - /** - * Gets the initializer of an BindingOrAssignmentElement. - */ 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 } = ...)` var initializer = bindingElement.initializer; - return ts.isAssignmentExpression(initializer, /*excludeCompoundAssignment*/ true) + return ts.isAssignmentExpression(initializer, true) ? initializer.right : undefined; } if (ts.isShorthandPropertyAssignment(bindingElement)) { - // `1` in `({ a = 1 } = ...)` return bindingElement.objectAssignmentInitializer; } - if (ts.isAssignmentExpression(bindingElement, /*excludeCompoundAssignment*/ true)) { - // `1` in `[a = 1] = ...` - // `1` in `[{a} = 1] = ...` - // `1` in `[[a] = 1] = ...` + if (ts.isAssignmentExpression(bindingElement, true)) { return bindingElement.right; } if (ts.isSpreadElement(bindingElement)) { - // Recovery consistent with existing emit. return getInitializerOfBindingOrAssignmentElement(bindingElement.expression); } } ts.getInitializerOfBindingOrAssignmentElement = getInitializerOfBindingOrAssignmentElement; - /** - * Gets the name of an BindingOrAssignmentElement. - */ 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 270 /* 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 } = ...)` + case 270: return getTargetOfBindingOrAssignmentElement(bindingElement.initializer); - case 271 /* ShorthandPropertyAssignment */: - // `a` in `({ a } = ...)` - // `a` in `({ a = 1 } = ...)` + case 271: return bindingElement.name; - case 272 /* SpreadAssignment */: - // `a` in `({ ...a } = ...)` + case 272: 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] = ...` + if (ts.isAssignmentExpression(bindingElement, true)) { return getTargetOfBindingOrAssignmentElement(bindingElement.left); } if (ts.isSpreadElement(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; - /** - * Determines whether an BindingOrAssignmentElement is a rest element. - */ function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) { switch (bindingElement.kind) { - case 149 /* Parameter */: - case 182 /* BindingElement */: - // `...` in `let [...a] = ...` + case 149: + case 182: return bindingElement.dotDotDotToken; - case 204 /* SpreadElement */: - case 272 /* SpreadAssignment */: - // `...` in `[...a] = ...` + case 204: + case 272: return bindingElement; } return undefined; } ts.getRestIndicatorOfBindingOrAssignmentElement = getRestIndicatorOfBindingOrAssignmentElement; - /** - * Gets the property name of a BindingOrAssignmentElement - */ function getPropertyNameOfBindingOrAssignmentElement(bindingElement) { switch (bindingElement.kind) { - case 182 /* BindingElement */: - // `a` in `let { a: b } = ...` - // `[a]` in `let { [a]: b } = ...` - // `"a"` in `let { "a": b } = ...` - // `1` in `let { 1: b } = ...` + case 182: if (bindingElement.propertyName) { var propertyName = bindingElement.propertyName; return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression) @@ -59242,11 +49455,7 @@ var ts; : propertyName; } break; - case 270 /* PropertyAssignment */: - // `a` in `({ a: b } = ...)` - // `[a]` in `({ [a]: b } = ...)` - // `"a"` in `({ "a": b } = ...)` - // `1` in `({ 1: b } = ...)` + case 270: if (bindingElement.name) { var propertyName = bindingElement.name; return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression) @@ -59254,8 +49463,7 @@ var ts; : propertyName; } break; - case 272 /* SpreadAssignment */: - // `a` in `({ ...a } = ...)` + case 272: return bindingElement.name; } var target = getTargetOfBindingOrAssignmentElement(bindingElement); @@ -59267,19 +49475,13 @@ var ts; ts.Debug.fail("Invalid property name for binding element."); } ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement; - /** - * Gets the elements of a BindingOrAssignmentPattern - */ function getElementsOfBindingOrAssignmentPattern(name) { switch (name.kind) { - case 180 /* ObjectBindingPattern */: - case 181 /* ArrayBindingPattern */: - case 183 /* ArrayLiteralExpression */: - // `a` in `{a}` - // `a` in `[a]` + case 180: + case 181: + case 183: return name.elements; - case 184 /* ObjectLiteralExpression */: - // `a` in `{a}` + case 184: return name.properties; } } @@ -59318,11 +49520,11 @@ var ts; ts.convertToObjectAssignmentElement = convertToObjectAssignmentElement; function convertToAssignmentPattern(node) { switch (node.kind) { - case 181 /* ArrayBindingPattern */: - case 183 /* ArrayLiteralExpression */: + case 181: + case 183: return convertToArrayAssignmentPattern(node); - case 180 /* ObjectBindingPattern */: - case 184 /* ObjectLiteralExpression */: + case 180: + case 184: return convertToObjectAssignmentPattern(node); } } @@ -59379,21 +49581,11 @@ var ts; return visitedNode; } ts.visitNode = visitNode; - /** - * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place. - * - * @param nodes The NodeArray to visit. - * @param visitor The callback used to visit a Node. - * @param test A node test to execute for each node. - * @param start An optional value indicating the starting offset at which to start visiting. - * @param count An optional value indicating the maximum number of nodes to visit. - */ function visitNodes(nodes, visitor, test, start, count) { if (nodes === undefined || visitor === undefined) { return nodes; } var updated; - // Ensure start and count have valid values var length = nodes.length; if (start === undefined || start < 0) { start = 0; @@ -59402,19 +49594,14 @@ var ts; count = length - start; } if (start > 0 || count < length) { - // If we are not visiting all of the original nodes, we must always create a new array. - // Since this is a fragment of a node array, we do not copy over the previous location - // and will only copy over `hasTrailingComma` if we are including the last element. - updated = ts.createNodeArray([], /*hasTrailingComma*/ nodes.hasTrailingComma && start + count === length); + updated = ts.createNodeArray([], nodes.hasTrailingComma && start + count === length); } - // Visit each original node. for (var i = 0; i < count; i++) { var node = nodes[i + start]; ts.aggregateTransformFlags(node); var visited = node !== undefined ? visitor(node) : undefined; if (updated !== undefined || visited === undefined || visited !== node) { if (updated === undefined) { - // Ensure we have a copy of `nodes`, up to the current index. updated = ts.createNodeArray(nodes.slice(0, i), nodes.hasTrailingComma); ts.setTextRange(updated, nodes); } @@ -59438,10 +49625,6 @@ 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); @@ -59452,10 +49635,6 @@ var ts; return ts.setTextRange(ts.createNodeArray(ts.concatenate(declarations, statements)), 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, nodesVisitor) { if (nodesVisitor === void 0) { nodesVisitor = visitNodes; } context.startLexicalEnvironment(); @@ -59482,291 +49661,268 @@ var ts; return undefined; } var kind = node.kind; - // No need to visit nodes with no children. - if ((kind > 0 /* FirstToken */ && kind <= 145 /* LastToken */) || kind === 174 /* ThisType */) { + if ((kind > 0 && kind <= 145) || kind === 174) { return node; } switch (kind) { - // Names - case 71 /* Identifier */: + case 71: return ts.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, isTypeNodeOrTypeParameterDeclaration)); - case 146 /* QualifiedName */: + case 146: return ts.updateQualifiedName(node, visitNode(node.left, visitor, ts.isEntityName), visitNode(node.right, visitor, ts.isIdentifier)); - case 147 /* ComputedPropertyName */: + case 147: return ts.updateComputedPropertyName(node, visitNode(node.expression, visitor, ts.isExpression)); - // Signature elements - case 148 /* TypeParameter */: + case 148: return ts.updateTypeParameterDeclaration(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.constraint, visitor, ts.isTypeNode), visitNode(node.default, visitor, ts.isTypeNode)); - case 149 /* Parameter */: + case 149: return ts.updateParameter(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.dotDotDotToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression)); - case 150 /* Decorator */: + case 150: return ts.updateDecorator(node, visitNode(node.expression, visitor, ts.isExpression)); - // Type elements - case 151 /* PropertySignature */: + case 151: return ts.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isToken), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression)); - case 152 /* PropertyDeclaration */: + case 152: return ts.updateProperty(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression)); - case 153 /* MethodSignature */: + case 153: return ts.updateMethodSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken)); - case 154 /* MethodDeclaration */: + case 154: return ts.updateMethod(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context)); - case 155 /* Constructor */: + case 155: return ts.updateConstructor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context)); - case 156 /* GetAccessor */: + case 156: return ts.updateGetAccessor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context)); - case 157 /* SetAccessor */: + case 157: return ts.updateSetAccessor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context)); - case 158 /* CallSignature */: + case 158: return ts.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - case 159 /* ConstructSignature */: + case 159: return ts.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - case 160 /* IndexSignature */: + case 160: return ts.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - // Types - case 161 /* TypePredicate */: + case 161: return ts.updateTypePredicateNode(node, visitNode(node.parameterName, visitor), visitNode(node.type, visitor, ts.isTypeNode)); - case 162 /* TypeReference */: + case 162: return ts.updateTypeReferenceNode(node, visitNode(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode)); - case 163 /* FunctionType */: + case 163: return ts.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - case 164 /* ConstructorType */: + case 164: return ts.updateConstructorTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - case 165 /* TypeQuery */: + case 165: return ts.updateTypeQueryNode(node, visitNode(node.exprName, visitor, ts.isEntityName)); - case 166 /* TypeLiteral */: + case 166: return ts.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement)); - case 167 /* ArrayType */: + case 167: return ts.updateArrayTypeNode(node, visitNode(node.elementType, visitor, ts.isTypeNode)); - case 168 /* TupleType */: + case 168: return ts.updateTypleTypeNode(node, nodesVisitor(node.elementTypes, visitor, ts.isTypeNode)); - case 169 /* UnionType */: + case 169: return ts.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode)); - case 170 /* IntersectionType */: + case 170: return ts.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode)); - case 171 /* ConditionalType */: + case 171: return ts.updateConditionalTypeNode(node, visitNode(node.checkType, visitor, ts.isTypeNode), visitNode(node.extendsType, visitor, ts.isTypeNode), visitNode(node.trueType, visitor, ts.isTypeNode), visitNode(node.falseType, visitor, ts.isTypeNode)); - case 172 /* InferType */: + case 172: return ts.updateInferTypeNode(node, visitNode(node.typeParameter, visitor, ts.isTypeParameterDeclaration)); - case 179 /* ImportType */: + case 179: return ts.updateImportTypeNode(node, visitNode(node.argument, visitor, ts.isTypeNode), visitNode(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf); - case 173 /* ParenthesizedType */: + case 173: return ts.updateParenthesizedType(node, visitNode(node.type, visitor, ts.isTypeNode)); - case 175 /* TypeOperator */: + case 175: return ts.updateTypeOperatorNode(node, visitNode(node.type, visitor, ts.isTypeNode)); - case 176 /* IndexedAccessType */: + case 176: return ts.updateIndexedAccessTypeNode(node, visitNode(node.objectType, visitor, ts.isTypeNode), visitNode(node.indexType, visitor, ts.isTypeNode)); - case 177 /* MappedType */: + case 177: return ts.updateMappedTypeNode(node, visitNode(node.readonlyToken, tokenVisitor, ts.isToken), visitNode(node.typeParameter, visitor, ts.isTypeParameterDeclaration), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode)); - case 178 /* LiteralType */: + case 178: return ts.updateLiteralTypeNode(node, visitNode(node.literal, visitor, ts.isExpression)); - // Binding patterns - case 180 /* ObjectBindingPattern */: + case 180: return ts.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement)); - case 181 /* ArrayBindingPattern */: + case 181: return ts.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement)); - case 182 /* BindingElement */: + case 182: return ts.updateBindingElement(node, visitNode(node.dotDotDotToken, tokenVisitor, ts.isToken), visitNode(node.propertyName, visitor, ts.isPropertyName), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.initializer, visitor, ts.isExpression)); - // Expression - case 183 /* ArrayLiteralExpression */: + case 183: return ts.updateArrayLiteral(node, nodesVisitor(node.elements, visitor, ts.isExpression)); - case 184 /* ObjectLiteralExpression */: + case 184: return ts.updateObjectLiteral(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike)); - case 185 /* PropertyAccessExpression */: + case 185: return ts.updatePropertyAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.name, visitor, ts.isIdentifier)); - case 186 /* ElementAccessExpression */: + case 186: return ts.updateElementAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.argumentExpression, visitor, ts.isExpression)); - case 187 /* CallExpression */: + case 187: return ts.updateCall(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression)); - case 188 /* NewExpression */: + case 188: return ts.updateNew(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression)); - case 189 /* TaggedTemplateExpression */: + case 189: return ts.updateTaggedTemplate(node, visitNode(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isExpression), visitNode(node.template, visitor, ts.isTemplateLiteral)); - case 190 /* TypeAssertionExpression */: + case 190: return ts.updateTypeAssertion(node, visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression)); - case 191 /* ParenthesizedExpression */: + case 191: return ts.updateParen(node, visitNode(node.expression, visitor, ts.isExpression)); - case 192 /* FunctionExpression */: + case 192: return ts.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context)); - case 193 /* ArrowFunction */: + case 193: return ts.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.equalsGreaterThanToken, visitor, ts.isToken), visitFunctionBody(node.body, visitor, context)); - case 194 /* DeleteExpression */: + case 194: return ts.updateDelete(node, visitNode(node.expression, visitor, ts.isExpression)); - case 195 /* TypeOfExpression */: + case 195: return ts.updateTypeOf(node, visitNode(node.expression, visitor, ts.isExpression)); - case 196 /* VoidExpression */: + case 196: return ts.updateVoid(node, visitNode(node.expression, visitor, ts.isExpression)); - case 197 /* AwaitExpression */: + case 197: return ts.updateAwait(node, visitNode(node.expression, visitor, ts.isExpression)); - case 198 /* PrefixUnaryExpression */: + case 198: return ts.updatePrefix(node, visitNode(node.operand, visitor, ts.isExpression)); - case 199 /* PostfixUnaryExpression */: + case 199: return ts.updatePostfix(node, visitNode(node.operand, visitor, ts.isExpression)); - case 200 /* BinaryExpression */: + case 200: return ts.updateBinary(node, visitNode(node.left, visitor, ts.isExpression), visitNode(node.right, visitor, ts.isExpression), visitNode(node.operatorToken, visitor, ts.isToken)); - case 201 /* ConditionalExpression */: + case 201: return ts.updateConditional(node, visitNode(node.condition, visitor, ts.isExpression), visitNode(node.questionToken, visitor, ts.isToken), visitNode(node.whenTrue, visitor, ts.isExpression), visitNode(node.colonToken, visitor, ts.isToken), visitNode(node.whenFalse, visitor, ts.isExpression)); - case 202 /* TemplateExpression */: + case 202: return ts.updateTemplateExpression(node, visitNode(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan)); - case 203 /* YieldExpression */: + case 203: return ts.updateYield(node, visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.expression, visitor, ts.isExpression)); - case 204 /* SpreadElement */: + case 204: return ts.updateSpread(node, visitNode(node.expression, visitor, ts.isExpression)); - case 205 /* ClassExpression */: + case 205: return ts.updateClassExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement)); - case 207 /* ExpressionWithTypeArguments */: + case 207: return ts.updateExpressionWithTypeArguments(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression)); - case 208 /* AsExpression */: + case 208: return ts.updateAsExpression(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.type, visitor, ts.isTypeNode)); - case 209 /* NonNullExpression */: + case 209: return ts.updateNonNullExpression(node, visitNode(node.expression, visitor, ts.isExpression)); - case 210 /* MetaProperty */: + case 210: return ts.updateMetaProperty(node, visitNode(node.name, visitor, ts.isIdentifier)); - // Misc - case 211 /* TemplateSpan */: + case 211: return ts.updateTemplateSpan(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail)); - // Element - case 213 /* Block */: + case 213: return ts.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement)); - case 214 /* VariableStatement */: + case 214: return ts.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.declarationList, visitor, ts.isVariableDeclarationList)); - case 216 /* ExpressionStatement */: + case 216: return ts.updateStatement(node, visitNode(node.expression, visitor, ts.isExpression)); - case 217 /* IfStatement */: + case 217: return ts.updateIf(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.thenStatement, visitor, ts.isStatement, ts.liftToBlock), visitNode(node.elseStatement, visitor, ts.isStatement, ts.liftToBlock)); - case 218 /* DoStatement */: + case 218: return ts.updateDo(node, visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock), visitNode(node.expression, visitor, ts.isExpression)); - case 219 /* WhileStatement */: + case 219: return ts.updateWhile(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 220 /* ForStatement */: + case 220: return ts.updateFor(node, visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.condition, visitor, ts.isExpression), visitNode(node.incrementor, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 221 /* ForInStatement */: + case 221: return ts.updateForIn(node, visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 222 /* ForOfStatement */: + case 222: return ts.updateForOf(node, visitNode(node.awaitModifier, visitor, ts.isToken), visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 223 /* ContinueStatement */: + case 223: return ts.updateContinue(node, visitNode(node.label, visitor, ts.isIdentifier)); - case 224 /* BreakStatement */: + case 224: return ts.updateBreak(node, visitNode(node.label, visitor, ts.isIdentifier)); - case 225 /* ReturnStatement */: + case 225: return ts.updateReturn(node, visitNode(node.expression, visitor, ts.isExpression)); - case 226 /* WithStatement */: + case 226: return ts.updateWith(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 227 /* SwitchStatement */: + case 227: return ts.updateSwitch(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.caseBlock, visitor, ts.isCaseBlock)); - case 228 /* LabeledStatement */: + case 228: return ts.updateLabel(node, visitNode(node.label, visitor, ts.isIdentifier), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); - case 229 /* ThrowStatement */: + case 229: return ts.updateThrow(node, visitNode(node.expression, visitor, ts.isExpression)); - case 230 /* TryStatement */: + case 230: return ts.updateTry(node, visitNode(node.tryBlock, visitor, ts.isBlock), visitNode(node.catchClause, visitor, ts.isCatchClause), visitNode(node.finallyBlock, visitor, ts.isBlock)); - case 232 /* VariableDeclaration */: + case 232: return ts.updateVariableDeclaration(node, visitNode(node.name, visitor, ts.isBindingName), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression)); - case 233 /* VariableDeclarationList */: + case 233: return ts.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration)); - case 234 /* FunctionDeclaration */: + case 234: return ts.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context)); - case 235 /* ClassDeclaration */: + case 235: return ts.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement)); - case 236 /* InterfaceDeclaration */: + case 236: return ts.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement)); - case 237 /* TypeAliasDeclaration */: + case 237: return ts.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); - case 238 /* EnumDeclaration */: + case 238: return ts.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember)); - case 239 /* ModuleDeclaration */: + case 239: return ts.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.body, visitor, ts.isModuleBody)); - case 240 /* ModuleBlock */: + case 240: return ts.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement)); - case 241 /* CaseBlock */: + case 241: return ts.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause)); - case 242 /* NamespaceExportDeclaration */: + case 242: return ts.updateNamespaceExportDeclaration(node, visitNode(node.name, visitor, ts.isIdentifier)); - case 243 /* ImportEqualsDeclaration */: + case 243: return ts.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.moduleReference, visitor, ts.isModuleReference)); - case 244 /* ImportDeclaration */: + case 244: return ts.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.importClause, visitor, ts.isImportClause), visitNode(node.moduleSpecifier, visitor, ts.isExpression)); - case 245 /* ImportClause */: + case 245: return ts.updateImportClause(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.namedBindings, visitor, ts.isNamedImportBindings)); - case 246 /* NamespaceImport */: + case 246: return ts.updateNamespaceImport(node, visitNode(node.name, visitor, ts.isIdentifier)); - case 247 /* NamedImports */: + case 247: return ts.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier)); - case 248 /* ImportSpecifier */: + case 248: return ts.updateImportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier)); - case 249 /* ExportAssignment */: + case 249: return ts.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.expression, visitor, ts.isExpression)); - case 250 /* ExportDeclaration */: + case 250: return ts.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.exportClause, visitor, ts.isNamedExports), visitNode(node.moduleSpecifier, visitor, ts.isExpression)); - case 251 /* NamedExports */: + case 251: return ts.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier)); - case 252 /* ExportSpecifier */: + case 252: return ts.updateExportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier)); - // Module references - case 254 /* ExternalModuleReference */: + case 254: return ts.updateExternalModuleReference(node, visitNode(node.expression, visitor, ts.isExpression)); - // JSX - case 255 /* JsxElement */: + case 255: return ts.updateJsxElement(node, visitNode(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), visitNode(node.closingElement, visitor, ts.isJsxClosingElement)); - case 256 /* JsxSelfClosingElement */: + case 256: return ts.updateJsxSelfClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.attributes, visitor, ts.isJsxAttributes)); - case 257 /* JsxOpeningElement */: + case 257: return ts.updateJsxOpeningElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.attributes, visitor, ts.isJsxAttributes)); - case 258 /* JsxClosingElement */: + case 258: return ts.updateJsxClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression)); - case 259 /* JsxFragment */: + case 259: return ts.updateJsxFragment(node, visitNode(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), visitNode(node.closingFragment, visitor, ts.isJsxClosingFragment)); - case 262 /* JsxAttribute */: + case 262: return ts.updateJsxAttribute(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.initializer, visitor, ts.isStringLiteralOrJsxExpression)); - case 263 /* JsxAttributes */: + case 263: return ts.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike)); - case 264 /* JsxSpreadAttribute */: + case 264: return ts.updateJsxSpreadAttribute(node, visitNode(node.expression, visitor, ts.isExpression)); - case 265 /* JsxExpression */: + case 265: return ts.updateJsxExpression(node, visitNode(node.expression, visitor, ts.isExpression)); - // Clauses - case 266 /* CaseClause */: + case 266: return ts.updateCaseClause(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement)); - case 267 /* DefaultClause */: + case 267: return ts.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement)); - case 268 /* HeritageClause */: + case 268: return ts.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments)); - case 269 /* CatchClause */: + case 269: return ts.updateCatchClause(node, visitNode(node.variableDeclaration, visitor, ts.isVariableDeclaration), visitNode(node.block, visitor, ts.isBlock)); - // Property assignments - case 270 /* PropertyAssignment */: + case 270: return ts.updatePropertyAssignment(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression)); - case 271 /* ShorthandPropertyAssignment */: + case 271: return ts.updateShorthandPropertyAssignment(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.objectAssignmentInitializer, visitor, ts.isExpression)); - case 272 /* SpreadAssignment */: + case 272: return ts.updateSpreadAssignment(node, visitNode(node.expression, visitor, ts.isExpression)); - // Enum - case 273 /* EnumMember */: + case 273: return ts.updateEnumMember(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression)); - // Top-level nodes - case 274 /* SourceFile */: + case 274: return ts.updateSourceFileNode(node, visitLexicalEnvironment(node.statements, visitor, context)); - // Transformation nodes - case 301 /* PartiallyEmittedExpression */: + case 301: return ts.updatePartiallyEmittedExpression(node, visitNode(node.expression, visitor, ts.isExpression)); - case 302 /* CommaListExpression */: + case 302: return ts.updateCommaList(node, nodesVisitor(node.elements, visitor, ts.isExpression)); default: - // No need to visit nodes with no children. return node; } } ts.visitEachChild = visitEachChild; - /** - * Extracts the single node from a NodeArray. - * - * @param nodes The NodeArray. - */ function extractSingleNode(nodes) { ts.Debug.assert(nodes.length <= 1, "Too many nodes written to output."); return ts.singleOrUndefined(nodes); } })(ts || (ts = {})); -/* @internal */ (function (ts) { function reduceNode(node, f, initial) { return node ? f(initial, node) : initial; @@ -59774,14 +49930,6 @@ var ts; 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. - * - * @param node The node containing the children to reduce. - * @param initial The initial value to supply to the reduction. - * @param f The callback function - */ function reduceEachChild(node, initial, cbNode, cbNodeArray) { if (node === undefined) { return initial; @@ -59789,59 +49937,52 @@ var ts; 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 <= 145 /* LastToken */)) { + if ((kind > 0 && kind <= 145)) { return initial; } - // We do not yet support types. - if ((kind >= 161 /* TypePredicate */ && kind <= 178 /* LiteralType */)) { + if ((kind >= 161 && kind <= 178)) { return initial; } var result = initial; switch (node.kind) { - // Leaf nodes - case 212 /* SemicolonClassElement */: - case 215 /* EmptyStatement */: - case 206 /* OmittedExpression */: - case 231 /* DebuggerStatement */: - case 300 /* NotEmittedStatement */: - // No need to visit nodes with no children. + case 212: + case 215: + case 206: + case 231: + case 300: break; - // Names - case 146 /* QualifiedName */: + case 146: result = reduceNode(node.left, cbNode, result); result = reduceNode(node.right, cbNode, result); break; - case 147 /* ComputedPropertyName */: + case 147: result = reduceNode(node.expression, cbNode, result); break; - // Signature elements - case 149 /* Parameter */: + case 149: 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 150 /* Decorator */: + case 150: result = reduceNode(node.expression, cbNode, result); break; - // Type member - case 151 /* PropertySignature */: + case 151: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNode(node.questionToken, cbNode, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - case 152 /* PropertyDeclaration */: + case 152: 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 154 /* MethodDeclaration */: + case 154: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); @@ -59850,12 +49991,12 @@ var ts; result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; - case 155 /* Constructor */: + case 155: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.body, cbNode, result); break; - case 156 /* GetAccessor */: + case 156: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); @@ -59863,57 +50004,55 @@ var ts; result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; - case 157 /* SetAccessor */: + case 157: 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 180 /* ObjectBindingPattern */: - case 181 /* ArrayBindingPattern */: + case 180: + case 181: result = reduceNodes(node.elements, cbNodes, result); break; - case 182 /* BindingElement */: + case 182: result = reduceNode(node.propertyName, cbNode, result); result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - // Expression - case 183 /* ArrayLiteralExpression */: + case 183: result = reduceNodes(node.elements, cbNodes, result); break; - case 184 /* ObjectLiteralExpression */: + case 184: result = reduceNodes(node.properties, cbNodes, result); break; - case 185 /* PropertyAccessExpression */: + case 185: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.name, cbNode, result); break; - case 186 /* ElementAccessExpression */: + case 186: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.argumentExpression, cbNode, result); break; - case 187 /* CallExpression */: + case 187: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); result = reduceNodes(node.arguments, cbNodes, result); break; - case 188 /* NewExpression */: + case 188: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); result = reduceNodes(node.arguments, cbNodes, result); break; - case 189 /* TaggedTemplateExpression */: + case 189: result = reduceNode(node.tag, cbNode, result); result = reduceNode(node.template, cbNode, result); break; - case 190 /* TypeAssertionExpression */: + case 190: result = reduceNode(node.type, cbNode, result); result = reduceNode(node.expression, cbNode, result); break; - case 192 /* FunctionExpression */: + case 192: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.typeParameters, cbNodes, result); @@ -59921,123 +50060,121 @@ var ts; result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; - case 193 /* ArrowFunction */: + case 193: 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 191 /* ParenthesizedExpression */: - case 194 /* DeleteExpression */: - case 195 /* TypeOfExpression */: - case 196 /* VoidExpression */: - case 197 /* AwaitExpression */: - case 203 /* YieldExpression */: - case 204 /* SpreadElement */: - case 209 /* NonNullExpression */: + case 191: + case 194: + case 195: + case 196: + case 197: + case 203: + case 204: + case 209: result = reduceNode(node.expression, cbNode, result); break; - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: + case 198: + case 199: result = reduceNode(node.operand, cbNode, result); break; - case 200 /* BinaryExpression */: + case 200: result = reduceNode(node.left, cbNode, result); result = reduceNode(node.right, cbNode, result); break; - case 201 /* ConditionalExpression */: + case 201: result = reduceNode(node.condition, cbNode, result); result = reduceNode(node.whenTrue, cbNode, result); result = reduceNode(node.whenFalse, cbNode, result); break; - case 202 /* TemplateExpression */: + case 202: result = reduceNode(node.head, cbNode, result); result = reduceNodes(node.templateSpans, cbNodes, result); break; - case 205 /* ClassExpression */: + case 205: 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 207 /* ExpressionWithTypeArguments */: + case 207: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); break; - case 208 /* AsExpression */: + case 208: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.type, cbNode, result); break; - // Misc - case 211 /* TemplateSpan */: + case 211: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.literal, cbNode, result); break; - // Element - case 213 /* Block */: + case 213: result = reduceNodes(node.statements, cbNodes, result); break; - case 214 /* VariableStatement */: + case 214: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.declarationList, cbNode, result); break; - case 216 /* ExpressionStatement */: + case 216: result = reduceNode(node.expression, cbNode, result); break; - case 217 /* IfStatement */: + case 217: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.thenStatement, cbNode, result); result = reduceNode(node.elseStatement, cbNode, result); break; - case 218 /* DoStatement */: + case 218: result = reduceNode(node.statement, cbNode, result); result = reduceNode(node.expression, cbNode, result); break; - case 219 /* WhileStatement */: - case 226 /* WithStatement */: + case 219: + case 226: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; - case 220 /* ForStatement */: + case 220: 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 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 221: + case 222: result = reduceNode(node.initializer, cbNode, result); result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; - case 225 /* ReturnStatement */: - case 229 /* ThrowStatement */: + case 225: + case 229: result = reduceNode(node.expression, cbNode, result); break; - case 227 /* SwitchStatement */: + case 227: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.caseBlock, cbNode, result); break; - case 228 /* LabeledStatement */: + case 228: result = reduceNode(node.label, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; - case 230 /* TryStatement */: + case 230: result = reduceNode(node.tryBlock, cbNode, result); result = reduceNode(node.catchClause, cbNode, result); result = reduceNode(node.finallyBlock, cbNode, result); break; - case 232 /* VariableDeclaration */: + case 232: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - case 233 /* VariableDeclarationList */: + case 233: result = reduceNodes(node.declarations, cbNodes, result); break; - case 234 /* FunctionDeclaration */: + case 234: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); @@ -60046,7 +50183,7 @@ var ts; result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; - case 235 /* ClassDeclaration */: + case 235: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); @@ -60054,139 +50191,131 @@ var ts; result = reduceNodes(node.heritageClauses, cbNodes, result); result = reduceNodes(node.members, cbNodes, result); break; - case 238 /* EnumDeclaration */: + case 238: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.members, cbNodes, result); break; - case 239 /* ModuleDeclaration */: + case 239: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNode(node.body, cbNode, result); break; - case 240 /* ModuleBlock */: + case 240: result = reduceNodes(node.statements, cbNodes, result); break; - case 241 /* CaseBlock */: + case 241: result = reduceNodes(node.clauses, cbNodes, result); break; - case 243 /* ImportEqualsDeclaration */: + case 243: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNode(node.moduleReference, cbNode, result); break; - case 244 /* ImportDeclaration */: + case 244: 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 245 /* ImportClause */: + case 245: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.namedBindings, cbNode, result); break; - case 246 /* NamespaceImport */: + case 246: result = reduceNode(node.name, cbNode, result); break; - case 247 /* NamedImports */: - case 251 /* NamedExports */: + case 247: + case 251: result = reduceNodes(node.elements, cbNodes, result); break; - case 248 /* ImportSpecifier */: - case 252 /* ExportSpecifier */: + case 248: + case 252: result = reduceNode(node.propertyName, cbNode, result); result = reduceNode(node.name, cbNode, result); break; - case 249 /* ExportAssignment */: + case 249: result = ts.reduceLeft(node.decorators, cbNode, result); result = ts.reduceLeft(node.modifiers, cbNode, result); result = reduceNode(node.expression, cbNode, result); break; - case 250 /* ExportDeclaration */: + case 250: 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; - // Module references - case 254 /* ExternalModuleReference */: + case 254: result = reduceNode(node.expression, cbNode, result); break; - // JSX - case 255 /* JsxElement */: + case 255: result = reduceNode(node.openingElement, cbNode, result); result = ts.reduceLeft(node.children, cbNode, result); result = reduceNode(node.closingElement, cbNode, result); break; - case 259 /* JsxFragment */: + case 259: result = reduceNode(node.openingFragment, cbNode, result); result = ts.reduceLeft(node.children, cbNode, result); result = reduceNode(node.closingFragment, cbNode, result); break; - case 256 /* JsxSelfClosingElement */: - case 257 /* JsxOpeningElement */: + case 256: + case 257: result = reduceNode(node.tagName, cbNode, result); result = reduceNode(node.attributes, cbNode, result); break; - case 263 /* JsxAttributes */: + case 263: result = reduceNodes(node.properties, cbNodes, result); break; - case 258 /* JsxClosingElement */: + case 258: result = reduceNode(node.tagName, cbNode, result); break; - case 262 /* JsxAttribute */: + case 262: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - case 264 /* JsxSpreadAttribute */: + case 264: result = reduceNode(node.expression, cbNode, result); break; - case 265 /* JsxExpression */: + case 265: result = reduceNode(node.expression, cbNode, result); break; - // Clauses - case 266 /* CaseClause */: + case 266: result = reduceNode(node.expression, cbNode, result); - // falls through - case 267 /* DefaultClause */: + case 267: result = reduceNodes(node.statements, cbNodes, result); break; - case 268 /* HeritageClause */: + case 268: result = reduceNodes(node.types, cbNodes, result); break; - case 269 /* CatchClause */: + case 269: result = reduceNode(node.variableDeclaration, cbNode, result); result = reduceNode(node.block, cbNode, result); break; - // Property assignments - case 270 /* PropertyAssignment */: + case 270: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - case 271 /* ShorthandPropertyAssignment */: + case 271: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.objectAssignmentInitializer, cbNode, result); break; - case 272 /* SpreadAssignment */: + case 272: result = reduceNode(node.expression, cbNode, result); break; - // Enum - case 273 /* EnumMember */: + case 273: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; - // Top-level nodes - case 274 /* SourceFile */: + case 274: result = reduceNodes(node.statements, cbNodes, result); break; - // Transformation nodes - case 301 /* PartiallyEmittedExpression */: + case 301: result = reduceNode(node.expression, cbNode, result); break; - case 302 /* CommaListExpression */: + case 302: result = reduceNodes(node.elements, cbNodes, result); break; default: @@ -60204,36 +50333,21 @@ var ts; : ts.prependStatements(statements, declarations); } ts.mergeLexicalEnvironment = mergeLexicalEnvironment; - /** - * Lifts a NodeArray containing only Statement nodes to a block. - * - * @param nodes The NodeArray. - */ function liftToBlock(nodes) { Debug.assert(ts.every(nodes, ts.isStatement), "Cannot lift nodes to a Block."); return ts.singleOrUndefined(nodes) || ts.createBlock(nodes); } ts.liftToBlock = liftToBlock; - /** - * Aggregates the TransformFlags for a Node and its subtree. - */ function aggregateTransformFlags(node) { aggregateTransformFlagsForNode(node); return node; } ts.aggregateTransformFlags = aggregateTransformFlags; - /** - * Aggregates the TransformFlags for a Node and its subtree. The flags for the subtree are - * computed first, then the transform flags for the current node are computed from the subtree - * flags and the state of the current node. Finally, the transform flags of the node are - * returned, excluding any flags that should not be included in its parent node's subtree - * flags. - */ function aggregateTransformFlagsForNode(node) { if (node === undefined) { - return 0 /* None */; + return 0; } - if (node.transformFlags & 536870912 /* HasComputedFlags */) { + if (node.transformFlags & 536870912) { return node.transformFlags & ~ts.getTransformFlagsSubtreeExclusions(node.kind); } var subtreeFlags = aggregateTransformFlagsForSubtree(node); @@ -60241,34 +50355,24 @@ var ts; } function aggregateTransformFlagsForNodeArray(nodes) { if (nodes === undefined) { - return 0 /* None */; + return 0; } - var subtreeFlags = 0 /* None */; - var nodeArrayFlags = 0 /* None */; + var subtreeFlags = 0; + var nodeArrayFlags = 0; 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 */; + nodeArrayFlags |= node.transformFlags & ~536870912; } - nodes.transformFlags = nodeArrayFlags | 536870912 /* HasComputedFlags */; + nodes.transformFlags = nodeArrayFlags | 536870912; return subtreeFlags; } - /** - * Aggregates the transform flags for the subtree of a node. - */ function aggregateTransformFlagsForSubtree(node) { - // We do not transform ambient declarations or types, so there is no need to - // recursively aggregate transform flags. - if (ts.hasModifier(node, 2 /* Ambient */) || (ts.isTypeNode(node) && node.kind !== 207 /* ExpressionWithTypeArguments */)) { - return 0 /* None */; + if (ts.hasModifier(node, 2) || (ts.isTypeNode(node) && node.kind !== 207)) { + return 0; } - // Aggregate the transform flags of each child. - return reduceEachChild(node, 0 /* None */, aggregateTransformFlagsForChildNode, aggregateTransformFlagsForChildNodes); + return reduceEachChild(node, 0, aggregateTransformFlagsForChildNode, aggregateTransformFlagsForChildNodes); } - /** - * Aggregates the TransformFlags of a child node with the TransformFlags of its - * siblings. - */ function aggregateTransformFlagsForChildNode(transformFlags, node) { return transformFlags | aggregateTransformFlagsForNode(node); } @@ -60282,34 +50386,30 @@ var ts; return Debug.fail((message || "Unexpected node.") + "\r\nNode " + ts.formatSyntaxKind(node.kind) + " was unexpected.", failBadSyntaxKind); } Debug.failBadSyntaxKind = failBadSyntaxKind; - Debug.assertEachNode = Debug.shouldAssert(1 /* Normal */) + Debug.assertEachNode = Debug.shouldAssert(1) ? function (nodes, test, message) { return Debug.assert(test === undefined || ts.every(nodes, test), message || "Unexpected node.", function () { return "Node array did not pass test '" + Debug.getFunctionName(test) + "'."; }, Debug.assertEachNode); } : ts.noop; - Debug.assertNode = Debug.shouldAssert(1 /* Normal */) + Debug.assertNode = Debug.shouldAssert(1) ? 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 '" + Debug.getFunctionName(test) + "'."; }, Debug.assertNode); } : ts.noop; - Debug.assertOptionalNode = Debug.shouldAssert(1 /* Normal */) + Debug.assertOptionalNode = Debug.shouldAssert(1) ? 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 '" + Debug.getFunctionName(test) + "'."; }, Debug.assertOptionalNode); } : ts.noop; - Debug.assertOptionalToken = Debug.shouldAssert(1 /* Normal */) + Debug.assertOptionalToken = Debug.shouldAssert(1) ? 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."; }, Debug.assertOptionalToken); } : ts.noop; - Debug.assertMissingNode = Debug.shouldAssert(1 /* Normal */) + Debug.assertMissingNode = Debug.shouldAssert(1) ? function (node, message) { return Debug.assert(node === undefined, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was unexpected'."; }, Debug.assertMissingNode); } : ts.noop; - /** - * Injects debug information into frequently used types. - */ function enableDebugInfo() { if (isDebugInfoEnabled) return; - // Add additional properties in debug mode to assist with debugging. Object.defineProperties(ts.objectAllocator.getSymbolConstructor().prototype, { __debugFlags: { get: function () { return ts.formatSymbolFlags(this.flags); } } }); Object.defineProperties(ts.objectAllocator.getTypeConstructor().prototype, { __debugFlags: { get: function () { return ts.formatTypeFlags(this.flags); } }, - __debugObjectFlags: { get: function () { return this.flags & 131072 /* Object */ ? ts.formatObjectFlags(this.objectFlags) : ""; } }, + __debugObjectFlags: { get: function () { return this.flags & 131072 ? ts.formatObjectFlags(this.objectFlags) : ""; } }, __debugTypeToString: { value: function () { return this.checker.typeToString(this); } }, }); var nodeConstructors = [ @@ -60343,7 +50443,6 @@ var ts; Debug.enableDebugInfo = enableDebugInfo; })(Debug = ts.Debug || (ts.Debug = {})); })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { function getOriginalNodeId(node) { @@ -60359,12 +50458,12 @@ var ts; return ts.some(node.elements, isNamedDefaultReference); } function isNamedDefaultReference(e) { - return e.propertyName !== undefined && e.propertyName.escapedText === "default" /* Default */; + return e.propertyName !== undefined && e.propertyName.escapedText === "default"; } function chainBundle(transformSourceFile) { return transformSourceFileOrBundle; function transformSourceFileOrBundle(node) { - return node.kind === 274 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node); + return node.kind === 274 ? transformSourceFile(node) : transformBundle(node); } function transformBundle(node) { return ts.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends); @@ -60388,13 +50487,11 @@ var ts; defaultRefCount++; } } - // Import star is required if there's default named refs mixed with non-default refs, or if theres non-default refs and it has a default import return (defaultRefCount > 0 && defaultRefCount !== bindings.elements.length) || (!!(bindings.elements.length - defaultRefCount) && ts.isDefaultImport(node)); } ts.getImportNeedsImportStarHelper = getImportNeedsImportStarHelper; function getImportNeedsImportDefaultHelper(node) { - // Import default is needed if there's a default import or a default ref and no other refs (meaning an import star helper wasn't requested) - return !getImportNeedsImportStarHelper(node) && (ts.isDefaultImport(node) || (!!node.importClause && ts.isNamedImports(node.importClause.namedBindings) && containsDefaultReference(node.importClause.namedBindings))); // TODO: GH#18217 + return !getImportNeedsImportStarHelper(node) && (ts.isDefaultImport(node) || (!!node.importClause && ts.isNamedImports(node.importClause.namedBindings) && containsDefaultReference(node.importClause.namedBindings))); } ts.getImportNeedsImportDefaultHelper = getImportNeedsImportDefaultHelper; function collectExternalModuleInfo(sourceFile, resolver, compilerOptions) { @@ -60410,34 +50507,26 @@ var ts; for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var node = _a[_i]; switch (node.kind) { - case 244 /* ImportDeclaration */: - // import "mod" - // import x from "mod" - // import * as x from "mod" - // import { x, y } from "mod" + case 244: externalImports.push(node); hasImportStarOrImportDefault = hasImportStarOrImportDefault || getImportNeedsImportStarHelper(node) || getImportNeedsImportDefaultHelper(node); break; - case 243 /* ImportEqualsDeclaration */: - if (node.moduleReference.kind === 254 /* ExternalModuleReference */) { - // import x = require("mod") + case 243: + if (node.moduleReference.kind === 254) { externalImports.push(node); } break; - case 250 /* ExportDeclaration */: + case 250: 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.get(ts.idText(specifier.name))) { @@ -60454,31 +50543,28 @@ var ts; } } break; - case 249 /* ExportAssignment */: + case 249: if (node.isExportEquals && !exportEquals) { - // export = x exportEquals = node; } break; - case 214 /* VariableStatement */: - if (ts.hasModifier(node, 1 /* Export */)) { + case 214: + if (ts.hasModifier(node, 1)) { for (var _d = 0, _e = node.declarationList.declarations; _d < _e.length; _d++) { var decl = _e[_d]; exportedNames = collectExportedVariableInfo(decl, uniqueExports, exportedNames); } } break; - case 234 /* FunctionDeclaration */: - if (ts.hasModifier(node, 1 /* Export */)) { - if (ts.hasModifier(node, 512 /* Default */)) { - // export default function() { } + case 234: + if (ts.hasModifier(node, 1)) { + if (ts.hasModifier(node, 512)) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node)); hasExportDefault = true; } } else { - // export function x() { } var name = node.name; if (!uniqueExports.get(ts.idText(name))) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); @@ -60488,17 +50574,15 @@ var ts; } } break; - case 235 /* ClassDeclaration */: - if (ts.hasModifier(node, 1 /* Export */)) { - if (ts.hasModifier(node, 512 /* Default */)) { - // export default class { } + case 235: + if (ts.hasModifier(node, 1)) { + if (ts.hasModifier(node, 512)) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node)); hasExportDefault = true; } } else { - // export class x { } var name = node.name; if (name && !uniqueExports.get(ts.idText(name))) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); @@ -60511,11 +50595,9 @@ var ts; } } var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStarOrImportDefault); - var externalHelpersImportDeclaration = externalHelpersModuleName && ts.createImportDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, ts.createImportClause(/*name*/ undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)); + var externalHelpersImportDeclaration = externalHelpersModuleName && ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)); if (externalHelpersImportDeclaration) { - ts.addEmitFlags(externalHelpersImportDeclaration, 67108864 /* NeverApplyImportHelper */); + ts.addEmitFlags(externalHelpersImportDeclaration, 67108864); externalImports.unshift(externalHelpersImportDeclaration); } return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames, externalHelpersImportDeclaration: externalHelpersImportDeclaration }; @@ -60539,7 +50621,6 @@ var ts; } return exportedNames; } - /** Use a sparse array as a multi-map. */ function multiMapSparseArrayAdd(map, key, value) { var values = map[key]; if (values) { @@ -60550,22 +50631,13 @@ var ts; } return values; } - /** - * Used in the module transformer to check if an expression is reasonably without sideeffect, - * and thus better to copy into multiple places rather than to cache in a temporary variable - * - this is mostly subjective beyond the requirement that the expression not be sideeffecting - */ function isSimpleCopiableExpression(expression) { return ts.isStringLiteralLike(expression) || - expression.kind === 8 /* NumericLiteral */ || + expression.kind === 8 || ts.isKeyword(expression.kind) || ts.isIdentifier(expression); } ts.isSimpleCopiableExpression = isSimpleCopiableExpression; - /** - * @param input Template string input strings - * @param args Names which need to be made file-level unique - */ function helperString(input) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -60583,25 +50655,8 @@ var ts; } ts.helperString = helperString; })(ts || (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 DestructuringAssignment or a VariableDeclaration to an expression. - * - * @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(node, visitor, context, level, needsValue, createAssignmentCallback) { var location = node; var value; @@ -60633,30 +50688,16 @@ var ts; if (value) { value = ts.visitNode(value, visitor, ts.isExpression); if (ts.isIdentifier(value) && bindingOrAssignmentElementAssignsToName(node, value.escapedText)) { - // If the right-hand value of the assignment is also an assignment target then - // we need to cache the right-hand value. - value = ensureIdentifier(flattenContext, value, /*reuseIdentifierExpressions*/ false, location); + value = ensureIdentifier(flattenContext, value, false, location); } else 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); + value = ensureIdentifier(flattenContext, value, 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; } } - flattenBindingOrAssignmentElement(flattenContext, node, value, location, /*skipInitializer*/ ts.isDestructuringAssignment(node)); + flattenBindingOrAssignmentElement(flattenContext, node, value, location, ts.isDestructuringAssignment(node)); if (value && needsValue) { if (!ts.some(expressions)) { return value; @@ -60665,9 +50706,7 @@ var ts; } 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, 64 /* NoNestedSourceMaps */); + ts.setEmitFlags(expression, 64); ts.aggregateTransformFlags(expression); expressions = ts.append(expressions, expression); } @@ -60682,7 +50721,7 @@ var ts; } ts.flattenDestructuringAssignment = flattenDestructuringAssignment; function bindingOrAssignmentElementAssignsToName(element, escapedName) { - var target = ts.getTargetOfBindingOrAssignmentElement(element); // TODO: GH#18217 + var target = ts.getTargetOfBindingOrAssignmentElement(element); if (ts.isBindingOrAssignmentPattern(target)) { return bindingOrAssignmentPatternAssignsToName(target, escapedName); } @@ -60701,17 +50740,6 @@ var ts; } return false; } - /** - * Flattens a VariableDeclaration or ParameterDeclaration to one or more variable declarations. - * - * @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 flattenDestructuringBinding(node, visitor, context, level, rval, hoistTempVariables, skipInitializer) { if (hoistTempVariables === void 0) { hoistTempVariables = false; } var pendingExpressions; @@ -60732,19 +50760,17 @@ var ts; if (ts.isVariableDeclaration(node)) { var initializer = ts.getInitializerOfBindingOrAssignmentElement(node); if (initializer && ts.isIdentifier(initializer) && bindingOrAssignmentElementAssignsToName(node, initializer.escapedText)) { - // If the right-hand value of the assignment is also an assignment target then - // we need to cache the right-hand value. - initializer = ensureIdentifier(flattenContext, initializer, /*reuseIdentifierExpressions*/ false, initializer); + initializer = ensureIdentifier(flattenContext, initializer, false, initializer); node = ts.updateVariableDeclaration(node, node.name, node.type, initializer); } } flattenBindingOrAssignmentElement(flattenContext, node, rval, node, skipInitializer); if (pendingExpressions) { - var temp = ts.createTempVariable(/*recordTempVariable*/ undefined); + var temp = ts.createTempVariable(undefined); if (hoistTempVariables) { var value = ts.inlineExpressions(pendingExpressions); pendingExpressions = undefined; - emitBindingOrAssignment(temp, value, /*location*/ undefined, /*original*/ undefined); + emitBindingOrAssignment(temp, value, undefined, undefined); } else { context.hoistVariableDeclaration(temp); @@ -60756,12 +50782,11 @@ var ts; } for (var _i = 0, pendingDeclarations_1 = pendingDeclarations; _i < pendingDeclarations_1.length; _i++) { var _a = pendingDeclarations_1[_i], pendingExpressions_1 = _a.pendingExpressions, name = _a.name, value = _a.value, location = _a.location, original = _a.original; - var variable = ts.createVariableDeclaration(name, - /*type*/ undefined, pendingExpressions_1 ? ts.inlineExpressions(ts.append(pendingExpressions_1, value)) : value); + var variable = ts.createVariableDeclaration(name, undefined, pendingExpressions_1 ? ts.inlineExpressions(ts.append(pendingExpressions_1, value)) : value); variable.original = original; ts.setTextRange(variable, location); if (ts.isIdentifier(name)) { - ts.setEmitFlags(variable, 64 /* NoNestedSourceMaps */); + ts.setEmitFlags(variable, 64); } ts.aggregateTransformFlags(variable); declarations.push(variable); @@ -60780,29 +50805,17 @@ var ts; } } ts.flattenDestructuringBinding = flattenDestructuringBinding; - /** - * Flattens a BindingOrAssignmentElement into zero or more bindings or assignments. - * - * @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 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 if (!value) { - // Use 'void 0' in absence of value and initializer value = ts.createVoidZero(); } } - var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element); // TODO: GH#18217 + var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element); if (ts.isObjectBindingOrAssignmentPattern(bindingTarget)) { flattenObjectBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); } @@ -60810,26 +50823,13 @@ var ts; flattenArrayBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); } else { - flattenContext.emitBindingOrAssignment(bindingTarget, value, location, /*original*/ element); // TODO: GH#18217 + flattenContext.emitBindingOrAssignment(bindingTarget, value, location, 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); } @@ -60839,9 +50839,9 @@ var ts; 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 */)) + if (flattenContext.level >= 1 + && !(element.transformFlags & (524288 | 1048576)) + && !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (524288 | 1048576)) && !ts.isComputedPropertyName(propertyName)) { bindingElements = ts.append(bindingElements, element); } @@ -60854,7 +50854,7 @@ var ts; if (ts.isComputedPropertyName(propertyName)) { computedTempVariables = ts.append(computedTempVariables, rhsValue.argumentExpression); } - flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element); + flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } else if (i === numElements - 1) { @@ -60862,7 +50862,7 @@ var ts; flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); bindingElements = undefined; } - var rhsValue = createRestCall(flattenContext.context, value, elements, computedTempVariables, pattern); // TODO: GH#18217 + var rhsValue = createRestCall(flattenContext.context, value, elements, computedTempVariables, pattern); flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } @@ -60870,33 +50870,16 @@ var ts; 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 (flattenContext.level < 1 /* ObjectRest */ && flattenContext.downlevelIteration) { - // Read the elements of the iterable into an array + if (flattenContext.level < 1 && flattenContext.downlevelIteration) { value = ensureIdentifier(flattenContext, ts.createReadHelper(flattenContext.context, value, numElements > 0 && ts.getRestIndicatorOfBindingOrAssignmentElement(elements[numElements - 1]) ? undefined - : numElements, location), - /*reuseIdentifierExpressions*/ false, location); + : numElements, location), false, location); } - else if (numElements !== 1 && (flattenContext.level < 1 /* ObjectRest */ || numElements === 0) + else if (numElements !== 1 && (flattenContext.level < 1 || numElements === 0) || ts.every(elements, ts.isOmittedExpression)) { - // 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. - // Or all the elements of the binding pattern are omitted expression such as "var [,] = [1,2]", - // then we will create temporary variable. var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0; value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location); } @@ -60904,11 +50887,9 @@ var ts; 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.level >= 1) { + if (element.transformFlags & 1048576) { + var temp = ts.createTempVariable(undefined); if (flattenContext.hoistTempVariables) { flattenContext.context.hoistVariableDeclaration(temp); } @@ -60924,11 +50905,11 @@ var ts; } else if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) { var rhsValue = ts.createElementAccess(value, i); - flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element); + flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } else if (i === numElements - 1) { var rhsValue = ts.createArraySlice(value, i); - flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, /*location*/ element); + flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } if (bindingElements) { @@ -60941,31 +50922,13 @@ var ts; } } } - /** - * 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); + value = ensureIdentifier(flattenContext, value, 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, ts.visitNode(propertyName.expression, flattenContext.visitor), /*reuseIdentifierExpressions*/ false, /*location*/ propertyName); + var argumentExpression = ensureIdentifier(flattenContext, ts.visitNode(propertyName.expression, flattenContext.visitor), false, propertyName); return ts.createElementAccess(value, argumentExpression); } else if (ts.isStringOrNumericLiteral(propertyName)) { @@ -60978,29 +50941,18 @@ var ts; return ts.createPropertyAccess(value, name); } } - /** - * Ensures that there exists a declared identifier whose value holds the given expression. - * 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. - * @param location The location to use for source maps and comments. - */ function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) { if (ts.isIdentifier(value) && reuseIdentifierExpressions) { return value; } else { - var temp = ts.createTempVariable(/*recordTempVariable*/ undefined); + var temp = ts.createTempVariable(undefined); if (flattenContext.hoistTempVariables) { flattenContext.context.hoistVariableDeclaration(temp); flattenContext.emitExpression(ts.setTextRange(ts.createAssignment(temp, value), location)); } else { - flattenContext.emitBindingOrAssignment(temp, value, location, /*original*/ undefined); + flattenContext.emitBindingOrAssignment(temp, value, location, undefined); } return temp; } @@ -61020,7 +50972,7 @@ var ts; return ts.createObjectLiteral(ts.map(elements, ts.convertToObjectAssignmentElement)); } function makeBindingElement(name) { - return ts.createBindingElement(/*dotDotDotToken*/ undefined, /*propertyName*/ undefined, name); + return ts.createBindingElement(undefined, undefined, name); } function makeAssignmentElement(name) { return name; @@ -61030,9 +50982,6 @@ var ts; 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 (s != null && 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 = []; @@ -61043,7 +50992,6 @@ var ts; 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 { @@ -61051,45 +50999,15 @@ var ts; } } } - return ts.createCall(ts.getHelperName("__rest"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.getHelperName("__rest"), undefined, [ value, ts.setTextRange(ts.createArrayLiteral(propertyNames), location) ]); } })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { - /** - * Indicates whether to emit type metadata in the new format. - */ var USE_NEW_TYPE_METADATA_FORMAT = false; - var TypeScriptSubstitutionFlags; - (function (TypeScriptSubstitutionFlags) { - /** Enables substitutions for decorated classes. */ - TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["ClassAliases"] = 1] = "ClassAliases"; - /** Enables substitutions for namespace exports. */ - TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["NamespaceExports"] = 2] = "NamespaceExports"; - /* Enables substitutions for unqualified enum members */ - TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["NonQualifiedEnumMembers"] = 8] = "NonQualifiedEnumMembers"; - })(TypeScriptSubstitutionFlags || (TypeScriptSubstitutionFlags = {})); - var ClassFacts; - (function (ClassFacts) { - ClassFacts[ClassFacts["None"] = 0] = "None"; - ClassFacts[ClassFacts["HasStaticInitializedProperties"] = 1] = "HasStaticInitializedProperties"; - ClassFacts[ClassFacts["HasConstructorDecorators"] = 2] = "HasConstructorDecorators"; - ClassFacts[ClassFacts["HasMemberDecorators"] = 4] = "HasMemberDecorators"; - ClassFacts[ClassFacts["IsExportOfNamespace"] = 8] = "IsExportOfNamespace"; - ClassFacts[ClassFacts["IsNamedExternalExport"] = 16] = "IsNamedExternalExport"; - ClassFacts[ClassFacts["IsDefaultExternalExport"] = 32] = "IsDefaultExternalExport"; - ClassFacts[ClassFacts["IsDerivedClass"] = 64] = "IsDerivedClass"; - ClassFacts[ClassFacts["UseImmediatelyInvokedFunctionExpression"] = 128] = "UseImmediatelyInvokedFunctionExpression"; - ClassFacts[ClassFacts["HasAnyDecorators"] = 6] = "HasAnyDecorators"; - ClassFacts[ClassFacts["NeedsName"] = 5] = "NeedsName"; - ClassFacts[ClassFacts["MayNeedImmediatelyInvokedFunctionExpression"] = 7] = "MayNeedImmediatelyInvokedFunctionExpression"; - ClassFacts[ClassFacts["IsExported"] = 56] = "IsExported"; - })(ClassFacts || (ClassFacts = {})); function transformTypeScript(context) { var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var resolver = context.getEmitResolver(); @@ -61097,61 +51015,36 @@ var ts; var strictNullChecks = ts.getStrictOptionValue(compilerOptions, "strictNullChecks"); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var moduleKind = ts.getEmitModuleKind(compilerOptions); - // Save the previous transformation hooks. var previousOnEmitNode = context.onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; - // Set new transformation hooks. context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; - // Enable substitution for property/element access to emit const enum values. - context.enableSubstitution(185 /* PropertyAccessExpression */); - context.enableSubstitution(186 /* ElementAccessExpression */); - // These variables contain state that changes as we descend into the tree. + context.enableSubstitution(185); + context.enableSubstitution(186); var currentSourceFile; var currentNamespace; var currentNamespaceContainerName; var currentScope; var currentScopeFirstDeclarationsOfName; - /** - * 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; - /** - * A map that keeps track of aliases created for classes with decorators to avoid issues - * with the double-binding behavior of classes. - */ var classAliases; - /** - * Keeps track of whether we are within any containing namespaces when performing - * just-in-time substitution while printing an expression identifier. - */ var applicableSubstitutions; - /** - * Tracks what computed name expressions originating from elided names must be inlined - * at the next execution site, in document order - */ var pendingExpressions; return transformSourceFileOrBundle; function transformSourceFileOrBundle(node) { - if (node.kind === 275 /* Bundle */) { + if (node.kind === 275) { return transformBundle(node); } return transformSourceFile(node); } function transformBundle(node) { return ts.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) { - if (prepend.kind === 277 /* InputFiles */) { + if (prepend.kind === 277) { return ts.createUnparsedSourceFile(prepend.javascriptText, prepend.javascriptMapText); } return prepend; })); } - /** - * Transform TypeScript-specific syntax in a SourceFile. - * - * @param node A SourceFile node. - */ function transformSourceFile(node) { if (node.isDeclarationFile) { return node; @@ -61162,100 +51055,61 @@ var ts; currentSourceFile = undefined; return visited; } - /** - * Visits a node, saving and restoring state variables on the stack. - * - * @param node The node to visit. - */ function saveStateAndInvoke(node, f) { - // Save state var savedCurrentScope = currentScope; var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; - // Handle state changes before visiting a node. onBeforeVisitNode(node); var visited = f(node); - // Restore state if (currentScope !== savedCurrentScope) { currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; } currentScope = savedCurrentScope; 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 274 /* SourceFile */: - case 241 /* CaseBlock */: - case 240 /* ModuleBlock */: - case 213 /* Block */: + case 274: + case 241: + case 240: + case 213: currentScope = node; currentScopeFirstDeclarationsOfName = undefined; break; - case 235 /* ClassDeclaration */: - case 234 /* FunctionDeclaration */: - if (ts.hasModifier(node, 2 /* Ambient */)) { + case 235: + case 234: + if (ts.hasModifier(node, 2)) { break; } - // Record these declarations provided that they have a name. if (node.name) { recordEmittedDeclarationInScope(node); } else { - // These nodes should always have names unless they are default-exports; - // however, class declaration parsing allows for undefined names, so syntactically invalid - // programs may also have an undefined name. - ts.Debug.assert(node.kind === 235 /* ClassDeclaration */ || ts.hasModifier(node, 512 /* Default */)); + ts.Debug.assert(node.kind === 235 || ts.hasModifier(node, 512)); } break; } } - /** - * General-purpose node visitor. - * - * @param node The node to visit. - */ function visitor(node) { return saveStateAndInvoke(node, visitorWorker); } - /** - * Visits and possibly transforms any node. - * - * @param node The node to visit. - */ function visitorWorker(node) { - if (node.transformFlags & 1 /* TypeScript */) { - // This node is explicitly marked as TypeScript, so we should transform the node. + if (node.transformFlags & 1) { return visitTypeScript(node); } - else if (node.transformFlags & 2 /* ContainsTypeScript */) { - // This node contains TypeScript, so we should visit its children. + else if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } return node; } - /** - * Specialized visitor that visits the immediate children of a SourceFile. - * - * @param node The node to visit. - */ function sourceElementVisitor(node) { return saveStateAndInvoke(node, sourceElementVisitorWorker); } - /** - * Specialized visitor that visits the immediate children of a SourceFile. - * - * @param node The node to visit. - */ function sourceElementVisitorWorker(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: - case 243 /* ImportEqualsDeclaration */: - case 249 /* ExportAssignment */: - case 250 /* ExportDeclaration */: + case 244: + case 243: + case 249: + case 250: return visitEllidableStatement(node); default: return visitorWorker(node); @@ -61264,265 +51118,168 @@ var ts; function visitEllidableStatement(node) { var parsed = ts.getParseTreeNode(node); if (parsed !== node) { - // If the node has been transformed by a `before` transformer, perform no ellision on it - // As the type information we would attempt to lookup to perform ellision is potentially unavailable for the synthesized nodes - // We do not reuse `visitorWorker`, as the ellidable statement syntax kinds are technically unrecognized by the switch-case in `visitTypeScript`, - // and will trigger debug failures when debug verbosity is turned up - if (node.transformFlags & 2 /* ContainsTypeScript */) { - // This node contains TypeScript, so we should visit its children. + if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } - // Otherwise, we can just return the node return node; } switch (node.kind) { - case 244 /* ImportDeclaration */: + case 244: return visitImportDeclaration(node); - case 243 /* ImportEqualsDeclaration */: + case 243: return visitImportEqualsDeclaration(node); - case 249 /* ExportAssignment */: + case 249: return visitExportAssignment(node); - case 250 /* ExportDeclaration */: + case 250: return visitExportDeclaration(node); default: ts.Debug.fail("Unhandled ellided statement"); } } - /** - * Specialized visitor that visits the immediate children of a namespace. - * - * @param node The node to visit. - */ function namespaceElementVisitor(node) { return saveStateAndInvoke(node, namespaceElementVisitorWorker); } - /** - * Specialized visitor that visits the immediate children of a namespace. - * - * @param node The node to visit. - */ function namespaceElementVisitorWorker(node) { - if (node.kind === 250 /* ExportDeclaration */ || - node.kind === 244 /* ImportDeclaration */ || - node.kind === 245 /* ImportClause */ || - (node.kind === 243 /* ImportEqualsDeclaration */ && - node.moduleReference.kind === 254 /* ExternalModuleReference */)) { - // do not emit ES6 imports and exports since they are illegal inside a namespace + if (node.kind === 250 || + node.kind === 244 || + node.kind === 245 || + (node.kind === 243 && + node.moduleReference.kind === 254)) { return undefined; } - else if (node.transformFlags & 1 /* TypeScript */ || ts.hasModifier(node, 1 /* Export */)) { - // This node is explicitly marked as TypeScript, or is exported at the namespace - // level, so we should transform the node. + else if (node.transformFlags & 1 || ts.hasModifier(node, 1)) { return visitTypeScript(node); } - else if (node.transformFlags & 2 /* ContainsTypeScript */) { - // This node contains TypeScript, so we should visit its children. + else if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } return node; } - /** - * Specialized visitor that visits the immediate children of a class with TypeScript syntax. - * - * @param node The node to visit. - */ function classElementVisitor(node) { return saveStateAndInvoke(node, classElementVisitorWorker); } - /** - * Specialized visitor that visits the immediate children of a class with TypeScript syntax. - * - * @param node The node to visit. - */ function classElementVisitorWorker(node) { switch (node.kind) { - case 155 /* Constructor */: - // TypeScript constructors are transformed in `visitClassDeclaration`. - // We elide them here as `visitorWorker` checks transform flags, which could - // erronously include an ES6 constructor without TypeScript syntax. + case 155: return undefined; - case 152 /* PropertyDeclaration */: - case 160 /* IndexSignature */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 154 /* MethodDeclaration */: - // Fallback to the default visit behavior. + case 152: + case 160: + case 156: + case 157: + case 154: return visitorWorker(node); - case 212 /* SemicolonClassElement */: + case 212: return node; default: return ts.Debug.failBadSyntaxKind(node); } } function modifierVisitor(node) { - if (ts.modifierToFlag(node.kind) & 2270 /* TypeScriptModifier */) { + if (ts.modifierToFlag(node.kind) & 2270) { return undefined; } - else if (currentNamespace && node.kind === 84 /* ExportKeyword */) { + else if (currentNamespace && node.kind === 84) { return undefined; } return node; } - /** - * Branching visitor, visits a TypeScript syntax node. - * - * @param node The node to visit. - */ function visitTypeScript(node) { - if (ts.hasModifier(node, 2 /* Ambient */) && ts.isStatement(node)) { - // TypeScript ambient declarations are elided, but some comments may be preserved. - // See the implementation of `getLeadingComments` in comments.ts for more details. + if (ts.hasModifier(node, 2) && ts.isStatement(node)) { return ts.createNotEmittedStatement(node); } switch (node.kind) { - case 84 /* ExportKeyword */: - case 79 /* DefaultKeyword */: - // ES6 export and default modifiers are elided when inside a namespace. + case 84: + case 79: return currentNamespace ? undefined : node; - case 114 /* PublicKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 117 /* AbstractKeyword */: - case 76 /* ConstKeyword */: - case 124 /* DeclareKeyword */: - case 132 /* ReadonlyKeyword */: - // TypeScript accessibility and readonly modifiers are elided. - case 167 /* ArrayType */: - case 168 /* TupleType */: - case 166 /* TypeLiteral */: - case 161 /* TypePredicate */: - case 148 /* TypeParameter */: - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 122 /* BooleanKeyword */: - case 137 /* StringKeyword */: - case 134 /* NumberKeyword */: - case 131 /* NeverKeyword */: - case 105 /* VoidKeyword */: - case 138 /* SymbolKeyword */: - case 164 /* ConstructorType */: - case 163 /* FunctionType */: - case 165 /* TypeQuery */: - case 162 /* TypeReference */: - case 169 /* UnionType */: - case 170 /* IntersectionType */: - case 171 /* ConditionalType */: - case 173 /* ParenthesizedType */: - case 174 /* ThisType */: - case 175 /* TypeOperator */: - case 176 /* IndexedAccessType */: - case 177 /* MappedType */: - case 178 /* LiteralType */: - // TypeScript type nodes are elided. - case 160 /* IndexSignature */: - // TypeScript index signatures are elided. - case 150 /* Decorator */: - // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration. - case 237 /* TypeAliasDeclaration */: - // TypeScript type-only declarations are elided. + case 114: + case 112: + case 113: + case 117: + case 76: + case 124: + case 132: + case 167: + case 168: + case 166: + case 161: + case 148: + case 119: + case 142: + case 122: + case 137: + case 134: + case 131: + case 105: + case 138: + case 164: + case 163: + case 165: + case 162: + case 169: + case 170: + case 171: + case 173: + case 174: + case 175: + case 176: + case 177: + case 178: + case 160: + case 150: + case 237: return undefined; - case 152 /* PropertyDeclaration */: - // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects + case 152: return visitPropertyDeclaration(node); - case 242 /* NamespaceExportDeclaration */: - // TypeScript namespace export declarations are elided. + case 242: return undefined; - case 155 /* Constructor */: + case 155: return visitConstructor(node); - case 236 /* InterfaceDeclaration */: - // TypeScript interfaces are elided, but some comments may be preserved. - // See the implementation of `getLeadingComments` in comments.ts for more details. + case 236: return ts.createNotEmittedStatement(node); - case 235 /* ClassDeclaration */: - // This is a class declaration with TypeScript syntax extensions. - // - // TypeScript class syntax extensions include: - // - decorators - // - optional `implements` heritage clause - // - parameter property assignments in the constructor - // - property declarations - // - index signatures - // - method overload signatures + case 235: return visitClassDeclaration(node); - case 205 /* ClassExpression */: - // This is a class expression with TypeScript syntax extensions. - // - // TypeScript class syntax extensions include: - // - decorators - // - optional `implements` heritage clause - // - parameter property assignments in the constructor - // - property declarations - // - index signatures - // - method overload signatures + case 205: return visitClassExpression(node); - case 268 /* HeritageClause */: - // This is a heritage clause with TypeScript syntax extensions. - // - // TypeScript heritage clause extensions include: - // - `implements` clause + case 268: return visitHeritageClause(node); - case 207 /* ExpressionWithTypeArguments */: - // TypeScript supports type arguments on an expression in an `extends` heritage clause. + case 207: return visitExpressionWithTypeArguments(node); - case 154 /* MethodDeclaration */: - // TypeScript method declarations may have decorators, modifiers - // or type annotations. + case 154: return visitMethodDeclaration(node); - case 156 /* GetAccessor */: - // Get Accessors can have TypeScript modifiers, decorators, and type annotations. + case 156: return visitGetAccessor(node); - case 157 /* SetAccessor */: - // Set Accessors can have TypeScript modifiers and type annotations. + case 157: return visitSetAccessor(node); - case 234 /* FunctionDeclaration */: - // Typescript function declarations can have modifiers, decorators, and type annotations. + case 234: return visitFunctionDeclaration(node); - case 192 /* FunctionExpression */: - // TypeScript function expressions can have modifiers and type annotations. + case 192: return visitFunctionExpression(node); - case 193 /* ArrowFunction */: - // TypeScript arrow functions can have modifiers and type annotations. + case 193: return visitArrowFunction(node); - case 149 /* Parameter */: - // This is a parameter declaration with TypeScript syntax extensions. - // - // TypeScript parameter declaration syntax extensions include: - // - decorators - // - accessibility modifiers - // - the question mark (?) token for optional parameters - // - type annotations - // - this parameters + case 149: return visitParameter(node); - case 191 /* ParenthesizedExpression */: - // ParenthesizedExpressions are TypeScript if their expression is a - // TypeAssertion or AsExpression + case 191: return visitParenthesizedExpression(node); - case 190 /* TypeAssertionExpression */: - case 208 /* AsExpression */: - // TypeScript type assertions are removed, but their subtrees are preserved. + case 190: + case 208: return visitAssertionExpression(node); - case 187 /* CallExpression */: + case 187: return visitCallExpression(node); - case 188 /* NewExpression */: + case 188: return visitNewExpression(node); - case 189 /* TaggedTemplateExpression */: + case 189: return visitTaggedTemplateExpression(node); - case 209 /* NonNullExpression */: - // TypeScript non-null expressions are removed, but their subtrees are preserved. + case 209: return visitNonNullExpression(node); - case 238 /* EnumDeclaration */: - // TypeScript enum declarations do not exist in ES6 and must be rewritten. + case 238: return visitEnumDeclaration(node); - case 214 /* VariableStatement */: - // TypeScript namespace exports for variable statements must be transformed. + case 214: return visitVariableStatement(node); - case 232 /* VariableDeclaration */: + case 232: return visitVariableDeclaration(node); - case 239 /* ModuleDeclaration */: - // TypeScript namespace declarations must be transformed. + case 239: return visitModuleDeclaration(node); - case 243 /* ImportEqualsDeclaration */: - // TypeScript namespace or external module import. + case 243: return visitImportEqualsDeclaration(node); default: return ts.Debug.failBadSyntaxKind(node); @@ -61532,11 +51289,8 @@ var ts; var alwaysStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") && !(ts.isExternalModule(node) && moduleKind >= ts.ModuleKind.ES2015) && !ts.isJsonSourceFile(node); - return ts.updateSourceFileNode(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict)); + return ts.updateSourceFileNode(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, 0, alwaysStrict)); } - /** - * Tests whether we should emit a __decorate call for a class declaration. - */ function shouldEmitDecorateCallForClass(node) { if (node.decorators && node.decorators.length > 0) { return true; @@ -61547,104 +51301,68 @@ var ts; } return false; } - /** - * Tests whether we should emit a __decorate call for a parameter declaration. - */ function shouldEmitDecorateCallForParameter(parameter) { return parameter.decorators !== undefined && parameter.decorators.length > 0; } function getClassFacts(node, staticProperties) { - var facts = 0 /* None */; + var facts = 0; if (ts.some(staticProperties)) - facts |= 1 /* HasStaticInitializedProperties */; + facts |= 1; var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node); - if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95 /* NullKeyword */) - facts |= 64 /* IsDerivedClass */; + if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95) + facts |= 64; if (shouldEmitDecorateCallForClass(node)) - facts |= 2 /* HasConstructorDecorators */; + facts |= 2; if (ts.childIsDecorated(node)) - facts |= 4 /* HasMemberDecorators */; + facts |= 4; if (isExportOfNamespace(node)) - facts |= 8 /* IsExportOfNamespace */; + facts |= 8; else if (isDefaultExternalModuleExport(node)) - facts |= 32 /* IsDefaultExternalExport */; + facts |= 32; else if (isNamedExternalModuleExport(node)) - facts |= 16 /* IsNamedExternalExport */; - if (languageVersion <= 1 /* ES5 */ && (facts & 7 /* MayNeedImmediatelyInvokedFunctionExpression */)) - facts |= 128 /* UseImmediatelyInvokedFunctionExpression */; + facts |= 16; + if (languageVersion <= 1 && (facts & 7)) + facts |= 128; return facts; } - /** - * Transforms a class declaration with TypeScript syntax into compatible ES6. - * - * This function will only be called when one of the following conditions are met: - * - The class has decorators. - * - The class has property declarations with initializers. - * - The class contains a constructor that contains parameters with accessibility modifiers. - * - The class is an export in a TypeScript namespace. - * - * @param node The node to transform. - */ function visitClassDeclaration(node) { var savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; - var staticProperties = getInitializedProperties(node, /*isStatic*/ true); + var staticProperties = getInitializedProperties(node, true); var facts = getClassFacts(node, staticProperties); - if (facts & 128 /* UseImmediatelyInvokedFunctionExpression */) { + if (facts & 128) { context.startLexicalEnvironment(); } - var name = node.name || (facts & 5 /* NeedsName */ ? ts.getGeneratedNameForNode(node) : undefined); - var classStatement = facts & 2 /* HasConstructorDecorators */ + var name = node.name || (facts & 5 ? ts.getGeneratedNameForNode(node) : undefined); + var classStatement = facts & 2 ? createClassDeclarationHeadWithDecorators(node, name, facts) : createClassDeclarationHeadWithoutDecorators(node, name, facts); var statements = [classStatement]; - // Write any pending expressions from elided or moved computed property names if (ts.some(pendingExpressions)) { statements.push(ts.createStatement(ts.inlineExpressions(pendingExpressions))); } pendingExpressions = savedPendingExpressions; - // Emit static property assignment. Because classDeclaration is lexically evaluated, - // it is safe to emit static property assignment after classDeclaration - // From ES6 specification: - // HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using - // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. - if (facts & 1 /* HasStaticInitializedProperties */) { - addInitializedPropertyStatements(statements, staticProperties, facts & 128 /* UseImmediatelyInvokedFunctionExpression */ ? ts.getInternalName(node) : ts.getLocalName(node)); + if (facts & 1) { + addInitializedPropertyStatements(statements, staticProperties, facts & 128 ? ts.getInternalName(node) : ts.getLocalName(node)); } - // Write any decorators of the node. - addClassElementDecorationStatements(statements, node, /*isStatic*/ false); - addClassElementDecorationStatements(statements, node, /*isStatic*/ true); + addClassElementDecorationStatements(statements, node, false); + addClassElementDecorationStatements(statements, node, true); addConstructorDecorationStatement(statements, node); - if (facts & 128 /* UseImmediatelyInvokedFunctionExpression */) { - // When we emit a TypeScript class down to ES5, we must wrap it in an IIFE so that the - // 'es2015' transformer can properly nest static initializers and decorators. The result - // looks something like: - // - // var C = function () { - // class C { - // } - // C.static_prop = 1; - // return C; - // }(); - // - var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentSourceFile.text, node.members.end), 18 /* CloseBraceToken */); + if (facts & 128) { + var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentSourceFile.text, node.members.end), 18); var localName = ts.getInternalName(node); - // The following partially-emitted expression exists purely to align our sourcemap - // emit with the original emitter. var outer = ts.createPartiallyEmittedExpression(localName); outer.end = closingBraceLocation.end; - ts.setEmitFlags(outer, 1536 /* NoComments */); + ts.setEmitFlags(outer, 1536); var statement = ts.createReturn(outer); statement.pos = closingBraceLocation.pos; - ts.setEmitFlags(statement, 1536 /* NoComments */ | 384 /* NoTokenSourceMaps */); + ts.setEmitFlags(statement, 1536 | 384); statements.push(statement); ts.prependStatements(statements, context.endLexicalEnvironment()); var iife = ts.createImmediatelyInvokedArrowFunction(statements); - ts.setEmitFlags(iife, 33554432 /* TypeScriptClassWrapper */); - var varStatement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ false), - /*type*/ undefined, iife) + ts.setEmitFlags(iife, 33554432); + var varStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(ts.getLocalName(node, false, false), undefined, iife) ])); ts.setOriginalNode(varStatement, node); ts.setCommentRange(varStatement, node); @@ -61652,205 +51370,75 @@ var ts; ts.startOnNewLine(varStatement); statements = [varStatement]; } - // If the class is exported as part of a TypeScript namespace, emit the namespace export. - // Otherwise, if the class was exported at the top level and was decorated, emit an export - // declaration or export default for the class. - if (facts & 8 /* IsExportOfNamespace */) { + if (facts & 8) { addExportMemberAssignment(statements, node); } - else if (facts & 128 /* UseImmediatelyInvokedFunctionExpression */ || facts & 2 /* HasConstructorDecorators */) { - if (facts & 32 /* IsDefaultExternalExport */) { - statements.push(ts.createExportDefault(ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))); + else if (facts & 128 || facts & 2) { + if (facts & 32) { + statements.push(ts.createExportDefault(ts.getLocalName(node, false, true))); } - else if (facts & 16 /* IsNamedExternalExport */) { - statements.push(ts.createExternalModuleExport(ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))); + else if (facts & 16) { + statements.push(ts.createExternalModuleExport(ts.getLocalName(node, false, true))); } } 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) | 4194304 /* HasEndOfDeclarationMarker */); + ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 4194304); } return ts.singleOrMany(statements); } - /** - * Transforms a non-decorated class declaration and appends the resulting statements. - * - * @param node A ClassDeclaration node. - * @param name The name of the class. - * @param facts Precomputed facts about the class. - */ function createClassDeclarationHeadWithoutDecorators(node, name, facts) { - // ${modifiers} class ${name} ${heritageClauses} { - // ${members} - // } - // we do not emit modifiers on the declaration if we are emitting an IIFE - var modifiers = !(facts & 128 /* UseImmediatelyInvokedFunctionExpression */) + var modifiers = !(facts & 128) ? ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier) : undefined; - var classDeclaration = ts.createClassDeclaration( - /*decorators*/ undefined, modifiers, name, - /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, (facts & 64 /* IsDerivedClass */) !== 0)); - // To better align with the old emitter, we should not emit a trailing source map - // entry if the class has static properties. + var classDeclaration = ts.createClassDeclaration(undefined, modifiers, name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, (facts & 64) !== 0)); var emitFlags = ts.getEmitFlags(node); - if (facts & 1 /* HasStaticInitializedProperties */) { - emitFlags |= 32 /* NoTrailingSourceMap */; + if (facts & 1) { + emitFlags |= 32; } ts.setTextRange(classDeclaration, node); ts.setOriginalNode(classDeclaration, node); ts.setEmitFlags(classDeclaration, emitFlags); return classDeclaration; } - /** - * Transforms a decorated class declaration and appends the resulting statements. If - * the class requires an alias to avoid issues with double-binding, the alias is returned. - */ function createClassDeclarationHeadWithDecorators(node, name, facts) { - // When we emit an ES6 class that has a class decorator, we must tailor the - // emit to certain specific cases. - // - // In the simplest case, we emit the class declaration as a let declaration, and - // evaluate decorators after the close of the class body: - // - // [Example 1] - // --------------------------------------------------------------------- - // TypeScript | Javascript - // --------------------------------------------------------------------- - // @dec | let C = class C { - // class C { | } - // } | C = __decorate([dec], C); - // --------------------------------------------------------------------- - // @dec | let C = class C { - // export class C { | } - // } | C = __decorate([dec], C); - // | export { C }; - // --------------------------------------------------------------------- - // - // If a class declaration contains a reference to itself *inside* of the class body, - // this introduces two bindings to the class: One outside of the class body, and one - // inside of the class body. If we apply decorators as in [Example 1] above, there - // is the possibility that the decorator `dec` will return a new value for the - // constructor, which would result in the binding inside of the class no longer - // pointing to the same reference as the binding outside of the class. - // - // As a result, we must instead rewrite all references to the class *inside* of the - // class body to instead point to a local temporary alias for the class: - // - // [Example 2] - // --------------------------------------------------------------------- - // TypeScript | Javascript - // --------------------------------------------------------------------- - // @dec | let C = C_1 = class C { - // class C { | static x() { return C_1.y; } - // static x() { return C.y; } | } - // static y = 1; | C.y = 1; - // } | C = C_1 = __decorate([dec], C); - // | var C_1; - // --------------------------------------------------------------------- - // @dec | let C = class C { - // export class C { | static x() { return C_1.y; } - // static x() { return C.y; } | } - // static y = 1; | C.y = 1; - // } | C = C_1 = __decorate([dec], C); - // | export { C }; - // | var C_1; - // --------------------------------------------------------------------- - // - // If a class declaration is the default export of a module, we instead emit - // the export after the decorated declaration: - // - // [Example 3] - // --------------------------------------------------------------------- - // TypeScript | Javascript - // --------------------------------------------------------------------- - // @dec | let default_1 = class { - // export default class { | } - // } | default_1 = __decorate([dec], default_1); - // | export default default_1; - // --------------------------------------------------------------------- - // @dec | let C = class C { - // export default class C { | } - // } | C = __decorate([dec], C); - // | export default C; - // --------------------------------------------------------------------- - // - // If the class declaration is the default export and a reference to itself - // inside of the class body, we must emit both an alias for the class *and* - // move the export after the declaration: - // - // [Example 4] - // --------------------------------------------------------------------- - // TypeScript | Javascript - // --------------------------------------------------------------------- - // @dec | let C = class C { - // export default class C { | static x() { return C_1.y; } - // static x() { return C.y; } | } - // static y = 1; | C.y = 1; - // } | C = C_1 = __decorate([dec], C); - // | export default C; - // | var C_1; - // --------------------------------------------------------------------- - // var location = ts.moveRangePastDecorators(node); var classAlias = getClassAliasIfNeeded(node); - var declName = ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); - // ... = class ${name} ${heritageClauses} { - // ${members} - // } + var declName = ts.getLocalName(node, false, true); var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause); - var members = transformClassMembers(node, (facts & 64 /* IsDerivedClass */) !== 0); - var classExpression = ts.createClassExpression(/*modifiers*/ undefined, name, /*typeParameters*/ undefined, heritageClauses, members); + var members = transformClassMembers(node, (facts & 64) !== 0); + var classExpression = ts.createClassExpression(undefined, name, undefined, heritageClauses, members); ts.setOriginalNode(classExpression, node); ts.setTextRange(classExpression, location); - // let ${name} = ${classExpression} where name is either declaredName if the class doesn't contain self-reference - // or decoratedClassAlias if the class contain self-reference. - var statement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(declName, - /*type*/ undefined, classAlias ? ts.createAssignment(classAlias, classExpression) : classExpression) - ], 1 /* Let */)); + var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(declName, undefined, classAlias ? ts.createAssignment(classAlias, classExpression) : classExpression) + ], 1)); ts.setOriginalNode(statement, node); ts.setTextRange(statement, location); ts.setCommentRange(statement, node); return statement; } - /** - * Transforms a class expression with TypeScript syntax into compatible ES6. - * - * This function will only be called when one of the following conditions are met: - * - The class has property declarations with initializers. - * - The class contains a constructor that contains parameters with accessibility modifiers. - * - * @param node The node to transform. - */ function visitClassExpression(node) { var savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; - var staticProperties = getInitializedProperties(node, /*isStatic*/ true); + var staticProperties = getInitializedProperties(node, true); var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause); - var members = transformClassMembers(node, ts.some(heritageClauses, function (c) { return c.token === 85 /* ExtendsKeyword */; })); - var classExpression = ts.createClassExpression( - /*modifiers*/ undefined, node.name, - /*typeParameters*/ undefined, heritageClauses, members); + var members = transformClassMembers(node, ts.some(heritageClauses, function (c) { return c.token === 85; })); + var classExpression = ts.createClassExpression(undefined, node.name, undefined, heritageClauses, members); ts.setOriginalNode(classExpression, node); ts.setTextRange(classExpression, node); if (ts.some(staticProperties) || ts.some(pendingExpressions)) { var expressions = []; - var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 8388608 /* ClassWithConstructorReference */; + var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 8388608; var temp = ts.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); if (isClassWithConstructorReference) { - // record an alias as the class name is not in scope for statics. enableSubstitutionForClassAliases(); var alias = ts.getSynthesizedClone(temp); - alias.autoGenerateFlags &= ~8 /* ReservedInNestedScopes */; + alias.autoGenerateFlags &= ~8; classAliases[ts.getOriginalNodeId(node)] = alias; } - // To preserve the behavior of the old emitter, we explicitly indent - // the body of a class with static initializers. - ts.setEmitFlags(classExpression, 65536 /* Indented */ | ts.getEmitFlags(classExpression)); + ts.setEmitFlags(classExpression, 65536 | ts.getEmitFlags(classExpression)); expressions.push(ts.startOnNewLine(ts.createAssignment(temp, classExpression))); - // Add any pending expressions leftover from elided or relocated computed property names ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine)); pendingExpressions = savedPendingExpressions; ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp)); @@ -61860,12 +51448,6 @@ var ts; pendingExpressions = savedPendingExpressions; return classExpression; } - /** - * Transforms the members of a class. - * - * @param node The current class. - * @param isDerivedClass A value indicating whether the class has an extends clause that does not extend 'null'. - */ function transformClassMembers(node, isDerivedClass) { var members = []; var constructor = transformConstructor(node, isDerivedClass); @@ -61873,137 +51455,52 @@ var ts; members.push(constructor); } ts.addRange(members, ts.visitNodes(node.members, classElementVisitor, ts.isClassElement)); - return ts.setTextRange(ts.createNodeArray(members), /*location*/ node.members); + return ts.setTextRange(ts.createNodeArray(members), node.members); } - /** - * Transforms (or creates) a constructor for a class. - * - * @param node The current class. - * @param isDerivedClass A value indicating whether the class has an extends clause that does not extend 'null'. - */ function transformConstructor(node, isDerivedClass) { - // Check if we have property assignment inside class declaration. - // 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 & 262144 /* ContainsParameterPropertyAssignments */; + var hasParameterPropertyAssignments = node.transformFlags & 262144; var constructor = ts.getFirstConstructorWithBody(node); - // If the class does not contain nodes that require a synthesized constructor, - // accept the current constructor if it exists. if (!hasInstancePropertyWithInitializer && !hasParameterPropertyAssignments) { return ts.visitEachChild(constructor, visitor, context); } var parameters = transformConstructorParameters(constructor); var body = transformConstructorBody(node, constructor, isDerivedClass); - // constructor(${parameters}) { - // ${body} - // } - return ts.startOnNewLine(ts.setOriginalNode(ts.setTextRange(ts.createConstructor( - /*decorators*/ undefined, - /*modifiers*/ undefined, parameters, body), constructor || node), constructor)); + return ts.startOnNewLine(ts.setOriginalNode(ts.setTextRange(ts.createConstructor(undefined, undefined, parameters, body), constructor || node), constructor)); } - /** - * Transforms (or creates) the parameters for the constructor of a class with - * parameter property assignments or instance property initializers. - * - * @param constructor The constructor declaration. - */ function transformConstructorParameters(constructor) { - // The ES2015 spec specifies in 14.5.14. Runtime Semantics: ClassDefinitionEvaluation: - // If constructor is empty, then - // If ClassHeritag_eopt is present and protoParent is not null, then - // Let constructor be the result of parsing the source text - // constructor(...args) { super (...args);} - // using the syntactic grammar with the goal symbol MethodDefinition[~Yield]. - // Else, - // Let constructor be the result of parsing the source text - // constructor( ){ } - // using the syntactic grammar with the goal symbol MethodDefinition[~Yield]. - // - // While we could emit the '...args' rest parameter, certain later tools in the pipeline might - // 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 ts.visitParameterList(constructor && constructor.parameters, visitor, context) || []; } - /** - * Transforms (or creates) a constructor body for a class with parameter property - * assignments or instance property initializers. - * - * @param node The current class. - * @param constructor The current class constructor. - * @param isDerivedClass A value indicating whether the class has an extends clause that does not extend 'null'. - */ function transformConstructorBody(node, constructor, isDerivedClass) { var statements = []; var indexOfFirstStatement = 0; resumeLexicalEnvironment(); if (constructor) { indexOfFirstStatement = addPrologueDirectivesAndInitialSuperCall(constructor, statements); - // Add parameters with property assignments. Transforms this: - // - // constructor (public x, public y) { - // } - // - // Into this: - // - // constructor (x, y) { - // this.x = x; - // this.y = y; - // } - // var propertyAssignments = getParametersWithPropertyAssignments(constructor); ts.addRange(statements, ts.map(propertyAssignments, transformParameterWithPropertyAssignment)); } else if (isDerivedClass) { - // Add a synthetic `super` call: - // - // super(...arguments); - // - statements.push(ts.createStatement(ts.createCall(ts.createSuper(), - /*typeArguments*/ undefined, [ts.createSpread(ts.createIdentifier("arguments"))]))); + statements.push(ts.createStatement(ts.createCall(ts.createSuper(), undefined, [ts.createSpread(ts.createIdentifier("arguments"))]))); } - // Add the property initializers. Transforms this: - // - // public x = 1; - // - // Into this: - // - // constructor() { - // this.x = 1; - // } - // - var properties = getInitializedProperties(node, /*isStatic*/ false); + var properties = getInitializedProperties(node, false); addInitializedPropertyStatements(statements, properties, ts.createThis()); if (constructor) { - // The class already had a constructor, so we should add the existing statements, skipping the initial super call. ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement)); } - // End the lexical environment. statements = ts.mergeLexicalEnvironment(statements, endLexicalEnvironment()); - return ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), - /*location*/ constructor ? constructor.body.statements : node.members), - /*multiLine*/ true), - /*location*/ constructor ? constructor.body : undefined); + return ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true), constructor ? constructor.body : undefined); } - /** - * Adds super call and preceding prologue directives into the list of statements. - * - * @param ctor The constructor node. - * @returns index of the statement that follows super call - */ function addPrologueDirectivesAndInitialSuperCall(ctor, result) { if (ctor.body) { var statements = ctor.body.statements; - // add prologue directives to the list (if any) - var index = ts.addPrologue(result, statements, /*ensureUseStrict*/ false, visitor); + var index = ts.addPrologue(result, statements, false, visitor); if (index === statements.length) { - // list contains nothing but prologue directives (or empty) - exit return index; } var statement = statements[index]; - if (statement.kind === 216 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) { + if (statement.kind === 216 && ts.isSuperCall(statement.expression)) { result.push(ts.visitNode(statement, visitor, ts.isStatement)); return index + 1; } @@ -62011,79 +51508,36 @@ var ts; } return 0; } - /** - * Gets all parameters of a constructor that should be transformed into property assignments. - * - * @param node The constructor node. - */ function getParametersWithPropertyAssignments(node) { return ts.filter(node.parameters, isParameterWithPropertyAssignment); } - /** - * Determines whether a parameter should be transformed into a property assignment. - * - * @param parameter The parameter node. - */ function isParameterWithPropertyAssignment(parameter) { - return ts.hasModifier(parameter, 92 /* ParameterPropertyModifier */) + return ts.hasModifier(parameter, 92) && ts.isIdentifier(parameter.name); } - /** - * Transforms a parameter into a property assignment statement. - * - * @param node The parameter declaration. - */ function transformParameterWithPropertyAssignment(node) { ts.Debug.assert(ts.isIdentifier(node.name)); var name = node.name; var propertyName = ts.getMutableClone(name); - ts.setEmitFlags(propertyName, 1536 /* NoComments */ | 48 /* NoSourceMap */); + ts.setEmitFlags(propertyName, 1536 | 48); var localName = ts.getMutableClone(name); - ts.setEmitFlags(localName, 1536 /* NoComments */); - return ts.startOnNewLine(ts.setEmitFlags(ts.setTextRange(ts.createStatement(ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createThis(), propertyName), node.name), localName)), ts.moveRangePos(node, -1)), 1536 /* NoComments */)); + ts.setEmitFlags(localName, 1536); + return ts.startOnNewLine(ts.setEmitFlags(ts.setTextRange(ts.createStatement(ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createThis(), propertyName), node.name), localName)), ts.moveRangePos(node, -1)), 1536)); } - /** - * Gets all property declarations with initializers on either the static or instance side of a class. - * - * @param node The class node. - * @param isStatic A value indicating whether to get properties from the static or instance side of the class. - */ function getInitializedProperties(node, isStatic) { return ts.filter(node.members, isStatic ? isStaticInitializedProperty : isInstanceInitializedProperty); } - /** - * Gets a value indicating whether a class element is a static property declaration with an initializer. - * - * @param member The class element node. - */ function isStaticInitializedProperty(member) { - return isInitializedProperty(member, /*isStatic*/ true); + return isInitializedProperty(member, true); } - /** - * Gets a value indicating whether a class element is an instance property declaration with an initializer. - * - * @param member The class element node. - */ function isInstanceInitializedProperty(member) { - return isInitializedProperty(member, /*isStatic*/ false); + return isInitializedProperty(member, false); } - /** - * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer. - * - * @param member The class element node. - * @param isStatic A value indicating whether the member should be a static or instance member. - */ function isInitializedProperty(member, isStatic) { - return member.kind === 152 /* PropertyDeclaration */ - && isStatic === ts.hasModifier(member, 32 /* Static */) + return member.kind === 152 + && isStatic === ts.hasModifier(member, 32) && member.initializer !== undefined; } - /** - * Generates assignment statements for property initializers. - * - * @param properties An array of property declarations to transform. - * @param receiver The receiver on which each property should be assigned. - */ function addInitializedPropertyStatements(statements, properties, receiver) { for (var _i = 0, properties_10 = properties; _i < properties_10.length; _i++) { var property = properties_10[_i]; @@ -62093,12 +51547,6 @@ var ts; statements.push(statement); } } - /** - * Generates assignment expressions for property initializers. - * - * @param properties An array of property declarations to transform. - * @param receiver The receiver on which each property should be assigned. - */ function generateInitializedPropertyExpressions(properties, receiver) { var expressions = []; for (var _i = 0, properties_11 = properties; _i < properties_11.length; _i++) { @@ -62111,66 +51559,27 @@ var ts; } return expressions; } - /** - * Transforms a property initializer into an assignment statement. - * - * @param property The property declaration. - * @param receiver The object receiving the property assignment. - */ function transformInitializedProperty(property, receiver) { - // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name) var propertyName = ts.isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) ? ts.updateComputedPropertyName(property.name, ts.getGeneratedNameForNode(property.name)) : property.name; var initializer = ts.visitNode(property.initializer, visitor, ts.isExpression); - var memberAccess = ts.createMemberAccessForPropertyName(receiver, propertyName, /*location*/ propertyName); + var memberAccess = ts.createMemberAccessForPropertyName(receiver, propertyName, propertyName); return ts.createAssignment(memberAccess, initializer); } - /** - * Gets either the static or instance members of a class that are decorated, or have - * parameters that are decorated. - * - * @param node The class containing the member. - * @param isStatic A value indicating whether to retrieve static or instance members of - * the class. - */ function getDecoratedClassElements(node, isStatic) { return ts.filter(node.members, isStatic ? function (m) { return isStaticDecoratedClassElement(m, node); } : function (m) { return isInstanceDecoratedClassElement(m, node); }); } - /** - * Determines whether a class member is a static member of a class that is decorated, or - * has parameters that are decorated. - * - * @param member The class member. - */ function isStaticDecoratedClassElement(member, parent) { - return isDecoratedClassElement(member, /*isStatic*/ true, parent); + return isDecoratedClassElement(member, true, parent); } - /** - * Determines whether a class member is an instance member of a class that is decorated, - * or has parameters that are decorated. - * - * @param member The class member. - */ function isInstanceDecoratedClassElement(member, parent) { - return isDecoratedClassElement(member, /*isStatic*/ false, parent); + return isDecoratedClassElement(member, false, parent); } - /** - * Determines whether a class member is either a static or an instance member of a class - * that is decorated, or has parameters that are decorated. - * - * @param member The class member. - */ function isDecoratedClassElement(member, isStatic, parent) { return ts.nodeOrChildIsDecorated(member, parent) - && isStatic === ts.hasModifier(member, 32 /* Static */); + && isStatic === ts.hasModifier(member, 32); } - /** - * Gets an array of arrays of decorators for the parameters of a function-like node. - * The offset into the result array should correspond to the offset of the parameter. - * - * @param node The function-like node. - */ function getDecoratorsOfParameters(node) { var decorators; if (node) { @@ -62187,12 +51596,6 @@ var ts; } return decorators; } - /** - * Gets an AllDecorators object containing the decorators for the class and the decorators for the - * parameters of the constructor of the class. - * - * @param node The class node. - */ function getAllDecoratorsOfConstructor(node) { var decorators = node.decorators; var parameters = getDecoratorsOfParameters(ts.getFirstConstructorWithBody(node)); @@ -62204,31 +51607,19 @@ var ts; parameters: parameters }; } - /** - * Gets an AllDecorators object containing the decorators for the member and its parameters. - * - * @param node The class node that contains the member. - * @param member The class member. - */ function getAllDecoratorsOfClassElement(node, member) { switch (member.kind) { - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return getAllDecoratorsOfAccessors(node, member); - case 154 /* MethodDeclaration */: + case 154: return getAllDecoratorsOfMethod(member); - case 152 /* PropertyDeclaration */: + case 152: return getAllDecoratorsOfProperty(member); default: return undefined; } } - /** - * Gets an AllDecorators object containing the decorators for the accessor and its parameters. - * - * @param node The class node that contains the accessor. - * @param accessor The class accessor member. - */ function getAllDecoratorsOfAccessors(node, accessor) { if (!accessor.body) { return undefined; @@ -62245,11 +51636,6 @@ var ts; } return { decorators: decorators, parameters: parameters }; } - /** - * Gets an AllDecorators object containing the decorators for the method and its parameters. - * - * @param method The class method member. - */ function getAllDecoratorsOfMethod(method) { if (!method.body) { return undefined; @@ -62261,11 +51647,6 @@ var ts; } return { decorators: decorators, parameters: parameters }; } - /** - * Gets an AllDecorators object containing the decorators for the property. - * - * @param property The class property member. - */ function getAllDecoratorsOfProperty(property) { var decorators = property.decorators; if (!decorators) { @@ -62273,12 +51654,6 @@ var ts; } return { decorators: decorators }; } - /** - * Transforms all of the decorators for a declaration into an array of expressions. - * - * @param node The declaration node. - * @param allDecorators An object containing all of the decorators for the declaration. - */ function transformAllDecoratorsOfDeclaration(node, container, allDecorators) { if (!allDecorators) { return undefined; @@ -62289,25 +51664,9 @@ var ts; addTypeMetadata(node, container, decoratorExpressions); return decoratorExpressions; } - /** - * Generates statements used to apply decorators to either the static or instance members - * of a class. - * - * @param node The class node. - * @param isStatic A value indicating whether to generate statements for static or - * instance members. - */ function addClassElementDecorationStatements(statements, node, isStatic) { ts.addRange(statements, ts.map(generateClassElementDecorationExpressions(node, isStatic), expressionToStatement)); } - /** - * Generates expressions used to apply decorators to either the static or instance members - * of a class. - * - * @param node The class node. - * @param isStatic A value indicating whether to generate expressions for static or - * instance members. - */ function generateClassElementDecorationExpressions(node, isStatic) { var members = getDecoratedClassElements(node, isStatic); var expressions; @@ -62325,79 +51684,29 @@ var ts; } return expressions; } - /** - * Generates an expression used to evaluate class element decorators at runtime. - * - * @param node The class node that contains the member. - * @param member The class member. - */ function generateClassElementDecorationExpression(node, member) { var allDecorators = getAllDecoratorsOfClassElement(node, member); var decoratorExpressions = transformAllDecoratorsOfDeclaration(member, node, allDecorators); if (!decoratorExpressions) { return undefined; } - // Emit the call to __decorate. Given the following: - // - // class C { - // @dec method(@dec2 x) {} - // @dec get accessor() {} - // @dec prop; - // } - // - // The emit for a method is: - // - // __decorate([ - // dec, - // __param(0, dec2), - // __metadata("design:type", Function), - // __metadata("design:paramtypes", [Object]), - // __metadata("design:returntype", void 0) - // ], C.prototype, "method", null); - // - // The emit for an accessor is: - // - // __decorate([ - // dec - // ], C.prototype, "accessor", null); - // - // The emit for a property is: - // - // __decorate([ - // dec - // ], C.prototype, "prop"); - // var prefix = getClassMemberPrefix(node, member); - var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true); - var descriptor = languageVersion > 0 /* ES3 */ - ? member.kind === 152 /* PropertyDeclaration */ - // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it - // should not invoke `Object.getOwnPropertyDescriptor`. + var memberName = getExpressionForPropertyName(member, true); + var descriptor = languageVersion > 0 + ? member.kind === 152 ? ts.createVoidZero() - // We emit `null` here to indicate to `__decorate` that it can invoke `Object.getOwnPropertyDescriptor` directly. - // We have this extra argument here so that we can inject an explicit property descriptor at a later date. : ts.createNull() : undefined; var helper = createDecorateHelper(context, decoratorExpressions, prefix, memberName, descriptor, ts.moveRangePastDecorators(member)); - ts.setEmitFlags(helper, 1536 /* NoComments */); + ts.setEmitFlags(helper, 1536); return helper; } - /** - * Generates a __decorate helper call for a class constructor. - * - * @param node The class node. - */ function addConstructorDecorationStatement(statements, node) { var expression = generateConstructorDecorationExpression(node); if (expression) { statements.push(ts.setOriginalNode(ts.createStatement(expression), node)); } } - /** - * Generates a __decorate helper call for a class constructor. - * - * @param node The class node. - */ function generateConstructorDecorationExpression(node) { var allDecorators = getAllDecoratorsOfConstructor(node); var decoratorExpressions = transformAllDecoratorsOfDeclaration(node, node, allDecorators); @@ -62405,47 +51714,29 @@ var ts; return undefined; } var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)]; - var localName = ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); + var localName = ts.getLocalName(node, false, true); var decorate = createDecorateHelper(context, decoratorExpressions, localName); var expression = ts.createAssignment(localName, classAlias ? ts.createAssignment(classAlias, decorate) : decorate); - ts.setEmitFlags(expression, 1536 /* NoComments */); + ts.setEmitFlags(expression, 1536); ts.setSourceMapRange(expression, ts.moveRangePastDecorators(node)); return expression; } - /** - * Transforms a decorator into an expression. - * - * @param decorator The decorator node. - */ function transformDecorator(decorator) { return ts.visitNode(decorator.expression, visitor, ts.isExpression); } - /** - * Transforms the decorators of a parameter. - * - * @param decorators The decorators for the parameter at the provided offset. - * @param parameterOffset The offset of the parameter. - */ function transformDecoratorsOfParameter(decorators, parameterOffset) { var expressions; if (decorators) { expressions = []; for (var _i = 0, decorators_1 = decorators; _i < decorators_1.length; _i++) { var decorator = decorators_1[_i]; - var helper = createParamHelper(context, transformDecorator(decorator), parameterOffset, - /*location*/ decorator.expression); - ts.setEmitFlags(helper, 1536 /* NoComments */); + var helper = createParamHelper(context, transformDecorator(decorator), parameterOffset, decorator.expression); + ts.setEmitFlags(helper, 1536); expressions.push(helper); } } return expressions; } - /** - * Adds optional type metadata for a declaration. - * - * @param node The declaration node. - * @param decoratorExpressions The destination array to which to add new decorator expressions. - */ function addTypeMetadata(node, container, decoratorExpressions) { if (USE_NEW_TYPE_METADATA_FORMAT) { addNewTypeMetadata(node, container, decoratorExpressions); @@ -62471,88 +51762,57 @@ var ts; if (compilerOptions.emitDecoratorMetadata) { var properties = void 0; if (shouldAddTypeMetadata(node)) { - (properties || (properties = [])).push(ts.createPropertyAssignment("type", ts.createArrowFunction(/*modifiers*/ undefined, /*typeParameters*/ undefined, [], /*type*/ undefined, ts.createToken(36 /* EqualsGreaterThanToken */), serializeTypeOfNode(node)))); + (properties || (properties = [])).push(ts.createPropertyAssignment("type", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeTypeOfNode(node)))); } if (shouldAddParamTypesMetadata(node)) { - (properties || (properties = [])).push(ts.createPropertyAssignment("paramTypes", ts.createArrowFunction(/*modifiers*/ undefined, /*typeParameters*/ undefined, [], /*type*/ undefined, ts.createToken(36 /* EqualsGreaterThanToken */), serializeParameterTypesOfNode(node, container)))); + (properties || (properties = [])).push(ts.createPropertyAssignment("paramTypes", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeParameterTypesOfNode(node, container)))); } if (shouldAddReturnTypeMetadata(node)) { - (properties || (properties = [])).push(ts.createPropertyAssignment("returnType", ts.createArrowFunction(/*modifiers*/ undefined, /*typeParameters*/ undefined, [], /*type*/ undefined, ts.createToken(36 /* EqualsGreaterThanToken */), serializeReturnTypeOfNode(node)))); + (properties || (properties = [])).push(ts.createPropertyAssignment("returnType", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeReturnTypeOfNode(node)))); } if (properties) { - decoratorExpressions.push(createMetadataHelper(context, "design:typeinfo", ts.createObjectLiteral(properties, /*multiLine*/ true))); + decoratorExpressions.push(createMetadataHelper(context, "design:typeinfo", ts.createObjectLiteral(properties, true))); } } } - /** - * Determines whether to emit the "design:type" metadata based on the node's kind. - * The caller should have already tested whether the node has decorators and whether the - * emitDecoratorMetadata compiler option is set. - * - * @param node The node to test. - */ function shouldAddTypeMetadata(node) { var kind = node.kind; - return kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */ - || kind === 152 /* PropertyDeclaration */; + return kind === 154 + || kind === 156 + || kind === 157 + || kind === 152; } - /** - * Determines whether to emit the "design:returntype" metadata based on the node's kind. - * The caller should have already tested whether the node has decorators and whether the - * emitDecoratorMetadata compiler option is set. - * - * @param node The node to test. - */ function shouldAddReturnTypeMetadata(node) { - return node.kind === 154 /* MethodDeclaration */; + return node.kind === 154; } - /** - * Determines whether to emit the "design:paramtypes" metadata based on the node's kind. - * The caller should have already tested whether the node has decorators and whether the - * emitDecoratorMetadata compiler option is set. - * - * @param node The node to test. - */ function shouldAddParamTypesMetadata(node) { switch (node.kind) { - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: + case 235: + case 205: return ts.getFirstConstructorWithBody(node) !== undefined; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: return true; } return false; } - /** - * Serializes the type of a node for use with decorator type metadata. - * - * @param node The node that should have its type serialized. - */ function serializeTypeOfNode(node) { switch (node.kind) { - case 152 /* PropertyDeclaration */: - case 149 /* Parameter */: - case 156 /* GetAccessor */: + case 152: + case 149: + case 156: return serializeTypeNode(node.type); - case 157 /* SetAccessor */: + case 157: return serializeTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); - case 235 /* ClassDeclaration */: - case 205 /* ClassExpression */: - case 154 /* MethodDeclaration */: + case 235: + case 205: + case 154: return ts.createIdentifier("Function"); default: return ts.createVoidZero(); } } - /** - * Serializes the types of the parameters of a node for use with decorator type metadata. - * - * @param node The node that should have its parameter types serialized. - */ function serializeParameterTypesOfNode(node, container) { var valueDeclaration = ts.isClassLike(node) ? ts.getFirstConstructorWithBody(node) @@ -62579,7 +51839,7 @@ var ts; return ts.createArrayLiteral(expressions); } function getParametersOfDecoratedDeclaration(node, container) { - if (container && node.kind === 156 /* GetAccessor */) { + if (container && node.kind === 156) { var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor; if (setAccessor) { return setAccessor.parameters; @@ -62587,11 +51847,6 @@ var ts; } return node.parameters; } - /** - * Serializes the return type of a node for use with decorator type metadata. - * - * @param node The node that should have its return type serialized. - */ function serializeReturnTypeOfNode(node) { if (ts.isFunctionLike(node) && node.type) { return serializeTypeNode(node.type); @@ -62601,81 +51856,63 @@ var ts; } return ts.createVoidZero(); } - /** - * Serializes a type node for use with decorator type metadata. - * - * Types are serialized in the following fashion: - * - Void types point to "undefined" (e.g. "void 0") - * - Function and Constructor types point to the global "Function" constructor. - * - Interface types with a call or construct signature types point to the global - * "Function" constructor. - * - Array and Tuple types point to the global "Array" constructor. - * - Type predicates and booleans point to the global "Boolean" constructor. - * - String literal types and strings point to the global "String" constructor. - * - Enum and number types point to the global "Number" constructor. - * - Symbol types point to the global "Symbol" constructor. - * - Type references to classes (or class-like variables) point to the constructor for the class. - * - Anything else points to the global "Object" constructor. - * - * @param node The type node to serialize. - */ function serializeTypeNode(node) { if (node === undefined) { return ts.createIdentifier("Object"); } switch (node.kind) { - case 105 /* VoidKeyword */: - case 140 /* UndefinedKeyword */: - case 95 /* NullKeyword */: - case 131 /* NeverKeyword */: + case 105: + case 140: + case 95: + case 131: return ts.createVoidZero(); - case 173 /* ParenthesizedType */: + case 173: return serializeTypeNode(node.type); - case 163 /* FunctionType */: - case 164 /* ConstructorType */: + case 163: + case 164: return ts.createIdentifier("Function"); - case 167 /* ArrayType */: - case 168 /* TupleType */: + case 167: + case 168: return ts.createIdentifier("Array"); - case 161 /* TypePredicate */: - case 122 /* BooleanKeyword */: + case 161: + case 122: return ts.createIdentifier("Boolean"); - case 137 /* StringKeyword */: + case 137: return ts.createIdentifier("String"); - case 135 /* ObjectKeyword */: + case 135: return ts.createIdentifier("Object"); - case 178 /* LiteralType */: + case 178: switch (node.literal.kind) { - case 9 /* StringLiteral */: + case 9: return ts.createIdentifier("String"); - case 8 /* NumericLiteral */: + case 8: return ts.createIdentifier("Number"); - case 101 /* TrueKeyword */: - case 86 /* FalseKeyword */: + case 101: + case 86: return ts.createIdentifier("Boolean"); default: return ts.Debug.failBadSyntaxKind(node.literal); } - case 134 /* NumberKeyword */: + case 134: return ts.createIdentifier("Number"); - case 138 /* SymbolKeyword */: - return languageVersion < 2 /* ES2015 */ + case 138: + return languageVersion < 2 ? getGlobalSymbolNameWithFallback() : ts.createIdentifier("Symbol"); - case 162 /* TypeReference */: + case 162: return serializeTypeReferenceNode(node); - case 170 /* IntersectionType */: - case 169 /* UnionType */: + case 170: + case 169: return serializeUnionOrIntersectionType(node); - case 165 /* TypeQuery */: - case 175 /* TypeOperator */: - case 176 /* IndexedAccessType */: - case 177 /* MappedType */: - case 166 /* TypeLiteral */: - case 119 /* AnyKeyword */: - case 142 /* UnknownKeyword */: - case 174 /* ThisType */: - case 179 /* ImportType */: + case 165: + case 175: + case 176: + case 177: + case 166: + case 119: + case 142: + case 174: + case 179: break; default: return ts.Debug.failBadSyntaxKind(node); @@ -62683,29 +51920,23 @@ var ts; return ts.createIdentifier("Object"); } function serializeUnionOrIntersectionType(node) { - // Note when updating logic here also update getEntityNameForDecoratorMetadata - // so that aliases can be marked as referenced var serializedUnion; for (var _i = 0, _a = node.types; _i < _a.length; _i++) { var typeNode = _a[_i]; - while (typeNode.kind === 173 /* ParenthesizedType */) { - typeNode = typeNode.type; // Skip parens if need be + while (typeNode.kind === 173) { + typeNode = typeNode.type; } - if (typeNode.kind === 131 /* NeverKeyword */) { - continue; // Always elide `never` from the union/intersection if possible + if (typeNode.kind === 131) { + continue; } - if (!strictNullChecks && (typeNode.kind === 95 /* NullKeyword */ || typeNode.kind === 140 /* UndefinedKeyword */)) { - continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks + if (!strictNullChecks && (typeNode.kind === 95 || typeNode.kind === 140)) { + continue; } var serializedIndividual = serializeTypeNode(typeNode); if (ts.isIdentifier(serializedIndividual) && serializedIndividual.escapedText === "Object") { - // One of the individual is global object, return immediately return serializedIndividual; } - // If there exists union that is not void 0 expression, check if the the common type is identifier. - // anything more complex and we will just default to Object else if (serializedUnion) { - // Different types if (!ts.isIdentifier(serializedUnion) || !ts.isIdentifier(serializedIndividual) || serializedUnion.escapedText !== serializedIndividual.escapedText) { @@ -62713,28 +51944,20 @@ var ts; } } else { - // Initialize the union type serializedUnion = serializedIndividual; } } - // If we were able to find common type, use it - return serializedUnion || ts.createVoidZero(); // Fallback is only hit if all union constituients are null/undefined/never + return serializedUnion || ts.createVoidZero(); } - /** - * Serializes a TypeReferenceNode to an appropriate JS constructor value for use with - * decorator type metadata. - * - * @param node The type reference node. - */ function serializeTypeReferenceNode(node) { var kind = resolver.getTypeReferenceSerializationKind(node.typeName, currentScope); switch (kind) { case ts.TypeReferenceSerializationKind.Unknown: - var serialized = serializeEntityNameAsExpression(node.typeName, /*useFallback*/ true); + var serialized = serializeEntityNameAsExpression(node.typeName, true); var temp = ts.createTempVariable(hoistVariableDeclaration); 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); + return serializeEntityNameAsExpression(node.typeName, false); case ts.TypeReferenceSerializationKind.VoidNullableOrNeverType: return ts.createVoidZero(); case ts.TypeReferenceSerializationKind.BooleanType: @@ -62746,7 +51969,7 @@ var ts; case ts.TypeReferenceSerializationKind.ArrayLikeType: return ts.createIdentifier("Array"); case ts.TypeReferenceSerializationKind.ESSymbolType: - return languageVersion < 2 /* ES2015 */ + return languageVersion < 2 ? getGlobalSymbolNameWithFallback() : ts.createIdentifier("Symbol"); case ts.TypeReferenceSerializationKind.TypeWithCallSignature: @@ -62759,73 +51982,42 @@ var ts; return ts.Debug.assertNever(kind); } } - /** - * Serializes an entity name as an expression for decorator type metadata. - * - * @param node The entity name to serialize. - * @param useFallback A value indicating whether to use logical operators to test for the - * entity name at runtime. - */ function serializeEntityNameAsExpression(node, useFallback) { switch (node.kind) { - case 71 /* Identifier */: - // Create a clone of the name with a new parent, and treat it as if it were - // a source tree node for the purposes of the checker. + case 71: var name = ts.getMutableClone(node); - name.flags &= ~8 /* Synthesized */; + name.flags &= ~8; name.original = undefined; - name.parent = ts.getParseTreeNode(currentScope); // ensure the parent is set to a parse tree node. + name.parent = ts.getParseTreeNode(currentScope); if (useFallback) { return ts.createLogicalAnd(ts.createStrictInequality(ts.createTypeOf(name), ts.createLiteral("undefined")), name); } return name; - case 146 /* QualifiedName */: + case 146: return serializeQualifiedNameAsExpression(node, useFallback); } } - /** - * Serializes an qualified name as an expression for decorator type metadata. - * - * @param node The qualified name to serialize. - * @param useFallback A value indicating whether to use logical operators to test for the - * qualified name at runtime. - */ function serializeQualifiedNameAsExpression(node, useFallback) { var left; - if (node.left.kind === 71 /* Identifier */) { + if (node.left.kind === 71) { left = serializeEntityNameAsExpression(node.left, useFallback); } else if (useFallback) { var temp = ts.createTempVariable(hoistVariableDeclaration); - left = ts.createLogicalAnd(ts.createAssignment(temp, serializeEntityNameAsExpression(node.left, /*useFallback*/ true)), temp); + left = ts.createLogicalAnd(ts.createAssignment(temp, serializeEntityNameAsExpression(node.left, true)), temp); } else { - left = serializeEntityNameAsExpression(node.left, /*useFallback*/ false); + left = serializeEntityNameAsExpression(node.left, false); } return ts.createPropertyAccess(left, node.right); } - /** - * Gets an expression that points to the global "Symbol" constructor at runtime if it is - * available. - */ function getGlobalSymbolNameWithFallback() { return ts.createConditional(ts.createTypeCheck(ts.createIdentifier("Symbol"), "function"), ts.createIdentifier("Symbol"), ts.createIdentifier("Object")); } - /** - * A simple inlinable expression is an expression which can be copied into multiple locations - * without risk of repeating any sideeffects and whose value could not possibly change between - * any such locations - */ function isSimpleInlineableExpression(expression) { return !ts.isIdentifier(expression) && ts.isSimpleCopiableExpression(expression) || ts.isWellKnownSymbolSyntactically(expression); } - /** - * Gets an expression that represents a property name. For a computed property, a - * name is generated for the node. - * - * @param member The member whose name should be converted into an expression. - */ function getExpressionForPropertyName(member, generateNameForComputedPropertyName) { var name = member.name; if (ts.isComputedPropertyName(name)) { @@ -62840,12 +52032,6 @@ var ts; return ts.getSynthesizedClone(name); } } - /** - * If the name is a computed property, this function transforms it, then either returns an expression which caches the - * value of the result or the expression itself if the value is either unused or safe to inline into multiple locations - * @param shouldHoist Does the expression need to be reused? (ie, for an initializer or a decorator) - * @param omitSimple Should expressions with no observable side-effects be elided? (ie, the expression is not hoisted for a decorator or initializer and is a literal) - */ function getPropertyNameExpressionIfNeeded(name, shouldHoist, omitSimple) { if (ts.isComputedPropertyName(name)) { var expression = ts.visitNode(name.expression, visitor, ts.isExpression); @@ -62859,18 +52045,10 @@ var ts; return (omitSimple && (inlinable || ts.isIdentifier(innerExpression))) ? undefined : expression; } } - /** - * Visits the property name of a class element, for use when emitting property - * initializers. For a computed property on a node with decorators, a temporary - * value is stored for later use. - * - * @param member The member whose name should be visited. - */ function visitPropertyNameOfClassElement(member) { var name = member.name; - var expr = getPropertyNameExpressionIfNeeded(name, ts.some(member.decorators), /*omitSimple*/ false); - if (expr) { // expr only exists if `name` is a computed property name - // Inline any pending expressions from previous elided or relocated computed property name expressions in order to preserve execution order + var expr = getPropertyNameExpressionIfNeeded(name, ts.some(member.decorators), false); + if (expr) { if (ts.some(pendingExpressions)) { expr = ts.inlineExpressions(pendingExpressions.concat([expr])); pendingExpressions.length = 0; @@ -62881,45 +52059,21 @@ var ts; return name; } } - /** - * Transforms a HeritageClause with TypeScript syntax. - * - * This function will only be called when one of the following conditions are met: - * - The node is a non-`extends` heritage clause that should be elided. - * - The node is an `extends` heritage clause that should be visited, but only allow a single type. - * - * @param node The HeritageClause to transform. - */ function visitHeritageClause(node) { - if (node.token === 85 /* ExtendsKeyword */) { + if (node.token === 85) { var types = ts.visitNodes(node.types, visitor, ts.isExpressionWithTypeArguments, 0, 1); - return ts.setTextRange(ts.createHeritageClause(85 /* ExtendsKeyword */, types), node); + return ts.setTextRange(ts.createHeritageClause(85, types), node); } return undefined; } - /** - * Transforms an ExpressionWithTypeArguments with TypeScript syntax. - * - * This function will only be called when one of the following conditions are met: - * - The node contains type arguments that should be elided. - * - * @param node The ExpressionWithTypeArguments to transform. - */ function visitExpressionWithTypeArguments(node) { - return ts.updateExpressionWithTypeArguments(node, - /*typeArguments*/ undefined, ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression)); + return ts.updateExpressionWithTypeArguments(node, undefined, ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression)); } - /** - * Determines whether to emit a function-like declaration. We should not emit the - * declaration if it does not have a body. - * - * @param node The declaration node. - */ function shouldEmitFunctionLikeDeclaration(node) { return !ts.nodeIsMissing(node.body); } function visitPropertyDeclaration(node) { - var expr = getPropertyNameExpressionIfNeeded(node.name, ts.some(node.decorators) || !!node.initializer, /*omitSimple*/ true); + var expr = getPropertyNameExpressionIfNeeded(node.name, ts.some(node.decorators) || !!node.initializer, true); if (expr && !isSimpleInlineableExpression(expr)) { (pendingExpressions || (pendingExpressions = [])).push(expr); } @@ -62931,107 +52085,47 @@ var ts; } return ts.updateConstructor(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), ts.visitNodes(node.modifiers, visitor, ts.isModifier), ts.visitParameterList(node.parameters, visitor, context), ts.visitFunctionBody(node.body, visitor, context)); } - /** - * Visits a method declaration of a class. - * - * This function will be called when one of the following conditions are met: - * - The node is an overload - * - The node is marked as abstract, public, private, protected, or readonly - * - The node has a computed property name - * - * @param node The method node. - */ function visitMethodDeclaration(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return undefined; } - var updated = ts.updateMethod(node, - /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, visitPropertyNameOfClassElement(node), - /*questionToken*/ undefined, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context)); + var updated = ts.updateMethod(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, visitPropertyNameOfClassElement(node), undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), 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 - * declaration if it does not have a body and is abstract. - * - * @param node The declaration node. - */ function shouldEmitAccessorDeclaration(node) { - return !(ts.nodeIsMissing(node.body) && ts.hasModifier(node, 128 /* Abstract */)); + return !(ts.nodeIsMissing(node.body) && ts.hasModifier(node, 128)); } - /** - * Visits a get accessor declaration of a class. - * - * This function will be called when one of the following conditions are met: - * - The node is marked as abstract, public, private, or protected - * - The node has a computed property name - * - * @param node The get accessor node. - */ function visitGetAccessor(node) { if (!shouldEmitAccessorDeclaration(node)) { return undefined; } - 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([])); + var updated = ts.updateGetAccessor(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), 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. - * - * This function will be called when one of the following conditions are met: - * - The node is marked as abstract, public, private, or protected - * - The node has a computed property name - * - * @param node The set accessor node. - */ function visitSetAccessor(node) { if (!shouldEmitAccessorDeclaration(node)) { return undefined; } - 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([])); + var updated = ts.updateSetAccessor(node, 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. - * - * This function will be called when one of the following conditions are met: - * - The node is an overload - * - The node is exported from a TypeScript namespace - * - The node has decorators - * - * @param node The function node. - */ function visitFunctionDeclaration(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return ts.createNotEmittedStatement(node); } - var updated = ts.updateFunctionDeclaration(node, - /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([])); + var updated = ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([])); if (isExportOfNamespace(node)) { var statements = [updated]; addExportMemberAssignment(statements, node); @@ -63039,73 +52133,33 @@ var ts; } return updated; } - /** - * Visits a function expression node. - * - * This function will be called when one of the following conditions are met: - * - The node has type annotations - * - * @param node The function expression node. - */ function visitFunctionExpression(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return ts.createOmittedExpression(); } - var updated = ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([])); + var updated = ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([])); return updated; } - /** - * @remarks - * This function will be called when one of the following conditions are met: - * - The node has type annotations - */ function visitArrowFunction(node) { - var updated = ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, node.equalsGreaterThanToken, ts.visitFunctionBody(node.body, visitor, context)); + var updated = ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, ts.visitFunctionBody(node.body, visitor, context)); return updated; } - /** - * Visits a parameter declaration node. - * - * This function will be called when one of the following conditions are met: - * - The node has an accessibility modifier. - * - The node has a questionToken. - * - The node's kind is ThisKeyword. - * - * @param node The parameter declaration node. - */ function visitParameter(node) { if (ts.parameterIsThisKeyword(node)) { return undefined; } - var parameter = ts.createParameter( - /*decorators*/ undefined, - /*modifiers*/ undefined, node.dotDotDotToken, ts.visitNode(node.name, visitor, ts.isBindingName), - /*questionToken*/ undefined, - /*type*/ undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); - // While we emit the source map for the node after skipping decorators and modifiers, - // we need to emit the comments for the original range. + var parameter = ts.createParameter(undefined, undefined, node.dotDotDotToken, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); ts.setOriginalNode(parameter, node); ts.setTextRange(parameter, ts.moveRangePastModifiers(node)); ts.setCommentRange(parameter, node); ts.setSourceMapRange(parameter, ts.moveRangePastModifiers(node)); - ts.setEmitFlags(parameter.name, 32 /* NoTrailingSourceMap */); + ts.setEmitFlags(parameter.name, 32); return parameter; } - /** - * Visits a variable statement in a namespace. - * - * This function will be called when one of the following conditions are met: - * - The node is exported from a TypeScript namespace. - */ function visitVariableStatement(node) { if (isExportOfNamespace(node)) { var variables = ts.getInitializedVariables(node.declarationList); if (variables.length === 0) { - // elide statement if there are no initialized variables. return undefined; } return ts.setTextRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node); @@ -63117,45 +52171,19 @@ var ts; function transformInitializedVariable(node) { var name = node.name; if (ts.isBindingPattern(name)) { - return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, - /*needsValue*/ false, createNamespaceExportExpression); + return ts.flattenDestructuringAssignment(node, visitor, context, 0, false, createNamespaceExportExpression); } else { - return ts.setTextRange(ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), ts.visitNode(node.initializer, visitor, ts.isExpression)), - /*location*/ node); + return ts.setTextRange(ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), ts.visitNode(node.initializer, visitor, ts.isExpression)), node); } } function visitVariableDeclaration(node) { - return ts.updateVariableDeclaration(node, ts.visitNode(node.name, visitor, ts.isBindingName), - /*type*/ undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); + return ts.updateVariableDeclaration(node, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); } - /** - * Visits a parenthesized expression that contains either a type assertion or an `as` - * expression. - * - * @param node The parenthesized expression node. - */ function visitParenthesizedExpression(node) { - var innerExpression = ts.skipOuterExpressions(node.expression, ~2 /* Assertions */); + var innerExpression = ts.skipOuterExpressions(node.expression, ~2); if (ts.isAssertionExpression(innerExpression)) { - // Make sure we consider all nested cast expressions, e.g.: - // (-A).x; var expression = ts.visitNode(node.expression, visitor, ts.isExpression); - // We have an expression of the form: (SubExpr). Emitting this as (SubExpr) - // is really not desirable. We would like to emit the subexpression as-is. Omitting - // the parentheses, however, could cause change in the semantics of the generated - // code if the casted expression has a lower precedence than the rest of the - // expression. - // - // To preserve comments, we return a "PartiallyEmittedExpression" here which will - // preserve the position information of the original expression. - // - // Due to the auto-parenthesization rules used by the visitor and factory functions - // we can safely elide the parentheses here, as a new synthetic - // ParenthesizedExpression will be inserted if we remove parentheses too - // aggressively. - // HOWEVER - if there are leading comments on the expression itself, to handle ASI - // correctly for return and throw, we must keep the parenthesis if (ts.length(ts.getLeadingCommentRangesOfNode(expression, currentSourceFile))) { return ts.updateParen(node, expression); } @@ -63172,93 +52200,48 @@ var ts; return ts.createPartiallyEmittedExpression(expression, node); } function visitCallExpression(node) { - return ts.updateCall(node, ts.visitNode(node.expression, visitor, ts.isExpression), - /*typeArguments*/ undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); + return ts.updateCall(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); } function visitNewExpression(node) { - return ts.updateNew(node, ts.visitNode(node.expression, visitor, ts.isExpression), - /*typeArguments*/ undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); + return ts.updateNew(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); } function visitTaggedTemplateExpression(node) { - return ts.updateTaggedTemplate(node, ts.visitNode(node.tag, visitor, ts.isExpression), - /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isExpression)); + return ts.updateTaggedTemplate(node, ts.visitNode(node.tag, visitor, ts.isExpression), undefined, ts.visitNode(node.template, visitor, ts.isExpression)); } - /** - * Determines whether to emit an enum declaration. - * - * @param node The enum declaration node. - */ function shouldEmitEnumDeclaration(node) { return !ts.isConst(node) || compilerOptions.preserveConstEnums || compilerOptions.isolatedModules; } - /** - * Visits an enum declaration. - * - * This function will be called any time a TypeScript enum is encountered. - * - * @param node The enum declaration node. - */ function visitEnumDeclaration(node) { if (!shouldEmitEnumDeclaration(node)) { return undefined; } 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 = 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. + var emitFlags = 2; 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 |= 512 /* NoLeadingComments */; + emitFlags |= 512; } } - // `parameterName` is the declaration name used inside of the enum. var parameterName = getNamespaceParameterName(node); - // `containerName` is the expression used inside of the enum for assignments. var containerName = getNamespaceContainerName(node); - // `exportName` is the expression used within this node's container for any exported references. - var exportName = ts.hasModifier(node, 1 /* Export */) - ? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, /*allowComments*/ false, /*allowSourceMaps*/ true) - : ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); - // x || (x = {}) - // exports.x || (exports.x = {}) + var exportName = ts.hasModifier(node, 1) + ? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true) + : ts.getLocalName(node, false, true); var moduleArg = ts.createLogicalOr(exportName, ts.createAssignment(exportName, ts.createObjectLiteral())); if (hasNamespaceQualifiedExportName(node)) { - // `localName` is the expression used within this node's containing scope for any local references. - var localName = ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); - // x = (exports.x || (exports.x = {})) + var localName = ts.getLocalName(node, false, true); moduleArg = ts.createAssignment(localName, moduleArg); } - // (function (x) { - // x[x["y"] = 0] = "y"; - // ... - // })(x || (x = {})); - var enumStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, parameterName)], - /*type*/ undefined, transformEnumBody(node, containerName)), - /*typeArguments*/ undefined, [moduleArg])); + var enumStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, transformEnumBody(node, containerName)), undefined, [moduleArg])); ts.setOriginalNode(enumStatement, node); ts.setTextRange(enumStatement, node); ts.setEmitFlags(enumStatement, emitFlags); statements.push(enumStatement); - // Add a DeclarationMarker for the enum to preserve trailing comments and mark - // the end of the declaration. statements.push(ts.createEndOfDeclarationMarker(node)); return statements; } - /** - * Transforms the body of an enum declaration. - * - * @param node The enum declaration node. - */ function transformEnumBody(node, localName) { var savedCurrentNamespaceLocalName = currentNamespaceContainerName; currentNamespaceContainerName = localName; @@ -63268,31 +52251,17 @@ var ts; ts.prependStatements(statements, endLexicalEnvironment()); ts.addRange(statements, members); currentNamespaceContainerName = savedCurrentNamespaceLocalName; - return ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), /*location*/ node.members), - /*multiLine*/ true); + return ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true); } - /** - * Transforms an enum member into a statement. - * - * @param member The enum member node. - */ function transformEnumMember(member) { - // enums don't support computed properties - // we pass false as 'generateNameForComputedPropertyName' for a backward compatibility purposes - // old emitter always generate 'expression' part of the name as-is. - var name = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ false); + var name = getExpressionForPropertyName(member, false); var valueExpression = transformEnumMemberDeclarationValue(member); var innerAssignment = ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, name), valueExpression); - var outerAssignment = valueExpression.kind === 9 /* StringLiteral */ ? + var outerAssignment = valueExpression.kind === 9 ? innerAssignment : ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, innerAssignment), name); return ts.setTextRange(ts.createStatement(ts.setTextRange(outerAssignment, member)), member); } - /** - * Transforms the value of an enum member. - * - * @param member The enum member node. - */ function transformEnumMemberDeclarationValue(member) { var value = resolver.getConstantValue(member); if (value !== undefined) { @@ -63308,18 +52277,9 @@ var ts; } } } - /** - * Determines whether to elide a module declaration. - * - * @param node The module declaration node. - */ function shouldEmitModuleDeclaration(node) { return ts.isInstantiatedModule(node, !!compilerOptions.preserveConstEnums || !!compilerOptions.isolatedModules); } - /** - * Determines whether an exported declaration will have a qualified export name (e.g. `f.x` - * or `exports.x`). - */ function hasNamespaceQualifiedExportName(node) { return isExportOfNamespace(node) || (isExternalModuleExport(node) @@ -63327,10 +52287,6 @@ var ts; && moduleKind !== ts.ModuleKind.ESNext && moduleKind !== ts.ModuleKind.System); } - /** - * Records that a declaration was emitted in the current scope, if it was the first - * declaration for the provided symbol. - */ function recordEmittedDeclarationInScope(node) { if (!currentScopeFirstDeclarationsOfName) { currentScopeFirstDeclarationsOfName = ts.createUnderscoreEscapedMap(); @@ -63340,10 +52296,6 @@ var ts; currentScopeFirstDeclarationsOfName.set(name, node); } } - /** - * Determines whether a declaration is the first declaration with - * the same name emitted in the current scope. - */ function isFirstEmittedDeclarationInScope(node) { if (currentScopeFirstDeclarationsOfName) { var name = declaredNameInScope(node); @@ -63355,67 +52307,31 @@ var ts; ts.Debug.assertNode(node.name, ts.isIdentifier); return node.name.escapedText; } - /** - * Adds a leading VariableStatement for a enum or module declaration. - */ function addVarForEnumOrModuleDeclaration(statements, node) { - // Emit a variable statement for the module. We emit top-level enums as a `var` - // declaration to avoid static errors in global scripts scripts due to redeclaration. - // enums in any other scope are emitted as a `let` declaration. var statement = ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([ - ts.createVariableDeclaration(ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true)) - ], currentScope.kind === 274 /* SourceFile */ ? 0 /* None */ : 1 /* Let */)); + ts.createVariableDeclaration(ts.getLocalName(node, false, true)) + ], currentScope.kind === 274 ? 0 : 1)); ts.setOriginalNode(statement, node); recordEmittedDeclarationInScope(node); if (isFirstEmittedDeclarationInScope(node)) { - // Adjust the source map emit to match the old emitter. - if (node.kind === 238 /* EnumDeclaration */) { + if (node.kind === 238) { ts.setSourceMapRange(statement.declarationList, node); } else { ts.setSourceMapRange(statement, node); } - // Trailing comments for module declaration should be emitted after the function closure - // instead of the variable statement: - // - // /** Module comment*/ - // module m1 { - // function foo4Export() { - // } - // } // trailing comment module - // - // Should emit: - // - // /** Module comment*/ - // var m1; - // (function (m1) { - // function foo4Export() { - // } - // })(m1 || (m1 = {})); // trailing comment module - // ts.setCommentRange(statement, node); - ts.setEmitFlags(statement, 1024 /* NoTrailingComments */ | 4194304 /* HasEndOfDeclarationMarker */); + ts.setEmitFlags(statement, 1024 | 4194304); statements.push(statement); return true; } else { - // For an EnumDeclaration or ModuleDeclaration that merges with a preceeding - // declaration we do not emit a leading variable declaration. To preserve the - // 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, 1536 /* NoComments */ | 4194304 /* HasEndOfDeclarationMarker */); + ts.setEmitFlags(mergeMarker, 1536 | 4194304); statements.push(mergeMarker); return false; } } - /** - * Visits a module declaration node. - * - * This function will be called any time a TypeScript namespace (ModuleDeclaration) is encountered. - * - * @param node The module declaration node. - */ function visitModuleDeclaration(node) { if (!shouldEmitModuleDeclaration(node)) { return ts.createNotEmittedStatement(node); @@ -63423,59 +52339,30 @@ var ts; ts.Debug.assertNode(node.name, ts.isIdentifier, "A TypeScript namespace should have an Identifier name."); enableSubstitutionForNamespaceExports(); 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 = 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. + var emitFlags = 2; 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 |= 512 /* NoLeadingComments */; + emitFlags |= 512; } } - // `parameterName` is the declaration name used inside of the namespace. var parameterName = getNamespaceParameterName(node); - // `containerName` is the expression used inside of the namespace for exports. var containerName = getNamespaceContainerName(node); - // `exportName` is the expression used within this node's container for any exported references. - var exportName = ts.hasModifier(node, 1 /* Export */) - ? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, /*allowComments*/ false, /*allowSourceMaps*/ true) - : ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); - // x || (x = {}) - // exports.x || (exports.x = {}) + var exportName = ts.hasModifier(node, 1) + ? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true) + : ts.getLocalName(node, false, true); var moduleArg = ts.createLogicalOr(exportName, ts.createAssignment(exportName, ts.createObjectLiteral())); if (hasNamespaceQualifiedExportName(node)) { - // `localName` is the expression used within this node's containing scope for any local references. - var localName = ts.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true); - // x = (exports.x || (exports.x = {})) + var localName = ts.getLocalName(node, false, true); moduleArg = ts.createAssignment(localName, moduleArg); } - // (function (x_1) { - // x_1.y = ...; - // })(x || (x = {})); - var moduleStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, parameterName)], - /*type*/ undefined, transformModuleBody(node, containerName)), - /*typeArguments*/ undefined, [moduleArg])); + var moduleStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, transformModuleBody(node, containerName)), undefined, [moduleArg])); ts.setOriginalNode(moduleStatement, node); ts.setTextRange(moduleStatement, node); ts.setEmitFlags(moduleStatement, emitFlags); statements.push(moduleStatement); - // Add a DeclarationMarker for the namespace to preserve trailing comments and mark - // the end of the declaration. statements.push(ts.createEndOfDeclarationMarker(node)); return statements; } - /** - * Transforms the body of a module declaration. - * - * @param node The module declaration node. - */ function transformModuleBody(node, namespaceLocalName) { var savedCurrentNamespaceContainerName = currentNamespaceContainerName; var savedCurrentNamespace = currentNamespace; @@ -63488,7 +52375,7 @@ var ts; var statementsLocation; var blockLocation; var body = node.body; - if (body.kind === 240 /* ModuleBlock */) { + if (body.kind === 240) { saveStateAndInvoke(body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); }); statementsLocation = body.statements; blockLocation = body; @@ -63510,172 +52397,76 @@ var ts; currentNamespaceContainerName = savedCurrentNamespaceContainerName; currentNamespace = savedCurrentNamespace; currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; - var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), - /*location*/ statementsLocation), - /*multiLine*/ true); + var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true); ts.setTextRange(block, blockLocation); - // namespace hello.hi.world { - // function foo() {} - // - // // TODO, blah - // } - // - // should be emitted as - // - // var hello; - // (function (hello) { - // var hi; - // (function (hi) { - // var world; - // (function (world) { - // function foo() { } - // // TODO, blah - // })(world = hi.world || (hi.world = {})); - // })(hi = hello.hi || (hello.hi = {})); - // })(hello || (hello = {})); - // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces. - if (body.kind !== 240 /* ModuleBlock */) { - ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */); + if (body.kind !== 240) { + ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536); } return block; } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 239 /* ModuleDeclaration */) { + if (moduleDeclaration.body.kind === 239) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } } - /** - * Visits an import declaration, eliding it if it is not referenced. - * - * @param node The import declaration node. - */ function visitImportDeclaration(node) { if (!node.importClause) { - // Do not elide a side-effect only import declaration. - // import "foo"; return node; } - // Elide the declaration if the import clause was elided. var importClause = ts.visitNode(node.importClause, visitImportClause, ts.isImportClause); return importClause - ? ts.updateImportDeclaration(node, - /*decorators*/ undefined, - /*modifiers*/ undefined, importClause, node.moduleSpecifier) + ? ts.updateImportDeclaration(node, undefined, undefined, importClause, node.moduleSpecifier) : undefined; } - /** - * Visits an import clause, eliding it if it is not referenced. - * - * @param node The import clause node. - */ function visitImportClause(node) { - // Elide the import clause if we elide both its name and its named bindings. var name = resolver.isReferencedAliasDeclaration(node) ? node.name : undefined; var namedBindings = ts.visitNode(node.namedBindings, visitNamedImportBindings, ts.isNamedImportBindings); return (name || namedBindings) ? ts.updateImportClause(node, name, namedBindings) : undefined; } - /** - * Visits named import bindings, eliding it if it is not referenced. - * - * @param node The named import bindings node. - */ function visitNamedImportBindings(node) { - if (node.kind === 246 /* NamespaceImport */) { - // Elide a namespace import if it is not referenced. + if (node.kind === 246) { return resolver.isReferencedAliasDeclaration(node) ? node : undefined; } else { - // Elide named imports if all of its import specifiers are elided. var elements = ts.visitNodes(node.elements, visitImportSpecifier, ts.isImportSpecifier); return ts.some(elements) ? ts.updateNamedImports(node, elements) : undefined; } } - /** - * Visits an import specifier, eliding it if it is not referenced. - * - * @param node The import specifier node. - */ function visitImportSpecifier(node) { - // Elide an import specifier if it is not referenced. return resolver.isReferencedAliasDeclaration(node) ? node : undefined; } - /** - * Visits an export assignment, eliding it if it does not contain a clause that resolves - * to a value. - * - * @param node The export assignment node. - */ function visitExportAssignment(node) { - // Elide the export assignment if it does not reference a value. return resolver.isValueAliasDeclaration(node) ? ts.visitEachChild(node, visitor, context) : undefined; } - /** - * Visits an export declaration, eliding it if it does not contain a clause that resolves - * to a value. - * - * @param node The export declaration node. - */ function visitExportDeclaration(node) { if (!node.exportClause) { - // Elide a star export if the module it references does not export a value. return compilerOptions.isolatedModules || resolver.moduleExportsSomeValue(node.moduleSpecifier) ? node : undefined; } if (!resolver.isValueAliasDeclaration(node)) { - // Elide the export declaration if it does not export a value. return undefined; } - // Elide the export declaration if all of its named exports are elided. var exportClause = ts.visitNode(node.exportClause, visitNamedExports, ts.isNamedExports); return exportClause - ? ts.updateExportDeclaration(node, - /*decorators*/ undefined, - /*modifiers*/ undefined, exportClause, node.moduleSpecifier) + ? ts.updateExportDeclaration(node, undefined, undefined, exportClause, node.moduleSpecifier) : undefined; } - /** - * Visits named exports, eliding it if it does not contain an export specifier that - * resolves to a value. - * - * @param node The named exports node. - */ function visitNamedExports(node) { - // Elide the named exports if all of its export specifiers were elided. var elements = ts.visitNodes(node.elements, visitExportSpecifier, ts.isExportSpecifier); return ts.some(elements) ? ts.updateNamedExports(node, elements) : undefined; } - /** - * Visits an export specifier, eliding it if it does not resolve to a value. - * - * @param node The export specifier node. - */ function visitExportSpecifier(node) { - // Elide an export specifier if it does not reference a value. return resolver.isValueAliasDeclaration(node) ? node : undefined; } - /** - * Determines whether to emit an import equals declaration. - * - * @param node The import equals declaration node. - */ function shouldEmitImportEqualsDeclaration(node) { - // preserve old compiler's behavior: emit 'var' for import declaration (even if we do not consider them referenced) when - // - current file is not external module - // - import declaration is top level and target is value imported by entity name return resolver.isReferencedAliasDeclaration(node) || (!ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportEqualsWithEntityName(node)); } - /** - * Visits an import equals declaration. - * - * @param node The import equals declaration node. - */ function visitImportEqualsDeclaration(node) { if (ts.isExternalModuleImportEqualsDeclaration(node)) { - // Elide external module `import=` if it is not referenced. return resolver.isReferencedAliasDeclaration(node) ? ts.visitEachChild(node, visitor, context) : undefined; @@ -63684,98 +52475,59 @@ var ts; return undefined; } var moduleReference = ts.createExpressionFromEntityName(node.moduleReference); - ts.setEmitFlags(moduleReference, 1536 /* NoComments */ | 2048 /* NoNestedComments */); + ts.setEmitFlags(moduleReference, 1536 | 2048); if (isNamedExternalModuleExport(node) || !isExportOfNamespace(node)) { - // export var ${name} = ${moduleReference}; - // var ${name} = ${moduleReference}; return ts.setOriginalNode(ts.setTextRange(ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([ - ts.setOriginalNode(ts.createVariableDeclaration(node.name, - /*type*/ undefined, moduleReference), node) + ts.setOriginalNode(ts.createVariableDeclaration(node.name, undefined, moduleReference), node) ])), node), node); } else { - // exports.${name} = ${moduleReference}; return ts.setOriginalNode(createNamespaceExport(node.name, moduleReference, node), node); } } - /** - * Gets a value indicating whether the node is exported from a namespace. - * - * @param node The node to test. - */ function isExportOfNamespace(node) { - return currentNamespace !== undefined && ts.hasModifier(node, 1 /* Export */); + return currentNamespace !== undefined && ts.hasModifier(node, 1); } - /** - * Gets a value indicating whether the node is exported from an external module. - * - * @param node The node to test. - */ function isExternalModuleExport(node) { - return currentNamespace === undefined && ts.hasModifier(node, 1 /* Export */); + return currentNamespace === undefined && ts.hasModifier(node, 1); } - /** - * Gets a value indicating whether the node is a named export from an external module. - * - * @param node The node to test. - */ function isNamedExternalModuleExport(node) { return isExternalModuleExport(node) - && !ts.hasModifier(node, 512 /* Default */); + && !ts.hasModifier(node, 512); } - /** - * Gets a value indicating whether the node is the default export of an external module. - * - * @param node The node to test. - */ function isDefaultExternalModuleExport(node) { return isExternalModuleExport(node) - && ts.hasModifier(node, 512 /* Default */); + && ts.hasModifier(node, 512); } - /** - * Creates a statement for the provided expression. This is used in calls to `map`. - */ function expressionToStatement(expression) { return ts.createStatement(expression); } function addExportMemberAssignment(statements, node) { - var expression = ts.createAssignment(ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, /*allowComments*/ false, /*allowSourceMaps*/ true), ts.getLocalName(node)); + var expression = ts.createAssignment(ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true), ts.getLocalName(node)); ts.setSourceMapRange(expression, ts.createRange(node.name ? node.name.pos : node.pos, node.end)); var statement = ts.createStatement(expression); ts.setSourceMapRange(statement, ts.createRange(-1, node.end)); statements.push(statement); } function createNamespaceExport(exportName, exportValue, location) { - return ts.setTextRange(ts.createStatement(ts.createAssignment(ts.getNamespaceMemberName(currentNamespaceContainerName, exportName, /*allowComments*/ false, /*allowSourceMaps*/ true), exportValue)), location); + return ts.setTextRange(ts.createStatement(ts.createAssignment(ts.getNamespaceMemberName(currentNamespaceContainerName, exportName, false, true), exportValue)), location); } function createNamespaceExportExpression(exportName, exportValue, location) { return ts.setTextRange(ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(exportName), exportValue), location); } function getNamespaceMemberNameWithSourceMapsAndWithoutComments(name) { - return ts.getNamespaceMemberName(currentNamespaceContainerName, name, /*allowComments*/ false, /*allowSourceMaps*/ true); + return ts.getNamespaceMemberName(currentNamespaceContainerName, name, false, true); } - /** - * Gets the declaration name used inside of a namespace or enum. - */ function getNamespaceParameterName(node) { var name = ts.getGeneratedNameForNode(node); ts.setSourceMapRange(name, node.name); return name; } - /** - * Gets the expression used to refer to a namespace or enum within the body - * of its declaration. - */ function getNamespaceContainerName(node) { return ts.getGeneratedNameForNode(node); } - /** - * Gets a local alias for a class declaration if it is a decorated class with an internal - * reference to the static side of the class. This is necessary to avoid issues with - * double-binding semantics for the class name. - */ function getClassAliasIfNeeded(node) { - if (resolver.getNodeCheckFlags(node) & 8388608 /* ClassWithConstructorReference */) { + if (resolver.getNodeCheckFlags(node) & 8388608) { enableSubstitutionForClassAliases(); var classAlias = ts.createUniqueName(node.name && !ts.isGeneratedIdentifier(node.name) ? ts.idText(node.name) : "default"); classAliases[ts.getOriginalNodeId(node)] = classAlias; @@ -63787,75 +52539,56 @@ var ts; return ts.createPropertyAccess(ts.getDeclarationName(node), "prototype"); } function getClassMemberPrefix(node, member) { - return ts.hasModifier(member, 32 /* Static */) + return ts.hasModifier(member, 32) ? ts.getDeclarationName(node) : getClassPrototype(node); } function enableSubstitutionForNonQualifiedEnumMembers() { - if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) { - enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */; - context.enableSubstitution(71 /* Identifier */); + if ((enabledSubstitutions & 8) === 0) { + enabledSubstitutions |= 8; + context.enableSubstitution(71); } } function enableSubstitutionForClassAliases() { - if ((enabledSubstitutions & 1 /* ClassAliases */) === 0) { - enabledSubstitutions |= 1 /* ClassAliases */; - // We need to enable substitutions for identifiers. This allows us to - // substitute class names inside of a class declaration. - context.enableSubstitution(71 /* Identifier */); - // Keep track of class aliases. + if ((enabledSubstitutions & 1) === 0) { + enabledSubstitutions |= 1; + context.enableSubstitution(71); classAliases = []; } } function enableSubstitutionForNamespaceExports() { - if ((enabledSubstitutions & 2 /* NamespaceExports */) === 0) { - enabledSubstitutions |= 2 /* NamespaceExports */; - // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to - // substitute the names of exported members of a namespace. - context.enableSubstitution(71 /* Identifier */); - context.enableSubstitution(271 /* ShorthandPropertyAssignment */); - // We need to be notified when entering and exiting namespaces. - context.enableEmitNotification(239 /* ModuleDeclaration */); + if ((enabledSubstitutions & 2) === 0) { + enabledSubstitutions |= 2; + context.enableSubstitution(71); + context.enableSubstitution(271); + context.enableEmitNotification(239); } } function isTransformedModuleDeclaration(node) { - return ts.getOriginalNode(node).kind === 239 /* ModuleDeclaration */; + return ts.getOriginalNode(node).kind === 239; } function isTransformedEnumDeclaration(node) { - return ts.getOriginalNode(node).kind === 238 /* EnumDeclaration */; + return ts.getOriginalNode(node).kind === 238; } - /** - * Hook for node emit. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emit A callback used to emit the node in the printer. - */ function onEmitNode(hint, node, emitCallback) { var savedApplicableSubstitutions = applicableSubstitutions; var savedCurrentSourceFile = currentSourceFile; if (ts.isSourceFile(node)) { currentSourceFile = node; } - if (enabledSubstitutions & 2 /* NamespaceExports */ && isTransformedModuleDeclaration(node)) { - applicableSubstitutions |= 2 /* NamespaceExports */; + if (enabledSubstitutions & 2 && isTransformedModuleDeclaration(node)) { + applicableSubstitutions |= 2; } - if (enabledSubstitutions & 8 /* NonQualifiedEnumMembers */ && isTransformedEnumDeclaration(node)) { - applicableSubstitutions |= 8 /* NonQualifiedEnumMembers */; + if (enabledSubstitutions & 8 && isTransformedEnumDeclaration(node)) { + applicableSubstitutions |= 8; } previousOnEmitNode(hint, node, emitCallback); applicableSubstitutions = savedApplicableSubstitutions; currentSourceFile = savedCurrentSourceFile; } - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (hint === 1 /* Expression */) { + if (hint === 1) { return substituteExpression(node); } else if (ts.isShorthandPropertyAssignment(node)) { @@ -63864,12 +52597,10 @@ var ts; return node; } function substituteShorthandPropertyAssignment(node) { - if (enabledSubstitutions & 2 /* NamespaceExports */) { + if (enabledSubstitutions & 2) { var name = node.name; var exportedName = trySubstituteNamespaceExportedName(name); if (exportedName) { - // A shorthand property with an assignment initializer is probably part of a - // destructuring assignment if (node.objectAssignmentInitializer) { var initializer = ts.createAssignment(exportedName, node.objectAssignmentInitializer); return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node); @@ -63881,11 +52612,11 @@ var ts; } function substituteExpression(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return substituteExpressionIdentifier(node); - case 185 /* PropertyAccessExpression */: + case 185: return substitutePropertyAccessExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return substituteElementAccessExpression(node); } return node; @@ -63896,16 +52627,11 @@ var ts; || node; } function trySubstituteClassAlias(node) { - if (enabledSubstitutions & 1 /* ClassAliases */) { - if (resolver.getNodeCheckFlags(node) & 16777216 /* ConstructorReferenceInClass */) { - // Due to the emit for class decorators, any reference to the class from inside of the class body - // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind - // behavior of class names in ES6. - // Also, when emitting statics for class expressions, we must substitute a class alias for - // constructor references in static property initializers. + if (enabledSubstitutions & 1) { + if (resolver.getNodeCheckFlags(node) & 16777216) { var declaration = resolver.getReferencedValueDeclaration(node); if (declaration) { - var classAlias = classAliases[declaration.id]; // TODO: GH#18217 + var classAlias = classAliases[declaration.id]; if (classAlias) { var clone_1 = ts.getSynthesizedClone(classAlias); ts.setSourceMapRange(clone_1, node); @@ -63918,17 +52644,13 @@ var ts; return undefined; } function trySubstituteNamespaceExportedName(node) { - // If this is explicitly a local name, do not substitute. 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); - if (container && container.kind !== 274 /* SourceFile */) { - var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 239 /* ModuleDeclaration */) || - (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 238 /* EnumDeclaration */); + var container = resolver.getReferencedExportContainer(node, false); + if (container && container.kind !== 274) { + var substitute = (applicableSubstitutions & 2 && container.kind === 239) || + (applicableSubstitutions & 8 && container.kind === 238); if (substitute) { - return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(container), node), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(container), node), node); } } } @@ -63943,14 +52665,13 @@ var ts; function substituteConstantValue(node) { var constantValue = tryGetConstEnumValue(node); if (constantValue !== undefined) { - // track the constant value on the node for the printer in needsDotDotForPropertyAccess ts.setConstantValue(node, constantValue); var substitute = ts.createLiteral(constantValue); if (!compilerOptions.removeComments) { var propertyName = ts.isPropertyAccessExpression(node) ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); - ts.addSyntheticTrailingComment(substitute, 3 /* MultiLineCommentTrivia */, " " + propertyName + " "); + ts.addSyntheticTrailingComment(substitute, 3, " " + propertyName + " "); } return substitute; } @@ -63966,7 +52687,7 @@ var ts; ts.transformTypeScript = transformTypeScript; function createDecorateHelper(context, decoratorExpressions, target, memberName, descriptor, location) { var argumentsArray = []; - argumentsArray.push(ts.createArrayLiteral(decoratorExpressions, /*multiLine*/ true)); + argumentsArray.push(ts.createArrayLiteral(decoratorExpressions, true)); argumentsArray.push(target); if (memberName) { argumentsArray.push(memberName); @@ -63975,8 +52696,7 @@ var ts; } } context.requestEmitHelper(decorateHelper); - return ts.setTextRange(ts.createCall(ts.getHelperName("__decorate"), - /*typeArguments*/ undefined, argumentsArray), location); + return ts.setTextRange(ts.createCall(ts.getHelperName("__decorate"), undefined, argumentsArray), location); } var decorateHelper = { name: "typescript:decorate", @@ -63986,8 +52706,7 @@ var ts; }; function createMetadataHelper(context, metadataKey, metadataValue) { context.requestEmitHelper(metadataHelper); - return ts.createCall(ts.getHelperName("__metadata"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.getHelperName("__metadata"), undefined, [ ts.createLiteral(metadataKey), metadataValue ]); @@ -64000,8 +52719,7 @@ var ts; }; function createParamHelper(context, expression, parameterOffset, location) { context.requestEmitHelper(paramHelper); - return ts.setTextRange(ts.createCall(ts.getHelperName("__param"), - /*typeArguments*/ undefined, [ + return ts.setTextRange(ts.createCall(ts.getHelperName("__param"), undefined, [ ts.createLiteral(parameterOffset), expression ]), location); @@ -64013,34 +52731,18 @@ var ts; text: "\n var __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n };" }; })(ts || (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 resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var resolver = context.getEmitResolver(); var compilerOptions = context.getCompilerOptions(); var languageVersion = ts.getEmitScriptTarget(compilerOptions); - /** - * 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; - /** - * This keeps track of containers where `super` is valid, for use with - * just-in-time substitution for `super` expressions inside of async methods. - */ var enclosingSuperContainerFlags = 0; var enclosingFunctionParameterNames; - // Save the previous transformation hooks. var previousOnEmitNode = context.onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; - // Set new transformation hooks. context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; return ts.chainBundle(transformSourceFile); @@ -64053,22 +52755,21 @@ var ts; return visited; } function visitor(node) { - if ((node.transformFlags & 16 /* ContainsES2017 */) === 0) { + if ((node.transformFlags & 16) === 0) { return node; } switch (node.kind) { - case 120 /* AsyncKeyword */: - // ES2017 async modifier should be elided for targets < ES2017 + case 120: return undefined; - case 197 /* AwaitExpression */: + case 197: return visitAwaitExpression(node); - case 154 /* MethodDeclaration */: + case 154: return visitMethodDeclaration(node); - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 192 /* FunctionExpression */: + case 192: return visitFunctionExpression(node); - case 193 /* ArrowFunction */: + case 193: return visitArrowFunction(node); default: return ts.visitEachChild(node, visitor, context); @@ -64077,27 +52778,27 @@ var ts; function asyncBodyVisitor(node) { if (ts.isNodeWithPossibleHoistedDeclaration(node)) { switch (node.kind) { - case 214 /* VariableStatement */: + case 214: return visitVariableStatementInAsyncBody(node); - case 220 /* ForStatement */: + case 220: return visitForStatementInAsyncBody(node); - case 221 /* ForInStatement */: + case 221: return visitForInStatementInAsyncBody(node); - case 222 /* ForOfStatement */: + case 222: return visitForOfStatementInAsyncBody(node); - case 269 /* CatchClause */: + case 269: return visitCatchClauseInAsyncBody(node); - case 213 /* Block */: - case 227 /* SwitchStatement */: - case 241 /* CaseBlock */: - case 266 /* CaseClause */: - case 267 /* DefaultClause */: - case 230 /* TryStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - case 217 /* IfStatement */: - case 226 /* WithStatement */: - case 228 /* LabeledStatement */: + case 213: + case 227: + case 241: + case 266: + case 267: + case 230: + case 218: + case 219: + case 217: + case 226: + case 228: return ts.visitEachChild(node, asyncBodyVisitor, context); default: return ts.Debug.assertNever(node, "Unhandled node."); @@ -64107,8 +52808,7 @@ var ts; } function visitCatchClauseInAsyncBody(node) { var catchClauseNames = ts.createUnderscoreEscapedMap(); - recordDeclarationName(node.variableDeclaration, catchClauseNames); // TODO: GH#18217 - // names declared in a catch variable are block scoped + recordDeclarationName(node.variableDeclaration, catchClauseNames); var catchClauseUnshadowedNames; catchClauseNames.forEach(function (_, escapedName) { if (enclosingFunctionParameterNames.has(escapedName)) { @@ -64131,98 +52831,47 @@ var ts; } function visitVariableStatementInAsyncBody(node) { if (isVariableDeclarationListWithCollidingName(node.declarationList)) { - var expression = visitVariableDeclarationListWithCollidingNames(node.declarationList, /*hasReceiver*/ false); + var expression = visitVariableDeclarationListWithCollidingNames(node.declarationList, false); return expression ? ts.createStatement(expression) : undefined; } return ts.visitEachChild(node, visitor, context); } function visitForInStatementInAsyncBody(node) { return ts.updateForIn(node, isVariableDeclarationListWithCollidingName(node.initializer) - ? visitVariableDeclarationListWithCollidingNames(node.initializer, /*hasReceiver*/ true) + ? visitVariableDeclarationListWithCollidingNames(node.initializer, true) : ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, asyncBodyVisitor, ts.isStatement, ts.liftToBlock)); } function visitForOfStatementInAsyncBody(node) { return ts.updateForOf(node, ts.visitNode(node.awaitModifier, visitor, ts.isToken), isVariableDeclarationListWithCollidingName(node.initializer) - ? visitVariableDeclarationListWithCollidingNames(node.initializer, /*hasReceiver*/ true) + ? visitVariableDeclarationListWithCollidingNames(node.initializer, true) : ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, asyncBodyVisitor, ts.isStatement, ts.liftToBlock)); } function visitForStatementInAsyncBody(node) { - var initializer = node.initializer; // TODO: GH#18217 + var initializer = node.initializer; return ts.updateFor(node, isVariableDeclarationListWithCollidingName(initializer) - ? visitVariableDeclarationListWithCollidingNames(initializer, /*hasReceiver*/ false) + ? visitVariableDeclarationListWithCollidingNames(initializer, false) : ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, asyncBodyVisitor, ts.isStatement, ts.liftToBlock)); } - /** - * Visits an AwaitExpression node. - * - * This function will be called any time a ES2017 await expression is encountered. - * - * @param node The node to visit. - */ function visitAwaitExpression(node) { - return ts.setOriginalNode(ts.setTextRange(ts.createYield( - /*asteriskToken*/ undefined, ts.visitNode(node.expression, visitor, ts.isExpression)), node), node); + return ts.setOriginalNode(ts.setTextRange(ts.createYield(undefined, ts.visitNode(node.expression, visitor, ts.isExpression)), node), node); } - /** - * 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 node to visit. - */ function visitMethodDeclaration(node) { - return ts.updateMethod(node, - /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, - /*questionToken*/ undefined, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.getFunctionFlags(node) & 2 /* Async */ + return ts.updateMethod(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2 ? transformAsyncFunctionBody(node) : ts.visitFunctionBody(node.body, visitor, context)); } - /** - * 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 node to visit. - */ function visitFunctionDeclaration(node) { - return ts.updateFunctionDeclaration(node, - /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.getFunctionFlags(node) & 2 /* Async */ + return ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2 ? transformAsyncFunctionBody(node) : ts.visitFunctionBody(node.body, visitor, context)); } - /** - * 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 node to visit. - */ function visitFunctionExpression(node) { - return ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, ts.getFunctionFlags(node) & 2 /* Async */ + return ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2 ? transformAsyncFunctionBody(node) : ts.visitFunctionBody(node.body, visitor, context)); } - /** - * 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) { - return ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, node.equalsGreaterThanToken, ts.getFunctionFlags(node) & 2 /* Async */ + return ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, ts.getFunctionFlags(node) & 2 ? transformAsyncFunctionBody(node) : ts.visitFunctionBody(node.body, visitor, context)); } @@ -64243,7 +52892,7 @@ var ts; function isVariableDeclarationListWithCollidingName(node) { return !!node && ts.isVariableDeclarationList(node) - && !(node.flags & 3 /* BlockScoped */) + && !(node.flags & 3) && node.declarations.some(collidesWithParameterName); } function visitVariableDeclarationListWithCollidingNames(node, hasReceiver) { @@ -64297,14 +52946,9 @@ var ts; resumeLexicalEnvironment(); var original = ts.getOriginalNode(node, ts.isFunctionLike); var nodeType = original.type; - var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined; - var isArrowFunction = node.kind === 193 /* ArrowFunction */; - var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0; - // An async function is emit as an outer function that calls an inner - // generator function. To preserve lexical bindings, we pass the current - // `this` and `arguments` objects to `__awaiter`. The generator function - // passed to `__awaiter` is executed inside of the callback to the - // promise constructor. + var promiseConstructor = languageVersion < 2 ? getPromiseConstructor(nodeType) : undefined; + var isArrowFunction = node.kind === 193; + var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0; var savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames; enclosingFunctionParameterNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { @@ -64314,19 +52958,17 @@ var ts; var result; if (!isArrowFunction) { var statements = []; - var statementOffset = ts.addPrologue(statements, node.body.statements, /*ensureUseStrict*/ false, visitor); + var statementOffset = ts.addPrologue(statements, node.body.statements, false, visitor); statements.push(ts.createReturn(createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformAsyncFunctionBodyWorker(node.body, statementOffset)))); ts.prependStatements(statements, endLexicalEnvironment()); - var block = ts.createBlock(statements, /*multiLine*/ true); + var block = ts.createBlock(statements, true); ts.setTextRange(block, node.body); - // 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 */) { + if (languageVersion >= 2) { + if (resolver.getNodeCheckFlags(node) & 4096) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.advancedAsyncSuperHelper); } - else if (resolver.getNodeCheckFlags(node) & 2048 /* AsyncMethodWithSuper */) { + else if (resolver.getNodeCheckFlags(node) & 2048) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.asyncSuperHelper); } @@ -64367,33 +53009,21 @@ var ts; return undefined; } function enableSubstitutionForAsyncMethodsWithSuper() { - if ((enabledSubstitutions & 1 /* AsyncMethodsWithSuper */) === 0) { - enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */; - // We need to enable substitutions for call, property access, and element access - // if we need to rewrite super calls. - context.enableSubstitution(187 /* CallExpression */); - context.enableSubstitution(185 /* PropertyAccessExpression */); - context.enableSubstitution(186 /* ElementAccessExpression */); - // We need to be notified when entering and exiting declarations that bind super. - context.enableEmitNotification(235 /* ClassDeclaration */); - context.enableEmitNotification(154 /* MethodDeclaration */); - context.enableEmitNotification(156 /* GetAccessor */); - context.enableEmitNotification(157 /* SetAccessor */); - context.enableEmitNotification(155 /* Constructor */); + if ((enabledSubstitutions & 1) === 0) { + enabledSubstitutions |= 1; + context.enableSubstitution(187); + context.enableSubstitution(185); + context.enableSubstitution(186); + context.enableEmitNotification(235); + context.enableEmitNotification(154); + context.enableEmitNotification(156); + context.enableEmitNotification(157); + context.enableEmitNotification(155); } } - /** - * Hook for node emit. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emit A callback used to emit the node in the printer. - */ function onEmitNode(hint, node, emitCallback) { - // If we need to support substitutions for `super` in an async method, - // we should track it here. - if (enabledSubstitutions & 1 /* AsyncMethodsWithSuper */ && isSuperContainer(node)) { - var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 /* AsyncMethodWithSuper */ | 4096 /* AsyncMethodWithSuperBinding */); + if (enabledSubstitutions & 1 && isSuperContainer(node)) { + var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096); if (superContainerFlags !== enclosingSuperContainerFlags) { var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; enclosingSuperContainerFlags = superContainerFlags; @@ -64404,38 +53034,32 @@ var ts; } previousOnEmitNode(hint, node, emitCallback); } - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (hint === 1 /* Expression */ && enclosingSuperContainerFlags) { + if (hint === 1 && enclosingSuperContainerFlags) { return substituteExpression(node); } return node; } function substituteExpression(node) { switch (node.kind) { - case 185 /* PropertyAccessExpression */: + case 185: return substitutePropertyAccessExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return substituteElementAccessExpression(node); - case 187 /* CallExpression */: + case 187: return substituteCallExpression(node); } return node; } function substitutePropertyAccessExpression(node) { - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node); } return node; } function substituteElementAccessExpression(node) { - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(node.argumentExpression, node); } return node; @@ -64446,8 +53070,7 @@ var ts; var argumentExpression = ts.isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); - return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [ ts.createThis() ].concat(node.arguments)); } @@ -64455,20 +53078,18 @@ var ts; } function isSuperContainer(node) { var kind = node.kind; - return kind === 235 /* ClassDeclaration */ - || kind === 155 /* Constructor */ - || kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */; + return kind === 235 + || kind === 155 + || kind === 154 + || kind === 156 + || kind === 157; } function createSuperAccessInAsyncMethod(argumentExpression, location) { - if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) { - return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createFileLevelUniqueName("_super"), - /*typeArguments*/ undefined, [argumentExpression]), "value"), location); + if (enclosingSuperContainerFlags & 4096) { + return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createFileLevelUniqueName("_super"), undefined, [argumentExpression]), "value"), location); } else { - return ts.setTextRange(ts.createCall(ts.createFileLevelUniqueName("_super"), - /*typeArguments*/ undefined, [argumentExpression]), location); + return ts.setTextRange(ts.createCall(ts.createFileLevelUniqueName("_super"), undefined, [argumentExpression]), location); } } } @@ -64481,16 +53102,9 @@ var ts; }; function createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, body) { context.requestEmitHelper(awaiterHelper); - var generatorFunc = ts.createFunctionExpression( - /*modifiers*/ undefined, ts.createToken(39 /* AsteriskToken */), - /*name*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ [], - /*type*/ undefined, body); - // Mark this node as originally an async function - (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 /* AsyncFunctionBody */ | 524288 /* ReuseTempVariableScope */; - return ts.createCall(ts.getHelperName("__awaiter"), - /*typeArguments*/ undefined, [ + var generatorFunc = ts.createFunctionExpression(undefined, ts.createToken(39), undefined, undefined, [], undefined, body); + (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 | 524288; + return ts.createCall(ts.getHelperName("__awaiter"), undefined, [ ts.createThis(), hasLexicalArguments ? ts.createIdentifier("arguments") : ts.createVoidZero(), promiseConstructor ? ts.createExpressionFromEntityName(promiseConstructor) : ts.createVoidZero(), @@ -64508,14 +53122,8 @@ var ts; text: ts.helperString(__makeTemplateObject(["\n const ", " = (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);"], ["\n const ", " = (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);"]), "_super") }; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { - var ESNextSubstitutionFlags; - (function (ESNextSubstitutionFlags) { - /** Enables substitutions for async methods with `super` calls. */ - ESNextSubstitutionFlags[ESNextSubstitutionFlags["AsyncMethodsWithSuper"] = 1] = "AsyncMethodsWithSuper"; - })(ESNextSubstitutionFlags || (ESNextSubstitutionFlags = {})); function transformESNext(context) { var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var resolver = context.getEmitResolver(); @@ -64538,77 +53146,76 @@ var ts; return visited; } function visitor(node) { - return visitorWorker(node, /*noDestructuringValue*/ false); + return visitorWorker(node, false); } function visitorNoDestructuringValue(node) { - return visitorWorker(node, /*noDestructuringValue*/ true); + return visitorWorker(node, true); } function visitorNoAsyncModifier(node) { - if (node.kind === 120 /* AsyncKeyword */) { + if (node.kind === 120) { return undefined; } return node; } function visitorWorker(node, noDestructuringValue) { - if ((node.transformFlags & 8 /* ContainsESNext */) === 0) { + if ((node.transformFlags & 8) === 0) { return node; } switch (node.kind) { - case 197 /* AwaitExpression */: + case 197: return visitAwaitExpression(node); - case 203 /* YieldExpression */: + case 203: return visitYieldExpression(node); - case 225 /* ReturnStatement */: + case 225: return visitReturnStatement(node); - case 228 /* LabeledStatement */: + case 228: return visitLabeledStatement(node); - case 184 /* ObjectLiteralExpression */: + case 184: return visitObjectLiteralExpression(node); - case 200 /* BinaryExpression */: + case 200: return visitBinaryExpression(node, noDestructuringValue); - case 232 /* VariableDeclaration */: + case 232: return visitVariableDeclaration(node); - case 222 /* ForOfStatement */: - return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined); - case 220 /* ForStatement */: + case 222: + return visitForOfStatement(node, undefined); + case 220: return visitForStatement(node); - case 196 /* VoidExpression */: + case 196: return visitVoidExpression(node); - case 155 /* Constructor */: + case 155: return visitConstructorDeclaration(node); - case 154 /* MethodDeclaration */: + case 154: return visitMethodDeclaration(node); - case 156 /* GetAccessor */: + case 156: return visitGetAccessorDeclaration(node); - case 157 /* SetAccessor */: + case 157: return visitSetAccessorDeclaration(node); - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 192 /* FunctionExpression */: + case 192: return visitFunctionExpression(node); - case 193 /* ArrowFunction */: + case 193: return visitArrowFunction(node); - case 149 /* Parameter */: + case 149: return visitParameter(node); - case 216 /* ExpressionStatement */: + case 216: return visitExpressionStatement(node); - case 191 /* ParenthesizedExpression */: + case 191: return visitParenthesizedExpression(node, noDestructuringValue); - case 269 /* CatchClause */: + case 269: return visitCatchClause(node); default: return ts.visitEachChild(node, visitor, context); } } function visitAwaitExpression(node) { - if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { - return ts.setOriginalNode(ts.setTextRange(ts.createYield(createAwaitHelper(context, ts.visitNode(node.expression, visitor, ts.isExpression))), - /*location*/ node), node); + if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) { + return ts.setOriginalNode(ts.setTextRange(ts.createYield(createAwaitHelper(context, ts.visitNode(node.expression, visitor, ts.isExpression))), node), node); } return ts.visitEachChild(node, visitor, context); } function visitYieldExpression(node) { - if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { + if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) { if (node.asteriskToken) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); return ts.setOriginalNode(ts.setTextRange(ts.createYield(createAwaitHelper(context, ts.updateYield(node, node.asteriskToken, createAsyncDelegatorHelper(context, createAsyncValuesHelper(context, expression, expression), expression)))), node), node); @@ -64620,15 +53227,15 @@ var ts; return ts.visitEachChild(node, visitor, context); } function visitReturnStatement(node) { - if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { + if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) { return ts.updateReturn(node, createDownlevelAwait(node.expression ? ts.visitNode(node.expression, visitor, ts.isExpression) : ts.createVoidZero())); } return ts.visitEachChild(node, visitor, context); } function visitLabeledStatement(node) { - if (enclosingFunctionFlags & 2 /* Async */) { + if (enclosingFunctionFlags & 2) { var statement = ts.unwrapInnermostStatementOfLabel(node); - if (statement.kind === 222 /* ForOfStatement */ && statement.awaitModifier) { + if (statement.kind === 222 && statement.awaitModifier) { return visitForOfStatement(statement, node); } return ts.restoreEnclosingLabel(ts.visitEachChild(statement, visitor, context), node); @@ -64640,7 +53247,7 @@ var ts; var objects = []; for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) { var e = elements_4[_i]; - if (e.kind === 272 /* SpreadAssignment */) { + if (e.kind === 272) { if (chunkObject) { objects.push(ts.createObjectLiteral(chunkObject)); chunkObject = undefined; @@ -64649,7 +53256,7 @@ var ts; objects.push(ts.visitNode(target, visitor, ts.isExpression)); } else { - chunkObject = ts.append(chunkObject, e.kind === 270 /* PropertyAssignment */ + chunkObject = ts.append(chunkObject, e.kind === 270 ? ts.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression)) : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike)); } @@ -64660,14 +53267,9 @@ var ts; 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) + if (node.transformFlags & 1048576) { var objects = chunkObjectLiteralElements(node.properties); - if (objects.length && objects[0].kind !== 184 /* ObjectLiteralExpression */) { + if (objects.length && objects[0].kind !== 184) { objects.unshift(ts.createObjectLiteral()); } return createAssignHelper(context, objects); @@ -64682,33 +53284,22 @@ var ts; } function visitCatchClause(node) { if (!node.variableDeclaration) { - return ts.updateCatchClause(node, ts.createVariableDeclaration(ts.createTempVariable(/*recordTempVariable*/ undefined)), ts.visitNode(node.block, visitor, ts.isBlock)); + return ts.updateCatchClause(node, ts.createVariableDeclaration(ts.createTempVariable(undefined)), ts.visitNode(node.block, visitor, ts.isBlock)); } return ts.visitEachChild(node, 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); + if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 1048576) { + return ts.flattenDestructuringAssignment(node, visitor, context, 1, !noDestructuringValue); } - else if (node.operatorToken.kind === 26 /* CommaToken */) { + else if (node.operatorToken.kind === 26) { 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 */); + if (ts.isBindingPattern(node.name) && node.name.transformFlags & 1048576) { + return ts.flattenDestructuringBinding(node, visitor, context, 1); } return ts.visitEachChild(node, visitor, context); } @@ -64718,13 +53309,8 @@ var ts; 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, outermostLabeledStatement) { - if (node.initializer.transformFlags & 1048576 /* ContainsObjectRest */) { + if (node.initializer.transformFlags & 1048576) { node = transformForOfStatementWithObjectRest(node); } if (node.awaitModifier) { @@ -64739,7 +53325,7 @@ var ts; if (ts.isVariableDeclarationList(initializerWithoutParens) || ts.isAssignmentPattern(initializerWithoutParens)) { var bodyLocation = void 0; var statementsLocation = void 0; - var temp = ts.createTempVariable(/*recordTempVariable*/ undefined); + var temp = ts.createTempVariable(undefined); var statements = [ts.createForOfBindingStatement(initializerWithoutParens, temp)]; if (ts.isBlock(node.statement)) { ts.addRange(statements, node.statement.statements); @@ -64753,8 +53339,7 @@ var ts; } return ts.updateForOf(node, node.awaitModifier, ts.setTextRange(ts.createVariableDeclarationList([ ts.setTextRange(ts.createVariableDeclaration(temp), node.initializer) - ], 1 /* Let */), node.initializer), node.expression, ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), - /*multiLine*/ true), bodyLocation)); + ], 1), node.initializer), node.expression, ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation)); } return node; } @@ -64772,102 +53357,80 @@ var ts; else { statements.push(statement); } - return ts.setEmitFlags(ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), - /*multiLine*/ true), bodyLocation), 48 /* NoSourceMap */ | 384 /* NoTokenSourceMaps */); + return ts.setEmitFlags(ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation), 48 | 384); } function createDownlevelAwait(expression) { - return enclosingFunctionFlags & 1 /* Generator */ - ? ts.createYield(/*asteriskToken*/ undefined, createAwaitHelper(context, expression)) + return enclosingFunctionFlags & 1 + ? ts.createYield(undefined, createAwaitHelper(context, expression)) : ts.createAwait(expression); } function transformForAwaitOfStatement(node, outermostLabeledStatement) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); - var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(/*recordTempVariable*/ undefined); - var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(/*recordTempVariable*/ undefined); + var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined); + var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(undefined); var errorRecord = ts.createUniqueName("e"); var catchVariable = ts.getGeneratedNameForNode(errorRecord); - var returnMethod = ts.createTempVariable(/*recordTempVariable*/ undefined); - var callValues = createAsyncValuesHelper(context, expression, /*location*/ node.expression); - var callNext = ts.createCall(ts.createPropertyAccess(iterator, "next"), /*typeArguments*/ undefined, []); + var returnMethod = ts.createTempVariable(undefined); + var callValues = createAsyncValuesHelper(context, expression, node.expression); + var callNext = ts.createCall(ts.createPropertyAccess(iterator, "next"), undefined, []); var getDone = ts.createPropertyAccess(result, "done"); var getValue = ts.createPropertyAccess(result, "value"); var callReturn = ts.createFunctionCall(returnMethod, iterator, []); hoistVariableDeclaration(errorRecord); hoistVariableDeclaration(returnMethod); - var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor( - /*initializer*/ ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ - ts.setTextRange(ts.createVariableDeclaration(iterator, /*type*/ undefined, callValues), node.expression), + var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ + ts.setTextRange(ts.createVariableDeclaration(iterator, undefined, callValues), node.expression), ts.createVariableDeclaration(result) - ]), node.expression), 2097152 /* NoHoisting */), - /*condition*/ ts.createComma(ts.createAssignment(result, createDownlevelAwait(callNext)), ts.createLogicalNot(getDone)), - /*incrementor*/ undefined, - /*statement*/ convertForOfStatementHead(node, getValue)), - /*location*/ node), 256 /* NoTokenTrailingSourceMaps */); + ]), node.expression), 2097152), ts.createComma(ts.createAssignment(result, createDownlevelAwait(callNext)), ts.createLogicalNot(getDone)), undefined, convertForOfStatementHead(node, getValue)), node), 256); return ts.createTry(ts.createBlock([ ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement) ]), ts.createCatchClause(ts.createVariableDeclaration(catchVariable), ts.setEmitFlags(ts.createBlock([ ts.createStatement(ts.createAssignment(errorRecord, ts.createObjectLiteral([ ts.createPropertyAssignment("error", catchVariable) ]))) - ]), 1 /* SingleLine */)), ts.createBlock([ - ts.createTry( - /*tryBlock*/ ts.createBlock([ - ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(getDone)), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(createDownlevelAwait(callReturn))), 1 /* SingleLine */) - ]), - /*catchClause*/ undefined, - /*finallyBlock*/ ts.setEmitFlags(ts.createBlock([ - ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1 /* SingleLine */) - ]), 1 /* SingleLine */)) + ]), 1)), ts.createBlock([ + ts.createTry(ts.createBlock([ + ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(getDone)), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(createDownlevelAwait(callReturn))), 1) + ]), undefined, ts.setEmitFlags(ts.createBlock([ + ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1) + ]), 1)) ])); } 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), - /*questionToken*/ undefined, - /*type*/ undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); + if (node.transformFlags & 1048576) { + return ts.updateParameter(node, undefined, undefined, node.dotDotDotToken, ts.getGeneratedNameForNode(node), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); } return ts.visitEachChild(node, visitor, context); } function visitConstructorDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; - enclosingFunctionFlags = 0 /* Normal */; - var updated = ts.updateConstructor(node, - /*decorators*/ undefined, node.modifiers, ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node)); + enclosingFunctionFlags = 0; + var updated = ts.updateConstructor(node, undefined, node.modifiers, ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function visitGetAccessorDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; - enclosingFunctionFlags = 0 /* Normal */; - var updated = ts.updateGetAccessor(node, - /*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, transformFunctionBody(node)); + enclosingFunctionFlags = 0; + var updated = ts.updateGetAccessor(node, undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), undefined, transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function visitSetAccessorDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; - enclosingFunctionFlags = 0 /* Normal */; - var updated = ts.updateSetAccessor(node, - /*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node)); + enclosingFunctionFlags = 0; + var updated = ts.updateSetAccessor(node, undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function visitMethodDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(node); - var updated = ts.updateMethod(node, - /*decorators*/ undefined, enclosingFunctionFlags & 1 /* Generator */ + var updated = ts.updateMethod(node, undefined, enclosingFunctionFlags & 1 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) - : node.modifiers, enclosingFunctionFlags & 2 /* Async */ + : node.modifiers, enclosingFunctionFlags & 2 ? undefined - : node.asteriskToken, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNode(/*questionToken*/ undefined, visitor, ts.isToken), - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ + : node.asteriskToken, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNode(undefined, visitor, ts.isToken), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; @@ -64876,14 +53439,11 @@ var ts; function visitFunctionDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(node); - var updated = ts.updateFunctionDeclaration(node, - /*decorators*/ undefined, enclosingFunctionFlags & 1 /* Generator */ + var updated = ts.updateFunctionDeclaration(node, undefined, enclosingFunctionFlags & 1 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) - : node.modifiers, enclosingFunctionFlags & 2 /* Async */ + : node.modifiers, enclosingFunctionFlags & 2 ? undefined - : node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ + : node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; @@ -64892,22 +53452,18 @@ var ts; function visitArrowFunction(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(node); - var updated = ts.updateArrowFunction(node, node.modifiers, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, node.equalsGreaterThanToken, transformFunctionBody(node)); + var updated = ts.updateArrowFunction(node, node.modifiers, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function visitFunctionExpression(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(node); - var updated = ts.updateFunctionExpression(node, enclosingFunctionFlags & 1 /* Generator */ + var updated = ts.updateFunctionExpression(node, enclosingFunctionFlags & 1 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) - : node.modifiers, enclosingFunctionFlags & 2 /* Async */ + : node.modifiers, enclosingFunctionFlags & 2 ? undefined - : node.asteriskToken, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ + : node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; @@ -64916,23 +53472,17 @@ var ts; function transformAsyncGeneratorFunctionBody(node) { resumeLexicalEnvironment(); var statements = []; - var statementOffset = ts.addPrologue(statements, node.body.statements, /*ensureUseStrict*/ false, visitor); + var statementOffset = ts.addPrologue(statements, node.body.statements, false, visitor); appendObjectRestAssignmentsIfNeeded(statements, node); - statements.push(ts.createReturn(createAsyncGeneratorHelper(context, ts.createFunctionExpression( - /*modifiers*/ undefined, ts.createToken(39 /* AsteriskToken */), node.name && ts.getGeneratedNameForNode(node.name), - /*typeParameters*/ undefined, - /*parameters*/ [], - /*type*/ undefined, ts.updateBlock(node.body, ts.visitLexicalEnvironment(node.body.statements, visitor, context, statementOffset)))))); + statements.push(ts.createReturn(createAsyncGeneratorHelper(context, ts.createFunctionExpression(undefined, ts.createToken(39), node.name && ts.getGeneratedNameForNode(node.name), undefined, [], undefined, ts.updateBlock(node.body, ts.visitLexicalEnvironment(node.body.statements, visitor, context, statementOffset)))))); ts.prependStatements(statements, endLexicalEnvironment()); var block = ts.updateBlock(node.body, statements); - // 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 */) { + if (languageVersion >= 2) { + if (resolver.getNodeCheckFlags(node) & 4096) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.advancedAsyncSuperHelper); } - else if (resolver.getNodeCheckFlags(node) & 2048 /* AsyncMethodWithSuper */) { + else if (resolver.getNodeCheckFlags(node) & 2048) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.asyncSuperHelper); } @@ -64945,12 +53495,12 @@ var ts; var statements = []; var body = ts.visitNode(node.body, visitor, ts.isConciseBody); if (ts.isBlock(body)) { - statementOffset = ts.addPrologue(statements, body.statements, /*ensureUseStrict*/ false, visitor); + statementOffset = ts.addPrologue(statements, body.statements, false, visitor); } - ts.addRange(statements, appendObjectRestAssignmentsIfNeeded(/*statements*/ undefined, node)); + ts.addRange(statements, appendObjectRestAssignmentsIfNeeded(undefined, node)); var leadingStatements = endLexicalEnvironment(); if (statementOffset > 0 || ts.some(statements) || ts.some(leadingStatements)) { - var block = ts.convertToFunctionBody(body, /*multiLine*/ true); + var block = ts.convertToFunctionBody(body, true); ts.prependStatements(statements, leadingStatements); ts.addRange(statements, block.statements.slice(statementOffset)); return ts.updateBlock(block, ts.setTextRange(ts.createNodeArray(statements), block.statements)); @@ -64960,15 +53510,12 @@ var ts; function appendObjectRestAssignmentsIfNeeded(statements, node) { for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; - if (parameter.transformFlags & 1048576 /* ContainsObjectRest */) { + if (parameter.transformFlags & 1048576) { var temp = ts.getGeneratedNameForNode(parameter); - var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1 /* ObjectRest */, temp, - /*doNotRecordTempVariablesInLine*/ false, - /*skipInitializer*/ true); + var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1, temp, false, true); if (ts.some(declarations)) { - var statement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList(declarations)); - ts.setEmitFlags(statement, 1048576 /* CustomPrologue */); + var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(declarations)); + ts.setEmitFlags(statement, 1048576); statements = ts.append(statements, statement); } } @@ -64976,33 +53523,21 @@ var ts; return statements; } function enableSubstitutionForAsyncMethodsWithSuper() { - if ((enabledSubstitutions & 1 /* AsyncMethodsWithSuper */) === 0) { - enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */; - // We need to enable substitutions for call, property access, and element access - // if we need to rewrite super calls. - context.enableSubstitution(187 /* CallExpression */); - context.enableSubstitution(185 /* PropertyAccessExpression */); - context.enableSubstitution(186 /* ElementAccessExpression */); - // We need to be notified when entering and exiting declarations that bind super. - context.enableEmitNotification(235 /* ClassDeclaration */); - context.enableEmitNotification(154 /* MethodDeclaration */); - context.enableEmitNotification(156 /* GetAccessor */); - context.enableEmitNotification(157 /* SetAccessor */); - context.enableEmitNotification(155 /* Constructor */); + if ((enabledSubstitutions & 1) === 0) { + enabledSubstitutions |= 1; + context.enableSubstitution(187); + context.enableSubstitution(185); + context.enableSubstitution(186); + context.enableEmitNotification(235); + context.enableEmitNotification(154); + context.enableEmitNotification(156); + context.enableEmitNotification(157); + context.enableEmitNotification(155); } } - /** - * Called by the printer just before a node is printed. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to be printed. - * @param emitCallback The callback used to emit the node. - */ function onEmitNode(hint, node, emitCallback) { - // If we need to support substitutions for `super` in an async method, - // we should track it here. - if (enabledSubstitutions & 1 /* AsyncMethodsWithSuper */ && isSuperContainer(node)) { - var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 /* AsyncMethodWithSuper */ | 4096 /* AsyncMethodWithSuperBinding */); + if (enabledSubstitutions & 1 && isSuperContainer(node)) { + var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096); if (superContainerFlags !== enclosingSuperContainerFlags) { var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; enclosingSuperContainerFlags = superContainerFlags; @@ -65013,38 +53548,32 @@ var ts; } previousOnEmitNode(hint, node, emitCallback); } - /** - * Hooks node substitutions. - * - * @param hint The context for the emitter. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (hint === 1 /* Expression */ && enclosingSuperContainerFlags) { + if (hint === 1 && enclosingSuperContainerFlags) { return substituteExpression(node); } return node; } function substituteExpression(node) { switch (node.kind) { - case 185 /* PropertyAccessExpression */: + case 185: return substitutePropertyAccessExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return substituteElementAccessExpression(node); - case 187 /* CallExpression */: + case 187: return substituteCallExpression(node); } return node; } function substitutePropertyAccessExpression(node) { - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node); } return node; } function substituteElementAccessExpression(node) { - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(node.argumentExpression, node); } return node; @@ -65055,8 +53584,7 @@ var ts; var argumentExpression = ts.isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); - return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [ ts.createThis() ].concat(node.arguments)); } @@ -65064,20 +53592,18 @@ var ts; } function isSuperContainer(node) { var kind = node.kind; - return kind === 235 /* ClassDeclaration */ - || kind === 155 /* Constructor */ - || kind === 154 /* MethodDeclaration */ - || kind === 156 /* GetAccessor */ - || kind === 157 /* SetAccessor */; + return kind === 235 + || kind === 155 + || kind === 154 + || kind === 156 + || kind === 157; } function createSuperAccessInAsyncMethod(argumentExpression, location) { - if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) { - return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createIdentifier("_super"), - /*typeArguments*/ undefined, [argumentExpression]), "value"), location); + if (enclosingSuperContainerFlags & 4096) { + return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), "value"), location); } else { - return ts.setTextRange(ts.createCall(ts.createIdentifier("_super"), - /*typeArguments*/ undefined, [argumentExpression]), location); + return ts.setTextRange(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), location); } } } @@ -65089,13 +53615,11 @@ var ts; 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) { - if (context.getCompilerOptions().target >= 2 /* ES2015 */) { - return ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "assign"), - /*typeArguments*/ undefined, attributesSegments); + if (context.getCompilerOptions().target >= 2) { + return ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "assign"), undefined, attributesSegments); } context.requestEmitHelper(assignHelper); - return ts.createCall(ts.getHelperName("__assign"), - /*typeArguments*/ undefined, attributesSegments); + return ts.createCall(ts.getHelperName("__assign"), undefined, attributesSegments); } ts.createAssignHelper = createAssignHelper; var awaitHelper = { @@ -65105,7 +53629,7 @@ var ts; }; function createAwaitHelper(context, expression) { context.requestEmitHelper(awaitHelper); - return ts.createCall(ts.getHelperName("__await"), /*typeArguments*/ undefined, [expression]); + return ts.createCall(ts.getHelperName("__await"), undefined, [expression]); } var asyncGeneratorHelper = { name: "typescript:asyncGenerator", @@ -65115,10 +53639,8 @@ var ts; function createAsyncGeneratorHelper(context, generatorFunc) { context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncGeneratorHelper); - // Mark this node as originally an async function - (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 /* AsyncFunctionBody */; - return ts.createCall(ts.getHelperName("__asyncGenerator"), - /*typeArguments*/ undefined, [ + (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144; + return ts.createCall(ts.getHelperName("__asyncGenerator"), undefined, [ ts.createThis(), ts.createIdentifier("arguments"), generatorFunc @@ -65132,8 +53654,7 @@ var ts; function createAsyncDelegatorHelper(context, expression, location) { context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncDelegator); - return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncDelegator"), - /*typeArguments*/ undefined, [expression]), location); + return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncDelegator"), undefined, [expression]), location); } var asyncValues = { name: "typescript:asyncValues", @@ -65142,22 +53663,15 @@ var ts; }; function createAsyncValuesHelper(context, expression, location) { context.requestEmitHelper(asyncValues); - return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncValues"), - /*typeArguments*/ undefined, [expression]), location); + return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncValues"), undefined, [expression]), location); } })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function transformJsx(context) { var compilerOptions = context.getCompilerOptions(); var currentSourceFile; return ts.chainBundle(transformSourceFile); - /** - * Transform JSX-specific syntax in a SourceFile. - * - * @param node A SourceFile node. - */ function transformSourceFile(node) { if (node.isDeclarationFile) { return node; @@ -65168,7 +53682,7 @@ var ts; return visited; } function visitor(node) { - if (node.transformFlags & 4 /* ContainsJsx */) { + if (node.transformFlags & 4) { return visitorWorker(node); } else { @@ -65177,13 +53691,13 @@ var ts; } function visitorWorker(node) { switch (node.kind) { - case 255 /* JsxElement */: - return visitJsxElement(node, /*isChild*/ false); - case 256 /* JsxSelfClosingElement */: - return visitJsxSelfClosingElement(node, /*isChild*/ false); - case 259 /* JsxFragment */: - return visitJsxFragment(node, /*isChild*/ false); - case 265 /* JsxExpression */: + case 255: + return visitJsxElement(node, false); + case 256: + return visitJsxSelfClosingElement(node, false); + case 259: + return visitJsxFragment(node, false); + case 265: return visitJsxExpression(node); default: return ts.visitEachChild(node, visitor, context); @@ -65191,65 +53705,56 @@ var ts; } function transformJsxChildToExpression(node) { switch (node.kind) { - case 10 /* JsxText */: + case 10: return visitJsxText(node); - case 265 /* JsxExpression */: + case 265: return visitJsxExpression(node); - case 255 /* JsxElement */: - return visitJsxElement(node, /*isChild*/ true); - case 256 /* JsxSelfClosingElement */: - return visitJsxSelfClosingElement(node, /*isChild*/ true); - case 259 /* JsxFragment */: - return visitJsxFragment(node, /*isChild*/ true); + case 255: + return visitJsxElement(node, true); + case 256: + return visitJsxSelfClosingElement(node, true); + case 259: + return visitJsxFragment(node, true); default: return ts.Debug.failBadSyntaxKind(node); } } function visitJsxElement(node, isChild) { - return visitJsxOpeningLikeElement(node.openingElement, node.children, isChild, /*location*/ node); + return visitJsxOpeningLikeElement(node.openingElement, node.children, isChild, node); } function visitJsxSelfClosingElement(node, isChild) { - return visitJsxOpeningLikeElement(node, /*children*/ undefined, isChild, /*location*/ node); + return visitJsxOpeningLikeElement(node, undefined, isChild, node); } function visitJsxFragment(node, isChild) { - return visitJsxOpeningFragment(node.openingFragment, node.children, isChild, /*location*/ node); + return visitJsxOpeningFragment(node.openingFragment, node.children, isChild, node); } function visitJsxOpeningLikeElement(node, children, isChild, location) { var tagName = getTagName(node); var objectProperties; var attrs = node.attributes.properties; if (attrs.length === 0) { - // When there are no attributes, React wants "null" objectProperties = ts.createNull(); } else { - // Map spans of JsxAttribute nodes into object literals and spans - // of JsxSpreadAttribute nodes into expressions. var segments = ts.flatten(ts.spanMap(attrs, ts.isJsxSpreadAttribute, function (attrs, isSpread) { return isSpread ? ts.map(attrs, transformJsxSpreadAttributeToExpression) : ts.createObjectLiteral(ts.map(attrs, transformJsxAttributeToObjectLiteralElement)); })); if (ts.isJsxSpreadAttribute(attrs[0])) { - // We must always emit at least one object literal before a spread - // argument. segments.unshift(ts.createObjectLiteral()); } - // Either emit one big object literal (no spread attribs), or - // a call to the __assign helper. objectProperties = ts.singleOrUndefined(segments); if (!objectProperties) { objectProperties = ts.createAssignHelper(context, segments); } } - var element = ts.createExpressionForJsxElement(context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, // TODO: GH#18217 - tagName, objectProperties, ts.mapDefined(children, transformJsxChildToExpression), node, location); + var element = ts.createExpressionForJsxElement(context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, tagName, objectProperties, ts.mapDefined(children, transformJsxChildToExpression), node, location); if (isChild) { ts.startOnNewLine(element); } return element; } function visitJsxOpeningFragment(node, children, isChild, location) { - var element = ts.createExpressionForJsxFragment(context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, // TODO: GH#18217 - ts.mapDefined(children, transformJsxChildToExpression), node, location); + var element = ts.createExpressionForJsxFragment(context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, ts.mapDefined(children, transformJsxChildToExpression), node, location); if (isChild) { ts.startOnNewLine(element); } @@ -65267,14 +53772,12 @@ var ts; if (node === undefined) { return ts.createTrue(); } - else if (node.kind === 9 /* StringLiteral */) { - // Always recreate the literal to escape any escape sequences or newlines which may be in the original jsx string and which - // Need to be escaped to be handled correctly in a normal string + else if (node.kind === 9) { var literal = ts.createLiteral(tryDecodeEntities(node.text) || node.text); literal.singleQuote = node.singleQuote !== undefined ? node.singleQuote : !ts.isStringDoubleQuoted(node, currentSourceFile); return ts.setTextRange(literal, node); } - else if (node.kind === 265 /* JsxExpression */) { + else if (node.kind === 265) { if (node.expression === undefined) { return ts.createTrue(); } @@ -65285,43 +53788,19 @@ var ts; } } function visitJsxText(node) { - var fixed = fixupWhitespaceAndDecodeEntities(ts.getTextOfNode(node, /*includeTrivia*/ true)); + var fixed = fixupWhitespaceAndDecodeEntities(ts.getTextOfNode(node, true)); return fixed === undefined ? undefined : ts.createLiteral(fixed); } - /** - * JSX trims whitespace at the end and beginning of lines, except that the - * start/end of a tag is considered a start/end of a line only if that line is - * on the same line as the closing tag. See examples in - * tests/cases/conformance/jsx/tsxReactEmitWhitespace.tsx - * See also https://www.w3.org/TR/html4/struct/text.html#h-9.1 and https://www.w3.org/TR/CSS2/text.html#white-space-model - * - * An equivalent algorithm would be: - * - If there is only one line, return it. - * - If there is only whitespace (but multiple lines), return `undefined`. - * - Split the text into lines. - * - 'trimRight' the first line, 'trimLeft' the last line, 'trim' middle lines. - * - Decode entities on each line (individually). - * - Remove empty lines and join the rest with " ". - */ function fixupWhitespaceAndDecodeEntities(text) { var acc; - // First non-whitespace character on this line. var firstNonWhitespace = 0; - // Last non-whitespace character on this line. var lastNonWhitespace = -1; - // These initial values are special because the first line is: - // firstNonWhitespace = 0 to indicate that we want leading whitsepace, - // but lastNonWhitespace = -1 as a special flag to indicate that we *don't* include the line if it's all whitespace. for (var i = 0; i < text.length; i++) { var c = text.charCodeAt(i); if (ts.isLineBreak(c)) { - // If we've seen any non-whitespace characters on this line, add the 'trim' of the line. - // (lastNonWhitespace === -1 is a special flag to detect whether the first line is all whitespace.) if (firstNonWhitespace !== -1 && lastNonWhitespace !== -1) { acc = addLineOfJsxText(acc, text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1)); } - // Reset firstNonWhitespace for the next line. - // Don't bother to reset lastNonWhitespace because we ignore it if firstNonWhitespace = -1. firstNonWhitespace = -1; } else if (!ts.isWhiteSpaceSingleLine(c)) { @@ -65332,21 +53811,13 @@ var ts; } } return firstNonWhitespace !== -1 - // Last line had a non-whitespace character. Emit the 'trimLeft', meaning keep trailing whitespace. ? addLineOfJsxText(acc, text.substr(firstNonWhitespace)) - // Last line was all whitespace, so ignore it : acc; } function addLineOfJsxText(acc, trimmedLine) { - // We do not escape the string here as that is handled by the printer - // when it emits the literal. We do, however, need to decode JSX entities. var decoded = decodeEntities(trimmedLine); return acc === undefined ? decoded : acc + " " + decoded; } - /** - * Replace entities like " ", "{", and "�" with the characters they encode. - * See https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references - */ function decodeEntities(text) { return text.replace(/&((#((\d+)|x([\da-fA-F]+)))|(\w+));/g, function (match, _all, _number, _digits, decimal, hex, word) { if (decimal) { @@ -65357,18 +53828,16 @@ var ts; } else { var ch = entities.get(word); - // If this is not a valid entity, then just use `match` (replace it with itself, i.e. don't replace) return ch ? String.fromCharCode(ch) : match; } }); } - /** Like `decodeEntities` but returns `undefined` if there were no entities to decode. */ function tryDecodeEntities(text) { var decoded = decodeEntities(text); return decoded === text ? undefined : decoded; } function getTagName(node) { - if (node.kind === 255 /* JsxElement */) { + if (node.kind === 255) { return getTagName(node.openingElement); } else { @@ -65381,11 +53850,6 @@ var ts; } } } - /** - * Emit an attribute name, which is quoted if it needs to be quoted. Because - * these emit into an object literal property name, we don't need to be worried - * about keywords, just non-identifier characters - */ function getAttributeName(node) { var name = node.name; var text = ts.idText(name); @@ -65657,7 +54121,6 @@ var ts; diams: 0x2666 }); })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function transformES2016(context) { @@ -65670,11 +54133,11 @@ var ts; return ts.visitEachChild(node, visitor, context); } function visitor(node) { - if ((node.transformFlags & 32 /* ContainsES2016 */) === 0) { + if ((node.transformFlags & 32) === 0) { return node; } switch (node.kind) { - case 200 /* BinaryExpression */: + case 200: return visitBinaryExpression(node); default: return ts.visitEachChild(node, visitor, context); @@ -65682,9 +54145,9 @@ var ts; } function visitBinaryExpression(node) { switch (node.operatorToken.kind) { - case 62 /* AsteriskAsteriskEqualsToken */: + case 62: return visitExponentiationAssignmentExpression(node); - case 40 /* AsteriskAsteriskToken */: + case 40: return visitExponentiationExpression(node); default: return ts.visitEachChild(node, visitor, context); @@ -65696,155 +54159,32 @@ var ts; var left = ts.visitNode(node.left, visitor, ts.isExpression); var right = ts.visitNode(node.right, visitor, ts.isExpression); 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.setTextRange(ts.createElementAccess(ts.setTextRange(ts.createAssignment(expressionTemp, left.expression), left.expression), ts.setTextRange(ts.createAssignment(argumentExpressionTemp, left.argumentExpression), left.argumentExpression)), left); value = ts.setTextRange(ts.createElementAccess(expressionTemp, argumentExpressionTemp), 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.setTextRange(ts.createPropertyAccess(ts.setTextRange(ts.createAssignment(expressionTemp, left.expression), left.expression), left.name), left); value = ts.setTextRange(ts.createPropertyAccess(expressionTemp, left.name), left); } else { - // Transforms `a **= b` into `a = Math.pow(a, b)` target = left; value = left; } - return ts.setTextRange(ts.createAssignment(target, ts.createMathPow(value, right, /*location*/ node)), node); + return ts.setTextRange(ts.createAssignment(target, ts.createMathPow(value, right, node)), 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); + return ts.createMathPow(left, right, node); } } ts.transformES2016 = transformES2016; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { - var ES2015SubstitutionFlags; - (function (ES2015SubstitutionFlags) { - /** Enables substitutions for captured `this` */ - ES2015SubstitutionFlags[ES2015SubstitutionFlags["CapturedThis"] = 1] = "CapturedThis"; - /** Enables substitutions for block-scoped bindings. */ - ES2015SubstitutionFlags[ES2015SubstitutionFlags["BlockScopedBindings"] = 2] = "BlockScopedBindings"; - })(ES2015SubstitutionFlags || (ES2015SubstitutionFlags = {})); - var CopyDirection; - (function (CopyDirection) { - CopyDirection[CopyDirection["ToOriginal"] = 0] = "ToOriginal"; - CopyDirection[CopyDirection["ToOutParameter"] = 1] = "ToOutParameter"; - })(CopyDirection || (CopyDirection = {})); - var Jump; - (function (Jump) { - Jump[Jump["Break"] = 2] = "Break"; - Jump[Jump["Continue"] = 4] = "Continue"; - Jump[Jump["Return"] = 8] = "Return"; - })(Jump || (Jump = {})); - var SuperCaptureResult; - (function (SuperCaptureResult) { - /** - * A capture may have been added for calls to 'super', but - * the caller should emit subsequent statements normally. - */ - SuperCaptureResult[SuperCaptureResult["NoReplacement"] = 0] = "NoReplacement"; - /** - * A call to 'super()' got replaced with a capturing statement like: - * - * var _this = _super.call(...) || this; - * - * Callers should skip the current statement. - */ - SuperCaptureResult[SuperCaptureResult["ReplaceSuperCapture"] = 1] = "ReplaceSuperCapture"; - /** - * A call to 'super()' got replaced with a capturing statement like: - * - * return _super.call(...) || this; - * - * Callers should skip the current statement and avoid any returns of '_this'. - */ - SuperCaptureResult[SuperCaptureResult["ReplaceWithReturn"] = 2] = "ReplaceWithReturn"; - })(SuperCaptureResult || (SuperCaptureResult = {})); - // Facts we track as we traverse the tree - var HierarchyFacts; - (function (HierarchyFacts) { - HierarchyFacts[HierarchyFacts["None"] = 0] = "None"; - // - // Ancestor facts - // - HierarchyFacts[HierarchyFacts["Function"] = 1] = "Function"; - HierarchyFacts[HierarchyFacts["ArrowFunction"] = 2] = "ArrowFunction"; - HierarchyFacts[HierarchyFacts["AsyncFunctionBody"] = 4] = "AsyncFunctionBody"; - HierarchyFacts[HierarchyFacts["NonStaticClassElement"] = 8] = "NonStaticClassElement"; - HierarchyFacts[HierarchyFacts["CapturesThis"] = 16] = "CapturesThis"; - HierarchyFacts[HierarchyFacts["ExportedVariableStatement"] = 32] = "ExportedVariableStatement"; - HierarchyFacts[HierarchyFacts["TopLevel"] = 64] = "TopLevel"; - HierarchyFacts[HierarchyFacts["Block"] = 128] = "Block"; - HierarchyFacts[HierarchyFacts["IterationStatement"] = 256] = "IterationStatement"; - HierarchyFacts[HierarchyFacts["IterationStatementBlock"] = 512] = "IterationStatementBlock"; - HierarchyFacts[HierarchyFacts["ForStatement"] = 1024] = "ForStatement"; - HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 2048] = "ForInOrForOfStatement"; - HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 4096] = "ConstructorWithCapturedSuper"; - HierarchyFacts[HierarchyFacts["ComputedPropertyName"] = 8192] = "ComputedPropertyName"; - // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below. - // - // Ancestor masks - // - HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask"; - // We are always in *some* kind of block scope, but only specific block-scope containers are - // top-level or Blocks. - HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes"; - HierarchyFacts[HierarchyFacts["BlockScopeExcludes"] = 4032] = "BlockScopeExcludes"; - // A source file is a top-level block scope. - HierarchyFacts[HierarchyFacts["SourceFileIncludes"] = 64] = "SourceFileIncludes"; - HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 3968] = "SourceFileExcludes"; - // Functions, methods, and accessors are both new lexical scopes and new block scopes. - HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes"; - HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes"; - HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes"; - HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes"; - // Arrow functions are lexically scoped to their container, but are new block scopes. - HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes"; - HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 16256] = "ArrowFunctionExcludes"; - // Constructors are both new lexical scopes and new block scopes. Constructors are also - // always considered non-static members of a class. - HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes"; - HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes"; - // 'do' and 'while' statements are not block scopes. We track that the subtree is contained - // within an IterationStatement to indicate whether the embedded statement is an - // IterationStatementBlock. - HierarchyFacts[HierarchyFacts["DoOrWhileStatementIncludes"] = 256] = "DoOrWhileStatementIncludes"; - HierarchyFacts[HierarchyFacts["DoOrWhileStatementExcludes"] = 0] = "DoOrWhileStatementExcludes"; - // 'for' statements are new block scopes and have special handling for 'let' declarations. - HierarchyFacts[HierarchyFacts["ForStatementIncludes"] = 1280] = "ForStatementIncludes"; - HierarchyFacts[HierarchyFacts["ForStatementExcludes"] = 3008] = "ForStatementExcludes"; - // 'for-in' and 'for-of' statements are new block scopes and have special handling for - // 'let' declarations. - HierarchyFacts[HierarchyFacts["ForInOrForOfStatementIncludes"] = 2304] = "ForInOrForOfStatementIncludes"; - HierarchyFacts[HierarchyFacts["ForInOrForOfStatementExcludes"] = 1984] = "ForInOrForOfStatementExcludes"; - // Blocks (other than function bodies) are new block scopes. - HierarchyFacts[HierarchyFacts["BlockIncludes"] = 128] = "BlockIncludes"; - HierarchyFacts[HierarchyFacts["BlockExcludes"] = 3904] = "BlockExcludes"; - HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes"; - HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 4032] = "IterationStatementBlockExcludes"; - // Computed property names track subtree flags differently than their containing members. - HierarchyFacts[HierarchyFacts["ComputedPropertyNameIncludes"] = 8192] = "ComputedPropertyNameIncludes"; - HierarchyFacts[HierarchyFacts["ComputedPropertyNameExcludes"] = 0] = "ComputedPropertyNameExcludes"; - // - // Subtree facts - // - HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget"; - HierarchyFacts[HierarchyFacts["NewTargetInComputedPropertyName"] = 32768] = "NewTargetInComputedPropertyName"; - // - // Subtree masks - // - HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask"; - HierarchyFacts[HierarchyFacts["PropagateNewTargetMask"] = 49152] = "PropagateNewTargetMask"; - })(HierarchyFacts || (HierarchyFacts = {})); function transformES2015(context) { var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var compilerOptions = context.getCompilerOptions(); @@ -65860,15 +54200,7 @@ var ts; function recordTaggedTemplateString(temp) { taggedTemplateStringDeclarations = ts.append(taggedTemplateStringDeclarations, ts.createVariableDeclaration(temp)); } - /** - * Used to track if we are emitting body of the converted loop - */ var convertedLoopState; - /** - * Keeps track of whether substitutions have been enabled for specific cases. - * They are persisted between each SourceFile transformation and should not - * be reset. - */ var enabledSubstitutions; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { @@ -65882,40 +54214,28 @@ var ts; currentSourceFile = undefined; currentText = undefined; taggedTemplateStringDeclarations = undefined; - hierarchyFacts = 0 /* None */; + hierarchyFacts = 0; return visited; } - /** - * Sets the `HierarchyFacts` for this node prior to visiting this node's subtree, returning the facts set prior to modification. - * @param excludeFacts The existing `HierarchyFacts` to reset before visiting the subtree. - * @param includeFacts The new `HierarchyFacts` to set before visiting the subtree. - */ function enterSubtree(excludeFacts, includeFacts) { var ancestorFacts = hierarchyFacts; - hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */; + hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383; return ancestorFacts; } - /** - * Restores the `HierarchyFacts` for this node's ancestor after visiting this node's - * subtree, propagating specific facts from the subtree. - * @param ancestorFacts The `HierarchyFacts` of the ancestor to restore after visiting the subtree. - * @param excludeFacts The existing `HierarchyFacts` of the subtree that should not be propagated. - * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated. - */ function exitSubtree(ancestorFacts, excludeFacts, includeFacts) { - hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts; + hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 | ancestorFacts; } function isReturnVoidStatementInConstructorWithCapturedSuper(node) { - return (hierarchyFacts & 4096 /* ConstructorWithCapturedSuper */) !== 0 - && node.kind === 225 /* ReturnStatement */ + return (hierarchyFacts & 4096) !== 0 + && node.kind === 225 && !node.expression; } function shouldVisitNode(node) { - return (node.transformFlags & 128 /* ContainsES2015 */) !== 0 + return (node.transformFlags & 128) !== 0 || convertedLoopState !== undefined - || (hierarchyFacts & 4096 /* ConstructorWithCapturedSuper */ && (ts.isStatement(node) || (node.kind === 213 /* Block */))) - || (ts.isIterationStatement(node, /*lookInLabeledStatements*/ false) && shouldConvertIterationStatementBody(node)) - || (ts.getEmitFlags(node) & 33554432 /* TypeScriptClassWrapper */) !== 0; + || (hierarchyFacts & 4096 && (ts.isStatement(node) || (node.kind === 213))) + || (ts.isIterationStatement(node, false) && shouldConvertIterationStatementBody(node)) + || (ts.getEmitFlags(node) & 33554432) !== 0; } function visitor(node) { if (shouldVisitNode(node)) { @@ -65927,134 +54247,133 @@ var ts; } function functionBodyVisitor(node) { if (shouldVisitNode(node)) { - return visitBlock(node, /*isFunctionBody*/ true); + return visitBlock(node, true); } return node; } function callExpressionVisitor(node) { - if (node.kind === 97 /* SuperKeyword */) { - return visitSuperKeyword(/*isExpressionOfCall*/ true); + if (node.kind === 97) { + return visitSuperKeyword(true); } return visitor(node); } function visitJavaScript(node) { switch (node.kind) { - case 115 /* StaticKeyword */: - return undefined; // elide static keyword - case 235 /* ClassDeclaration */: + case 115: + return undefined; + case 235: return visitClassDeclaration(node); - case 205 /* ClassExpression */: + case 205: return visitClassExpression(node); - case 149 /* Parameter */: + case 149: return visitParameter(node); - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 193 /* ArrowFunction */: + case 193: return visitArrowFunction(node); - case 192 /* FunctionExpression */: + case 192: return visitFunctionExpression(node); - case 232 /* VariableDeclaration */: + case 232: return visitVariableDeclaration(node); - case 71 /* Identifier */: + case 71: return visitIdentifier(node); - case 233 /* VariableDeclarationList */: + case 233: return visitVariableDeclarationList(node); - case 227 /* SwitchStatement */: + case 227: return visitSwitchStatement(node); - case 241 /* CaseBlock */: + case 241: return visitCaseBlock(node); - case 213 /* Block */: - return visitBlock(node, /*isFunctionBody*/ false); - case 224 /* BreakStatement */: - case 223 /* ContinueStatement */: + case 213: + return visitBlock(node, false); + case 224: + case 223: return visitBreakOrContinueStatement(node); - case 228 /* LabeledStatement */: + case 228: return visitLabeledStatement(node); - case 218 /* DoStatement */: - case 219 /* WhileStatement */: - return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined); - case 220 /* ForStatement */: - return visitForStatement(node, /*outermostLabeledStatement*/ undefined); - case 221 /* ForInStatement */: - return visitForInStatement(node, /*outermostLabeledStatement*/ undefined); - case 222 /* ForOfStatement */: - return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined); - case 216 /* ExpressionStatement */: + case 218: + case 219: + return visitDoOrWhileStatement(node, undefined); + case 220: + return visitForStatement(node, undefined); + case 221: + return visitForInStatement(node, undefined); + case 222: + return visitForOfStatement(node, undefined); + case 216: return visitExpressionStatement(node); - case 184 /* ObjectLiteralExpression */: + case 184: return visitObjectLiteralExpression(node); - case 269 /* CatchClause */: + case 269: return visitCatchClause(node); - case 271 /* ShorthandPropertyAssignment */: + case 271: return visitShorthandPropertyAssignment(node); - case 147 /* ComputedPropertyName */: + case 147: return visitComputedPropertyName(node); - case 183 /* ArrayLiteralExpression */: + case 183: return visitArrayLiteralExpression(node); - case 187 /* CallExpression */: + case 187: return visitCallExpression(node); - case 188 /* NewExpression */: + case 188: return visitNewExpression(node); - case 191 /* ParenthesizedExpression */: - return visitParenthesizedExpression(node, /*needsDestructuringValue*/ true); - case 200 /* BinaryExpression */: - return visitBinaryExpression(node, /*needsDestructuringValue*/ true); - case 13 /* NoSubstitutionTemplateLiteral */: - case 14 /* TemplateHead */: - case 15 /* TemplateMiddle */: - case 16 /* TemplateTail */: + case 191: + return visitParenthesizedExpression(node, true); + case 200: + return visitBinaryExpression(node, true); + case 13: + case 14: + case 15: + case 16: return visitTemplateLiteral(node); - case 9 /* StringLiteral */: + case 9: return visitStringLiteral(node); - case 8 /* NumericLiteral */: + case 8: return visitNumericLiteral(node); - case 189 /* TaggedTemplateExpression */: + case 189: return visitTaggedTemplateExpression(node); - case 202 /* TemplateExpression */: + case 202: return visitTemplateExpression(node); - case 203 /* YieldExpression */: + case 203: return visitYieldExpression(node); - case 204 /* SpreadElement */: + case 204: return visitSpreadElement(node); - case 97 /* SuperKeyword */: - return visitSuperKeyword(/*isExpressionOfCall*/ false); - case 99 /* ThisKeyword */: + case 97: + return visitSuperKeyword(false); + case 99: return visitThisKeyword(node); - case 210 /* MetaProperty */: + case 210: return visitMetaProperty(node); - case 154 /* MethodDeclaration */: + case 154: return visitMethodDeclaration(node); - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return visitAccessorDeclaration(node); - case 214 /* VariableStatement */: + case 214: return visitVariableStatement(node); - case 225 /* ReturnStatement */: + case 225: return visitReturnStatement(node); default: return ts.visitEachChild(node, visitor, context); } } function visitSourceFile(node) { - var ancestorFacts = enterSubtree(3968 /* SourceFileExcludes */, 64 /* SourceFileIncludes */); + var ancestorFacts = enterSubtree(3968, 64); var statements = []; startLexicalEnvironment(); - var statementOffset = ts.addStandardPrologue(statements, node.statements, /*ensureUseStrict*/ false); + var statementOffset = ts.addStandardPrologue(statements, node.statements, false); addCaptureThisForNodeIfNeeded(statements, node); statementOffset = ts.addCustomPrologue(statements, node.statements, statementOffset, visitor); ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset)); if (taggedTemplateStringDeclarations) { - statements.push(ts.createVariableStatement(/*modifiers*/ undefined, ts.createVariableDeclarationList(taggedTemplateStringDeclarations))); + statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(taggedTemplateStringDeclarations))); } ts.prependStatements(statements, endLexicalEnvironment()); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements)); } function visitSwitchStatement(node) { if (convertedLoopState !== undefined) { var savedAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; - // for switch statement allow only non-labeled break - convertedLoopState.allowedNonLabeledJumps |= 2 /* Break */; + convertedLoopState.allowedNonLabeledJumps |= 2; var result = ts.visitEachChild(node, visitor, context); convertedLoopState.allowedNonLabeledJumps = savedAllowedNonLabeledJumps; return result; @@ -66062,9 +54381,9 @@ var ts; return ts.visitEachChild(node, visitor, context); } function visitCaseBlock(node) { - var ancestorFacts = enterSubtree(4032 /* BlockScopeExcludes */, 0 /* BlockScopeIncludes */); + var ancestorFacts = enterSubtree(4032, 0); var updated = ts.visitEachChild(node, visitor, context); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } function returnCapturedThis(node) { @@ -66072,7 +54391,7 @@ var ts; } function visitReturnStatement(node) { if (convertedLoopState) { - convertedLoopState.nonLocalJumps |= 8 /* Return */; + convertedLoopState.nonLocalJumps |= 8; if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) { node = returnCapturedThis(node); } @@ -66089,8 +54408,7 @@ var ts; } function visitThisKeyword(node) { if (convertedLoopState) { - if (hierarchyFacts & 2 /* ArrowFunction */) { - // if the enclosing function is an ArrowFunction then we use the captured 'this' keyword. + if (hierarchyFacts & 2) { convertedLoopState.containsLexicalThis = true; return node; } @@ -66112,35 +54430,30 @@ var ts; } function visitBreakOrContinueStatement(node) { if (convertedLoopState) { - // check if we can emit break/continue as is - // it is possible if either - // - break/continue is labeled and label is located inside the converted loop - // - break/continue is non-labeled and located in non-converted loop/switch statement - var jump = node.kind === 224 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; + var jump = node.kind === 224 ? 2 : 4; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { var labelMarker = void 0; var label = node.label; if (!label) { - if (node.kind === 224 /* BreakStatement */) { - convertedLoopState.nonLocalJumps |= 2 /* Break */; + if (node.kind === 224) { + convertedLoopState.nonLocalJumps |= 2; labelMarker = "break"; } else { - convertedLoopState.nonLocalJumps |= 4 /* Continue */; - // note: return value is emitted only to simplify debugging, call to converted loop body does not do any dispatching on it. + convertedLoopState.nonLocalJumps |= 4; labelMarker = "continue"; } } else { - if (node.kind === 224 /* BreakStatement */) { + if (node.kind === 224) { labelMarker = "break-" + label.escapedText; - setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker); + setLabeledJump(convertedLoopState, true, ts.idText(label), labelMarker); } else { labelMarker = "continue-" + label.escapedText; - setLabeledJump(convertedLoopState, /*isBreak*/ false, ts.idText(label), labelMarker); + setLabeledJump(convertedLoopState, false, ts.idText(label), labelMarker); } } var returnExpression = ts.createLiteral(labelMarker); @@ -66148,305 +54461,167 @@ var ts; var outParams = convertedLoopState.loopOutParameters; var expr = void 0; for (var i = 0; i < outParams.length; i++) { - var copyExpr = copyOutParameter(outParams[i], 1 /* ToOutParameter */); + var copyExpr = copyOutParameter(outParams[i], 1); if (i === 0) { expr = copyExpr; } else { - expr = ts.createBinary(expr, 26 /* CommaToken */, copyExpr); + expr = ts.createBinary(expr, 26, copyExpr); } } - returnExpression = ts.createBinary(expr, 26 /* CommaToken */, returnExpression); + returnExpression = ts.createBinary(expr, 26, returnExpression); } return ts.createReturn(returnExpression); } } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a ClassDeclaration and transforms it into a variable statement. - * - * @param node A ClassDeclaration node. - */ function visitClassDeclaration(node) { - // [source] - // class C { } - // - // [output] - // var C = (function () { - // function C() { - // } - // return C; - // }()); - var variable = ts.createVariableDeclaration(ts.getLocalName(node, /*allowComments*/ true), - /*type*/ undefined, transformClassLikeDeclarationToExpression(node)); + var variable = ts.createVariableDeclaration(ts.getLocalName(node, true), undefined, transformClassLikeDeclarationToExpression(node)); ts.setOriginalNode(variable, node); var statements = []; - var statement = ts.createVariableStatement(/*modifiers*/ undefined, ts.createVariableDeclarationList([variable])); + var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([variable])); ts.setOriginalNode(statement, node); ts.setTextRange(statement, node); ts.startOnNewLine(statement); statements.push(statement); - // Add an `export default` statement for default exports (for `--target es5 --module es6`) - if (ts.hasModifier(node, 1 /* Export */)) { - var exportStatement = ts.hasModifier(node, 512 /* Default */) + if (ts.hasModifier(node, 1)) { + var exportStatement = ts.hasModifier(node, 512) ? ts.createExportDefault(ts.getLocalName(node)) : ts.createExternalModuleExport(ts.getLocalName(node)); ts.setOriginalNode(exportStatement, statement); statements.push(exportStatement); } var emitFlags = ts.getEmitFlags(node); - if ((emitFlags & 4194304 /* HasEndOfDeclarationMarker */) === 0) { - // Add a DeclarationMarker as a marker for the end of the declaration + if ((emitFlags & 4194304) === 0) { statements.push(ts.createEndOfDeclarationMarker(node)); - ts.setEmitFlags(statement, emitFlags | 4194304 /* HasEndOfDeclarationMarker */); + ts.setEmitFlags(statement, emitFlags | 4194304); } return ts.singleOrMany(statements); } - /** - * Visits a ClassExpression and transforms it into an expression. - * - * @param node A ClassExpression node. - */ function visitClassExpression(node) { - // [source] - // C = class { } - // - // [output] - // C = (function () { - // function class_1() { - // } - // return class_1; - // }()) return transformClassLikeDeclarationToExpression(node); } - /** - * Transforms a ClassExpression or ClassDeclaration into an expression. - * - * @param node A ClassExpression or ClassDeclaration node. - */ function transformClassLikeDeclarationToExpression(node) { - // [source] - // class C extends D { - // constructor() {} - // method() {} - // get prop() {} - // set prop(v) {} - // } - // - // [output] - // (function (_super) { - // __extends(C, _super); - // function C() { - // } - // C.prototype.method = function () {} - // Object.defineProperty(C.prototype, "prop", { - // get: function() {}, - // set: function() {}, - // enumerable: true, - // configurable: true - // }); - // return C; - // }(D)) if (node.name) { enableSubstitutionsForBlockScopedBindings(); } var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node); - var classFunction = ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, extendsClauseElement ? [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, ts.createFileLevelUniqueName("_super"))] : [], - /*type*/ undefined, transformClassBody(node, extendsClauseElement)); - // 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. - ts.setEmitFlags(classFunction, (ts.getEmitFlags(node) & 65536 /* Indented */) | 524288 /* ReuseTempVariableScope */); - // "inner" and "outer" below are added purely to preserve source map locations from - // the old emitter + var classFunction = ts.createFunctionExpression(undefined, undefined, undefined, undefined, extendsClauseElement ? [ts.createParameter(undefined, undefined, undefined, ts.createFileLevelUniqueName("_super"))] : [], undefined, transformClassBody(node, extendsClauseElement)); + ts.setEmitFlags(classFunction, (ts.getEmitFlags(node) & 65536) | 524288); var inner = ts.createPartiallyEmittedExpression(classFunction); inner.end = node.end; - ts.setEmitFlags(inner, 1536 /* NoComments */); + ts.setEmitFlags(inner, 1536); var outer = ts.createPartiallyEmittedExpression(inner); outer.end = ts.skipTrivia(currentText, node.pos); - ts.setEmitFlags(outer, 1536 /* NoComments */); - var result = ts.createParen(ts.createCall(outer, - /*typeArguments*/ undefined, extendsClauseElement + ts.setEmitFlags(outer, 1536); + var result = ts.createParen(ts.createCall(outer, undefined, extendsClauseElement ? [ts.visitNode(extendsClauseElement.expression, visitor, ts.isExpression)] : [])); - ts.addSyntheticLeadingComment(result, 3 /* MultiLineCommentTrivia */, "* @class "); + ts.addSyntheticLeadingComment(result, 3, "* @class "); return result; } - /** - * Transforms a ClassExpression or ClassDeclaration into a function body. - * - * @param node A ClassExpression or ClassDeclaration node. - * @param extendsClauseElement The expression for the class `extends` clause. - */ function transformClassBody(node, extendsClauseElement) { var statements = []; startLexicalEnvironment(); addExtendsHelperIfNeeded(statements, node, extendsClauseElement); addConstructor(statements, node, extendsClauseElement); addClassMembers(statements, node); - // Create a synthetic text range for the return statement. - var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentText, node.members.end), 18 /* CloseBraceToken */); + var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentText, node.members.end), 18); var localName = ts.getInternalName(node); - // The following partially-emitted expression exists purely to align our sourcemap - // emit with the original emitter. var outer = ts.createPartiallyEmittedExpression(localName); outer.end = closingBraceLocation.end; - ts.setEmitFlags(outer, 1536 /* NoComments */); + ts.setEmitFlags(outer, 1536); var statement = ts.createReturn(outer); statement.pos = closingBraceLocation.pos; - ts.setEmitFlags(statement, 1536 /* NoComments */ | 384 /* NoTokenSourceMaps */); + ts.setEmitFlags(statement, 1536 | 384); statements.push(statement); ts.prependStatements(statements, endLexicalEnvironment()); - var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), /*location*/ node.members), /*multiLine*/ true); - ts.setEmitFlags(block, 1536 /* NoComments */); + var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true); + ts.setEmitFlags(block, 1536); return block; } - /** - * Adds a call to the `__extends` helper if needed for a class. - * - * @param statements The statements of the class body function. - * @param node The ClassExpression or ClassDeclaration node. - * @param extendsClauseElement The expression for the class `extends` clause. - */ function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) { if (extendsClauseElement) { - statements.push(ts.setTextRange(ts.createStatement(createExtendsHelper(context, ts.getInternalName(node))), - /*location*/ extendsClauseElement)); + statements.push(ts.setTextRange(ts.createStatement(createExtendsHelper(context, ts.getInternalName(node))), extendsClauseElement)); } } - /** - * Adds the constructor of the class to a class body function. - * - * @param statements The statements of the class body function. - * @param node The ClassExpression or ClassDeclaration node. - * @param extendsClauseElement The expression for the class `extends` clause. - */ function addConstructor(statements, node, extendsClauseElement) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */); + var ancestorFacts = enterSubtree(16278, 73); var constructor = ts.getFirstConstructorWithBody(node); var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined); - var constructorFunction = ts.createFunctionDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, ts.getInternalName(node), - /*typeParameters*/ undefined, transformConstructorParameters(constructor, hasSynthesizedSuper), - /*type*/ undefined, transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper)); + var constructorFunction = ts.createFunctionDeclaration(undefined, undefined, undefined, ts.getInternalName(node), undefined, transformConstructorParameters(constructor, hasSynthesizedSuper), undefined, transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper)); ts.setTextRange(constructorFunction, constructor || node); if (extendsClauseElement) { - ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */); + ts.setEmitFlags(constructorFunction, 8); } statements.push(constructorFunction); - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, 0 /* None */); + exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; } - /** - * Transforms the parameters of the constructor declaration of a class. - * - * @param constructor The constructor for the class. - * @param hasSynthesizedSuper A value indicating whether the constructor starts with a - * synthesized `super` call. - */ function transformConstructorParameters(constructor, hasSynthesizedSuper) { - // If the TypeScript transformer needed to synthesize a constructor for property - // initializers, it would have also added a synthetic `...args` parameter and - // `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. return ts.visitParameterList(constructor && !hasSynthesizedSuper ? constructor.parameters : undefined, visitor, context) || []; } - /** - * Transforms the body of a constructor declaration of a class. - * - * @param constructor The constructor for the class. - * @param node The node which contains the constructor. - * @param extendsClauseElement The expression for the class `extends` clause. - * @param hasSynthesizedSuper A value indicating whether the constructor starts with a - * synthesized `super` call. - */ function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) { var statements = []; 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 = 0; } else if (constructor) { - statementOffset = ts.addStandardPrologue(statements, constructor.body.statements, /*ensureUseStrict*/ false); + statementOffset = ts.addStandardPrologue(statements, constructor.body.statements, false); } if (constructor) { addDefaultValueAssignmentsIfNeeded(statements, constructor); addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper); if (!hasSynthesizedSuper) { - // If no super call has been synthesized, emit custom prologue directives. statementOffset = ts.addCustomPrologue(statements, constructor.body.statements, statementOffset, visitor); } ts.Debug.assert(statementOffset >= 0, "statementOffset not initialized correctly!"); } - // determine whether the class is known syntactically to be a derived class (e.g. a - // class that extends a value that is not syntactically known to be `null`). - var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95 /* NullKeyword */; + var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95; var superCaptureStatus = declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, constructor, isDerivedClass, hasSynthesizedSuper, statementOffset); - // The last statement expression was replaced. Skip it. - if (superCaptureStatus === 1 /* ReplaceSuperCapture */ || superCaptureStatus === 2 /* ReplaceWithReturn */) { + if (superCaptureStatus === 1 || superCaptureStatus === 2) { statementOffset++; } if (constructor) { - if (superCaptureStatus === 1 /* ReplaceSuperCapture */) { - hierarchyFacts |= 4096 /* ConstructorWithCapturedSuper */; + if (superCaptureStatus === 1) { + hierarchyFacts |= 4096; } - ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, /*start*/ statementOffset)); + ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset)); } - // Return `_this` unless we're sure enough that it would be pointless to add a return statement. - // If there's a constructor that we can tell returns in enough places, then we *do not* want to add a return. if (isDerivedClass - && superCaptureStatus !== 2 /* ReplaceWithReturn */ + && superCaptureStatus !== 2 && !(constructor && isSufficientlyCoveredByReturnStatements(constructor.body))) { statements.push(ts.createReturn(ts.createFileLevelUniqueName("_this"))); } ts.prependStatements(statements, endLexicalEnvironment()); if (constructor) { - prependCaptureNewTargetIfNeeded(statements, constructor, /*copyOnWrite*/ false); + prependCaptureNewTargetIfNeeded(statements, constructor, false); } - var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), - /*location*/ constructor ? constructor.body.statements : node.members), - /*multiLine*/ true); + var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true); ts.setTextRange(block, constructor ? constructor.body : node); if (!constructor) { - ts.setEmitFlags(block, 1536 /* NoComments */); + ts.setEmitFlags(block, 1536); } return block; } - /** - * We want to try to avoid emitting a return statement in certain cases if a user already returned something. - * It would generate obviously dead code, so we'll try to make things a little bit prettier - * by doing a minimal check on whether some common patterns always explicitly return. - */ function isSufficientlyCoveredByReturnStatements(statement) { - // A return statement is considered covered. - if (statement.kind === 225 /* ReturnStatement */) { + if (statement.kind === 225) { return true; } - // An if-statement with two covered branches is covered. - else if (statement.kind === 217 /* IfStatement */) { + else if (statement.kind === 217) { var ifStatement = statement; if (ifStatement.elseStatement) { return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) && isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement); } } - // A block is covered if it has a last statement which is covered. - else if (statement.kind === 213 /* Block */) { + else if (statement.kind === 213) { var lastStatement = ts.lastOrUndefined(statement.statements); if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) { return true; @@ -66454,144 +54629,72 @@ var ts; } return false; } - /** - * Declares a `_this` variable for derived classes and for when arrow functions capture `this`. - * - * @returns The new statement offset into the `statements` array. - */ function declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, ctor, isDerivedClass, hasSynthesizedSuper, statementOffset) { - // If this isn't a derived class, just capture 'this' for arrow functions if necessary. if (!isDerivedClass) { if (ctor) { addCaptureThisForNodeIfNeeded(statements, ctor); } - return 0 /* NoReplacement */; + return 0; } - // We must be here because the user didn't write a constructor - // but we needed to call 'super(...args)' anyway as per 14.5.14 of the ES2016 spec. - // If that's the case we can just immediately return the result of a 'super()' call. if (!ctor) { statements.push(ts.createReturn(createDefaultSuperCallOrThis())); - return 2 /* ReplaceWithReturn */; + return 2; } - // The constructor exists, but it and the 'super()' call it contains were generated - // for something like property initializers. - // Create a captured '_this' variable and assume it will subsequently be used. if (hasSynthesizedSuper) { captureThisForNode(statements, ctor, createDefaultSuperCallOrThis()); enableSubstitutionsForCapturedThis(); - return 1 /* ReplaceSuperCapture */; + return 1; } - // Most of the time, a 'super' call will be the first real statement in a constructor body. - // In these cases, we'd like to transform these into a *single* statement instead of a declaration - // followed by an assignment statement for '_this'. For instance, if we emitted without an initializer, - // we'd get: - // - // var _this; - // _this = _super.call(...) || this; - // - // instead of - // - // var _this = _super.call(...) || this; - // - // Additionally, if the 'super()' call is the last statement, we should just avoid capturing - // entirely and immediately return the result like so: - // - // return _super.call(...) || this; - // var firstStatement; var superCallExpression; var ctorStatements = ctor.body.statements; if (statementOffset < ctorStatements.length) { firstStatement = ctorStatements[statementOffset]; - if (firstStatement.kind === 216 /* ExpressionStatement */ && ts.isSuperCall(firstStatement.expression)) { + if (firstStatement.kind === 216 && ts.isSuperCall(firstStatement.expression)) { superCallExpression = visitImmediateSuperCallInBody(firstStatement.expression); } } - // Return the result if we have an immediate super() call on the last statement, - // but only if the constructor itself doesn't use 'this' elsewhere. if (superCallExpression && statementOffset === ctorStatements.length - 1 - && !(ctor.transformFlags & (16384 /* ContainsLexicalThis */ | 32768 /* ContainsCapturedLexicalThis */))) { + && !(ctor.transformFlags & (16384 | 32768))) { var returnStatement = ts.createReturn(superCallExpression); - if (superCallExpression.kind !== 200 /* BinaryExpression */ - || superCallExpression.left.kind !== 187 /* CallExpression */) { + if (superCallExpression.kind !== 200 + || superCallExpression.left.kind !== 187) { 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, 1536 /* NoComments */))); + ts.setCommentRange(returnStatement, ts.getCommentRange(ts.setEmitFlags(superCallExpression.left, 1536))); statements.push(returnStatement); - return 2 /* ReplaceWithReturn */; + return 2; } - // Perform the capture. captureThisForNode(statements, ctor, superCallExpression || createActualThis(), firstStatement); - // If we're actually replacing the original statement, we need to signal this to the caller. if (superCallExpression) { - return 1 /* ReplaceSuperCapture */; + return 1; } - return 0 /* NoReplacement */; + return 0; } function createActualThis() { - return ts.setEmitFlags(ts.createThis(), 4 /* NoSubstitution */); + return ts.setEmitFlags(ts.createThis(), 4); } function createDefaultSuperCallOrThis() { return ts.createLogicalOr(ts.createLogicalAnd(ts.createStrictInequality(ts.createFileLevelUniqueName("_super"), ts.createNull()), ts.createFunctionApply(ts.createFileLevelUniqueName("_super"), createActualThis(), ts.createIdentifier("arguments"))), createActualThis()); } - /** - * Visits a parameter declaration. - * - * @param node A ParameterDeclaration node. - */ function visitParameter(node) { if (node.dotDotDotToken) { - // rest parameters are elided return undefined; } else if (ts.isBindingPattern(node.name)) { - // Binding patterns are converted into a generated name and are - // evaluated inside the function body. - return ts.setOriginalNode(ts.setTextRange(ts.createParameter( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*dotDotDotToken*/ undefined, ts.getGeneratedNameForNode(node), - /*questionToken*/ undefined, - /*type*/ undefined, - /*initializer*/ undefined), - /*location*/ node), - /*original*/ node); + return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, ts.getGeneratedNameForNode(node), undefined, undefined, undefined), node), node); } else if (node.initializer) { - // Initializers are elided - return ts.setOriginalNode(ts.setTextRange(ts.createParameter( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*dotDotDotToken*/ undefined, node.name, - /*questionToken*/ undefined, - /*type*/ undefined, - /*initializer*/ undefined), - /*location*/ node), - /*original*/ node); + return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, node.name, undefined, undefined, undefined), node), node); } else { return node; } } - /** - * 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; + return (node.transformFlags & 131072) !== 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; @@ -66599,8 +54702,6 @@ var ts; for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; var name = 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; } @@ -66612,153 +54713,90 @@ var ts; } } } - /** - * 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))), 1048576 /* CustomPrologue */)); + statements.push(ts.setEmitFlags(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0, temp))), 1048576)); } else if (initializer) { - statements.push(ts.setEmitFlags(ts.createStatement(ts.createAssignment(temp, ts.visitNode(initializer, visitor, ts.isExpression))), 1048576 /* CustomPrologue */)); + statements.push(ts.setEmitFlags(ts.createStatement(ts.createAssignment(temp, ts.visitNode(initializer, visitor, ts.isExpression))), 1048576)); } } - /** - * 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.setTextRange(ts.createBlock([ - ts.createStatement(ts.setEmitFlags(ts.setTextRange(ts.createAssignment(ts.setEmitFlags(ts.getMutableClone(name), 48 /* NoSourceMap */), ts.setEmitFlags(initializer, 48 /* NoSourceMap */ | ts.getEmitFlags(initializer) | 1536 /* NoComments */)), parameter), 1536 /* NoComments */)) - ]), parameter), 1 /* SingleLine */ | 32 /* NoTrailingSourceMap */ | 384 /* NoTokenSourceMaps */ | 1536 /* NoComments */)); + ts.createStatement(ts.setEmitFlags(ts.setTextRange(ts.createAssignment(ts.setEmitFlags(ts.getMutableClone(name), 48), ts.setEmitFlags(initializer, 48 | ts.getEmitFlags(initializer) | 1536)), parameter), 1536)) + ]), parameter), 1 | 32 | 384 | 1536)); ts.startOnNewLine(statement); ts.setTextRange(statement, parameter); - ts.setEmitFlags(statement, 384 /* NoTokenSourceMaps */ | 32 /* NoTrailingSourceMap */ | 1048576 /* CustomPrologue */ | 1536 /* NoComments */); + ts.setEmitFlags(statement, 384 | 32 | 1048576 | 1536); 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 === 71 /* Identifier */ && !inConstructorWithSynthesizedSuper; + return node && node.dotDotDotToken && node.name.kind === 71 && !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. + ts.setEmitFlags(declarationName, 48); var expressionName = ts.getSynthesizedClone(parameter.name); var restIndex = node.parameters.length - 1; var temp = ts.createLoopVariable(); - // var param = []; - statements.push(ts.setEmitFlags(ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(declarationName, - /*type*/ undefined, ts.createArrayLiteral([])) - ])), - /*location*/ parameter), 1048576 /* CustomPrologue */)); - // for (var _i = restIndex; _i < arguments.length; _i++) { - // param[_i - restIndex] = arguments[_i]; - // } + statements.push(ts.setEmitFlags(ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(declarationName, undefined, ts.createArrayLiteral([])) + ])), parameter), 1048576)); var forStatement = ts.createFor(ts.setTextRange(ts.createVariableDeclarationList([ - ts.createVariableDeclaration(temp, /*type*/ undefined, ts.createLiteral(restIndex)) + ts.createVariableDeclaration(temp, undefined, ts.createLiteral(restIndex)) ]), parameter), ts.setTextRange(ts.createLessThan(temp, ts.createPropertyAccess(ts.createIdentifier("arguments"), "length")), parameter), ts.setTextRange(ts.createPostfixIncrement(temp), parameter), ts.createBlock([ ts.startOnNewLine(ts.setTextRange(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.createSubtract(temp, ts.createLiteral(restIndex))), ts.createElementAccess(ts.createIdentifier("arguments"), temp))), parameter)) ])); - ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */); + ts.setEmitFlags(forStatement, 1048576); 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 !== 193 /* ArrowFunction */) { + if (node.transformFlags & 32768 && node.kind !== 193) { captureThisForNode(statements, node, ts.createThis()); } } function captureThisForNode(statements, node, initializer, originalStatement) { enableSubstitutionsForCapturedThis(); - var captureThisStatement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(ts.createFileLevelUniqueName("_this"), - /*type*/ undefined, initializer) + var captureThisStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(ts.createFileLevelUniqueName("_this"), undefined, initializer) ])); - ts.setEmitFlags(captureThisStatement, 1536 /* NoComments */ | 1048576 /* CustomPrologue */); + ts.setEmitFlags(captureThisStatement, 1536 | 1048576); ts.setTextRange(captureThisStatement, originalStatement); ts.setSourceMapRange(captureThisStatement, node); statements.push(captureThisStatement); } function prependCaptureNewTargetIfNeeded(statements, node, copyOnWrite) { - if (hierarchyFacts & 16384 /* NewTarget */) { + if (hierarchyFacts & 16384) { var newTarget = void 0; switch (node.kind) { - case 193 /* ArrowFunction */: + case 193: return statements; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - // Methods and accessors cannot be constructors, so 'new.target' will - // always return 'undefined'. + case 154: + case 156: + case 157: newTarget = ts.createVoidZero(); break; - case 155 /* Constructor */: - // Class constructors can only be called with `new`, so `this.constructor` - // should be relatively safe to use. - newTarget = ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4 /* NoSubstitution */), "constructor"); + case 155: + newTarget = ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4), "constructor"); break; - case 234 /* FunctionDeclaration */: - case 192 /* FunctionExpression */: - // Functions can be called or constructed, and may have a `this` due to - // being a member or when calling an imported function via `other_1.f()`. - newTarget = ts.createConditional(ts.createLogicalAnd(ts.setEmitFlags(ts.createThis(), 4 /* NoSubstitution */), ts.createBinary(ts.setEmitFlags(ts.createThis(), 4 /* NoSubstitution */), 93 /* InstanceOfKeyword */, ts.getLocalName(node))), ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4 /* NoSubstitution */), "constructor"), ts.createVoidZero()); + case 234: + case 192: + newTarget = ts.createConditional(ts.createLogicalAnd(ts.setEmitFlags(ts.createThis(), 4), ts.createBinary(ts.setEmitFlags(ts.createThis(), 4), 93, ts.getLocalName(node))), ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4), "constructor"), ts.createVoidZero()); break; default: return ts.Debug.failBadSyntaxKind(node); } - var captureNewTargetStatement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(ts.createFileLevelUniqueName("_newTarget"), - /*type*/ undefined, newTarget) + var captureNewTargetStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(ts.createFileLevelUniqueName("_newTarget"), undefined, newTarget) ])); if (copyOnWrite) { return [captureNewTargetStatement].concat(statements); @@ -66767,32 +54805,24 @@ var ts; } return statements; } - /** - * Adds statements to the class body function for a class to define the members of the - * class. - * - * @param statements The statements for the class body function. - * @param node The ClassExpression or ClassDeclaration node. - */ function addClassMembers(statements, node) { for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; switch (member.kind) { - case 212 /* SemicolonClassElement */: + case 212: statements.push(transformSemicolonClassElementToStatement(member)); break; - case 154 /* MethodDeclaration */: + case 154: statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node)); break; - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: var accessors = ts.getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node)); } break; - case 155 /* Constructor */: - // Constructors are handled in visitClassExpression/visitClassDeclaration + case 155: break; default: ts.Debug.failBadSyntaxKind(node); @@ -66800,208 +54830,133 @@ var ts; } } } - /** - * Transforms a SemicolonClassElement into a statement for a class body function. - * - * @param member The SemicolonClassElement node. - */ function transformSemicolonClassElementToStatement(member) { return ts.setTextRange(ts.createEmptyStatement(), member); } - /** - * Transforms a MethodDeclaration into a statement for a class body function. - * - * @param receiver The receiver for the member. - * @param member The MethodDeclaration node. - */ function transformClassMethodDeclarationToStatement(receiver, member, container) { - var ancestorFacts = enterSubtree(0 /* None */, 0 /* None */); + var ancestorFacts = enterSubtree(0, 0); var commentRange = ts.getCommentRange(member); var sourceMapRange = ts.getSourceMapRange(member); - var memberName = ts.createMemberAccessForPropertyName(receiver, ts.visitNode(member.name, visitor, ts.isPropertyName), /*location*/ member.name); - var memberFunction = transformFunctionLikeToExpression(member, /*location*/ member, /*name*/ undefined, container); - ts.setEmitFlags(memberFunction, 1536 /* NoComments */); + var memberName = ts.createMemberAccessForPropertyName(receiver, ts.visitNode(member.name, visitor, ts.isPropertyName), member.name); + var memberFunction = transformFunctionLikeToExpression(member, member, undefined, container); + ts.setEmitFlags(memberFunction, 1536); ts.setSourceMapRange(memberFunction, sourceMapRange); - var statement = ts.setTextRange(ts.createStatement(ts.createAssignment(memberName, memberFunction)), - /*location*/ member); + var statement = ts.setTextRange(ts.createStatement(ts.createAssignment(memberName, memberFunction)), 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, 48 /* NoSourceMap */); - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, hierarchyFacts & 49152 /* PropagateNewTargetMask */ ? 16384 /* NewTarget */ : 0 /* None */); + ts.setEmitFlags(statement, 48); + exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0); return statement; } - /** - * Transforms a set of related of get/set accessors into a statement for a class body function. - * - * @param receiver The receiver for the member. - * @param accessors The set of related get/set accessors. - */ function transformAccessorsToStatement(receiver, accessors, container) { - var statement = ts.createStatement(transformAccessorsToExpression(receiver, accessors, container, /*startsOnNewLine*/ false)); - // 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, 1536 /* NoComments */); + var statement = ts.createStatement(transformAccessorsToExpression(receiver, accessors, container, false)); + ts.setEmitFlags(statement, 1536); ts.setSourceMapRange(statement, ts.getSourceMapRange(accessors.firstAccessor)); return statement; } - /** - * Transforms a set of related get/set accessors into an expression for either a class - * body function or an ObjectLiteralExpression with computed properties. - * - * @param receiver The receiver for the member. - */ function transformAccessorsToExpression(receiver, _a, container, startsOnNewLine) { var firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor; - var ancestorFacts = enterSubtree(0 /* None */, 0 /* None */); - // To align with source maps in the old emitter, the receiver and property name - // arguments are both mapped contiguously to the accessor name. + var ancestorFacts = enterSubtree(0, 0); var target = ts.getMutableClone(receiver); - ts.setEmitFlags(target, 1536 /* NoComments */ | 32 /* NoTrailingSourceMap */); - ts.setSourceMapRange(target, firstAccessor.name); // TODO: GH#18217 + ts.setEmitFlags(target, 1536 | 32); + ts.setSourceMapRange(target, firstAccessor.name); var propertyName = ts.createExpressionForPropertyName(ts.visitNode(firstAccessor.name, visitor, ts.isPropertyName)); - ts.setEmitFlags(propertyName, 1536 /* NoComments */ | 16 /* NoLeadingSourceMap */); + ts.setEmitFlags(propertyName, 1536 | 16); ts.setSourceMapRange(propertyName, firstAccessor.name); var properties = []; if (getAccessor) { - var getterFunction = transformFunctionLikeToExpression(getAccessor, /*location*/ undefined, /*name*/ undefined, container); + var getterFunction = transformFunctionLikeToExpression(getAccessor, undefined, undefined, container); ts.setSourceMapRange(getterFunction, ts.getSourceMapRange(getAccessor)); - ts.setEmitFlags(getterFunction, 512 /* NoLeadingComments */); + ts.setEmitFlags(getterFunction, 512); var getter = ts.createPropertyAssignment("get", getterFunction); ts.setCommentRange(getter, ts.getCommentRange(getAccessor)); properties.push(getter); } if (setAccessor) { - var setterFunction = transformFunctionLikeToExpression(setAccessor, /*location*/ undefined, /*name*/ undefined, container); + var setterFunction = transformFunctionLikeToExpression(setAccessor, undefined, undefined, container); ts.setSourceMapRange(setterFunction, ts.getSourceMapRange(setAccessor)); - ts.setEmitFlags(setterFunction, 512 /* NoLeadingComments */); + ts.setEmitFlags(setterFunction, 512); var setter = ts.createPropertyAssignment("set", setterFunction); ts.setCommentRange(setter, ts.getCommentRange(setAccessor)); properties.push(setter); } properties.push(ts.createPropertyAssignment("enumerable", ts.createTrue()), ts.createPropertyAssignment("configurable", ts.createTrue())); - var call = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), - /*typeArguments*/ undefined, [ + var call = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [ target, propertyName, - ts.createObjectLiteral(properties, /*multiLine*/ true) + ts.createObjectLiteral(properties, true) ]); if (startsOnNewLine) { ts.startOnNewLine(call); } - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, hierarchyFacts & 49152 /* PropagateNewTargetMask */ ? 16384 /* NewTarget */ : 0 /* None */); + exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0); return call; } - /** - * Visits an ArrowFunction and transforms it into a FunctionExpression. - * - * @param node An ArrowFunction node. - */ function visitArrowFunction(node) { - if (node.transformFlags & 16384 /* ContainsLexicalThis */) { + if (node.transformFlags & 16384) { enableSubstitutionsForCapturedThis(); } var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - var ancestorFacts = enterSubtree(16256 /* ArrowFunctionExcludes */, 66 /* ArrowFunctionIncludes */); - var func = ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, transformFunctionBody(node)); + var ancestorFacts = enterSubtree(16256, 66); + var func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformFunctionBody(node)); ts.setTextRange(func, node); ts.setOriginalNode(func, node); - ts.setEmitFlags(func, 8 /* CapturesThis */); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + ts.setEmitFlags(func, 8); + exitSubtree(ancestorFacts, 0, 0); convertedLoopState = savedConvertedLoopState; return func; } - /** - * Visits a FunctionExpression node. - * - * @param node a FunctionExpression node. - */ function visitFunctionExpression(node) { - var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */ - ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */) - : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */); + var ancestorFacts = ts.getEmitFlags(node) & 262144 + ? enterSubtree(16278, 69) + : enterSubtree(16286, 65); var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; var parameters = ts.visitParameterList(node.parameters, visitor, context); - var body = node.transformFlags & 64 /* ES2015 */ + var body = node.transformFlags & 64 ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); - var name = hierarchyFacts & 16384 /* NewTarget */ + var name = hierarchyFacts & 16384 ? ts.getLocalName(node) : node.name; - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, 0 /* None */); + exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; - return ts.updateFunctionExpression(node, - /*modifiers*/ undefined, node.asteriskToken, name, - /*typeParameters*/ undefined, parameters, - /*type*/ undefined, body); + return ts.updateFunctionExpression(node, undefined, node.asteriskToken, name, undefined, parameters, undefined, body); } - /** - * Visits a FunctionDeclaration node. - * - * @param node a FunctionDeclaration node. - */ function visitFunctionDeclaration(node) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */); + var ancestorFacts = enterSubtree(16286, 65); var parameters = ts.visitParameterList(node.parameters, visitor, context); - var body = node.transformFlags & 64 /* ES2015 */ + var body = node.transformFlags & 64 ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); - var name = hierarchyFacts & 16384 /* NewTarget */ + var name = hierarchyFacts & 16384 ? ts.getLocalName(node) : node.name; - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, 0 /* None */); + exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; - return ts.updateFunctionDeclaration(node, - /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, - /*typeParameters*/ undefined, parameters, - /*type*/ undefined, body); + return ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, undefined, parameters, undefined, body); } - /** - * Transforms a function-like node into a FunctionExpression. - * - * @param node The function-like node to transform. - * @param location The source-map location for the new FunctionExpression. - * @param name The name of the new FunctionExpression. - */ function transformFunctionLikeToExpression(node, location, name, container) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - var ancestorFacts = container && ts.isClassLike(container) && !ts.hasModifier(node, 32 /* Static */) - ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */) - : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */); + var ancestorFacts = container && ts.isClassLike(container) && !ts.hasModifier(node, 32) + ? enterSubtree(16286, 65 | 8) + : enterSubtree(16286, 65); var parameters = ts.visitParameterList(node.parameters, visitor, context); var body = transformFunctionBody(node); - if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 234 /* FunctionDeclaration */ || node.kind === 192 /* FunctionExpression */)) { + if (hierarchyFacts & 16384 && !name && (node.kind === 234 || node.kind === 192)) { name = ts.getGeneratedNameForNode(node); } - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, 0 /* None */); + exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; - return ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression( - /*modifiers*/ undefined, node.asteriskToken, name, - /*typeParameters*/ undefined, parameters, - /*type*/ undefined, body), location), - /*original*/ node); + return ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(undefined, node.asteriskToken, name, undefined, parameters, undefined, body), location), node); } - /** - * 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 multiLine = false; + var singleLine = false; var statementsLocation; var closeBraceLocation; var leadingStatements = []; @@ -67010,29 +54965,21 @@ var ts; var statementOffset; resumeLexicalEnvironment(); if (ts.isBlock(body)) { - // ensureUseStrict is false because no new prologue-directive should be added. - // addStandardPrologue will put already-existing directives at the beginning of the target statement-array - statementOffset = ts.addStandardPrologue(leadingStatements, body.statements, /*ensureUseStrict*/ false); + statementOffset = ts.addStandardPrologue(leadingStatements, body.statements, false); } addCaptureThisForNodeIfNeeded(leadingStatements, node); addDefaultValueAssignmentsIfNeeded(leadingStatements, node); - addRestParameterIfNeeded(leadingStatements, node, /*inConstructorWithSynthesizedSuper*/ false); + addRestParameterIfNeeded(leadingStatements, node, false); if (ts.isBlock(body)) { - // addCustomPrologue puts already-existing directives at the beginning of the target statement-array statementOffset = ts.addCustomPrologue(leadingStatements, body.statements, statementOffset, visitor); 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 === 193 /* 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. + ts.Debug.assert(node.kind === 193); statementsLocation = ts.moveRangeEnd(body, -1); var equalsGreaterThanToken = node.equalsGreaterThanToken; if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) { @@ -67047,103 +54994,72 @@ var ts; var returnStatement = ts.createReturn(expression); ts.setTextRange(returnStatement, body); ts.moveSyntheticComments(returnStatement, body); - ts.setEmitFlags(returnStatement, 384 /* NoTokenSourceMaps */ | 32 /* NoTrailingSourceMap */ | 1024 /* NoTrailingComments */); + ts.setEmitFlags(returnStatement, 384 | 32 | 1024); 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.prependStatements(statements, lexicalEnvironment); - prependCaptureNewTargetIfNeeded(statements, node, /*copyOnWrite*/ false); - // If we added any final generated statements, this must be a multi-line block + prependCaptureNewTargetIfNeeded(statements, node, false); if (ts.some(leadingStatements) || ts.some(lexicalEnvironment)) { multiLine = true; } var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(leadingStatements.concat(statements)), statementsLocation), multiLine); ts.setTextRange(block, node.body); if (!multiLine && singleLine) { - ts.setEmitFlags(block, 1 /* SingleLine */); + ts.setEmitFlags(block, 1); } if (closeBraceLocation) { - ts.setTokenSourceMapRange(block, 18 /* CloseBraceToken */, closeBraceLocation); + ts.setTokenSourceMapRange(block, 18, closeBraceLocation); } ts.setOriginalNode(block, node.body); return block; } function visitFunctionBodyDownLevel(node) { var updated = ts.visitFunctionBody(node.body, functionBodyVisitor, context); - return ts.updateBlock(updated, ts.setTextRange(ts.createNodeArray(prependCaptureNewTargetIfNeeded(updated.statements, node, /*copyOnWrite*/ true)), - /*location*/ updated.statements)); + return ts.updateBlock(updated, ts.setTextRange(ts.createNodeArray(prependCaptureNewTargetIfNeeded(updated.statements, node, true)), updated.statements)); } function visitBlock(node, isFunctionBody) { if (isFunctionBody) { - // A function body is not a block scope. return ts.visitEachChild(node, visitor, context); } - var ancestorFacts = hierarchyFacts & 256 /* IterationStatement */ - ? enterSubtree(4032 /* IterationStatementBlockExcludes */, 512 /* IterationStatementBlockIncludes */) - : enterSubtree(3904 /* BlockExcludes */, 128 /* BlockIncludes */); + var ancestorFacts = hierarchyFacts & 256 + ? enterSubtree(4032, 512) + : enterSubtree(3904, 128); var updated = ts.visitEachChild(node, visitor, context); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } - /** - * Visits an ExpressionStatement that contains a destructuring assignment. - * - * @param node An ExpressionStatement node. - */ function visitExpressionStatement(node) { - // If we are here it is most likely because our expression is a destructuring assignment. switch (node.expression.kind) { - case 191 /* ParenthesizedExpression */: - return ts.updateStatement(node, visitParenthesizedExpression(node.expression, /*needsDestructuringValue*/ false)); - case 200 /* BinaryExpression */: - return ts.updateStatement(node, visitBinaryExpression(node.expression, /*needsDestructuringValue*/ false)); + case 191: + return ts.updateStatement(node, visitParenthesizedExpression(node.expression, false)); + case 200: + return ts.updateStatement(node, visitBinaryExpression(node.expression, false)); } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a ParenthesizedExpression that may contain a destructuring assignment. - * - * @param node A ParenthesizedExpression node. - * @param needsDestructuringValue A value indicating whether we need to hold onto the rhs - * of a destructuring assignment. - */ function visitParenthesizedExpression(node, needsDestructuringValue) { - // If we are here it is most likely because our expression is a destructuring assignment. if (!needsDestructuringValue) { - // By default we always emit the RHS at the end of a flattened destructuring - // expression. If we are in a state where we do not need the destructuring value, - // we pass that information along to the children that care about it. switch (node.expression.kind) { - case 191 /* ParenthesizedExpression */: - return ts.updateParen(node, visitParenthesizedExpression(node.expression, /*needsDestructuringValue*/ false)); - case 200 /* BinaryExpression */: - return ts.updateParen(node, visitBinaryExpression(node.expression, /*needsDestructuringValue*/ false)); + case 191: + return ts.updateParen(node, visitParenthesizedExpression(node.expression, false)); + case 200: + return ts.updateParen(node, visitBinaryExpression(node.expression, false)); } } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a BinaryExpression that contains a destructuring assignment. - * - * @param node A BinaryExpression node. - * @param needsDestructuringValue A value indicating whether we need to hold onto the rhs - * of a destructuring assignment. - */ function visitBinaryExpression(node, needsDestructuringValue) { - // If we are here it is because this is a destructuring assignment. if (ts.isDestructuringAssignment(node)) { - return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, needsDestructuringValue); + return ts.flattenDestructuringAssignment(node, visitor, context, 0, needsDestructuringValue); } return ts.visitEachChild(node, visitor, context); } function visitVariableStatement(node) { - var ancestorFacts = enterSubtree(0 /* None */, ts.hasModifier(node, 1 /* Export */) ? 32 /* ExportedVariableStatement */ : 0 /* None */); + var ancestorFacts = enterSubtree(0, ts.hasModifier(node, 1) ? 32 : 0); var updated; - if (convertedLoopState && (node.declarationList.flags & 3 /* BlockScoped */) === 0) { - // we are inside a converted loop - hoist variable declarations + if (convertedLoopState && (node.declarationList.flags & 3) === 0) { var assignments = void 0; for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; @@ -67151,10 +55067,10 @@ var ts; if (decl.initializer) { var assignment = void 0; if (ts.isBindingPattern(decl.name)) { - assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */); + assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0); } else { - assignment = ts.createBinary(decl.name, 58 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression)); + assignment = ts.createBinary(decl.name, 58, ts.visitNode(decl.initializer, visitor, ts.isExpression)); ts.setTextRange(assignment, decl); } assignments = ts.append(assignments, assignment); @@ -67164,37 +55080,29 @@ var ts; updated = ts.setTextRange(ts.createStatement(ts.inlineExpressions(assignments)), node); } else { - // none of declarations has initializer - the entire variable statement can be deleted updated = undefined; } } else { updated = ts.visitEachChild(node, visitor, context); } - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } - /** - * Visits a VariableDeclarationList that is block scoped (e.g. `let` or `const`). - * - * @param node A VariableDeclarationList node. - */ function visitVariableDeclarationList(node) { - if (node.transformFlags & 64 /* ES2015 */) { - if (node.flags & 3 /* BlockScoped */) { + if (node.transformFlags & 64) { + if (node.flags & 3) { enableSubstitutionsForBlockScopedBindings(); } - var declarations = ts.flatMap(node.declarations, node.flags & 1 /* Let */ + var declarations = ts.flatMap(node.declarations, node.flags & 1 ? visitVariableDeclarationInLetDeclarationList : visitVariableDeclaration); var declarationList = ts.createVariableDeclarationList(declarations); ts.setOriginalNode(declarationList, node); ts.setTextRange(declarationList, node); ts.setCommentRange(declarationList, node); - if (node.transformFlags & 8388608 /* ContainsBindingPattern */ + if (node.transformFlags & 8388608 && (ts.isBindingPattern(node.declarations[0].name) || ts.isBindingPattern(ts.last(node.declarations).name))) { - // If the first or last declaration is a binding pattern, we need to modify - // the source map range for the declaration list. var firstDeclaration = ts.firstOrUndefined(declarations); if (firstDeclaration) { ts.setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, ts.last(declarations).end)); @@ -67204,76 +55112,23 @@ var ts; } return ts.visitEachChild(node, visitor, context); } - /** - * Gets a value indicating whether we should emit an explicit initializer for a variable - * declaration in a `let` declaration list. - * - * @param node A VariableDeclaration node. - */ function shouldEmitExplicitInitializerForLetDeclaration(node) { - // Nested let bindings might need to be initialized explicitly to preserve - // ES6 semantic: - // - // { let x = 1; } - // { let x; } // x here should be undefined. not 1 - // - // Top level bindings never collide with anything and thus don't require - // explicit initialization. As for nested let bindings there are two cases: - // - // - Nested let bindings that were not renamed definitely should be - // initialized explicitly: - // - // { let x = 1; } - // { let x; if (some-condition) { x = 1}; if (x) { /*1*/ } } - // - // Without explicit initialization code in /*1*/ can be executed even if - // some-condition is evaluated to false. - // - // - Renaming introduces fresh name that should not collide with any - // existing names, however renamed bindings sometimes also should be - // explicitly initialized. One particular case: non-captured binding - // declared inside loop body (but not in loop initializer): - // - // let x; - // for (;;) { - // let x; - // } - // - // In downlevel codegen inner 'x' will be renamed so it won't collide - // with outer 'x' however it will should be reset on every iteration as - // if it was declared anew. - // - // * Why non-captured binding? - // - Because if loop contains block scoped binding captured in some - // function then loop body will be rewritten to have a fresh scope - // on every iteration so everything will just work. - // - // * Why loop initializer is excluded? - // - Since we've introduced a fresh name it already will be undefined. var flags = resolver.getNodeCheckFlags(node); - var isCapturedInFunction = flags & 131072 /* CapturedBlockScopedBinding */; - var isDeclaredInLoop = flags & 262144 /* BlockScopedBindingInLoop */; - var emittedAsTopLevel = (hierarchyFacts & 64 /* TopLevel */) !== 0 + var isCapturedInFunction = flags & 131072; + var isDeclaredInLoop = flags & 262144; + var emittedAsTopLevel = (hierarchyFacts & 64) !== 0 || (isCapturedInFunction && isDeclaredInLoop - && (hierarchyFacts & 512 /* IterationStatementBlock */) !== 0); + && (hierarchyFacts & 512) !== 0); var emitExplicitInitializer = !emittedAsTopLevel - && (hierarchyFacts & 2048 /* ForInOrForOfStatement */) === 0 + && (hierarchyFacts & 2048) === 0 && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction - && (hierarchyFacts & (1024 /* ForStatement */ | 2048 /* ForInOrForOfStatement */)) === 0)); + && (hierarchyFacts & (1024 | 2048)) === 0)); return emitExplicitInitializer; } - /** - * Visits a VariableDeclaration in a `let` declaration list. - * - * @param node A VariableDeclaration node. - */ function visitVariableDeclarationInLetDeclarationList(node) { - // For binding pattern names that lack initializers there is no point to emit - // explicit initializer since downlevel codegen for destructuring will fail - // in the absence of initializer so all binding elements will say uninitialized var name = node.name; if (ts.isBindingPattern(name)) { return visitVariableDeclaration(node); @@ -67285,22 +55140,16 @@ var ts; } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a VariableDeclaration node with a binding pattern. - * - * @param node A VariableDeclaration node. - */ function visitVariableDeclaration(node) { - var ancestorFacts = enterSubtree(32 /* ExportedVariableStatement */, 0 /* None */); + var ancestorFacts = enterSubtree(32, 0); var updated; if (ts.isBindingPattern(node.name)) { - updated = ts.flattenDestructuringBinding(node, visitor, context, 0 /* All */, - /*value*/ undefined, (ancestorFacts & 32 /* ExportedVariableStatement */) !== 0); + updated = ts.flattenDestructuringBinding(node, visitor, context, 0, undefined, (ancestorFacts & 32) !== 0); } else { updated = ts.visitEachChild(node, visitor, context); } - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } function recordLabel(node) { @@ -67314,78 +55163,67 @@ var ts; convertedLoopState.labels = ts.createMap(); } var statement = ts.unwrapInnermostStatementOfLabel(node, convertedLoopState && recordLabel); - return ts.isIterationStatement(statement, /*lookInLabeledStatements*/ false) - ? visitIterationStatement(statement, /*outermostLabeledStatement*/ node) + return ts.isIterationStatement(statement, false) + ? visitIterationStatement(statement, node) : ts.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement), node, convertedLoopState && resetLabel); } function visitIterationStatement(node, outermostLabeledStatement) { switch (node.kind) { - case 218 /* DoStatement */: - case 219 /* WhileStatement */: + case 218: + case 219: return visitDoOrWhileStatement(node, outermostLabeledStatement); - case 220 /* ForStatement */: + case 220: return visitForStatement(node, outermostLabeledStatement); - case 221 /* ForInStatement */: + case 221: return visitForInStatement(node, outermostLabeledStatement); - case 222 /* ForOfStatement */: + case 222: return visitForOfStatement(node, outermostLabeledStatement); } } function visitIterationStatementWithFacts(excludeFacts, includeFacts, node, outermostLabeledStatement, convert) { var ancestorFacts = enterSubtree(excludeFacts, includeFacts); var updated = convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, convert); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } function visitDoOrWhileStatement(node, outermostLabeledStatement) { - return visitIterationStatementWithFacts(0 /* DoOrWhileStatementExcludes */, 256 /* DoOrWhileStatementIncludes */, node, outermostLabeledStatement); + return visitIterationStatementWithFacts(0, 256, node, outermostLabeledStatement); } function visitForStatement(node, outermostLabeledStatement) { - return visitIterationStatementWithFacts(3008 /* ForStatementExcludes */, 1280 /* ForStatementIncludes */, node, outermostLabeledStatement); + return visitIterationStatementWithFacts(3008, 1280, node, outermostLabeledStatement); } function visitForInStatement(node, outermostLabeledStatement) { - return visitIterationStatementWithFacts(1984 /* ForInOrForOfStatementExcludes */, 2304 /* ForInOrForOfStatementIncludes */, node, outermostLabeledStatement); + return visitIterationStatementWithFacts(1984, 2304, node, outermostLabeledStatement); } function visitForOfStatement(node, outermostLabeledStatement) { - return visitIterationStatementWithFacts(1984 /* ForInOrForOfStatementExcludes */, 2304 /* ForInOrForOfStatementIncludes */, node, outermostLabeledStatement, compilerOptions.downlevelIteration ? convertForOfStatementForIterable : convertForOfStatementForArray); + return visitIterationStatementWithFacts(1984, 2304, node, outermostLabeledStatement, compilerOptions.downlevelIteration ? convertForOfStatementForIterable : convertForOfStatementForArray); } function convertForOfStatementHead(node, boundValue, convertedLoopBodyStatements) { var statements = []; var initializer = node.initializer; if (ts.isVariableDeclarationList(initializer)) { - if (node.initializer.flags & 3 /* BlockScoped */) { + if (node.initializer.flags & 3) { 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 */, boundValue); + var declarations = ts.flattenDestructuringBinding(firstOriginalDeclaration, visitor, context, 0, boundValue); var declarationList = ts.setTextRange(ts.createVariableDeclarationList(declarations), node.initializer); ts.setOriginalNode(declarationList, node.initializer); - // Adjust the source map range for the first declaration to align with the old - // emitter. ts.setSourceMapRange(declarationList, ts.createRange(declarations[0].pos, ts.last(declarations).end)); - statements.push(ts.createVariableStatement( - /*modifiers*/ undefined, declarationList)); + statements.push(ts.createVariableStatement(undefined, declarationList)); } else { - // The following call does not include the initializer, so we have - // to emit it separately. - statements.push(ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.setOriginalNode(ts.setTextRange(ts.createVariableDeclarationList([ - ts.createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : ts.createTempVariable(/*recordTempVariable*/ undefined), - /*type*/ undefined, boundValue) + statements.push(ts.setTextRange(ts.createVariableStatement(undefined, ts.setOriginalNode(ts.setTextRange(ts.createVariableDeclarationList([ + ts.createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : ts.createTempVariable(undefined), undefined, boundValue) ]), ts.moveRangePos(initializer, -1)), initializer)), 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, boundValue); if (ts.isDestructuringAssignment(assignment)) { ts.aggregateTransformFlags(assignment); - statements.push(ts.createStatement(visitBinaryExpression(assignment, /*needsDestructuringValue*/ false))); + statements.push(ts.createStatement(visitBinaryExpression(assignment, false))); } else { assignment.end = initializer.end; @@ -67407,111 +55245,62 @@ var ts; } } function createSyntheticBlockForConvertedStatements(statements) { - return ts.setEmitFlags(ts.createBlock(ts.createNodeArray(statements), - /*multiLine*/ true), 48 /* NoSourceMap */ | 384 /* NoTokenSourceMaps */); + return ts.setEmitFlags(ts.createBlock(ts.createNodeArray(statements), true), 48 | 384); } function convertForOfStatementForArray(node, outermostLabeledStatement, convertedLoopBodyStatements) { - // 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); - // 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 = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(/*recordTempVariable*/ undefined); - // The old emitter does not emit source maps for the expression - ts.setEmitFlags(expression, 48 /* NoSourceMap */ | ts.getEmitFlags(expression)); - var forStatement = ts.setTextRange(ts.createFor( - /*initializer*/ ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ - ts.setTextRange(ts.createVariableDeclaration(counter, /*type*/ undefined, ts.createLiteral(0)), ts.moveRangePos(node.expression, -1)), - ts.setTextRange(ts.createVariableDeclaration(rhsReference, /*type*/ undefined, expression), node.expression) - ]), node.expression), 2097152 /* NoHoisting */), - /*condition*/ ts.setTextRange(ts.createLessThan(counter, ts.createPropertyAccess(rhsReference, "length")), node.expression), - /*incrementor*/ ts.setTextRange(ts.createPostfixIncrement(counter), node.expression), - /*statement*/ convertForOfStatementHead(node, ts.createElementAccess(rhsReference, counter), convertedLoopBodyStatements)), - /*location*/ node); - // Disable trailing source maps for the OpenParenToken to align source map emit with the old emitter. - ts.setEmitFlags(forStatement, 256 /* NoTokenTrailingSourceMaps */); + var rhsReference = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined); + ts.setEmitFlags(expression, 48 | ts.getEmitFlags(expression)); + var forStatement = ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ + ts.setTextRange(ts.createVariableDeclaration(counter, undefined, ts.createLiteral(0)), ts.moveRangePos(node.expression, -1)), + ts.setTextRange(ts.createVariableDeclaration(rhsReference, undefined, expression), node.expression) + ]), node.expression), 2097152), ts.setTextRange(ts.createLessThan(counter, ts.createPropertyAccess(rhsReference, "length")), node.expression), ts.setTextRange(ts.createPostfixIncrement(counter), node.expression), convertForOfStatementHead(node, ts.createElementAccess(rhsReference, counter), convertedLoopBodyStatements)), node); + ts.setEmitFlags(forStatement, 256); ts.setTextRange(forStatement, node); return ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel); } function convertForOfStatementForIterable(node, outermostLabeledStatement, convertedLoopBodyStatements) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); - var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(/*recordTempVariable*/ undefined); - var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(/*recordTempVariable*/ undefined); + var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined); + var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(undefined); var errorRecord = ts.createUniqueName("e"); var catchVariable = ts.getGeneratedNameForNode(errorRecord); - var returnMethod = ts.createTempVariable(/*recordTempVariable*/ undefined); + var returnMethod = ts.createTempVariable(undefined); var values = ts.createValuesHelper(context, expression, node.expression); - var next = ts.createCall(ts.createPropertyAccess(iterator, "next"), /*typeArguments*/ undefined, []); + var next = ts.createCall(ts.createPropertyAccess(iterator, "next"), undefined, []); hoistVariableDeclaration(errorRecord); hoistVariableDeclaration(returnMethod); - var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor( - /*initializer*/ ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ - ts.setTextRange(ts.createVariableDeclaration(iterator, /*type*/ undefined, values), node.expression), - ts.createVariableDeclaration(result, /*type*/ undefined, next) - ]), node.expression), 2097152 /* NoHoisting */), - /*condition*/ ts.createLogicalNot(ts.createPropertyAccess(result, "done")), - /*incrementor*/ ts.createAssignment(result, next), - /*statement*/ convertForOfStatementHead(node, ts.createPropertyAccess(result, "value"), convertedLoopBodyStatements)), - /*location*/ node), 256 /* NoTokenTrailingSourceMaps */); + var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ + ts.setTextRange(ts.createVariableDeclaration(iterator, undefined, values), node.expression), + ts.createVariableDeclaration(result, undefined, next) + ]), node.expression), 2097152), ts.createLogicalNot(ts.createPropertyAccess(result, "done")), ts.createAssignment(result, next), convertForOfStatementHead(node, ts.createPropertyAccess(result, "value"), convertedLoopBodyStatements)), node), 256); return ts.createTry(ts.createBlock([ ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel) ]), ts.createCatchClause(ts.createVariableDeclaration(catchVariable), ts.setEmitFlags(ts.createBlock([ ts.createStatement(ts.createAssignment(errorRecord, ts.createObjectLiteral([ ts.createPropertyAssignment("error", catchVariable) ]))) - ]), 1 /* SingleLine */)), ts.createBlock([ - ts.createTry( - /*tryBlock*/ ts.createBlock([ - ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(ts.createPropertyAccess(result, "done"))), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(ts.createFunctionCall(returnMethod, iterator, []))), 1 /* SingleLine */), - ]), - /*catchClause*/ undefined, - /*finallyBlock*/ ts.setEmitFlags(ts.createBlock([ - ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1 /* SingleLine */) - ]), 1 /* SingleLine */)) + ]), 1)), ts.createBlock([ + ts.createTry(ts.createBlock([ + ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(ts.createPropertyAccess(result, "done"))), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(ts.createFunctionCall(returnMethod, iterator, []))), 1), + ]), undefined, ts.setEmitFlags(ts.createBlock([ + ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1) + ]), 1)) ])); } - /** - * Visits an ObjectLiteralExpression with computed property names. - * - * @param node An ObjectLiteralExpression node. - */ function visitObjectLiteralExpression(node) { - // We are here because a ComputedPropertyName was used somewhere in the expression. var properties = node.properties; var numProperties = properties.length; - // Find the first computed property. - // Everything until that point can be emitted as part of the initial object literal. var numInitialProperties = numProperties; var numInitialPropertiesWithoutYield = numProperties; for (var i = 0; i < numProperties; i++) { var property = properties[i]; - if ((property.transformFlags & 16777216 /* ContainsYield */ && hierarchyFacts & 4 /* AsyncFunctionBody */) + if ((property.transformFlags & 16777216 && hierarchyFacts & 4) && i < numInitialPropertiesWithoutYield) { numInitialPropertiesWithoutYield = i; } - if (property.name.kind === 147 /* ComputedPropertyName */) { + if (property.name.kind === 147) { numInitialProperties = i; break; } @@ -67520,37 +55309,29 @@ var ts; if (numInitialPropertiesWithoutYield < numInitialProperties) { numInitialProperties = numInitialPropertiesWithoutYield; } - // For computed properties, we need to create a unique handle to the object - // literal so we can modify it without risking internal assignments tainting the object. var temp = ts.createTempVariable(hoistVariableDeclaration); - // 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), node.multiLine), 65536 /* Indented */)); + var assignment = ts.createAssignment(temp, ts.setEmitFlags(ts.createObjectLiteral(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), node.multiLine), 65536)); if (node.multiLine) { ts.startOnNewLine(assignment); } expressions.push(assignment); addObjectLiteralMembers(expressions, node, temp, numInitialProperties); - // We need to clone the temporary identifier so that we can write it on a - // new line expressions.push(node.multiLine ? ts.startOnNewLine(ts.getMutableClone(temp)) : temp); return ts.inlineExpressions(expressions); } return ts.visitEachChild(node, visitor, context); } function shouldConvertIterationStatementBody(node) { - return (resolver.getNodeCheckFlags(node) & 65536 /* LoopWithCapturedBlockScopedBinding */) !== 0; + return (resolver.getNodeCheckFlags(node) & 65536) !== 0; } - /** - * Records constituents of name for the given variable to be hoisted in the outer scope. - */ function hoistVariableDeclarationDeclaredInConvertedLoop(state, node) { if (!state.hoistedLocalVariables) { state.hoistedLocalVariables = []; } visit(node.name); function visit(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { state.hoistedLocalVariables.push(node); } else { @@ -67567,13 +55348,11 @@ var ts; if (!shouldConvertIterationStatementBody(node)) { var saveAllowedNonLabeledJumps = void 0; if (convertedLoopState) { - // we get here if we are trying to emit normal loop loop inside converted loop - // set allowedNonLabeledJumps to Break | Continue to mark that break\continue inside the loop should be emitted as is saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; - convertedLoopState.allowedNonLabeledJumps = 2 /* Break */ | 4 /* Continue */; + convertedLoopState.allowedNonLabeledJumps = 2 | 4; } var result = convert - ? convert(node, outermostLabeledStatement, /*convertedLoopBodyStatements*/ undefined) + ? convert(node, outermostLabeledStatement, undefined) : ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement, convertedLoopState && resetLabel); if (convertedLoopState) { convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; @@ -67583,20 +55362,18 @@ var ts; var functionName = ts.createUniqueName("_loop"); var loopInitializer; switch (node.kind) { - case 220 /* ForStatement */: - case 221 /* ForInStatement */: - case 222 /* ForOfStatement */: + case 220: + case 221: + case 222: var initializer = node.initializer; - if (initializer && initializer.kind === 233 /* VariableDeclarationList */) { + if (initializer && initializer.kind === 233) { loopInitializer = initializer; } break; } - // variables that will be passed to the loop as parameters var loopParameters = []; - // variables declared in the loop initializer that will be changed inside the loop var loopOutParameters = []; - if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3 /* BlockScoped */)) { + if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3)) { for (var _i = 0, _a = loopInitializer.declarations; _i < _a.length; _i++) { var decl = _a[_i]; processLoopVariableDeclaration(decl, loopParameters, loopOutParameters); @@ -67605,21 +55382,13 @@ var ts; var outerConvertedLoopState = convertedLoopState; convertedLoopState = { loopOutParameters: loopOutParameters }; if (outerConvertedLoopState) { - // convertedOuterLoopState !== undefined means that this converted loop is nested in another converted loop. - // if outer converted loop has already accumulated some state - pass it through if (outerConvertedLoopState.argumentsName) { - // outer loop has already used 'arguments' so we've already have some name to alias it - // use the same name in all nested loops convertedLoopState.argumentsName = outerConvertedLoopState.argumentsName; } if (outerConvertedLoopState.thisName) { - // outer loop has already used 'this' so we've already have some name to alias it - // use the same name in all nested loops convertedLoopState.thisName = outerConvertedLoopState.thisName; } if (outerConvertedLoopState.hoistedLocalVariables) { - // we've already collected some non-block scoped variable declarations in enclosing loop - // use the same storage in nested loop convertedLoopState.hoistedLocalVariables = outerConvertedLoopState.hoistedLocalVariables; } } @@ -67631,83 +55400,61 @@ var ts; if (loopOutParameters.length || lexicalEnvironment) { var statements_4 = ts.isBlock(loopBody) ? loopBody.statements.slice() : [loopBody]; if (loopOutParameters.length) { - copyOutParameters(loopOutParameters, 1 /* ToOutParameter */, statements_4); + copyOutParameters(loopOutParameters, 1, statements_4); } ts.prependStatements(statements_4, lexicalEnvironment); - loopBody = ts.createBlock(statements_4, /*multiline*/ true); + loopBody = ts.createBlock(statements_4, true); } if (ts.isBlock(loopBody)) { loopBody.multiLine = true; } else { - loopBody = ts.createBlock([loopBody], /*multiline*/ true); + loopBody = ts.createBlock([loopBody], true); } - var containsYield = (node.statement.transformFlags & 16777216 /* ContainsYield */) !== 0; - var isAsyncBlockContainingAwait = containsYield && (hierarchyFacts & 4 /* AsyncFunctionBody */) !== 0; + var containsYield = (node.statement.transformFlags & 16777216) !== 0; + var isAsyncBlockContainingAwait = containsYield && (hierarchyFacts & 4) !== 0; var loopBodyFlags = 0; if (currentState.containsLexicalThis) { - loopBodyFlags |= 8 /* CapturesThis */; + loopBodyFlags |= 8; } if (isAsyncBlockContainingAwait) { - loopBodyFlags |= 262144 /* AsyncFunctionBody */; + loopBodyFlags |= 262144; } - var convertedLoopVariable = ts.createVariableStatement( - /*modifiers*/ undefined, ts.setEmitFlags(ts.createVariableDeclarationList([ - ts.createVariableDeclaration(functionName, - /*type*/ undefined, ts.setEmitFlags(ts.createFunctionExpression( - /*modifiers*/ undefined, containsYield ? ts.createToken(39 /* AsteriskToken */) : undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, loopParameters, - /*type*/ undefined, loopBody), loopBodyFlags)) - ]), 2097152 /* NoHoisting */)); + var convertedLoopVariable = ts.createVariableStatement(undefined, ts.setEmitFlags(ts.createVariableDeclarationList([ + ts.createVariableDeclaration(functionName, undefined, ts.setEmitFlags(ts.createFunctionExpression(undefined, containsYield ? ts.createToken(39) : undefined, undefined, undefined, loopParameters, undefined, loopBody), loopBodyFlags)) + ]), 2097152)); var statements = [convertedLoopVariable]; var extraVariableDeclarations; - // propagate state from the inner loop to the outer loop if necessary if (currentState.argumentsName) { - // if alias for arguments is set if (outerConvertedLoopState) { - // pass it to outer converted loop outerConvertedLoopState.argumentsName = currentState.argumentsName; } else { - // this is top level converted loop and we need to create an alias for 'arguments' object - (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.argumentsName, - /*type*/ undefined, ts.createIdentifier("arguments"))); + (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.argumentsName, undefined, ts.createIdentifier("arguments"))); } } if (currentState.thisName) { - // if alias for this is set if (outerConvertedLoopState) { - // pass it to outer converted loop outerConvertedLoopState.thisName = currentState.thisName; } else { - // this is top level converted loop so we need to create an alias for 'this' here - // NOTE: - // if converted loops were all nested in arrow function then we'll always emit '_this' so convertedLoopState.thisName will not be set. - // If it is set this means that all nested loops are not nested in arrow function and it is safe to capture 'this'. - (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.thisName, - /*type*/ undefined, ts.createIdentifier("this"))); + (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.thisName, undefined, ts.createIdentifier("this"))); } } if (currentState.hoistedLocalVariables) { - // if hoistedLocalVariables !== undefined this means that we've possibly collected some variable declarations to be hoisted later if (outerConvertedLoopState) { - // pass them to outer converted loop outerConvertedLoopState.hoistedLocalVariables = currentState.hoistedLocalVariables; } else { if (!extraVariableDeclarations) { extraVariableDeclarations = []; } - // hoist collected variable declarations for (var _b = 0, _c = currentState.hoistedLocalVariables; _b < _c.length; _b++) { var identifier = _c[_b]; extraVariableDeclarations.push(ts.createVariableDeclaration(identifier)); } } } - // add extra variables to hold out parameters if necessary if (loopOutParameters.length) { if (!extraVariableDeclarations) { extraVariableDeclarations = []; @@ -67717,10 +55464,8 @@ var ts; extraVariableDeclarations.push(ts.createVariableDeclaration(outParam.outParamName)); } } - // create variable statement to hold all introduced variable declarations if (extraVariableDeclarations) { - statements.push(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList(extraVariableDeclarations))); + statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(extraVariableDeclarations))); } var convertedLoopBodyStatements = generateCallToConvertedLoop(functionName, loopParameters, currentState, containsYield); var loop; @@ -67729,13 +55474,9 @@ var ts; } else { var clone_3 = ts.getMutableClone(node); - // clean statement part clone_3.statement = undefined; - // visit childnodes to transform initializer/condition/incrementor parts clone_3 = ts.visitEachChild(clone_3, visitor, context); - // set loop statement - clone_3.statement = ts.createBlock(convertedLoopBodyStatements, /*multiline*/ true); - // reset and re-aggregate the transform flags + clone_3.statement = ts.createBlock(convertedLoopBodyStatements, true); clone_3.transformFlags = 0; ts.aggregateTransformFlags(clone_3); loop = ts.restoreEnclosingLabel(clone_3, outermostLabeledStatement, convertedLoopState && resetLabel); @@ -67744,9 +55485,9 @@ var ts; return statements; } function copyOutParameter(outParam, copyDirection) { - var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName; - var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName; - return ts.createBinary(target, 58 /* EqualsToken */, source); + var source = copyDirection === 0 ? outParam.outParamName : outParam.originalName; + var target = copyDirection === 0 ? outParam.originalName : outParam.outParamName; + return ts.createBinary(target, 58, source); } function copyOutParameters(outParams, copyDirection, statements) { for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) { @@ -67757,44 +55498,40 @@ var ts; function generateCallToConvertedLoop(loopFunctionExpressionName, parameters, state, isAsyncBlockContainingAwait) { var outerConvertedLoopState = convertedLoopState; var statements = []; - // loop is considered simple if it does not have any return statements or break\continue that transfer control outside of the loop - // simple loops are emitted as just 'loop()'; - // NOTE: if loop uses only 'continue' it still will be emitted as simple loop - var isSimpleLoop = !(state.nonLocalJumps & ~4 /* Continue */) && + var isSimpleLoop = !(state.nonLocalJumps & ~4) && !state.labeledNonLocalBreaks && !state.labeledNonLocalContinues; - var call = ts.createCall(loopFunctionExpressionName, /*typeArguments*/ undefined, ts.map(parameters, function (p) { return p.name; })); + var call = ts.createCall(loopFunctionExpressionName, undefined, ts.map(parameters, function (p) { return p.name; })); var callResult = isAsyncBlockContainingAwait - ? ts.createYield(ts.createToken(39 /* AsteriskToken */), ts.setEmitFlags(call, 8388608 /* Iterator */)) + ? ts.createYield(ts.createToken(39), ts.setEmitFlags(call, 8388608)) : call; if (isSimpleLoop) { statements.push(ts.createStatement(callResult)); - copyOutParameters(state.loopOutParameters, 0 /* ToOriginal */, statements); + copyOutParameters(state.loopOutParameters, 0, statements); } else { var loopResultName = ts.createUniqueName("state"); - var stateVariable = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(loopResultName, /*type*/ undefined, callResult)])); + var stateVariable = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(loopResultName, undefined, callResult)])); statements.push(stateVariable); - copyOutParameters(state.loopOutParameters, 0 /* ToOriginal */, statements); - if (state.nonLocalJumps & 8 /* Return */) { + copyOutParameters(state.loopOutParameters, 0, statements); + if (state.nonLocalJumps & 8) { var returnStatement = void 0; if (outerConvertedLoopState) { - outerConvertedLoopState.nonLocalJumps |= 8 /* Return */; + outerConvertedLoopState.nonLocalJumps |= 8; returnStatement = ts.createReturn(loopResultName); } else { returnStatement = ts.createReturn(ts.createPropertyAccess(loopResultName, "value")); } - statements.push(ts.createIf(ts.createBinary(ts.createTypeOf(loopResultName), 34 /* EqualsEqualsEqualsToken */, ts.createLiteral("object")), returnStatement)); + statements.push(ts.createIf(ts.createBinary(ts.createTypeOf(loopResultName), 34, ts.createLiteral("object")), returnStatement)); } - if (state.nonLocalJumps & 2 /* Break */) { - statements.push(ts.createIf(ts.createBinary(loopResultName, 34 /* EqualsEqualsEqualsToken */, ts.createLiteral("break")), ts.createBreak())); + if (state.nonLocalJumps & 2) { + statements.push(ts.createIf(ts.createBinary(loopResultName, 34, ts.createLiteral("break")), ts.createBreak())); } if (state.labeledNonLocalBreaks || state.labeledNonLocalContinues) { var caseClauses = []; - processLabeledJumps(state.labeledNonLocalBreaks, /*isBreak*/ true, loopResultName, outerConvertedLoopState, caseClauses); - processLabeledJumps(state.labeledNonLocalContinues, /*isBreak*/ false, loopResultName, outerConvertedLoopState, caseClauses); + processLabeledJumps(state.labeledNonLocalBreaks, true, loopResultName, outerConvertedLoopState, caseClauses); + processLabeledJumps(state.labeledNonLocalContinues, false, loopResultName, outerConvertedLoopState, caseClauses); statements.push(ts.createSwitch(loopResultName, ts.createCaseBlock(caseClauses))); } } @@ -67820,9 +55557,6 @@ var ts; } table.forEach(function (labelMarker, labelText) { var statements = []; - // if there are no outer converted loop or outer label in question is located inside outer converted loop - // then emit labeled break\continue - // otherwise propagate pair 'label -> marker' to outer converted loop and emit 'return labelMarker' so outer loop can later decide what to do if (!outerLoop || (outerLoop.labels && outerLoop.labels.get(labelText))) { var label = ts.createIdentifier(labelText); statements.push(isBreak ? ts.createBreak(label) : ts.createContinue(label)); @@ -67845,42 +55579,33 @@ var ts; } } else { - loopParameters.push(ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, name)); - if (resolver.getNodeCheckFlags(decl) & 2097152 /* NeedsLoopOutParameter */) { + loopParameters.push(ts.createParameter(undefined, undefined, undefined, name)); + if (resolver.getNodeCheckFlags(decl) & 2097152) { var outParamName = ts.createUniqueName("out_" + ts.idText(name)); loopOutParameters.push({ originalName: name, outParamName: outParamName }); } } } - /** - * Adds the members of an object literal to an array of expressions. - * - * @param expressions An array of expressions. - * @param node An ObjectLiteralExpression node. - * @param receiver The receiver for members of the ObjectLiteralExpression. - * @param numInitialNonComputedProperties The number of initial properties without - * computed property names. - */ function addObjectLiteralMembers(expressions, node, receiver, start) { var properties = node.properties; var numProperties = properties.length; for (var i = start; i < numProperties; i++) { var property = properties[i]; switch (property.kind) { - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property === accessors.firstAccessor) { expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine)); } break; - case 154 /* MethodDeclaration */: + case 154: expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine)); break; - case 270 /* PropertyAssignment */: + case 270: expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine)); break; - case 271 /* ShorthandPropertyAssignment */: + case 271: expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine)); break; default: @@ -67889,13 +55614,6 @@ var ts; } } } - /** - * Transforms a PropertyAssignment node into an expression. - * - * @param node The ObjectLiteralExpression that contains the PropertyAssignment. - * @param property The PropertyAssignment node. - * @param receiver The receiver for the assignment. - */ function transformPropertyAssignmentToExpression(property, receiver, startsOnNewLine) { var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(property.name, visitor, ts.isPropertyName)), ts.visitNode(property.initializer, visitor, ts.isExpression)); ts.setTextRange(expression, property); @@ -67904,13 +55622,6 @@ var ts; } return expression; } - /** - * Transforms a ShorthandPropertyAssignment node into an expression. - * - * @param node The ObjectLiteralExpression that contains the ShorthandPropertyAssignment. - * @param property The ShorthandPropertyAssignment node. - * @param receiver The receiver for the assignment. - */ function transformShorthandPropertyAssignmentToExpression(property, receiver, startsOnNewLine) { var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(property.name, visitor, ts.isPropertyName)), ts.getSynthesizedClone(property.name)); ts.setTextRange(expression, property); @@ -67919,201 +55630,103 @@ var ts; } return expression; } - /** - * Transforms a MethodDeclaration of an ObjectLiteralExpression into an expression. - * - * @param node The ObjectLiteralExpression that contains the MethodDeclaration. - * @param method The MethodDeclaration node. - * @param receiver The receiver for the assignment. - */ function transformObjectLiteralMethodDeclarationToExpression(method, receiver, container, startsOnNewLine) { - var ancestorFacts = enterSubtree(0 /* None */, 0 /* None */); - var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(method.name, visitor, ts.isPropertyName)), transformFunctionLikeToExpression(method, /*location*/ method, /*name*/ undefined, container)); + var ancestorFacts = enterSubtree(0, 0); + var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(method.name, visitor, ts.isPropertyName)), transformFunctionLikeToExpression(method, method, undefined, container)); ts.setTextRange(expression, method); if (startsOnNewLine) { ts.startOnNewLine(expression); } - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, hierarchyFacts & 49152 /* PropagateNewTargetMask */ ? 16384 /* NewTarget */ : 0 /* None */); + exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0); return expression; } function visitCatchClause(node) { - var ancestorFacts = enterSubtree(4032 /* BlockScopeExcludes */, 0 /* BlockScopeIncludes */); + var ancestorFacts = enterSubtree(4032, 0); var updated; ts.Debug.assert(!!node.variableDeclaration, "Catch clause variable should always be present when downleveling ES2015."); if (ts.isBindingPattern(node.variableDeclaration.name)) { - var temp = ts.createTempVariable(/*recordTempVariable*/ undefined); + var temp = ts.createTempVariable(undefined); var newVariableDeclaration = ts.createVariableDeclaration(temp); ts.setTextRange(newVariableDeclaration, node.variableDeclaration); - var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0 /* All */, temp); + var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0, temp); var list = ts.createVariableDeclarationList(vars); ts.setTextRange(list, node.variableDeclaration); - var destructure = ts.createVariableStatement(/*modifiers*/ undefined, list); + var destructure = ts.createVariableStatement(undefined, list); updated = ts.updateCatchClause(node, newVariableDeclaration, addStatementToStartOfBlock(node.block, destructure)); } else { updated = ts.visitEachChild(node, visitor, context); } - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return updated; } function addStatementToStartOfBlock(block, statement) { var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement); return ts.updateBlock(block, [statement].concat(transformedStatements)); } - /** - * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a - * PropertyAssignment. - * - * @param node A MethodDeclaration node. - */ function visitMethodDeclaration(node) { - // We should only get here for methods on an object literal with regular identifier names. - // Methods on classes are handled in visitClassDeclaration/visitClassExpression. - // 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, /*container*/ undefined); - ts.setEmitFlags(functionExpression, 512 /* NoLeadingComments */ | ts.getEmitFlags(functionExpression)); - return ts.setTextRange(ts.createPropertyAssignment(node.name, functionExpression), - /*location*/ node); + var functionExpression = transformFunctionLikeToExpression(node, ts.moveRangePos(node, -1), undefined, undefined); + ts.setEmitFlags(functionExpression, 512 | ts.getEmitFlags(functionExpression)); + return ts.setTextRange(ts.createPropertyAssignment(node.name, functionExpression), node); } - /** - * Visits an AccessorDeclaration of an ObjectLiteralExpression. - * - * @param node An AccessorDeclaration node. - */ function visitAccessorDeclaration(node) { ts.Debug.assert(!ts.isComputedPropertyName(node.name)); var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; - var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */); + var ancestorFacts = enterSubtree(16286, 65); var updated; var parameters = ts.visitParameterList(node.parameters, visitor, context); - var body = node.transformFlags & (32768 /* ContainsCapturedLexicalThis */ | 128 /* ContainsES2015 */) + var body = node.transformFlags & (32768 | 128) ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); - if (node.kind === 156 /* GetAccessor */) { + if (node.kind === 156) { updated = ts.updateGetAccessor(node, node.decorators, node.modifiers, node.name, parameters, node.type, body); } else { updated = ts.updateSetAccessor(node, node.decorators, node.modifiers, node.name, parameters, body); } - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, 0 /* None */); + exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; return updated; } - /** - * Visits a ShorthandPropertyAssignment and transforms it into a PropertyAssignment. - * - * @param node A ShorthandPropertyAssignment node. - */ function visitShorthandPropertyAssignment(node) { - return ts.setTextRange(ts.createPropertyAssignment(node.name, ts.getSynthesizedClone(node.name)), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAssignment(node.name, ts.getSynthesizedClone(node.name)), node); } function visitComputedPropertyName(node) { - var ancestorFacts = enterSubtree(0 /* ComputedPropertyNameExcludes */, 8192 /* ComputedPropertyNameIncludes */); + var ancestorFacts = enterSubtree(0, 8192); var updated = ts.visitEachChild(node, visitor, context); - exitSubtree(ancestorFacts, 49152 /* PropagateNewTargetMask */, hierarchyFacts & 49152 /* PropagateNewTargetMask */ ? 32768 /* NewTargetInComputedPropertyName */ : 0 /* None */); + exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 32768 : 0); return updated; } - /** - * Visits a YieldExpression node. - * - * @param node A YieldExpression node. - */ function visitYieldExpression(node) { - // `yield` expressions are transformed using the generators transformer. return ts.visitEachChild(node, visitor, context); } - /** - * Visits an ArrayLiteralExpression that contains a spread element. - * - * @param node An ArrayLiteralExpression node. - */ function visitArrayLiteralExpression(node) { - if (node.transformFlags & 64 /* ES2015 */) { - // We are here because we contain a SpreadElementExpression. - return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma); + if (node.transformFlags & 64) { + return transformAndSpreadElements(node.elements, true, !!node.multiLine, !!node.elements.hasTrailingComma); } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a CallExpression that contains either a spread element or `super`. - * - * @param node a CallExpression. - */ function visitCallExpression(node) { - if (ts.getEmitFlags(node) & 33554432 /* TypeScriptClassWrapper */) { + if (ts.getEmitFlags(node) & 33554432) { return visitTypeScriptClassWrapper(node); } - if (node.transformFlags & 64 /* ES2015 */) { - return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true); + if (node.transformFlags & 64) { + return visitCallExpressionWithPotentialCapturedThisAssignment(node, true); } - return ts.updateCall(node, ts.visitNode(node.expression, callExpressionVisitor, ts.isExpression), - /*typeArguments*/ undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); + return ts.updateCall(node, ts.visitNode(node.expression, callExpressionVisitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); } function visitTypeScriptClassWrapper(node) { - // This is a call to a class wrapper function (an IIFE) created by the 'ts' transformer. - // The wrapper has a form similar to: - // - // (function() { - // class C { // 1 - // } - // C.x = 1; // 2 - // return C; - // }()) - // - // When we transform the class, we end up with something like this: - // - // (function () { - // var C = (function () { // 3 - // function C() { - // } - // return C; // 4 - // }()); - // C.x = 1; - // return C; - // }()) - // - // We want to simplify the two nested IIFEs to end up with something like this: - // - // (function () { - // function C() { - // } - // C.x = 1; - // return C; - // }()) - // We skip any outer expressions in a number of places to get to the innermost - // expression, but we will restore them later to preserve comments and source maps. var body = ts.cast(ts.cast(ts.skipOuterExpressions(node.expression), ts.isArrowFunction).body, ts.isBlock); - // The class statements are the statements generated by visiting the first statement with initializer of the - // body (1), while all other statements are added to remainingStatements (2) var isVariableStatementWithInitializer = function (stmt) { return ts.isVariableStatement(stmt) && !!ts.first(stmt.declarationList.declarations).initializer; }; var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement); var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer); var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); }); var varStatement = ts.cast(ts.first(classStatements), ts.isVariableStatement); - // We know there is only one variable declaration here as we verified this in an - // earlier call to isTypeScriptClassWrapper var variable = varStatement.declarationList.declarations[0]; var initializer = ts.skipOuterExpressions(variable.initializer); - // Under certain conditions, the 'ts' transformer may introduce a class alias, which - // we see as an assignment, for example: - // - // (function () { - // var C_1; - // var C = C_1 = (function () { - // function C() { - // } - // C.x = function () { return C_1; } - // return C; - // }()); - // C = C_1 = __decorate([dec], C); - // return C; - // }()) - // var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression); - // The underlying call (3) is another IIFE that may contain a '_super' argument. var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression); var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression); var funcStatements = func.body.statements; @@ -68121,92 +55734,47 @@ var ts; var classBodyEnd = -1; var statements = []; if (aliasAssignment) { - // If we have a class alias assignment, we need to move it to the down-level constructor - // function we generated for the class. var extendsCall = ts.tryCast(funcStatements[classBodyStart], ts.isExpressionStatement); if (extendsCall) { statements.push(extendsCall); classBodyStart++; } - // The next statement is the function declaration. statements.push(funcStatements[classBodyStart]); classBodyStart++; - // Add the class alias following the declaration. statements.push(ts.createStatement(ts.createAssignment(aliasAssignment.left, ts.cast(variable.name, ts.isIdentifier)))); } - // Find the trailing 'return' statement (4) while (!ts.isReturnStatement(ts.elementAt(funcStatements, classBodyEnd))) { classBodyEnd--; } - // When we extract the statements of the inner IIFE, we exclude the 'return' statement (4) - // as we already have one that has been introduced by the 'ts' transformer. ts.addRange(statements, funcStatements, classBodyStart, classBodyEnd); if (classBodyEnd < -1) { - // If there were any hoisted declarations following the return statement, we should - // append them. ts.addRange(statements, funcStatements, classBodyEnd + 1); } - // Add the remaining statements of the outer wrapper. ts.addRange(statements, remainingStatements); - // The 'es2015' class transform may add an end-of-declaration marker. If so we will add it - // after the remaining statements from the 'ts' transformer. - ts.addRange(statements, classStatements, /*start*/ 1); - // Recreate any outer parentheses or partially-emitted expressions to preserve source map - // and comment locations. - return ts.recreateOuterExpressions(node.expression, ts.recreateOuterExpressions(variable.initializer, ts.recreateOuterExpressions(aliasAssignment && aliasAssignment.right, ts.updateCall(call, ts.recreateOuterExpressions(call.expression, ts.updateFunctionExpression(func, - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, func.parameters, - /*type*/ undefined, ts.updateBlock(func.body, statements))), - /*typeArguments*/ undefined, call.arguments)))); + ts.addRange(statements, classStatements, 1); + return ts.recreateOuterExpressions(node.expression, ts.recreateOuterExpressions(variable.initializer, ts.recreateOuterExpressions(aliasAssignment && aliasAssignment.right, ts.updateCall(call, ts.recreateOuterExpressions(call.expression, ts.updateFunctionExpression(func, undefined, undefined, undefined, undefined, func.parameters, undefined, ts.updateBlock(func.body, statements))), undefined, call.arguments)))); } function visitImmediateSuperCallInBody(node) { - return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ false); + return visitCallExpressionWithPotentialCapturedThisAssignment(node, false); } function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) { - // We are here either because SuperKeyword was used somewhere in the expression, or - // because we contain a SpreadElementExpression. - if (node.transformFlags & 524288 /* ContainsSpread */ || - node.expression.kind === 97 /* SuperKeyword */ || + if (node.transformFlags & 524288 || + node.expression.kind === 97 || ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) { var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg; - if (node.expression.kind === 97 /* SuperKeyword */) { - ts.setEmitFlags(thisArg, 4 /* NoSubstitution */); + if (node.expression.kind === 97) { + ts.setEmitFlags(thisArg, 4); } var resultingCall = void 0; - if (node.transformFlags & 524288 /* ContainsSpread */) { - // [source] - // f(...a, b) - // x.m(...a, b) - // super(...a, b) - // super.m(...a, b) // in static - // super.m(...a, b) // in instance - // - // [output] - // f.apply(void 0, a.concat([b])) - // (_a = x).m.apply(_a, a.concat([b])) - // _super.apply(this, a.concat([b])) - // _super.m.apply(this, a.concat([b])) - // _super.prototype.m.apply(this, a.concat([b])) - resultingCall = ts.createFunctionApply(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)); + if (node.transformFlags & 524288) { + resultingCall = ts.createFunctionApply(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, false, false, false)); } else { - // [source] - // super(a) - // super.m(a) // in static - // super.m(a) // in instance - // - // [output] - // _super.call(this, a) - // _super.m.call(this, a) - // _super.prototype.m.call(this, a) - resultingCall = ts.createFunctionCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression), - /*location*/ node); + resultingCall = ts.createFunctionCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression), node); } - if (node.expression.kind === 97 /* SuperKeyword */) { + if (node.expression.kind === 97) { var actualThis = ts.createThis(); - ts.setEmitFlags(actualThis, 4 /* NoSubstitution */); + ts.setEmitFlags(actualThis, 4); var initializer = ts.createLogicalOr(resultingCall, actualThis); resultingCall = assignToCapturedThis ? ts.createAssignment(ts.createFileLevelUniqueName("_this"), initializer) @@ -68216,40 +55784,14 @@ var ts; } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a NewExpression that contains a spread element. - * - * @param node A NewExpression node. - */ function visitNewExpression(node) { - if (node.transformFlags & 524288 /* ContainsSpread */) { - // We are here because we contain a SpreadElementExpression. - // [source] - // new C(...a) - // - // [output] - // new ((_a = C).bind.apply(_a, [void 0].concat(a)))() + if (node.transformFlags & 524288) { var _a = ts.createCallBinding(ts.createPropertyAccess(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg; - return ts.createNew(ts.createFunctionApply(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(ts.createNodeArray([ts.createVoidZero()].concat(node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), - /*typeArguments*/ undefined, []); + return ts.createNew(ts.createFunctionApply(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(ts.createNodeArray([ts.createVoidZero()].concat(node.arguments)), false, false, false)), undefined, []); } return ts.visitEachChild(node, visitor, context); } - /** - * Transforms an array of Expression nodes that contains a SpreadExpression. - * - * @param elements The array of Expression nodes. - * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array. - * @param multiLine A value indicating whether the result should be emitted on multiple lines. - */ function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) { - // [source] - // [a, ...b, c] - // - // [output] - // [a].concat(b, [c]) - // Map spans of spread expressions into their expressions and spans of other - // expressions into an array literal. var numElements = elements.length; var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) { return visitPartition(partition, multiLine, hasTrailingComma && end === numElements); @@ -68259,7 +55801,7 @@ var ts; var firstSegment = segments[0]; if (ts.isCallExpression(firstSegment) && ts.isIdentifier(firstSegment.expression) - && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) + && (ts.getEmitFlags(firstSegment.expression) & 4096) && firstSegment.expression.escapedText === "___spread") { return segments[0]; } @@ -68269,11 +55811,10 @@ var ts; else { if (segments.length === 1) { var firstElement = elements[0]; - return needsUniqueCopy && ts.isSpreadElement(firstElement) && firstElement.expression.kind !== 183 /* ArrayLiteralExpression */ + return needsUniqueCopy && ts.isSpreadElement(firstElement) && firstElement.expression.kind !== 183 ? ts.createArraySlice(segments[0]) : segments[0]; } - // Rewrite using the pattern .concat(, , ...) return ts.createArrayConcat(segments.shift(), segments); } } @@ -68291,55 +55832,26 @@ var ts; function visitSpreadElement(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } - /** - * Transforms the expression of a SpreadExpression node. - * - * @param node A SpreadExpression node. - */ function visitExpressionOfSpread(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } - /** - * Visits a template literal. - * - * @param node A template literal. - */ function visitTemplateLiteral(node) { return ts.setTextRange(ts.createLiteral(node.text), node); } - /** - * Visits a string literal with an extended unicode escape. - * - * @param node A string literal. - */ function visitStringLiteral(node) { if (node.hasExtendedUnicodeEscape) { return ts.setTextRange(ts.createLiteral(node.text), node); } return node; } - /** - * Visits a binary or octal (ES6) numeric literal. - * - * @param node A string literal. - */ function visitNumericLiteral(node) { - if (node.numericLiteralFlags & 384 /* BinaryOrOctalSpecifier */) { + if (node.numericLiteralFlags & 384) { return ts.setTextRange(ts.createNumericLiteral(node.text), node); } return node; } - /** - * Visits a TaggedTemplateExpression node. - * - * @param node A TaggedTemplateExpression node. - */ function visitTaggedTemplateExpression(node) { - // Visit the tag expression var tag = ts.visitNode(node.tag, visitor, ts.isExpression); - // Build up the template arguments and the raw and cooked strings for the template. - // We start out with 'undefined' for the first argument and revisit later - // to avoid walking over the template string twice and shifting all our arguments over after the fact. var templateArguments = [undefined]; var cookedStrings = []; var rawStrings = []; @@ -68359,9 +55871,6 @@ var ts; } } var helperCall = createTemplateObjectHelper(context, ts.createArrayLiteral(cookedStrings), ts.createArrayLiteral(rawStrings)); - // Create a variable to cache the template object if we're in a module. - // Do not do this in the global scope, as any variable we currently generate could conflict with - // variables from outside of the current compilation. In the future, we can revisit this behavior. if (ts.isExternalModule(currentSourceFile)) { var tempVar = ts.createUniqueName("templateObject"); recordTaggedTemplateString(tempVar); @@ -68370,48 +55879,19 @@ var ts; else { templateArguments[0] = helperCall; } - return ts.createCall(tag, /*typeArguments*/ undefined, templateArguments); + return ts.createCall(tag, undefined, templateArguments); } - /** - * Creates an ES5 compatible literal from an ES6 template literal. - * - * @param node The ES6 template literal. - */ function getRawLiteral(node) { - // Find original source text, since we need to emit the raw strings of the tagged template. - // The raw strings contain the (escaped) strings of what the user wrote. - // Examples: `\n` is converted to "\\n", a template string with a newline to "\n". var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node); - // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"), - // thus we need to remove those characters. - // First template piece starts with "`", others with "}" - // Last template piece ends with "`", others with "${" - var isLast = node.kind === 13 /* NoSubstitutionTemplateLiteral */ || node.kind === 16 /* TemplateTail */; + var isLast = node.kind === 13 || node.kind === 16; text = text.substring(1, text.length - (isLast ? 1 : 2)); - // Newline normalization: - // ES6 Spec 11.8.6.1 - Static Semantics of TV's and TRV's - // and LineTerminatorSequences are normalized to for both TV and TRV. text = text.replace(/\r\n?/g, "\n"); return ts.setTextRange(ts.createLiteral(text), node); } - /** - * Visits a TemplateExpression node. - * - * @param node A TemplateExpression node. - */ function visitTemplateExpression(node) { var expressions = []; addTemplateHead(expressions, node); addTemplateSpans(expressions, node); - // createAdd will check if each expression binds less closely than binary '+'. - // If it does, it wraps the expression in parentheses. Otherwise, something like - // `abc${ 1 << 2 }` - // becomes - // "abc" + 1 << 2 + "" - // which is really - // ("abc" + 1) << (2 + "") - // rather than - // "abc" + (1 << 2) + "" var expression = ts.reduceLeft(expressions, ts.createAdd); if (ts.nodeIsSynthesized(expression)) { expression.pos = node.pos; @@ -68419,137 +55899,76 @@ var ts; } return expression; } - /** - * Gets a value indicating whether we need to include the head of a TemplateExpression. - * - * @param node A TemplateExpression node. - */ function shouldAddTemplateHead(node) { - // If this expression has an empty head literal and the first template span has a non-empty - // literal, then emitting the empty head literal is not necessary. - // `${ foo } and ${ bar }` - // can be emitted as - // foo + " and " + bar - // This is because it is only required that one of the first two operands in the emit - // output must be a string literal, so that the other operand and all following operands - // are forced into strings. - // - // If the first template span has an empty literal, then the head must still be emitted. - // `${ foo }${ bar }` - // must still be emitted as - // "" + foo + bar - // There is always atleast one templateSpan in this code path, since - // NoSubstitutionTemplateLiterals are directly emitted via emitLiteral() ts.Debug.assert(node.templateSpans.length !== 0); return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0; } - /** - * Adds the head of a TemplateExpression to an array of expressions. - * - * @param expressions An array of expressions. - * @param node A TemplateExpression node. - */ function addTemplateHead(expressions, node) { if (!shouldAddTemplateHead(node)) { return; } expressions.push(ts.createLiteral(node.head.text)); } - /** - * Visits and adds the template spans of a TemplateExpression to an array of expressions. - * - * @param expressions An array of expressions. - * @param node A TemplateExpression node. - */ function addTemplateSpans(expressions, node) { for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) { var span = _a[_i]; expressions.push(ts.visitNode(span.expression, visitor, ts.isExpression)); - // Only emit if the literal is non-empty. - // The binary '+' operator is left-associative, so the first string concatenation - // with the head will force the result up to this point to be a string. - // Emitting a '+ ""' has no semantic effect for middles and tails. if (span.literal.text.length !== 0) { expressions.push(ts.createLiteral(span.literal.text)); } } } - /** - * Visits the `super` keyword - */ function visitSuperKeyword(isExpressionOfCall) { - return hierarchyFacts & 8 /* NonStaticClassElement */ + return hierarchyFacts & 8 && !isExpressionOfCall ? ts.createPropertyAccess(ts.createFileLevelUniqueName("_super"), "prototype") : ts.createFileLevelUniqueName("_super"); } function visitMetaProperty(node) { - if (node.keywordToken === 94 /* NewKeyword */ && node.name.escapedText === "target") { - if (hierarchyFacts & 8192 /* ComputedPropertyName */) { - hierarchyFacts |= 32768 /* NewTargetInComputedPropertyName */; + if (node.keywordToken === 94 && node.name.escapedText === "target") { + if (hierarchyFacts & 8192) { + hierarchyFacts |= 32768; } else { - hierarchyFacts |= 16384 /* NewTarget */; + hierarchyFacts |= 16384; } return ts.createFileLevelUniqueName("_newTarget"); } return node; } - /** - * Called by the printer just before a node is printed. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to be printed. - * @param emitCallback The callback used to emit the node. - */ function onEmitNode(hint, node, emitCallback) { - if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) { - // If we are tracking a captured `this`, keep track of the enclosing function. - var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */ - ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */ - : 65 /* FunctionIncludes */); + if (enabledSubstitutions & 1 && ts.isFunctionLike(node)) { + var ancestorFacts = enterSubtree(16286, ts.getEmitFlags(node) & 8 + ? 65 | 16 + : 65); previousOnEmitNode(hint, node, emitCallback); - exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + exitSubtree(ancestorFacts, 0, 0); return; } previousOnEmitNode(hint, node, emitCallback); } - /** - * Enables a more costly code path for substitutions when we determine a source file - * contains block-scoped bindings (e.g. `let` or `const`). - */ function enableSubstitutionsForBlockScopedBindings() { - if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) { - enabledSubstitutions |= 2 /* BlockScopedBindings */; - context.enableSubstitution(71 /* Identifier */); + if ((enabledSubstitutions & 2) === 0) { + enabledSubstitutions |= 2; + context.enableSubstitution(71); } } - /** - * Enables a more costly code path for substitutions when we determine a source file - * contains a captured `this`. - */ function enableSubstitutionsForCapturedThis() { - if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) { - enabledSubstitutions |= 1 /* CapturedThis */; - context.enableSubstitution(99 /* ThisKeyword */); - context.enableEmitNotification(155 /* Constructor */); - context.enableEmitNotification(154 /* MethodDeclaration */); - context.enableEmitNotification(156 /* GetAccessor */); - context.enableEmitNotification(157 /* SetAccessor */); - context.enableEmitNotification(193 /* ArrowFunction */); - context.enableEmitNotification(192 /* FunctionExpression */); - context.enableEmitNotification(234 /* FunctionDeclaration */); + if ((enabledSubstitutions & 1) === 0) { + enabledSubstitutions |= 1; + context.enableSubstitution(99); + context.enableEmitNotification(155); + context.enableEmitNotification(154); + context.enableEmitNotification(156); + context.enableEmitNotification(157); + context.enableEmitNotification(193); + context.enableEmitNotification(192); + context.enableEmitNotification(234); } } - /** - * Hooks node substitutions. - * - * @param hint The context for the emitter. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (hint === 1 /* Expression */) { + if (hint === 1) { return substituteExpression(node); } if (ts.isIdentifier(node)) { @@ -68557,13 +55976,8 @@ var ts; } return node; } - /** - * Hooks substitutions for non-expression identifiers. - */ function substituteIdentifier(node) { - // Only substitute the identifier if we have enabled substitutions for block-scoped - // bindings. - if (enabledSubstitutions & 2 /* BlockScopedBindings */ && !ts.isInternalName(node)) { + if (enabledSubstitutions & 2 && !ts.isInternalName(node)) { var original = ts.getParseTreeNode(node, ts.isIdentifier); if (original && isNameOfDeclarationWithCollidingName(original)) { return ts.setTextRange(ts.getGeneratedNameForNode(original), node); @@ -68571,44 +55985,28 @@ var ts; } return node; } - /** - * Determines whether a name is the name of a declaration with a colliding name. - * NOTE: This function expects to be called with an original source tree node. - * - * @param node An original source tree node. - */ function isNameOfDeclarationWithCollidingName(node) { switch (node.parent.kind) { - case 182 /* BindingElement */: - case 235 /* ClassDeclaration */: - case 238 /* EnumDeclaration */: - case 232 /* VariableDeclaration */: + case 182: + case 235: + case 238: + case 232: return node.parent.name === node && resolver.isDeclarationWithCollidingName(node.parent); } return false; } - /** - * Substitutes an expression. - * - * @param node An Expression node. - */ function substituteExpression(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return substituteExpressionIdentifier(node); - case 99 /* ThisKeyword */: + case 99: return substituteThisKeyword(node); } return node; } - /** - * Substitutes an expression identifier. - * - * @param node An Identifier node. - */ function substituteExpressionIdentifier(node) { - if (enabledSubstitutions & 2 /* BlockScopedBindings */ && !ts.isInternalName(node)) { + if (enabledSubstitutions & 2 && !ts.isInternalName(node)) { var declaration = resolver.getReferencedDeclarationWithCollidingName(node); if (declaration && !(ts.isClassLike(declaration) && isPartOfClassBody(declaration, node))) { return ts.setTextRange(ts.getGeneratedNameForNode(ts.getNameOfDeclaration(declaration)), node); @@ -68619,17 +56017,11 @@ var ts; function isPartOfClassBody(declaration, node) { var currentNode = ts.getParseTreeNode(node); if (!currentNode || currentNode === declaration || currentNode.end <= declaration.pos || currentNode.pos >= declaration.end) { - // if the node has no correlation to a parse tree node, its definitely not - // part of the body. - // if the node is outside of the document range of the declaration, its - // definitely not part of the body. return false; } var blockScope = ts.getEnclosingBlockScopeContainer(declaration); while (currentNode) { if (currentNode === blockScope || currentNode === declaration) { - // if we are in the enclosing block scope of the declaration, we are definitely - // not inside the class body. return false; } if (ts.isClassElement(currentNode) && currentNode.parent === declaration) { @@ -68639,20 +56031,15 @@ var ts; } return false; } - /** - * Substitutes `this` when contained within an arrow function. - * - * @param node The ThisKeyword node. - */ function substituteThisKeyword(node) { - if (enabledSubstitutions & 1 /* CapturedThis */ - && hierarchyFacts & 16 /* CapturesThis */) { + if (enabledSubstitutions & 1 + && hierarchyFacts & 16) { return ts.setTextRange(ts.createFileLevelUniqueName("_this"), node); } return node; } function getClassMemberPrefix(node, member) { - return ts.hasModifier(member, 32 /* Static */) + return ts.hasModifier(member, 32) ? ts.getInternalName(node) : ts.createPropertyAccess(ts.getInternalName(node), "prototype"); } @@ -68664,19 +56051,19 @@ var ts; return false; } var statement = ts.firstOrUndefined(constructor.body.statements); - if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 216 /* ExpressionStatement */) { + if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 216) { return false; } var statementExpression = statement.expression; - if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 187 /* CallExpression */) { + if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 187) { return false; } var callTarget = statementExpression.expression; - if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 97 /* SuperKeyword */) { + if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 97) { return false; } var callArgument = ts.singleOrUndefined(statementExpression.arguments); - if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 204 /* SpreadElement */) { + if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 204) { return false; } var expression = callArgument.expression; @@ -68686,16 +56073,14 @@ var ts; ts.transformES2015 = transformES2015; function createExtendsHelper(context, name) { context.requestEmitHelper(extendsHelper); - return ts.createCall(ts.getHelperName("__extends"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.getHelperName("__extends"), undefined, [ name, ts.createFileLevelUniqueName("_super") ]); } function createTemplateObjectHelper(context, cooked, raw) { context.requestEmitHelper(templateObjectHelper); - return ts.createCall(ts.getHelperName("__makeTemplateObject"), - /*typeArguments*/ undefined, [ + return ts.createCall(ts.getHelperName("__makeTemplateObject"), undefined, [ cooked, raw ]); @@ -68713,64 +56098,39 @@ var ts; text: "\n var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n };" }; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { - /** - * Transforms ES5 syntax into ES3 syntax. - * - * @param context Context and state information for the transformation. - */ function transformES5(context) { var compilerOptions = context.getCompilerOptions(); - // enable emit notification only if using --jsx preserve or react-native var previousOnEmitNode; var noSubstitution; - if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) { + if (compilerOptions.jsx === 1 || compilerOptions.jsx === 3) { previousOnEmitNode = context.onEmitNode; context.onEmitNode = onEmitNode; - context.enableEmitNotification(257 /* JsxOpeningElement */); - context.enableEmitNotification(258 /* JsxClosingElement */); - context.enableEmitNotification(256 /* JsxSelfClosingElement */); + context.enableEmitNotification(257); + context.enableEmitNotification(258); + context.enableEmitNotification(256); noSubstitution = []; } var previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; - context.enableSubstitution(185 /* PropertyAccessExpression */); - context.enableSubstitution(270 /* PropertyAssignment */); + context.enableSubstitution(185); + context.enableSubstitution(270); return ts.chainBundle(transformSourceFile); - /** - * Transforms an ES5 source file to ES3. - * - * @param node A SourceFile - */ function transformSourceFile(node) { return node; } - /** - * Called by the printer just before a node is printed. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emitCallback A callback used to emit the node. - */ function onEmitNode(hint, node, emitCallback) { switch (node.kind) { - case 257 /* JsxOpeningElement */: - case 258 /* JsxClosingElement */: - case 256 /* JsxSelfClosingElement */: + case 257: + case 258: + case 256: var tagName = node.tagName; noSubstitution[ts.getOriginalNodeId(tagName)] = true; break; } previousOnEmitNode(hint, node, emitCallback); } - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { if (node.id && noSubstitution && noSubstitution[node.id]) { return previousOnSubstituteNode(hint, node); @@ -68784,11 +56144,6 @@ var ts; } return node; } - /** - * Substitutes a PropertyAccessExpression whose name is a reserved word. - * - * @param node A PropertyAccessExpression - */ function substitutePropertyAccessExpression(node) { var literalName = trySubstituteReservedName(node.name); if (literalName) { @@ -68796,11 +56151,6 @@ var ts; } return node; } - /** - * Substitutes a PropertyAssignment whose name is a reserved word. - * - * @param node A PropertyAssignment - */ function substitutePropertyAssignment(node) { var literalName = ts.isIdentifier(node.name) && trySubstituteReservedName(node.name); if (literalName) { @@ -68808,14 +56158,9 @@ var ts; } return node; } - /** - * If an identifier name is a reserved word, returns a string literal for the name. - * - * @param name An Identifier - */ function trySubstituteReservedName(name) { var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined); - if (token !== undefined && token >= 72 /* FirstReservedWord */ && token <= 107 /* LastReservedWord */) { + if (token !== undefined && token >= 72 && token <= 107) { return ts.setTextRange(ts.createLiteral(name), name); } return undefined; @@ -68823,184 +56168,16 @@ var ts; } ts.transformES5 = transformES5; })(ts || (ts = {})); -// Transforms generator functions into a compatible ES5 representation with similar runtime -// semantics. This is accomplished by first transforming the body of each generator -// function into an intermediate representation that is the compiled into a JavaScript -// switch statement. -// -// Many functions in this transformer will contain comments indicating the expected -// intermediate representation. For illustrative purposes, the following intermediate -// language is used to define this intermediate representation: -// -// .nop - Performs no operation. -// .local NAME, ... - Define local variable declarations. -// .mark LABEL - Mark the location of a label. -// .br LABEL - Jump to a label. If jumping out of a protected -// region, all .finally blocks are executed. -// .brtrue LABEL, (x) - Jump to a label IIF the expression `x` is truthy. -// If jumping out of a protected region, all .finally -// blocks are executed. -// .brfalse LABEL, (x) - Jump to a label IIF the expression `x` is falsey. -// If jumping out of a protected region, all .finally -// blocks are executed. -// .yield (x) - Yield the value of the optional expression `x`. -// Resume at the next label. -// .yieldstar (x) - Delegate yield to the value of the optional -// expression `x`. Resume at the next label. -// NOTE: `x` must be an Iterator, not an Iterable. -// .loop CONTINUE, BREAK - Marks the beginning of a loop. Any "continue" or -// "break" abrupt completions jump to the CONTINUE or -// BREAK labels, respectively. -// .endloop - Marks the end of a loop. -// .with (x) - Marks the beginning of a WithStatement block, using -// the supplied expression. -// .endwith - Marks the end of a WithStatement. -// .switch - Marks the beginning of a SwitchStatement. -// .endswitch - Marks the end of a SwitchStatement. -// .labeled NAME - Marks the beginning of a LabeledStatement with the -// supplied name. -// .endlabeled - Marks the end of a LabeledStatement. -// .try TRY, CATCH, FINALLY, END - Marks the beginning of a protected region, and the -// labels for each block. -// .catch (x) - Marks the beginning of a catch block. -// .finally - Marks the beginning of a finally block. -// .endfinally - Marks the end of a finally block. -// .endtry - Marks the end of a protected region. -// .throw (x) - Throws the value of the expression `x`. -// .return (x) - Returns the value of the expression `x`. -// -// In addition, the illustrative intermediate representation introduces some special -// variables: -// -// %sent% - Either returns the next value sent to the generator, -// returns the result of a delegated yield, or throws -// the exception sent to the generator. -// %error% - Returns the value of the current exception in a -// catch block. -// -// This intermediate representation is then compiled into JavaScript syntax. The resulting -// compilation output looks something like the following: -// -// function f() { -// var /*locals*/; -// /*functions*/ -// return __generator(function (state) { -// switch (state.label) { -// /*cases per label*/ -// } -// }); -// } -// -// Each of the above instructions corresponds to JavaScript emit similar to the following: -// -// .local NAME | var NAME; -// -------------------------------|---------------------------------------------- -// .mark LABEL | case LABEL: -// -------------------------------|---------------------------------------------- -// .br LABEL | return [3 /*break*/, LABEL]; -// -------------------------------|---------------------------------------------- -// .brtrue LABEL, (x) | if (x) return [3 /*break*/, LABEL]; -// -------------------------------|---------------------------------------------- -// .brfalse LABEL, (x) | if (!(x)) return [3, /*break*/, LABEL]; -// -------------------------------|---------------------------------------------- -// .yield (x) | return [4 /*yield*/, x]; -// .mark RESUME | case RESUME: -// a = %sent%; | a = state.sent(); -// -------------------------------|---------------------------------------------- -// .yieldstar (x) | return [5 /*yield**/, x]; -// .mark RESUME | case RESUME: -// a = %sent%; | a = state.sent(); -// -------------------------------|---------------------------------------------- -// .with (_a) | with (_a) { -// a(); | a(); -// | } -// | state.label = LABEL; -// .mark LABEL | case LABEL: -// | with (_a) { -// b(); | b(); -// | } -// .endwith | -// -------------------------------|---------------------------------------------- -// | case 0: -// | state.trys = []; -// | ... -// .try TRY, CATCH, FINALLY, END | -// .mark TRY | case TRY: -// | state.trys.push([TRY, CATCH, FINALLY, END]); -// .nop | -// a(); | a(); -// .br END | return [3 /*break*/, END]; -// .catch (e) | -// .mark CATCH | case CATCH: -// | e = state.sent(); -// b(); | b(); -// .br END | return [3 /*break*/, END]; -// .finally | -// .mark FINALLY | case FINALLY: -// c(); | c(); -// .endfinally | return [7 /*endfinally*/]; -// .endtry | -// .mark END | case END: -/*@internal*/ var ts; (function (ts) { - var OpCode; - (function (OpCode) { - OpCode[OpCode["Nop"] = 0] = "Nop"; - OpCode[OpCode["Statement"] = 1] = "Statement"; - OpCode[OpCode["Assign"] = 2] = "Assign"; - OpCode[OpCode["Break"] = 3] = "Break"; - OpCode[OpCode["BreakWhenTrue"] = 4] = "BreakWhenTrue"; - OpCode[OpCode["BreakWhenFalse"] = 5] = "BreakWhenFalse"; - OpCode[OpCode["Yield"] = 6] = "Yield"; - OpCode[OpCode["YieldStar"] = 7] = "YieldStar"; - OpCode[OpCode["Return"] = 8] = "Return"; - OpCode[OpCode["Throw"] = 9] = "Throw"; - OpCode[OpCode["Endfinally"] = 10] = "Endfinally"; // Marks the end of a `finally` block - })(OpCode || (OpCode = {})); - // whether a generated code block is opening or closing at the current operation for a FunctionBuilder - var BlockAction; - (function (BlockAction) { - BlockAction[BlockAction["Open"] = 0] = "Open"; - BlockAction[BlockAction["Close"] = 1] = "Close"; - })(BlockAction || (BlockAction = {})); - // the kind for a generated code block in a FunctionBuilder - var CodeBlockKind; - (function (CodeBlockKind) { - CodeBlockKind[CodeBlockKind["Exception"] = 0] = "Exception"; - CodeBlockKind[CodeBlockKind["With"] = 1] = "With"; - CodeBlockKind[CodeBlockKind["Switch"] = 2] = "Switch"; - CodeBlockKind[CodeBlockKind["Loop"] = 3] = "Loop"; - CodeBlockKind[CodeBlockKind["Labeled"] = 4] = "Labeled"; - })(CodeBlockKind || (CodeBlockKind = {})); - // the state for a generated code exception block - var ExceptionBlockState; - (function (ExceptionBlockState) { - ExceptionBlockState[ExceptionBlockState["Try"] = 0] = "Try"; - ExceptionBlockState[ExceptionBlockState["Catch"] = 1] = "Catch"; - ExceptionBlockState[ExceptionBlockState["Finally"] = 2] = "Finally"; - ExceptionBlockState[ExceptionBlockState["Done"] = 3] = "Done"; - })(ExceptionBlockState || (ExceptionBlockState = {})); - // NOTE: changes to this enum should be reflected in the __generator helper. - var Instruction; - (function (Instruction) { - Instruction[Instruction["Next"] = 0] = "Next"; - Instruction[Instruction["Throw"] = 1] = "Throw"; - Instruction[Instruction["Return"] = 2] = "Return"; - Instruction[Instruction["Break"] = 3] = "Break"; - Instruction[Instruction["Yield"] = 4] = "Yield"; - Instruction[Instruction["YieldStar"] = 5] = "YieldStar"; - Instruction[Instruction["Catch"] = 6] = "Catch"; - Instruction[Instruction["Endfinally"] = 7] = "Endfinally"; - })(Instruction || (Instruction = {})); function getInstructionName(instruction) { switch (instruction) { - case 2 /* Return */: return "return"; - case 3 /* Break */: return "break"; - case 4 /* Yield */: return "yield"; - case 5 /* YieldStar */: return "yield*"; - case 7 /* Endfinally */: return "endfinally"; - default: return undefined; // TODO: GH#18217 + case 2: return "return"; + case 3: return "break"; + case 4: return "yield"; + case 5: return "yield*"; + case 7: return "endfinally"; + default: return undefined; } } function transformGenerators(context) { @@ -69014,57 +56191,36 @@ var ts; var renamedCatchVariableDeclarations; var inGeneratorFunctionBody; var inStatementContainingYield; - // The following three arrays store information about generated code blocks. - // All three arrays are correlated by their index. This approach is used over allocating - // objects to store the same information to avoid GC overhead. - // - var blocks; // Information about the code block - var blockOffsets; // The operation offset at which a code block begins or ends - var blockActions; // Whether the code block is opened or closed - var blockStack; // A stack of currently open code blocks - // Labels are used to mark locations in the code that can be the target of a Break (jump) - // operation. These are translated into case clauses in a switch statement. - // The following two arrays are correlated by their index. This approach is used over - // allocating objects to store the same information to avoid GC overhead. - // - var labelOffsets; // The operation offset at which the label is defined. - var labelExpressions; // The NumericLiteral nodes bound to each label. - var nextLabelId = 1; // The next label id to use. - // Operations store information about generated code for the function body. This - // Includes things like statements, assignments, breaks (jumps), and yields. - // The following three arrays are correlated by their index. This approach is used over - // allocating objects to store the same information to avoid GC overhead. - // - var operations; // The operation to perform. - var operationArguments; // The arguments to the operation. - var operationLocations; // The source map location for the operation. - var state; // The name of the state object used by the generator at runtime. - // The following variables store information used by the `build` function: - // - var blockIndex = 0; // The index of the current block. - var labelNumber = 0; // The current label number. + var blocks; + var blockOffsets; + var blockActions; + var blockStack; + var labelOffsets; + var labelExpressions; + var nextLabelId = 1; + var operations; + var operationArguments; + var operationLocations; + var state; + var blockIndex = 0; + var labelNumber = 0; var labelNumbers; - var lastOperationWasAbrupt; // Indicates whether the last operation was abrupt (break/continue). - var lastOperationWasCompletion; // Indicates whether the last operation was a completion (return/throw). - var clauses; // The case clauses generated for labels. - var statements; // The statements for the current label. - var exceptionBlockStack; // A stack of containing exception blocks. - var currentExceptionBlock; // The current exception block. - var withBlockStack; // A stack containing `with` blocks. + var lastOperationWasAbrupt; + var lastOperationWasCompletion; + var clauses; + var statements; + var exceptionBlockStack; + var currentExceptionBlock; + var withBlockStack; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { - if (node.isDeclarationFile || (node.transformFlags & 512 /* ContainsGenerator */) === 0) { + if (node.isDeclarationFile || (node.transformFlags & 512) === 0) { return node; } var visited = ts.visitEachChild(node, visitor, context); ts.addEmitHelpers(visited, context.readEmitHelpers()); return visited; } - /** - * Visits a node. - * - * @param node The node to visit. - */ function visitor(node) { var transformFlags = node.transformFlags; if (inStatementContainingYield) { @@ -69073,66 +56229,56 @@ var ts; else if (inGeneratorFunctionBody) { return visitJavaScriptInGeneratorFunctionBody(node); } - else if (transformFlags & 256 /* Generator */) { + else if (transformFlags & 256) { return visitGenerator(node); } - else if (transformFlags & 512 /* ContainsGenerator */) { + else if (transformFlags & 512) { return ts.visitEachChild(node, visitor, context); } else { return node; } } - /** - * Visits a node that is contained within a statement that contains yield. - * - * @param node The node to visit. - */ function visitJavaScriptInStatementContainingYield(node) { switch (node.kind) { - case 218 /* DoStatement */: + case 218: return visitDoStatement(node); - case 219 /* WhileStatement */: + case 219: return visitWhileStatement(node); - case 227 /* SwitchStatement */: + case 227: return visitSwitchStatement(node); - case 228 /* LabeledStatement */: + case 228: return visitLabeledStatement(node); default: return visitJavaScriptInGeneratorFunctionBody(node); } } - /** - * Visits a node that is contained within a generator function. - * - * @param node The node to visit. - */ function visitJavaScriptInGeneratorFunctionBody(node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 192 /* FunctionExpression */: + case 192: return visitFunctionExpression(node); - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return visitAccessorDeclaration(node); - case 214 /* VariableStatement */: + case 214: return visitVariableStatement(node); - case 220 /* ForStatement */: + case 220: return visitForStatement(node); - case 221 /* ForInStatement */: + case 221: return visitForInStatement(node); - case 224 /* BreakStatement */: + case 224: return visitBreakStatement(node); - case 223 /* ContinueStatement */: + case 223: return visitContinueStatement(node); - case 225 /* ReturnStatement */: + case 225: return visitReturnStatement(node); default: - if (node.transformFlags & 16777216 /* ContainsYield */) { + if (node.transformFlags & 16777216) { return visitJavaScriptContainingYield(node); } - else if (node.transformFlags & (512 /* ContainsGenerator */ | 33554432 /* ContainsHoistedDeclarationOrCompletion */)) { + else if (node.transformFlags & (512 | 33554432)) { return ts.visitEachChild(node, visitor, context); } else { @@ -69140,66 +56286,41 @@ var ts; } } } - /** - * Visits a node that contains a YieldExpression. - * - * @param node The node to visit. - */ function visitJavaScriptContainingYield(node) { switch (node.kind) { - case 200 /* BinaryExpression */: + case 200: return visitBinaryExpression(node); - case 201 /* ConditionalExpression */: + case 201: return visitConditionalExpression(node); - case 203 /* YieldExpression */: + case 203: return visitYieldExpression(node); - case 183 /* ArrayLiteralExpression */: + case 183: return visitArrayLiteralExpression(node); - case 184 /* ObjectLiteralExpression */: + case 184: return visitObjectLiteralExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return visitElementAccessExpression(node); - case 187 /* CallExpression */: + case 187: return visitCallExpression(node); - case 188 /* NewExpression */: + case 188: return visitNewExpression(node); default: return ts.visitEachChild(node, visitor, context); } } - /** - * Visits a generator function. - * - * @param node The node to visit. - */ function visitGenerator(node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 192 /* FunctionExpression */: + case 192: return visitFunctionExpression(node); default: return ts.Debug.failBadSyntaxKind(node); } } - /** - * Visits a function declaration. - * - * This will be called when one of the following conditions are met: - * - The function declaration is a generator function. - * - The function declaration is contained within the body of a generator function. - * - * @param node The node to visit. - */ function visitFunctionDeclaration(node) { - // Currently, we only support generators that were originally async functions. if (node.asteriskToken) { - node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration( - /*decorators*/ undefined, node.modifiers, - /*asteriskToken*/ undefined, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, transformGeneratorFunctionBody(node.body)), - /*location*/ node), node); + node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration(undefined, node.modifiers, undefined, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformGeneratorFunctionBody(node.body)), node), node); } else { var savedInGeneratorFunctionBody = inGeneratorFunctionBody; @@ -69211,8 +56332,6 @@ var ts; inStatementContainingYield = savedInStatementContainingYield; } if (inGeneratorFunctionBody) { - // Function declarations in a generator function body are hoisted - // to the top of the lexical scope and elided from the current statement. hoistFunctionDeclaration(node); return undefined; } @@ -69220,24 +56339,9 @@ var ts; return node; } } - /** - * Visits a function expression. - * - * This will be called when one of the following conditions are met: - * - The function expression is a generator function. - * - The function expression is contained within the body of a generator function. - * - * @param node The node to visit. - */ function visitFunctionExpression(node) { - // Currently, we only support generators that were originally async functions. if (node.asteriskToken) { - node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, node.name, - /*typeParameters*/ undefined, ts.visitParameterList(node.parameters, visitor, context), - /*type*/ undefined, transformGeneratorFunctionBody(node.body)), - /*location*/ node), node); + node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(undefined, undefined, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformGeneratorFunctionBody(node.body)), node), node); } else { var savedInGeneratorFunctionBody = inGeneratorFunctionBody; @@ -69250,14 +56354,6 @@ var ts; } return node; } - /** - * Visits a get or set accessor declaration. - * - * This will be called when one of the following conditions are met: - * - The accessor is contained within the body of a generator function. - * - * @param node The node to visit. - */ function visitAccessorDeclaration(node) { var savedInGeneratorFunctionBody = inGeneratorFunctionBody; var savedInStatementContainingYield = inStatementContainingYield; @@ -69268,13 +56364,7 @@ var ts; inStatementContainingYield = savedInStatementContainingYield; return node; } - /** - * Transforms the body of a generator function declaration. - * - * @param node The function body to transform. - */ function transformGeneratorFunctionBody(body) { - // Save existing generator state var statements = []; var savedInGeneratorFunctionBody = inGeneratorFunctionBody; var savedInStatementContainingYield = inStatementContainingYield; @@ -69289,7 +56379,6 @@ var ts; var savedOperationArguments = operationArguments; var savedOperationLocations = operationLocations; var savedState = state; - // Initialize generator state inGeneratorFunctionBody = true; inStatementContainingYield = false; blocks = undefined; @@ -69302,15 +56391,13 @@ var ts; operations = undefined; operationArguments = undefined; operationLocations = undefined; - state = ts.createTempVariable(/*recordTempVariable*/ undefined); - // Build the generator + state = ts.createTempVariable(undefined); resumeLexicalEnvironment(); - var statementOffset = ts.addPrologue(statements, body.statements, /*ensureUseStrict*/ false, visitor); + var statementOffset = ts.addPrologue(statements, body.statements, false, visitor); transformAndEmitStatements(body.statements, statementOffset); var buildResult = build(); ts.prependStatements(statements, endLexicalEnvironment()); statements.push(ts.createReturn(buildResult)); - // Restore previous generator state inGeneratorFunctionBody = savedInGeneratorFunctionBody; inStatementContainingYield = savedInStatementContainingYield; blocks = savedBlocks; @@ -69326,22 +56413,13 @@ var ts; state = savedState; return ts.setTextRange(ts.createBlock(statements, body.multiLine), body); } - /** - * Visits a variable statement. - * - * This will be called when one of the following conditions are met: - * - The variable statement is contained within the body of a generator function. - * - * @param node The node to visit. - */ function visitVariableStatement(node) { - if (node.transformFlags & 16777216 /* ContainsYield */) { + if (node.transformFlags & 16777216) { transformAndEmitVariableDeclarationList(node.declarationList); return undefined; } else { - // Do not hoist custom prologues. - if (ts.getEmitFlags(node) & 1048576 /* CustomPrologue */) { + if (ts.getEmitFlags(node) & 1048576) { return node; } for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { @@ -69355,78 +56433,46 @@ var ts; return ts.setSourceMapRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node); } } - /** - * Visits a binary expression. - * - * This will be called when one of the following conditions are met: - * - The node contains a YieldExpression. - * - * @param node The node to visit. - */ function visitBinaryExpression(node) { var assoc = ts.getExpressionAssociativity(node); switch (assoc) { - case 0 /* Left */: + case 0: return visitLeftAssociativeBinaryExpression(node); - case 1 /* Right */: + case 1: return visitRightAssociativeBinaryExpression(node); default: return ts.Debug.assertNever(assoc); } } function isCompoundAssignment(kind) { - return kind >= 59 /* FirstCompoundAssignment */ - && kind <= 70 /* LastCompoundAssignment */; + return kind >= 59 + && kind <= 70; } function getOperatorForCompoundAssignment(kind) { switch (kind) { - case 59 /* PlusEqualsToken */: return 37 /* PlusToken */; - case 60 /* MinusEqualsToken */: return 38 /* MinusToken */; - case 61 /* AsteriskEqualsToken */: return 39 /* AsteriskToken */; - case 62 /* AsteriskAsteriskEqualsToken */: return 40 /* AsteriskAsteriskToken */; - case 63 /* SlashEqualsToken */: return 41 /* SlashToken */; - case 64 /* PercentEqualsToken */: return 42 /* PercentToken */; - case 65 /* LessThanLessThanEqualsToken */: return 45 /* LessThanLessThanToken */; - case 66 /* GreaterThanGreaterThanEqualsToken */: return 46 /* GreaterThanGreaterThanToken */; - case 67 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 47 /* GreaterThanGreaterThanGreaterThanToken */; - case 68 /* AmpersandEqualsToken */: return 48 /* AmpersandToken */; - case 69 /* BarEqualsToken */: return 49 /* BarToken */; - case 70 /* CaretEqualsToken */: return 50 /* CaretToken */; + case 59: return 37; + case 60: return 38; + case 61: return 39; + case 62: return 40; + case 63: return 41; + case 64: return 42; + case 65: return 45; + case 66: return 46; + case 67: return 47; + case 68: return 48; + case 69: return 49; + case 70: return 50; } } - /** - * Visits a right-associative binary expression containing `yield`. - * - * @param node The node to visit. - */ function visitRightAssociativeBinaryExpression(node) { var left = node.left, right = node.right; if (containsYield(right)) { var target = void 0; switch (left.kind) { - case 185 /* PropertyAccessExpression */: - // [source] - // a.b = yield; - // - // [intermediate] - // .local _a - // _a = a; - // .yield resumeLabel - // .mark resumeLabel - // _a.b = %sent%; + case 185: target = ts.updatePropertyAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name); break; - case 186 /* ElementAccessExpression */: - // [source] - // a[b] = yield; - // - // [intermediate] - // .local _a, _b - // _a = a; - // _b = b; - // .yield resumeLabel - // .mark resumeLabel - // _a[_b] = %sent%; + case 186: target = ts.updateElementAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), cacheExpression(ts.visitNode(left.argumentExpression, visitor, ts.isExpression))); break; default: @@ -69448,17 +56494,9 @@ var ts; if (ts.isLogicalOperator(node.operatorToken.kind)) { return visitLogicalBinaryExpression(node); } - else if (node.operatorToken.kind === 26 /* CommaToken */) { + else if (node.operatorToken.kind === 26) { return visitCommaExpression(node); } - // [source] - // a() + (yield) + c() - // - // [intermediate] - // .local _a - // _a = a(); - // .yield resumeLabel - // _a + %sent% + c() 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); @@ -69466,176 +56504,73 @@ var ts; } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a logical binary expression containing `yield`. - * - * @param node A node to visit. - */ function visitLogicalBinaryExpression(node) { - // Logical binary expressions (`&&` and `||`) are shortcutting expressions and need - // to be transformed as such: - // - // [source] - // x = a() && yield; - // - // [intermediate] - // .local _a - // _a = a(); - // .brfalse resultLabel, (_a) - // .yield resumeLabel - // .mark resumeLabel - // _a = %sent%; - // .mark resultLabel - // x = _a; - // - // [source] - // x = a() || yield; - // - // [intermediate] - // .local _a - // _a = a(); - // .brtrue resultLabel, (_a) - // .yield resumeLabel - // .mark resumeLabel - // _a = %sent%; - // .mark resultLabel - // x = _a; var resultLabel = defineLabel(); var resultLocal = declareLocal(); - emitAssignment(resultLocal, ts.visitNode(node.left, visitor, ts.isExpression), /*location*/ node.left); - if (node.operatorToken.kind === 53 /* AmpersandAmpersandToken */) { - // Logical `&&` shortcuts when the left-hand operand is falsey. - emitBreakWhenFalse(resultLabel, resultLocal, /*location*/ node.left); + emitAssignment(resultLocal, ts.visitNode(node.left, visitor, ts.isExpression), node.left); + if (node.operatorToken.kind === 53) { + emitBreakWhenFalse(resultLabel, resultLocal, node.left); } else { - // Logical `||` shortcuts when the left-hand operand is truthy. - emitBreakWhenTrue(resultLabel, resultLocal, /*location*/ node.left); + emitBreakWhenTrue(resultLabel, resultLocal, node.left); } - emitAssignment(resultLocal, ts.visitNode(node.right, visitor, ts.isExpression), /*location*/ node.right); + emitAssignment(resultLocal, ts.visitNode(node.right, visitor, ts.isExpression), node.right); markLabel(resultLabel); return resultLocal; } - /** - * Visits a comma expression containing `yield`. - * - * @param node The node to visit. - */ function visitCommaExpression(node) { - // [source] - // x = a(), yield, b(); - // - // [intermediate] - // a(); - // .yield resumeLabel - // .mark resumeLabel - // x = %sent%, b(); var pendingExpressions = []; visit(node.left); visit(node.right); return ts.inlineExpressions(pendingExpressions); function visit(node) { - if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26 /* CommaToken */) { + if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) { visit(node.left); visit(node.right); } else { if (containsYield(node) && pendingExpressions.length > 0) { - emitWorker(1 /* Statement */, [ts.createStatement(ts.inlineExpressions(pendingExpressions))]); + emitWorker(1, [ts.createStatement(ts.inlineExpressions(pendingExpressions))]); pendingExpressions = []; } pendingExpressions.push(ts.visitNode(node, visitor, ts.isExpression)); } } } - /** - * Visits a conditional expression containing `yield`. - * - * @param node The node to visit. - */ function visitConditionalExpression(node) { - // [source] - // x = a() ? yield : b(); - // - // [intermediate] - // .local _a - // .brfalse whenFalseLabel, (a()) - // .yield resumeLabel - // .mark resumeLabel - // _a = %sent%; - // .br resultLabel - // .mark whenFalseLabel - // _a = b(); - // .mark resultLabel - // x = _a; - // We only need to perform a specific transformation if a `yield` expression exists - // in either the `whenTrue` or `whenFalse` branches. - // A `yield` in the condition will be handled by the normal visitor. if (containsYield(node.whenTrue) || containsYield(node.whenFalse)) { var whenFalseLabel = defineLabel(); var resultLabel = defineLabel(); var resultLocal = declareLocal(); - emitBreakWhenFalse(whenFalseLabel, ts.visitNode(node.condition, visitor, ts.isExpression), /*location*/ node.condition); - emitAssignment(resultLocal, ts.visitNode(node.whenTrue, visitor, ts.isExpression), /*location*/ node.whenTrue); + emitBreakWhenFalse(whenFalseLabel, ts.visitNode(node.condition, visitor, ts.isExpression), node.condition); + emitAssignment(resultLocal, ts.visitNode(node.whenTrue, visitor, ts.isExpression), node.whenTrue); emitBreak(resultLabel); markLabel(whenFalseLabel); - emitAssignment(resultLocal, ts.visitNode(node.whenFalse, visitor, ts.isExpression), /*location*/ node.whenFalse); + emitAssignment(resultLocal, ts.visitNode(node.whenFalse, visitor, ts.isExpression), node.whenFalse); markLabel(resultLabel); return resultLocal; } return ts.visitEachChild(node, visitor, context); } - /** - * Visits a `yield` expression. - * - * @param node The node to visit. - */ function visitYieldExpression(node) { - // [source] - // x = yield a(); - // - // [intermediate] - // .yield resumeLabel, (a()) - // .mark resumeLabel - // x = %sent%; var resumeLabel = defineLabel(); var expression = ts.visitNode(node.expression, visitor, ts.isExpression); if (node.asteriskToken) { - var iterator = (ts.getEmitFlags(node.expression) & 8388608 /* Iterator */) === 0 - ? ts.createValuesHelper(context, expression, /*location*/ node) + var iterator = (ts.getEmitFlags(node.expression) & 8388608) === 0 + ? ts.createValuesHelper(context, expression, node) : expression; - emitYieldStar(iterator, /*location*/ node); + emitYieldStar(iterator, node); } else { - emitYield(expression, /*location*/ node); + emitYield(expression, node); } markLabel(resumeLabel); - return createGeneratorResume(/*location*/ node); + return createGeneratorResume(node); } - /** - * Visits an ArrayLiteralExpression that contains a YieldExpression. - * - * @param node The node to visit. - */ function visitArrayLiteralExpression(node) { - return visitElements(node.elements, /*leadingElement*/ undefined, /*location*/ undefined, node.multiLine); + return visitElements(node.elements, undefined, undefined, node.multiLine); } - /** - * Visits an array of expressions containing one or more YieldExpression nodes - * and returns an expression for the resulting value. - * - * @param elements The elements to visit. - * @param multiLine Whether array literals created should be emitted on multiple lines. - */ function visitElements(elements, leadingElement, location, multiLine) { - // [source] - // ar = [1, yield, 2]; - // - // [intermediate] - // .local _a - // _a = [1]; - // .yield resumeLabel - // .mark resumeLabel - // ar = _a.concat([%sent%, 2]); var numInitialElements = countInitialNodesWithoutYield(elements); var temp; if (numInitialElements > 0) { @@ -69666,23 +56601,6 @@ var ts; } } function visitObjectLiteralExpression(node) { - // [source] - // o = { - // a: 1, - // b: yield, - // c: 2 - // }; - // - // [intermediate] - // .local _a - // _a = { - // a: 1 - // }; - // .yield resumeLabel - // .mark resumeLabel - // o = (_a.b = %sent%, - // _a.c = 2, - // _a); var properties = node.properties; var multiLine = node.multiLine; var numInitialProperties = countInitialNodesWithoutYield(properties); @@ -69707,22 +56625,8 @@ var ts; return expressions; } } - /** - * Visits an ElementAccessExpression that contains a YieldExpression. - * - * @param node The node to visit. - */ function visitElementAccessExpression(node) { if (containsYield(node.argumentExpression)) { - // [source] - // a = x[yield]; - // - // [intermediate] - // .local _a - // _a = x; - // .yield resumeLabel - // .mark resumeLabel - // a = _a[%sent%] 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); @@ -69732,38 +56636,15 @@ var ts; } function visitCallExpression(node) { if (!ts.isImportCall(node) && ts.forEach(node.arguments, containsYield)) { - // [source] - // a.b(1, yield, 2); - // - // [intermediate] - // .local _a, _b, _c - // _b = (_a = a).b; - // _c = [1]; - // .yield resumeLabel - // .mark resumeLabel - // _b.apply(_a, _c.concat([%sent%, 2])); - var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion, /*cacheIdentifiers*/ true), target = _a.target, thisArg = _a.thisArg; - return ts.setOriginalNode(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isLeftHandSideExpression)), thisArg, visitElements(node.arguments), - /*location*/ node), node); + var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion, true), target = _a.target, thisArg = _a.thisArg; + return ts.setOriginalNode(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isLeftHandSideExpression)), thisArg, visitElements(node.arguments), node), node); } return ts.visitEachChild(node, visitor, context); } function visitNewExpression(node) { if (ts.forEach(node.arguments, containsYield)) { - // [source] - // new a.b(1, yield, 2); - // - // [intermediate] - // .local _a, _b, _c - // _b = (_a = a.b).bind; - // _c = [1]; - // .yield resumeLabel - // .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.setTextRange(ts.createNew(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments, - /*leadingElement*/ ts.createVoidZero())), - /*typeArguments*/ undefined, []), node), node); + return ts.setOriginalNode(ts.setTextRange(ts.createNew(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments, ts.createVoidZero())), undefined, []), node), node); } return ts.visitEachChild(node, visitor, context); } @@ -69792,35 +56673,35 @@ var ts; } function transformAndEmitStatementWorker(node) { switch (node.kind) { - case 213 /* Block */: + case 213: return transformAndEmitBlock(node); - case 216 /* ExpressionStatement */: + case 216: return transformAndEmitExpressionStatement(node); - case 217 /* IfStatement */: + case 217: return transformAndEmitIfStatement(node); - case 218 /* DoStatement */: + case 218: return transformAndEmitDoStatement(node); - case 219 /* WhileStatement */: + case 219: return transformAndEmitWhileStatement(node); - case 220 /* ForStatement */: + case 220: return transformAndEmitForStatement(node); - case 221 /* ForInStatement */: + case 221: return transformAndEmitForInStatement(node); - case 223 /* ContinueStatement */: + case 223: return transformAndEmitContinueStatement(node); - case 224 /* BreakStatement */: + case 224: return transformAndEmitBreakStatement(node); - case 225 /* ReturnStatement */: + case 225: return transformAndEmitReturnStatement(node); - case 226 /* WithStatement */: + case 226: return transformAndEmitWithStatement(node); - case 227 /* SwitchStatement */: + case 227: return transformAndEmitSwitchStatement(node); - case 228 /* LabeledStatement */: + case 228: return transformAndEmitLabeledStatement(node); - case 229 /* ThrowStatement */: + case 229: return transformAndEmitThrowStatement(node); - case 230 /* TryStatement */: + case 230: return transformAndEmitTryStatement(node); default: return emitStatement(ts.visitNode(node, visitor, ts.isStatement)); @@ -69869,23 +56750,10 @@ var ts; } function transformAndEmitIfStatement(node) { if (containsYield(node)) { - // [source] - // if (x) - // /*thenStatement*/ - // else - // /*elseStatement*/ - // - // [intermediate] - // .brfalse elseLabel, (x) - // /*thenStatement*/ - // .br endLabel - // .mark elseLabel - // /*elseStatement*/ - // .mark endLabel if (containsYield(node.thenStatement) || containsYield(node.elseStatement)) { var endLabel = defineLabel(); var elseLabel = node.elseStatement ? defineLabel() : undefined; - emitBreakWhenFalse(node.elseStatement ? elseLabel : endLabel, ts.visitNode(node.expression, visitor, ts.isExpression), /*location*/ node.expression); + emitBreakWhenFalse(node.elseStatement ? elseLabel : endLabel, ts.visitNode(node.expression, visitor, ts.isExpression), node.expression); transformAndEmitEmbeddedStatement(node.thenStatement); if (node.elseStatement) { emitBreak(endLabel); @@ -69904,23 +56772,9 @@ var ts; } function transformAndEmitDoStatement(node) { if (containsYield(node)) { - // [source] - // do { - // /*body*/ - // } - // while (i < 10); - // - // [intermediate] - // .loop conditionLabel, endLabel - // .mark loopLabel - // /*body*/ - // .mark conditionLabel - // .brtrue loopLabel, (i < 10) - // .endloop - // .mark endLabel var conditionLabel = defineLabel(); var loopLabel = defineLabel(); - beginLoopBlock(/*continueLabel*/ conditionLabel); + beginLoopBlock(conditionLabel); markLabel(loopLabel); transformAndEmitEmbeddedStatement(node.statement); markLabel(conditionLabel); @@ -69944,19 +56798,6 @@ var ts; } function transformAndEmitWhileStatement(node) { if (containsYield(node)) { - // [source] - // while (i < 10) { - // /*body*/ - // } - // - // [intermediate] - // .loop loopLabel, endLabel - // .mark loopLabel - // .brfalse endLabel, (i < 10) - // /*body*/ - // .br loopLabel - // .endloop - // .mark endLabel var loopLabel = defineLabel(); var endLabel = beginLoopBlock(loopLabel); markLabel(loopLabel); @@ -69982,23 +56823,6 @@ var ts; } function transformAndEmitForStatement(node) { if (containsYield(node)) { - // [source] - // for (var i = 0; i < 10; i++) { - // /*body*/ - // } - // - // [intermediate] - // .local i - // i = 0; - // .loop incrementLabel, endLoopLabel - // .mark conditionLabel - // .brfalse endLoopLabel, (i < 10) - // /*body*/ - // .mark incrementLabel - // i++; - // .br conditionLabel - // .endloop - // .mark endLoopLabel var conditionLabel = defineLabel(); var incrementLabel = defineLabel(); var endLabel = beginLoopBlock(incrementLabel); @@ -70051,36 +56875,14 @@ var ts; return node; } function transformAndEmitForInStatement(node) { - // TODO(rbuckton): Source map locations if (containsYield(node)) { - // [source] - // for (var p in o) { - // /*body*/ - // } - // - // [intermediate] - // .local _a, _b, _i - // _a = []; - // for (_b in o) _a.push(_b); - // _i = 0; - // .loop incrementLabel, endLoopLabel - // .mark conditionLabel - // .brfalse endLoopLabel, (_i < _a.length) - // p = _a[_i]; - // /*body*/ - // .mark incrementLabel - // _b++; - // .br conditionLabel - // .endloop - // .mark endLoopLabel - var keysArray = declareLocal(); // _a - var key = declareLocal(); // _b - var keysIndex = ts.createLoopVariable(); // _i + var keysArray = declareLocal(); + var key = declareLocal(); + var keysIndex = ts.createLoopVariable(); var initializer = node.initializer; hoistVariableDeclaration(keysIndex); emitAssignment(keysArray, ts.createArrayLiteral()); - emitStatement(ts.createForIn(key, ts.visitNode(node.expression, visitor, ts.isExpression), ts.createStatement(ts.createCall(ts.createPropertyAccess(keysArray, "push"), - /*typeArguments*/ undefined, [key])))); + emitStatement(ts.createForIn(key, ts.visitNode(node.expression, visitor, ts.isExpression), ts.createStatement(ts.createCall(ts.createPropertyAccess(keysArray, "push"), undefined, [key])))); emitAssignment(keysIndex, ts.createLiteral(0)); var conditionLabel = defineLabel(); var incrementLabel = defineLabel(); @@ -70111,18 +56913,6 @@ var ts; } } function visitForInStatement(node) { - // [source] - // for (var x in a) { - // /*body*/ - // } - // - // [intermediate] - // .local x - // .loop - // for (x in a) { - // /*body*/ - // } - // .endloop if (inStatementContainingYield) { beginScriptLoopBlock(); } @@ -70145,10 +56935,9 @@ var ts; function transformAndEmitContinueStatement(node) { var label = findContinueTarget(node.label ? ts.idText(node.label) : undefined); if (label > 0) { - emitBreak(label, /*location*/ node); + emitBreak(label, node); } else { - // invalid continue without a containing loop. Leave the node as is, per #17875. emitStatement(node); } } @@ -70156,7 +56945,7 @@ var ts; if (inStatementContainingYield) { var label = findContinueTarget(node.label && ts.idText(node.label)); if (label > 0) { - return createInlineBreak(label, /*location*/ node); + return createInlineBreak(label, node); } } return ts.visitEachChild(node, visitor, context); @@ -70164,10 +56953,9 @@ var ts; function transformAndEmitBreakStatement(node) { var label = findBreakTarget(node.label ? ts.idText(node.label) : undefined); if (label > 0) { - emitBreak(label, /*location*/ node); + emitBreak(label, node); } else { - // invalid break without a containing loop, switch, or labeled statement. Leave the node as is, per #17875. emitStatement(node); } } @@ -70175,30 +56963,19 @@ var ts; if (inStatementContainingYield) { var label = findBreakTarget(node.label && ts.idText(node.label)); if (label > 0) { - return createInlineBreak(label, /*location*/ node); + return createInlineBreak(label, node); } } return ts.visitEachChild(node, visitor, context); } function transformAndEmitReturnStatement(node) { - emitReturn(ts.visitNode(node.expression, visitor, ts.isExpression), - /*location*/ node); + emitReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function visitReturnStatement(node) { - return createInlineReturn(ts.visitNode(node.expression, visitor, ts.isExpression), - /*location*/ node); + return createInlineReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function transformAndEmitWithStatement(node) { if (containsYield(node)) { - // [source] - // with (x) { - // /*body*/ - // } - // - // [intermediate] - // .with (x) - // /*body*/ - // .endwith beginWithBlock(cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression))); transformAndEmitEmbeddedStatement(node.statement); endWithBlock(); @@ -70209,66 +56986,31 @@ var ts; } function transformAndEmitSwitchStatement(node) { if (containsYield(node.caseBlock)) { - // [source] - // switch (x) { - // case a: - // /*caseStatements*/ - // case b: - // /*caseStatements*/ - // default: - // /*defaultStatements*/ - // } - // - // [intermediate] - // .local _a - // .switch endLabel - // _a = x; - // switch (_a) { - // case a: - // .br clauseLabels[0] - // } - // switch (_a) { - // case b: - // .br clauseLabels[1] - // } - // .br clauseLabels[2] - // .mark clauseLabels[0] - // /*caseStatements*/ - // .mark clauseLabels[1] - // /*caseStatements*/ - // .mark clauseLabels[2] - // /*caseStatements*/ - // .endswitch - // .mark endLabel var caseBlock = node.caseBlock; var numClauses = caseBlock.clauses.length; var endLabel = beginSwitchBlock(); var expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression)); - // Create labels for each clause and find the index of the first default clause. var clauseLabels = []; var defaultClauseIndex = -1; for (var i = 0; i < numClauses; i++) { var clause = caseBlock.clauses[i]; clauseLabels.push(defineLabel()); - if (clause.kind === 267 /* DefaultClause */ && defaultClauseIndex === -1) { + if (clause.kind === 267 && defaultClauseIndex === -1) { defaultClauseIndex = i; } } - // Emit switch statements for each run of case clauses either from the first case - // clause or the next case clause with a `yield` in its expression, up to the next - // case clause with a `yield` in its expression. var clausesWritten = 0; var pendingClauses = []; while (clausesWritten < numClauses) { var defaultClausesSkipped = 0; for (var i = clausesWritten; i < numClauses; i++) { var clause = caseBlock.clauses[i]; - if (clause.kind === 266 /* CaseClause */) { + if (clause.kind === 266) { if (containsYield(clause.expression) && pendingClauses.length > 0) { break; } pendingClauses.push(ts.createCaseClause(ts.visitNode(clause.expression, visitor, ts.isExpression), [ - createInlineBreak(clauseLabels[i], /*location*/ clause.expression) + createInlineBreak(clauseLabels[i], clause.expression) ])); } else { @@ -70313,16 +57055,6 @@ var ts; } function transformAndEmitLabeledStatement(node) { if (containsYield(node)) { - // [source] - // x: { - // /*body*/ - // } - // - // [intermediate] - // .labeled "x", endLabel - // /*body*/ - // .endlabeled - // .mark endLabel beginLabeledBlock(ts.idText(node.label)); transformAndEmitEmbeddedStatement(node.statement); endLabeledBlock(); @@ -70342,44 +57074,14 @@ var ts; return node; } function transformAndEmitThrowStatement(node) { - emitThrow(ts.visitNode(node.expression, visitor, ts.isExpression), - /*location*/ node); + emitThrow(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function transformAndEmitTryStatement(node) { if (containsYield(node)) { - // [source] - // try { - // /*tryBlock*/ - // } - // catch (e) { - // /*catchBlock*/ - // } - // finally { - // /*finallyBlock*/ - // } - // - // [intermediate] - // .local _a - // .try tryLabel, catchLabel, finallyLabel, endLabel - // .mark tryLabel - // .nop - // /*tryBlock*/ - // .br endLabel - // .catch - // .mark catchLabel - // _a = %error%; - // /*catchBlock*/ - // .br endLabel - // .finally - // .mark finallyLabel - // /*finallyBlock*/ - // .endfinally - // .endtry - // .mark endLabel beginExceptionBlock(); transformAndEmitEmbeddedStatement(node.tryBlock); if (node.catchClause) { - beginCatchBlock(node.catchClause.variableDeclaration); // TODO: GH#18217 + beginCatchBlock(node.catchClause.variableDeclaration); transformAndEmitEmbeddedStatement(node.catchClause.block); } if (node.finallyBlock) { @@ -70393,7 +57095,7 @@ var ts; } } function containsYield(node) { - return !!node && (node.transformFlags & 16777216 /* ContainsYield */) !== 0; + return !!node && (node.transformFlags & 16777216) !== 0; } function countInitialNodesWithoutYield(nodes) { var numNodes = nodes.length; @@ -70406,7 +57108,7 @@ var ts; } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (hint === 1 /* Expression */) { + if (hint === 1) { return substituteExpression(node); } return node; @@ -70437,23 +57139,20 @@ var ts; } function cacheExpression(node) { var temp; - if (ts.isGeneratedIdentifier(node) || ts.getEmitFlags(node) & 4096 /* HelperName */) { + if (ts.isGeneratedIdentifier(node) || ts.getEmitFlags(node) & 4096) { return node; } temp = ts.createTempVariable(hoistVariableDeclaration); - emitAssignment(temp, node, /*location*/ node); + emitAssignment(temp, node, node); return temp; } function declareLocal(name) { var temp = name ? ts.createUniqueName(name) - : ts.createTempVariable(/*recordTempVariable*/ undefined); + : ts.createTempVariable(undefined); hoistVariableDeclaration(temp); return temp; } - /** - * Defines a label, uses as the target of a Break operation. - */ function defineLabel() { if (!labelOffsets) { labelOffsets = []; @@ -70463,18 +57162,10 @@ var ts; labelOffsets[label] = -1; return label; } - /** - * Marks the current operation with the specified label. - */ function markLabel(label) { ts.Debug.assert(labelOffsets !== undefined, "No labels were defined."); labelOffsets[label] = operations ? operations.length : 0; } - /** - * Begins a block operation (With, Break/Continue, Try/Catch/Finally) - * - * @param block Information about the block. - */ function beginBlock(block) { if (!blocks) { blocks = []; @@ -70483,87 +57174,61 @@ var ts; blockStack = []; } var index = blockActions.length; - blockActions[index] = 0 /* Open */; + blockActions[index] = 0; blockOffsets[index] = operations ? operations.length : 0; blocks[index] = block; blockStack.push(block); return index; } - /** - * Ends the current block operation. - */ function endBlock() { var block = peekBlock(); if (block === undefined) return ts.Debug.fail("beginBlock was never called."); var index = blockActions.length; - blockActions[index] = 1 /* Close */; + blockActions[index] = 1; blockOffsets[index] = operations ? operations.length : 0; blocks[index] = block; blockStack.pop(); return block; } - /** - * Gets the current open block. - */ function peekBlock() { return ts.lastOrUndefined(blockStack); } - /** - * Gets the kind of the current open block. - */ function peekBlockKind() { var block = peekBlock(); return block && block.kind; } - /** - * Begins a code block for a generated `with` statement. - * - * @param expression An identifier representing expression for the `with` block. - */ function beginWithBlock(expression) { var startLabel = defineLabel(); var endLabel = defineLabel(); markLabel(startLabel); beginBlock({ - kind: 1 /* With */, + kind: 1, expression: expression, startLabel: startLabel, endLabel: endLabel }); } - /** - * Ends a code block for a generated `with` statement. - */ function endWithBlock() { - ts.Debug.assert(peekBlockKind() === 1 /* With */); + ts.Debug.assert(peekBlockKind() === 1); var block = endBlock(); markLabel(block.endLabel); } - /** - * Begins a code block for a generated `try` statement. - */ function beginExceptionBlock() { var startLabel = defineLabel(); var endLabel = defineLabel(); markLabel(startLabel); beginBlock({ - kind: 0 /* Exception */, - state: 0 /* Try */, + kind: 0, + state: 0, startLabel: startLabel, endLabel: endLabel }); emitNop(); return endLabel; } - /** - * Enters the `catch` clause of a generated `try` statement. - * - * @param variable The catch variable. - */ function beginCatchBlock(variable) { - ts.Debug.assert(peekBlockKind() === 0 /* Exception */); - // generated identifiers should already be unique within a file + ts.Debug.assert(peekBlockKind() === 0); var name; if (ts.isGeneratedIdentifier(variable.name)) { name = variable.name; @@ -70575,45 +57240,39 @@ var ts; if (!renamedCatchVariables) { renamedCatchVariables = ts.createMap(); renamedCatchVariableDeclarations = []; - context.enableSubstitution(71 /* Identifier */); + context.enableSubstitution(71); } renamedCatchVariables.set(text, true); renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name; } var exception = peekBlock(); - ts.Debug.assert(exception.state < 1 /* Catch */); + ts.Debug.assert(exception.state < 1); var endLabel = exception.endLabel; emitBreak(endLabel); var catchLabel = defineLabel(); markLabel(catchLabel); - exception.state = 1 /* Catch */; + exception.state = 1; exception.catchVariable = name; exception.catchLabel = catchLabel; - emitAssignment(name, ts.createCall(ts.createPropertyAccess(state, "sent"), /*typeArguments*/ undefined, [])); + emitAssignment(name, ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, [])); emitNop(); } - /** - * Enters the `finally` block of a generated `try` statement. - */ function beginFinallyBlock() { - ts.Debug.assert(peekBlockKind() === 0 /* Exception */); + ts.Debug.assert(peekBlockKind() === 0); var exception = peekBlock(); - ts.Debug.assert(exception.state < 2 /* Finally */); + ts.Debug.assert(exception.state < 2); var endLabel = exception.endLabel; emitBreak(endLabel); var finallyLabel = defineLabel(); markLabel(finallyLabel); - exception.state = 2 /* Finally */; + exception.state = 2; exception.finallyLabel = finallyLabel; } - /** - * Ends the code block for a generated `try` statement. - */ function endExceptionBlock() { - ts.Debug.assert(peekBlockKind() === 0 /* Exception */); + ts.Debug.assert(peekBlockKind() === 0); var exception = endBlock(); var state = exception.state; - if (state < 2 /* Finally */) { + if (state < 2) { emitBreak(exception.endLabel); } else { @@ -70621,83 +57280,52 @@ var ts; } markLabel(exception.endLabel); emitNop(); - exception.state = 3 /* Done */; + exception.state = 3; } - /** - * Begins a code block that supports `break` or `continue` statements that are defined in - * the source tree and not from generated code. - * - * @param labelText Names from containing labeled statements. - */ function beginScriptLoopBlock() { beginBlock({ - kind: 3 /* Loop */, + kind: 3, isScript: true, breakLabel: -1, continueLabel: -1 }); } - /** - * Begins a code block that supports `break` or `continue` statements that are defined in - * generated code. Returns a label used to mark the operation to which to jump when a - * `break` statement targets this block. - * - * @param continueLabel A Label used to mark the operation to which to jump when a - * `continue` statement targets this block. - */ function beginLoopBlock(continueLabel) { var breakLabel = defineLabel(); beginBlock({ - kind: 3 /* Loop */, + kind: 3, isScript: false, breakLabel: breakLabel, continueLabel: continueLabel, }); return breakLabel; } - /** - * Ends a code block that supports `break` or `continue` statements that are defined in - * generated code or in the source tree. - */ function endLoopBlock() { - ts.Debug.assert(peekBlockKind() === 3 /* Loop */); + ts.Debug.assert(peekBlockKind() === 3); var block = endBlock(); var breakLabel = block.breakLabel; if (!block.isScript) { markLabel(breakLabel); } } - /** - * Begins a code block that supports `break` statements that are defined in the source - * tree and not from generated code. - * - */ function beginScriptSwitchBlock() { beginBlock({ - kind: 2 /* Switch */, + kind: 2, isScript: true, breakLabel: -1 }); } - /** - * Begins a code block that supports `break` statements that are defined in generated code. - * Returns a label used to mark the operation to which to jump when a `break` statement - * targets this block. - */ function beginSwitchBlock() { var breakLabel = defineLabel(); beginBlock({ - kind: 2 /* Switch */, + kind: 2, isScript: false, breakLabel: breakLabel, }); return breakLabel; } - /** - * Ends a code block that supports `break` statements that are defined in generated code. - */ function endSwitchBlock() { - ts.Debug.assert(peekBlockKind() === 2 /* Switch */); + ts.Debug.assert(peekBlockKind() === 2); var block = endBlock(); var breakLabel = block.breakLabel; if (!block.isScript) { @@ -70706,7 +57334,7 @@ var ts; } function beginScriptLabeledBlock(labelText) { beginBlock({ - kind: 4 /* Labeled */, + kind: 4, isScript: true, labelText: labelText, breakLabel: -1 @@ -70715,43 +57343,28 @@ var ts; function beginLabeledBlock(labelText) { var breakLabel = defineLabel(); beginBlock({ - kind: 4 /* Labeled */, + kind: 4, isScript: false, labelText: labelText, breakLabel: breakLabel }); } function endLabeledBlock() { - ts.Debug.assert(peekBlockKind() === 4 /* Labeled */); + ts.Debug.assert(peekBlockKind() === 4); var block = endBlock(); if (!block.isScript) { markLabel(block.breakLabel); } } - /** - * Indicates whether the provided block supports `break` statements. - * - * @param block A code block. - */ function supportsUnlabeledBreak(block) { - return block.kind === 2 /* Switch */ - || block.kind === 3 /* Loop */; + return block.kind === 2 + || block.kind === 3; } - /** - * Indicates whether the provided block supports `break` statements with labels. - * - * @param block A code block. - */ function supportsLabeledBreakOrContinue(block) { - return block.kind === 4 /* Labeled */; + return block.kind === 4; } - /** - * Indicates whether the provided block supports `continue` statements. - * - * @param block A code block. - */ function supportsUnlabeledContinue(block) { - return block.kind === 3 /* Loop */; + return block.kind === 3; } function hasImmediateContainingLabeledBlock(labelText, start) { for (var j = start; j >= 0; j--) { @@ -70767,11 +57380,6 @@ var ts; } return false; } - /** - * Finds the label that is the target for a `break` statement. - * - * @param labelText An optional name of a containing labeled statement. - */ function findBreakTarget(labelText) { if (blockStack) { if (labelText) { @@ -70796,11 +57404,6 @@ var ts; } return 0; } - /** - * Finds the label that is the target for a `continue` statement. - * - * @param labelText An optional name of a containing labeled statement. - */ function findContinueTarget(labelText) { if (blockStack) { if (labelText) { @@ -70822,11 +57425,6 @@ var ts; } return 0; } - /** - * Creates an expression that can be used to indicate the value for a label. - * - * @param label A label. - */ function createLabel(label) { if (label !== undefined && label > 0) { if (labelExpressions === undefined) { @@ -70843,153 +57441,64 @@ var ts; } return ts.createOmittedExpression(); } - /** - * Creates a numeric literal for the provided instruction. - */ function createInstruction(instruction) { var literal = ts.createLiteral(instruction); - ts.addSyntheticTrailingComment(literal, 3 /* MultiLineCommentTrivia */, getInstructionName(instruction)); + ts.addSyntheticTrailingComment(literal, 3, getInstructionName(instruction)); return literal; } - /** - * Creates a statement that can be used indicate a Break operation to the provided label. - * - * @param label A label. - * @param location An optional source map location for the statement. - */ function createInlineBreak(label, location) { ts.Debug.assertLessThan(0, label, "Invalid label"); return ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ - createInstruction(3 /* Break */), + createInstruction(3), createLabel(label) ])), location); } - /** - * Creates a statement that can be used indicate a Return operation. - * - * @param expression The expression for the return statement. - * @param location An optional source map location for the statement. - */ function createInlineReturn(expression, location) { return ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression - ? [createInstruction(2 /* Return */), expression] - : [createInstruction(2 /* Return */)])), location); + ? [createInstruction(2), expression] + : [createInstruction(2)])), location); } - /** - * Creates an expression that can be used to resume from a Yield operation. - */ function createGeneratorResume(location) { - return ts.setTextRange(ts.createCall(ts.createPropertyAccess(state, "sent"), - /*typeArguments*/ undefined, []), location); + return ts.setTextRange(ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, []), location); } - /** - * Emits an empty instruction. - */ function emitNop() { - emitWorker(0 /* Nop */); + emitWorker(0); } - /** - * Emits a Statement. - * - * @param node A statement. - */ function emitStatement(node) { if (node) { - emitWorker(1 /* Statement */, [node]); + emitWorker(1, [node]); } else { emitNop(); } } - /** - * Emits an Assignment operation. - * - * @param left The left-hand side of the assignment. - * @param right The right-hand side of the assignment. - * @param location An optional source map location for the assignment. - */ function emitAssignment(left, right, location) { - emitWorker(2 /* Assign */, [left, right], location); + emitWorker(2, [left, right], location); } - /** - * Emits a Break operation to the specified label. - * - * @param label A label. - * @param location An optional source map location for the assignment. - */ function emitBreak(label, location) { - emitWorker(3 /* Break */, [label], location); + emitWorker(3, [label], location); } - /** - * Emits a Break operation to the specified label when a condition evaluates to a truthy - * value at runtime. - * - * @param label A label. - * @param condition The condition. - * @param location An optional source map location for the assignment. - */ function emitBreakWhenTrue(label, condition, location) { - emitWorker(4 /* BreakWhenTrue */, [label, condition], location); + emitWorker(4, [label, condition], location); } - /** - * Emits a Break to the specified label when a condition evaluates to a falsey value at - * runtime. - * - * @param label A label. - * @param condition The condition. - * @param location An optional source map location for the assignment. - */ function emitBreakWhenFalse(label, condition, location) { - emitWorker(5 /* BreakWhenFalse */, [label, condition], location); + emitWorker(5, [label, condition], location); } - /** - * Emits a YieldStar operation for the provided expression. - * - * @param expression An optional value for the yield operation. - * @param location An optional source map location for the assignment. - */ function emitYieldStar(expression, location) { - emitWorker(7 /* YieldStar */, [expression], location); + emitWorker(7, [expression], location); } - /** - * Emits a Yield operation for the provided expression. - * - * @param expression An optional value for the yield operation. - * @param location An optional source map location for the assignment. - */ function emitYield(expression, location) { - emitWorker(6 /* Yield */, [expression], location); + emitWorker(6, [expression], location); } - /** - * Emits a Return operation for the provided expression. - * - * @param expression An optional value for the operation. - * @param location An optional source map location for the assignment. - */ function emitReturn(expression, location) { - emitWorker(8 /* Return */, [expression], location); + emitWorker(8, [expression], location); } - /** - * Emits a Throw operation for the provided expression. - * - * @param expression A value for the operation. - * @param location An optional source map location for the assignment. - */ function emitThrow(expression, location) { - emitWorker(9 /* Throw */, [expression], location); + emitWorker(9, [expression], location); } - /** - * Emits an Endfinally operation. This is used to handle `finally` block semantics. - */ function emitEndfinally() { - emitWorker(10 /* Endfinally */); + emitWorker(10); } - /** - * Emits an operation. - * - * @param code The OpCode for the operation. - * @param args The optional arguments for the operation. - */ function emitWorker(code, args, location) { if (operations === undefined) { operations = []; @@ -70997,7 +57506,6 @@ var ts; operationLocations = []; } if (labelOffsets === undefined) { - // mark entry point markLabel(defineLabel()); } var operationIndex = operations.length; @@ -71005,9 +57513,6 @@ var ts; operationArguments[operationIndex] = args; operationLocations[operationIndex] = location; } - /** - * Builds the generator function body. - */ function build() { blockIndex = 0; labelNumber = 0; @@ -71020,17 +57525,8 @@ var ts; currentExceptionBlock = undefined; withBlockStack = undefined; var buildResult = buildStatements(); - 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, - /*multiLine*/ buildResult.length > 0)), 524288 /* ReuseTempVariableScope */)); + return createGeneratorHelper(context, ts.setEmitFlags(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, state)], undefined, ts.createBlock(buildResult, buildResult.length > 0)), 524288)); } - /** - * Builds the statements for the generator function body. - */ function buildStatements() { if (operations) { for (var operationIndex = 0; operationIndex < operations.length; operationIndex++) { @@ -71051,49 +57547,33 @@ var ts; } return []; } - /** - * Flush the current label and advance to a new label. - */ function flushLabel() { if (!statements) { return; } - appendLabel(/*markLabelEnd*/ !lastOperationWasAbrupt); + appendLabel(!lastOperationWasAbrupt); lastOperationWasAbrupt = false; lastOperationWasCompletion = false; labelNumber++; } - /** - * Flush the final label of the generator function body. - */ function flushFinalLabel(operationIndex) { if (isFinalLabelReachable(operationIndex)) { tryEnterLabel(operationIndex); withBlockStack = undefined; - writeReturn(/*expression*/ undefined, /*operationLocation*/ undefined); + writeReturn(undefined, undefined); } if (statements && clauses) { - appendLabel(/*markLabelEnd*/ false); + appendLabel(false); } updateLabelExpressions(); } - /** - * Tests whether the final label of the generator function body - * is reachable by user code. - */ function isFinalLabelReachable(operationIndex) { - // if the last operation was *not* a completion (return/throw) then - // the final label is reachable. if (!lastOperationWasCompletion) { return true; } - // if there are no labels defined or referenced, then the final label is - // not reachable. if (!labelOffsets || !labelExpressions) { return false; } - // if the label for this offset is referenced, then the final label - // is reachable. for (var label = 0; label < labelOffsets.length; label++) { if (labelOffsets[label] === operationIndex && labelExpressions[label]) { return true; @@ -71101,33 +57581,20 @@ var ts; } return false; } - /** - * Appends a case clause for the last label and sets the new label. - * - * @param markLabelEnd Indicates that the transition between labels was a fall-through - * from a previous case clause and the change in labels should be - * reflected on the `state` object. - */ function appendLabel(markLabelEnd) { if (!clauses) { clauses = []; } if (statements) { if (withBlockStack) { - // The previous label was nested inside one or more `with` blocks, so we - // surround the statements in generated `with` blocks to create the same environment. for (var i = withBlockStack.length - 1; i >= 0; i--) { var withBlock = withBlockStack[i]; statements = [ts.createWith(withBlock.expression, ts.createBlock(statements))]; } } if (currentExceptionBlock) { - // The previous label was nested inside of an exception block, so we must - // indicate entry into a protected region by pushing the label numbers - // for each block in the protected region. var startLabel = currentExceptionBlock.startLabel, catchLabel = currentExceptionBlock.catchLabel, finallyLabel = currentExceptionBlock.finallyLabel, endLabel = currentExceptionBlock.endLabel; - statements.unshift(ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createPropertyAccess(state, "trys"), "push"), - /*typeArguments*/ undefined, [ + statements.unshift(ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createPropertyAccess(state, "trys"), "push"), undefined, [ ts.createArrayLiteral([ createLabel(startLabel), createLabel(catchLabel), @@ -71138,17 +57605,12 @@ var ts; currentExceptionBlock = undefined; } if (markLabelEnd) { - // The case clause for the last label falls through to this label, so we - // add an assignment statement to reflect the change in labels. statements.push(ts.createStatement(ts.createAssignment(ts.createPropertyAccess(state, "label"), ts.createLiteral(labelNumber + 1)))); } } clauses.push(ts.createCaseClause(ts.createLiteral(labelNumber), statements || [])); statements = undefined; } - /** - * Tries to enter into a new label at the current operation index. - */ function tryEnterLabel(operationIndex) { if (!labelOffsets) { return; @@ -71168,9 +57630,6 @@ var ts; } } } - /** - * Updates literal expressions for labels with actual label numbers. - */ function updateLabelExpressions() { if (labelExpressions !== undefined && labelNumbers !== undefined) { for (var labelNumber_1 = 0; labelNumber_1 < labelNumbers.length; labelNumber_1++) { @@ -71190,17 +57649,14 @@ var ts; } } } - /** - * Tries to enter or leave a code block. - */ function tryEnterOrLeaveBlock(operationIndex) { if (blocks) { for (; blockIndex < blockActions.length && blockOffsets[blockIndex] <= operationIndex; blockIndex++) { var block = blocks[blockIndex]; var blockAction = blockActions[blockIndex]; switch (block.kind) { - case 0 /* Exception */: - if (blockAction === 0 /* Open */) { + case 0: + if (blockAction === 0) { if (!exceptionBlockStack) { exceptionBlockStack = []; } @@ -71210,76 +57666,64 @@ var ts; exceptionBlockStack.push(currentExceptionBlock); currentExceptionBlock = block; } - else if (blockAction === 1 /* Close */) { + else if (blockAction === 1) { currentExceptionBlock = exceptionBlockStack.pop(); } break; - case 1 /* With */: - if (blockAction === 0 /* Open */) { + case 1: + if (blockAction === 0) { if (!withBlockStack) { withBlockStack = []; } withBlockStack.push(block); } - else if (blockAction === 1 /* Close */) { + else if (blockAction === 1) { withBlockStack.pop(); } break; - // default: do nothing } } } } - /** - * Writes an operation as a statement to the current label's statement list. - * - * @param operation The OpCode of the operation - */ function writeOperation(operationIndex) { tryEnterLabel(operationIndex); tryEnterOrLeaveBlock(operationIndex); - // early termination, nothing else to process in this label if (lastOperationWasAbrupt) { return; } lastOperationWasAbrupt = false; lastOperationWasCompletion = false; var opcode = operations[operationIndex]; - if (opcode === 0 /* Nop */) { + if (opcode === 0) { return; } - else if (opcode === 10 /* Endfinally */) { + else if (opcode === 10) { return writeEndfinally(); } var args = operationArguments[operationIndex]; - if (opcode === 1 /* Statement */) { + if (opcode === 1) { return writeStatement(args[0]); } var location = operationLocations[operationIndex]; switch (opcode) { - case 2 /* Assign */: + case 2: return writeAssign(args[0], args[1], location); - case 3 /* Break */: + case 3: return writeBreak(args[0], location); - case 4 /* BreakWhenTrue */: + case 4: return writeBreakWhenTrue(args[0], args[1], location); - case 5 /* BreakWhenFalse */: + case 5: return writeBreakWhenFalse(args[0], args[1], location); - case 6 /* Yield */: + case 6: return writeYield(args[0], location); - case 7 /* YieldStar */: + case 7: return writeYieldStar(args[0], location); - case 8 /* Return */: + case 8: return writeReturn(args[0], location); - case 9 /* Throw */: + case 9: return writeThrow(args[0], location); } } - /** - * Writes a statement to the current label's statement list. - * - * @param statement A statement to write. - */ function writeStatement(statement) { if (statement) { if (!statements) { @@ -71290,179 +57734,65 @@ var ts; } } } - /** - * Writes an Assign operation to the current label's statement list. - * - * @param left The left-hand side of the assignment. - * @param right The right-hand side of the assignment. - * @param operationLocation The source map location for the operation. - */ function writeAssign(left, right, operationLocation) { writeStatement(ts.setTextRange(ts.createStatement(ts.createAssignment(left, right)), operationLocation)); } - /** - * Writes a Throw operation to the current label's statement list. - * - * @param expression The value to throw. - * @param operationLocation The source map location for the operation. - */ function writeThrow(expression, operationLocation) { lastOperationWasAbrupt = true; lastOperationWasCompletion = true; writeStatement(ts.setTextRange(ts.createThrow(expression), operationLocation)); } - /** - * Writes a Return operation to the current label's statement list. - * - * @param expression The value to return. - * @param operationLocation The source map location for the operation. - */ function writeReturn(expression, operationLocation) { lastOperationWasAbrupt = true; lastOperationWasCompletion = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression - ? [createInstruction(2 /* Return */), expression] - : [createInstruction(2 /* Return */)])), operationLocation), 384 /* NoTokenSourceMaps */)); + ? [createInstruction(2), expression] + : [createInstruction(2)])), operationLocation), 384)); } - /** - * Writes a Break operation to the current label's statement list. - * - * @param label The label for the Break. - * @param operationLocation The source map location for the operation. - */ function writeBreak(label, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ - createInstruction(3 /* Break */), + createInstruction(3), createLabel(label) - ])), operationLocation), 384 /* NoTokenSourceMaps */)); + ])), operationLocation), 384)); } - /** - * Writes a BreakWhenTrue operation to the current label's statement list. - * - * @param label The label for the Break. - * @param condition The condition for the Break. - * @param operationLocation The source map location for the operation. - */ function writeBreakWhenTrue(label, condition, operationLocation) { writeStatement(ts.setEmitFlags(ts.createIf(condition, ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ - createInstruction(3 /* Break */), + createInstruction(3), createLabel(label) - ])), operationLocation), 384 /* NoTokenSourceMaps */)), 1 /* SingleLine */)); + ])), operationLocation), 384)), 1)); } - /** - * Writes a BreakWhenFalse operation to the current label's statement list. - * - * @param label The label for the Break. - * @param condition The condition for the Break. - * @param operationLocation The source map location for the operation. - */ function writeBreakWhenFalse(label, condition, operationLocation) { writeStatement(ts.setEmitFlags(ts.createIf(ts.createLogicalNot(condition), ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ - createInstruction(3 /* Break */), + createInstruction(3), createLabel(label) - ])), operationLocation), 384 /* NoTokenSourceMaps */)), 1 /* SingleLine */)); + ])), operationLocation), 384)), 1)); } - /** - * Writes a Yield operation to the current label's statement list. - * - * @param expression The expression to yield. - * @param operationLocation The source map location for the operation. - */ function writeYield(expression, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression - ? [createInstruction(4 /* Yield */), expression] - : [createInstruction(4 /* Yield */)])), operationLocation), 384 /* NoTokenSourceMaps */)); + ? [createInstruction(4), expression] + : [createInstruction(4)])), operationLocation), 384)); } - /** - * Writes a YieldStar instruction to the current label's statement list. - * - * @param expression The expression to yield. - * @param operationLocation The source map location for the operation. - */ function writeYieldStar(expression, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ - createInstruction(5 /* YieldStar */), + createInstruction(5), expression - ])), operationLocation), 384 /* NoTokenSourceMaps */)); + ])), operationLocation), 384)); } - /** - * Writes an Endfinally instruction to the current label's statement list. - */ function writeEndfinally() { lastOperationWasAbrupt = true; writeStatement(ts.createReturn(ts.createArrayLiteral([ - createInstruction(7 /* Endfinally */) + createInstruction(7) ]))); } } ts.transformGenerators = transformGenerators; function createGeneratorHelper(context, body) { context.requestEmitHelper(generatorHelper); - return ts.createCall(ts.getHelperName("__generator"), - /*typeArguments*/ undefined, [ts.createThis(), body]); + return ts.createCall(ts.getHelperName("__generator"), 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: - // @param thisArg The value to use as the `this` binding for the transformed generator body. - // @param 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, @@ -71470,7 +57800,6 @@ var ts; 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, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\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 = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, 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 };" }; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function transformModule(context) { @@ -71491,32 +57820,26 @@ var ts; var previousOnEmitNode = context.onEmitNode; context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; - context.enableSubstitution(71 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols. - context.enableSubstitution(200 /* BinaryExpression */); // Substitutes assignments to exported symbols. - context.enableSubstitution(198 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols. - context.enableSubstitution(199 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols. - context.enableSubstitution(271 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols. - context.enableEmitNotification(274 /* SourceFile */); // Restore state when substituting nodes in a file. - var moduleInfoMap = []; // The ExternalModuleInfo for each file. - var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found. - var currentSourceFile; // The current file. - var currentModuleInfo; // The ExternalModuleInfo for the current file. - var noSubstitution; // Set of nodes for which substitution rules should be ignored. + context.enableSubstitution(71); + context.enableSubstitution(200); + context.enableSubstitution(198); + context.enableSubstitution(199); + context.enableSubstitution(271); + context.enableEmitNotification(274); + var moduleInfoMap = []; + var deferredExports = []; + var currentSourceFile; + var currentModuleInfo; + var noSubstitution; var needUMDDynamicImportHelper; return ts.chainBundle(transformSourceFile); - /** - * Transforms the module aspects of a SourceFile. - * - * @param node The SourceFile node. - */ function transformSourceFile(node) { - if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864 /* ContainsDynamicImport */)) { + if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864)) { return node; } currentSourceFile = node; currentModuleInfo = ts.collectExternalModuleInfo(node, resolver, compilerOptions); moduleInfoMap[ts.getOriginalNodeId(node)] = currentModuleInfo; - // Perform the transformation. var transformModule = getTransformModuleDelegate(moduleKind); var updated = transformModule(node); currentSourceFile = undefined; @@ -71530,11 +57853,6 @@ var ts; } return false; } - /** - * Transforms a SourceFile into a CommonJS module. - * - * @param node The SourceFile node. - */ function transformCommonJSModule(node) { startLexicalEnvironment(); var statements = []; @@ -71545,105 +57863,48 @@ var ts; } ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement)); ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset)); - addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false); + addExportEqualsIfNeeded(statements, false); ts.prependStatements(statements, endLexicalEnvironment()); var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements)); if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) { - // If we have any `export * from ...` declarations - // we need to inform the emitter to add the __export helper. ts.addEmitHelper(updated, exportStarHelper); } ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } - /** - * Transforms a SourceFile into an AMD module. - * - * @param node The SourceFile node. - */ function transformAMDModule(node) { var define = ts.createIdentifier("define"); var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions); - // An AMD define function has the following shape: - // - // define(id?, dependencies?, factory); - // - // This has the shape of the following: - // - // define(name, ["module1", "module2"], function (module1Alias) { ... } - // - // The location of the alias in the parameter list in the factory function needs to - // match the position of the module name in the dependency list. - // - // To ensure this is true in cases of modules with no aliases, e.g.: - // - // import "module" - // - // or - // - // /// - // - // we need to add modules without alias names to the end of the dependencies list - var _a = collectAsynchronousDependencies(node, /*includeNonAmdDependencies*/ true), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames; - // Create an updated SourceFile: - // - // define(moduleName?, ["module1", "module2"], function ... + var _a = collectAsynchronousDependencies(node, true), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames; var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([ - ts.createStatement(ts.createCall(define, - /*typeArguments*/ undefined, (moduleName ? [moduleName] : []).concat([ - // Add the dependency array argument: - // - // ["require", "exports", module1", "module2", ...] + ts.createStatement(ts.createCall(define, undefined, (moduleName ? [moduleName] : []).concat([ ts.createArrayLiteral([ ts.createLiteral("require"), ts.createLiteral("exports") ].concat(aliasedModuleNames, unaliasedModuleNames)), - // Add the module body function argument: - // - // function (require, exports, module1, module2) ... - ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"), - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports") - ].concat(importAliasNames), - /*type*/ undefined, transformAsynchronousModuleBody(node)) + ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ + ts.createParameter(undefined, undefined, undefined, "require"), + ts.createParameter(undefined, undefined, undefined, "exports") + ].concat(importAliasNames), undefined, transformAsynchronousModuleBody(node)) ]))) - ]), - /*location*/ node.statements)); + ]), node.statements)); ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } - /** - * Transforms a SourceFile into a UMD module. - * - * @param node The SourceFile node. - */ function transformUMDModule(node) { - var _a = collectAsynchronousDependencies(node, /*includeNonAmdDependencies*/ false), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames; + var _a = collectAsynchronousDependencies(node, false), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames; var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions); - var umdHeader = ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "factory")], - /*type*/ undefined, ts.setTextRange(ts.createBlock([ + var umdHeader = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, "factory")], undefined, ts.setTextRange(ts.createBlock([ ts.createIf(ts.createLogicalAnd(ts.createTypeCheck(ts.createIdentifier("module"), "object"), ts.createTypeCheck(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), "object")), ts.createBlock([ - ts.createVariableStatement( - /*modifiers*/ undefined, [ - ts.createVariableDeclaration("v", - /*type*/ undefined, ts.createCall(ts.createIdentifier("factory"), - /*typeArguments*/ undefined, [ + ts.createVariableStatement(undefined, [ + ts.createVariableDeclaration("v", undefined, ts.createCall(ts.createIdentifier("factory"), undefined, [ ts.createIdentifier("require"), ts.createIdentifier("exports") ])) ]), - ts.setEmitFlags(ts.createIf(ts.createStrictInequality(ts.createIdentifier("v"), ts.createIdentifier("undefined")), ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), ts.createIdentifier("v")))), 1 /* SingleLine */) + ts.setEmitFlags(ts.createIf(ts.createStrictInequality(ts.createIdentifier("v"), ts.createIdentifier("undefined")), ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), ts.createIdentifier("v")))), 1) ]), ts.createIf(ts.createLogicalAnd(ts.createTypeCheck(ts.createIdentifier("define"), "function"), ts.createPropertyAccess(ts.createIdentifier("define"), "amd")), ts.createBlock([ - ts.createStatement(ts.createCall(ts.createIdentifier("define"), - /*typeArguments*/ undefined, (moduleName ? [moduleName] : []).concat([ + ts.createStatement(ts.createCall(ts.createIdentifier("define"), undefined, (moduleName ? [moduleName] : []).concat([ ts.createArrayLiteral([ ts.createLiteral("require"), ts.createLiteral("exports") @@ -71651,62 +57912,27 @@ var ts; ts.createIdentifier("factory") ]))) ]))) - ], - /*multiLine*/ true), - /*location*/ undefined)); - // Create an updated SourceFile: - // - // (function (factory) { - // if (typeof module === "object" && typeof module.exports === "object") { - // var v = factory(require, exports); - // if (v !== undefined) module.exports = v; - // } - // else if (typeof define === 'function' && define.amd) { - // define(["require", "exports"], factory); - // } - // })(function ...) + ], true), undefined)); var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([ - ts.createStatement(ts.createCall(umdHeader, - /*typeArguments*/ undefined, [ - // Add the module body function argument: - // - // function (require, exports) ... - ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"), - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports") - ].concat(importAliasNames), - /*type*/ undefined, transformAsynchronousModuleBody(node)) + ts.createStatement(ts.createCall(umdHeader, undefined, [ + ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ + ts.createParameter(undefined, undefined, undefined, "require"), + ts.createParameter(undefined, undefined, undefined, "exports") + ].concat(importAliasNames), undefined, transformAsynchronousModuleBody(node)) ])) - ]), - /*location*/ node.statements)); + ]), node.statements)); ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } - /** - * Collect the additional asynchronous dependencies for the module. - * - * @param node The source file. - * @param includeNonAmdDependencies A value indicating whether to include non-AMD dependencies. - */ function collectAsynchronousDependencies(node, includeNonAmdDependencies) { - // names of modules with corresponding parameter in the factory function var aliasedModuleNames = []; - // names of modules with no corresponding parameters in factory function var unaliasedModuleNames = []; - // names of the parameters in the factory function; these - // parameters need to match the indexes of the corresponding - // module names in aliasedModuleNames. var importAliasNames = []; - // Fill in amd-dependency tags for (var _i = 0, _a = node.amdDependencies; _i < _a.length; _i++) { var amdDependency = _a[_i]; if (amdDependency.name) { aliasedModuleNames.push(ts.createLiteral(amdDependency.path)); - importAliasNames.push(ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, amdDependency.name)); + importAliasNames.push(ts.createParameter(undefined, undefined, undefined, amdDependency.name)); } else { unaliasedModuleNames.push(ts.createLiteral(amdDependency.path)); @@ -71714,20 +57940,13 @@ var ts; } for (var _b = 0, _c = currentModuleInfo.externalImports; _b < _c.length; _b++) { var importNode = _c[_b]; - // Find the name of the external module var externalModuleName = ts.getExternalModuleNameLiteral(importNode, currentSourceFile, host, resolver, compilerOptions); - // Find the name of the module alias, if there is one var importAliasName = ts.getLocalNameForExternalImport(importNode, currentSourceFile); - // It is possible that externalModuleName is undefined if it is not string literal. - // This can happen in the invalid import syntax. - // E.g : "import * from alias from 'someLib';" if (externalModuleName) { 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, 4 /* NoSubstitution */); + ts.setEmitFlags(importAliasName, 4); aliasedModuleNames.push(externalModuleName); - importAliasNames.push(ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, importAliasName)); + importAliasNames.push(ts.createParameter(undefined, undefined, undefined, importAliasName)); } else { unaliasedModuleNames.push(externalModuleName); @@ -71740,40 +57959,29 @@ var ts; if (ts.isImportEqualsDeclaration(node) || ts.isExportDeclaration(node) || !ts.getExternalModuleNameLiteral(node, currentSourceFile, host, resolver, compilerOptions)) { return undefined; } - var name = ts.getLocalNameForExternalImport(node, currentSourceFile); // TODO: GH#18217 + var name = ts.getLocalNameForExternalImport(node, currentSourceFile); var expr = getHelperExpressionForImport(node, name); if (expr === name) { return undefined; } return ts.createStatement(ts.createAssignment(name, expr)); } - /** - * Transforms a SourceFile into an AMD or UMD module body. - * - * @param node The SourceFile node. - */ function transformAsynchronousModuleBody(node) { startLexicalEnvironment(); var statements = []; - var statementOffset = ts.addPrologue(statements, node.statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor); + var statementOffset = ts.addPrologue(statements, node.statements, !compilerOptions.noImplicitUseStrict, sourceElementVisitor); if (shouldEmitUnderscoreUnderscoreESModule()) { ts.append(statements, createUnderscoreUnderscoreESModule()); } - // Visit each statement of the module body. ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement)); if (moduleKind === ts.ModuleKind.AMD) { ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport)); } ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset)); - // Append the 'export =' statement if provided. - addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true); - // End the lexical environment for the module body - // and merge any new lexical declarations. + addExportEqualsIfNeeded(statements, true); ts.prependStatements(statements, endLexicalEnvironment()); - var body = ts.createBlock(statements, /*multiLine*/ true); + var body = ts.createBlock(statements, true); if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) { - // If we have any `export * from ...` declarations - // we need to inform the emitter to add the __export helper. ts.addEmitHelper(body, exportStarHelper); } if (needUMDDynamicImportHelper) { @@ -71781,14 +57989,6 @@ var ts; } return body; } - /** - * Adds the down-level representation of `export=` to the statement list if one exists - * in the source file. - * - * @param statements The Statement list to modify. - * @param emitAsReturn A value indicating whether to emit the `export=` statement as a - * return statement. - */ function addExportEqualsIfNeeded(statements, emitAsReturn) { if (currentModuleInfo.exportEquals) { var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor); @@ -71796,60 +57996,50 @@ var ts; if (emitAsReturn) { var statement = ts.createReturn(expressionResult); ts.setTextRange(statement, currentModuleInfo.exportEquals); - ts.setEmitFlags(statement, 384 /* NoTokenSourceMaps */ | 1536 /* NoComments */); + ts.setEmitFlags(statement, 384 | 1536); statements.push(statement); } else { var statement = ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), expressionResult)); ts.setTextRange(statement, currentModuleInfo.exportEquals); - ts.setEmitFlags(statement, 1536 /* NoComments */); + ts.setEmitFlags(statement, 1536); statements.push(statement); } } } } - // - // Top-Level Source Element Visitors - // - /** - * Visits a node at the top level of the source file. - * - * @param node The node to visit. - */ function sourceElementVisitor(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: + case 244: return visitImportDeclaration(node); - case 243 /* ImportEqualsDeclaration */: + case 243: return visitImportEqualsDeclaration(node); - case 250 /* ExportDeclaration */: + case 250: return visitExportDeclaration(node); - case 249 /* ExportAssignment */: + case 249: return visitExportAssignment(node); - case 214 /* VariableStatement */: + case 214: return visitVariableStatement(node); - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 235 /* ClassDeclaration */: + case 235: return visitClassDeclaration(node); - case 303 /* MergeDeclarationMarker */: + case 303: return visitMergeDeclarationMarker(node); - case 304 /* EndOfDeclarationMarker */: + case 304: return visitEndOfDeclarationMarker(node); default: return ts.visitEachChild(node, moduleExpressionElementVisitor, context); } } function moduleExpressionElementVisitor(node) { - // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment, - // as export/import statements are only transformed at the top level of a file. - if (!(node.transformFlags & 67108864 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) { + if (!(node.transformFlags & 67108864) && !(node.transformFlags & 2048)) { return node; } if (ts.isImportCall(node)) { return visitImportCallExpression(node); } - else if (node.transformFlags & 1024 /* DestructuringAssignment */ && ts.isBinaryExpression(node)) { + else if (node.transformFlags & 1024 && ts.isBinaryExpression(node)) { return visitDestructuringAssignment(node); } else { @@ -71861,24 +58051,24 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var elem = _a[_i]; switch (elem.kind) { - case 270 /* PropertyAssignment */: + case 270: if (destructuringNeedsFlattening(elem.initializer)) { return true; } break; - case 271 /* ShorthandPropertyAssignment */: + case 271: if (destructuringNeedsFlattening(elem.name)) { return true; } break; - case 272 /* SpreadAssignment */: + case 272: if (destructuringNeedsFlattening(elem.expression)) { return true; } break; - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: return false; default: ts.Debug.assertNever(elem, "Unhandled object member kind"); } @@ -71904,13 +58094,13 @@ var ts; } function visitDestructuringAssignment(node) { if (destructuringNeedsFlattening(node.left)) { - return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions); + return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0, false, createAllExportExpressions); } return ts.visitEachChild(node, moduleExpressionElementVisitor, context); } function visitImportCallExpression(node) { var argument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor); - var containsLexicalThis = !!(node.transformFlags & 16384 /* ContainsLexicalThis */); + var containsLexicalThis = !!(node.transformFlags & 16384); switch (compilerOptions.module) { case ts.ModuleKind.AMD: return createImportCallExpressionAMD(argument, containsLexicalThis); @@ -71922,181 +58112,103 @@ var ts; } } function createImportCallExpressionUMD(arg, containsLexicalThis) { - // (function (factory) { - // ... (regular UMD) - // } - // })(function (require, exports, useSyncRequire) { - // "use strict"; - // Object.defineProperty(exports, "__esModule", { value: true }); - // var __syncRequire = typeof module === "object" && typeof module.exports === "object"; - // var __resolved = new Promise(function (resolve) { resolve(); }); - // ..... - // __syncRequire - // ? __resolved.then(function () { return require(x); }) /*CommonJs Require*/ - // : new Promise(function (_a, _b) { require([x], _a, _b); }); /*Amd Require*/ - // }); needUMDDynamicImportHelper = true; if (ts.isSimpleCopiableExpression(arg)) { - var argClone = ts.isGeneratedIdentifier(arg) ? arg : ts.isStringLiteral(arg) ? ts.createLiteral(arg) : ts.setEmitFlags(ts.setTextRange(ts.getSynthesizedClone(arg), arg), 1536 /* NoComments */); - return ts.createConditional( - /*condition*/ ts.createIdentifier("__syncRequire"), - /*whenTrue*/ createImportCallExpressionCommonJS(arg, containsLexicalThis), - /*whenFalse*/ createImportCallExpressionAMD(argClone, containsLexicalThis)); + var argClone = ts.isGeneratedIdentifier(arg) ? arg : ts.isStringLiteral(arg) ? ts.createLiteral(arg) : ts.setEmitFlags(ts.setTextRange(ts.getSynthesizedClone(arg), arg), 1536); + return ts.createConditional(ts.createIdentifier("__syncRequire"), createImportCallExpressionCommonJS(arg, containsLexicalThis), createImportCallExpressionAMD(argClone, containsLexicalThis)); } else { var temp = ts.createTempVariable(hoistVariableDeclaration); - return ts.createComma(ts.createAssignment(temp, arg), ts.createConditional( - /*condition*/ ts.createIdentifier("__syncRequire"), - /*whenTrue*/ createImportCallExpressionCommonJS(temp, containsLexicalThis), - /*whenFalse*/ createImportCallExpressionAMD(temp, containsLexicalThis))); + return ts.createComma(ts.createAssignment(temp, arg), ts.createConditional(ts.createIdentifier("__syncRequire"), createImportCallExpressionCommonJS(temp, containsLexicalThis), createImportCallExpressionAMD(temp, containsLexicalThis))); } } function createImportCallExpressionAMD(arg, containsLexicalThis) { - // improt("./blah") - // emit as - // define(["require", "exports", "blah"], function (require, exports) { - // ... - // new Promise(function (_a, _b) { require([x], _a, _b); }); /*Amd Require*/ - // }); var resolve = ts.createUniqueName("resolve"); var reject = ts.createUniqueName("reject"); var parameters = [ - ts.createParameter(/*decorator*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ resolve), - ts.createParameter(/*decorator*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ reject) + ts.createParameter(undefined, undefined, undefined, resolve), + ts.createParameter(undefined, undefined, undefined, reject) ]; var body = ts.createBlock([ - ts.createStatement(ts.createCall(ts.createIdentifier("require"), - /*typeArguments*/ undefined, [ts.createArrayLiteral([arg || ts.createOmittedExpression()]), resolve, reject])) + ts.createStatement(ts.createCall(ts.createIdentifier("require"), undefined, [ts.createArrayLiteral([arg || ts.createOmittedExpression()]), resolve, reject])) ]); var func; - if (languageVersion >= 2 /* ES2015 */) { - func = ts.createArrowFunction( - /*modifiers*/ undefined, - /*typeParameters*/ undefined, parameters, - /*type*/ undefined, - /*equalsGreaterThanToken*/ undefined, body); + if (languageVersion >= 2) { + func = ts.createArrowFunction(undefined, undefined, parameters, undefined, undefined, body); } else { - func = ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, parameters, - /*type*/ undefined, body); - // if there is a lexical 'this' in the import call arguments, ensure we indicate - // that this new function expression indicates it captures 'this' so that the - // es2015 transformer will properly substitute 'this' with '_this'. + func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, parameters, undefined, body); if (containsLexicalThis) { - ts.setEmitFlags(func, 8 /* CapturesThis */); + ts.setEmitFlags(func, 8); } } - var promise = ts.createNew(ts.createIdentifier("Promise"), /*typeArguments*/ undefined, [func]); + var promise = ts.createNew(ts.createIdentifier("Promise"), undefined, [func]); if (compilerOptions.esModuleInterop) { context.requestEmitHelper(importStarHelper); - return ts.createCall(ts.createPropertyAccess(promise, ts.createIdentifier("then")), /*typeArguments*/ undefined, [ts.getHelperName("__importStar")]); + return ts.createCall(ts.createPropertyAccess(promise, ts.createIdentifier("then")), undefined, [ts.getHelperName("__importStar")]); } return promise; } function createImportCallExpressionCommonJS(arg, containsLexicalThis) { - // import("./blah") - // emit as - // Promise.resolve().then(function () { return require(x); }) /*CommonJs Require*/ - // We have to wrap require in then callback so that require is done in asynchronously - // if we simply do require in resolve callback in Promise constructor. We will execute the loading immediately - var promiseResolveCall = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Promise"), "resolve"), /*typeArguments*/ undefined, /*argumentsArray*/ []); - var requireCall = ts.createCall(ts.createIdentifier("require"), /*typeArguments*/ undefined, arg ? [arg] : []); + var promiseResolveCall = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Promise"), "resolve"), undefined, []); + var requireCall = ts.createCall(ts.createIdentifier("require"), undefined, arg ? [arg] : []); if (compilerOptions.esModuleInterop) { context.requestEmitHelper(importStarHelper); - requireCall = ts.createCall(ts.getHelperName("__importStar"), /*typeArguments*/ undefined, [requireCall]); + requireCall = ts.createCall(ts.getHelperName("__importStar"), undefined, [requireCall]); } var func; - if (languageVersion >= 2 /* ES2015 */) { - func = ts.createArrowFunction( - /*modifiers*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ [], - /*type*/ undefined, - /*equalsGreaterThanToken*/ undefined, requireCall); + if (languageVersion >= 2) { + func = ts.createArrowFunction(undefined, undefined, [], undefined, undefined, requireCall); } else { - func = ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ [], - /*type*/ undefined, ts.createBlock([ts.createReturn(requireCall)])); - // if there is a lexical 'this' in the import call arguments, ensure we indicate - // that this new function expression indicates it captures 'this' so that the - // es2015 transformer will properly substitute 'this' with '_this'. + func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, ts.createBlock([ts.createReturn(requireCall)])); if (containsLexicalThis) { - ts.setEmitFlags(func, 8 /* CapturesThis */); + ts.setEmitFlags(func, 8); } } - return ts.createCall(ts.createPropertyAccess(promiseResolveCall, "then"), /*typeArguments*/ undefined, [func]); + return ts.createCall(ts.createPropertyAccess(promiseResolveCall, "then"), undefined, [func]); } function getHelperExpressionForImport(node, innerExpr) { - if (!compilerOptions.esModuleInterop || ts.getEmitFlags(node) & 67108864 /* NeverApplyImportHelper */) { + if (!compilerOptions.esModuleInterop || ts.getEmitFlags(node) & 67108864) { return innerExpr; } if (ts.getImportNeedsImportStarHelper(node)) { context.requestEmitHelper(importStarHelper); - return ts.createCall(ts.getHelperName("__importStar"), /*typeArguments*/ undefined, [innerExpr]); + return ts.createCall(ts.getHelperName("__importStar"), undefined, [innerExpr]); } if (ts.getImportNeedsImportDefaultHelper(node)) { context.requestEmitHelper(importDefaultHelper); - return ts.createCall(ts.getHelperName("__importDefault"), /*typeArguments*/ undefined, [innerExpr]); + return ts.createCall(ts.getHelperName("__importDefault"), undefined, [innerExpr]); } return innerExpr; } - /** - * Visits an ImportDeclaration node. - * - * @param node The node to visit. - */ function visitImportDeclaration(node) { var statements; var namespaceDeclaration = ts.getNamespaceDeclarationNode(node); if (moduleKind !== ts.ModuleKind.AMD) { if (!node.importClause) { - // import "mod"; return ts.setTextRange(ts.createStatement(createRequireCall(node)), node); } else { var variables = []; if (namespaceDeclaration && !ts.isDefaultImport(node)) { - // import * as n from "mod"; - variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), - /*type*/ undefined, getHelperExpressionForImport(node, createRequireCall(node)))); + variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, getHelperExpressionForImport(node, createRequireCall(node)))); } else { - // import d from "mod"; - // import { x, y } from "mod"; - // import d, { x, y } from "mod"; - // import d, * as n from "mod"; - variables.push(ts.createVariableDeclaration(ts.getGeneratedNameForNode(node), - /*type*/ undefined, getHelperExpressionForImport(node, createRequireCall(node)))); + variables.push(ts.createVariableDeclaration(ts.getGeneratedNameForNode(node), undefined, getHelperExpressionForImport(node, createRequireCall(node)))); if (namespaceDeclaration && ts.isDefaultImport(node)) { - variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), - /*type*/ undefined, ts.getGeneratedNameForNode(node))); + variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, ts.getGeneratedNameForNode(node))); } } - statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList(variables, languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */)), - /*location*/ node)); + statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(variables, languageVersion >= 2 ? 2 : 0)), node)); } } else if (namespaceDeclaration && ts.isDefaultImport(node)) { - // import d, * as n from "mod"; - statements = ts.append(statements, ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.setTextRange(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), - /*type*/ undefined, ts.getGeneratedNameForNode(node)), - /*location*/ node) - ], languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */))); + statements = ts.append(statements, ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.setTextRange(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, ts.getGeneratedNameForNode(node)), node) + ], languageVersion >= 2 ? 2 : 0))); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node); } @@ -72105,47 +58217,33 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Creates a `require()` call to import an external module. - * - * @param importNode The declararation to import. - */ function createRequireCall(importNode) { var moduleName = ts.getExternalModuleNameLiteral(importNode, currentSourceFile, host, resolver, compilerOptions); var args = []; if (moduleName) { args.push(moduleName); } - return ts.createCall(ts.createIdentifier("require"), /*typeArguments*/ undefined, args); + return ts.createCall(ts.createIdentifier("require"), undefined, args); } - /** - * Visits an ImportEqualsDeclaration node. - * - * @param node The node to visit. - */ function visitImportEqualsDeclaration(node) { ts.Debug.assert(ts.isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer."); var statements; if (moduleKind !== ts.ModuleKind.AMD) { - if (ts.hasModifier(node, 1 /* Export */)) { + if (ts.hasModifier(node, 1)) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(node.name, createRequireCall(node))), node)); } else { - statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(ts.getSynthesizedClone(node.name), - /*type*/ undefined, createRequireCall(node)) - ], - /*flags*/ languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */)), node)); + statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(ts.getSynthesizedClone(node.name), undefined, createRequireCall(node)) + ], languageVersion >= 2 ? 2 : 0)), node)); } } else { - if (ts.hasModifier(node, 1 /* Export */)) { + if (ts.hasModifier(node, 1)) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(ts.getExportName(node), ts.getLocalName(node))), node)); } } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node); } @@ -72154,28 +58252,17 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits an ExportDeclaration node. - * - * @param The node to visit. - */ function visitExportDeclaration(node) { if (!node.moduleSpecifier) { - // Elide export declarations with no module specifier as they are handled - // elsewhere. return undefined; } var generatedName = ts.getGeneratedNameForNode(node); if (node.exportClause) { var statements = []; - // export { x, y } from "mod"; if (moduleKind !== ts.ModuleKind.AMD) { - statements.push(ts.setTextRange(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(generatedName, - /*type*/ undefined, createRequireCall(node)) - ])), - /*location*/ node)); + statements.push(ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(generatedName, undefined, createRequireCall(node)) + ])), node)); } for (var _i = 0, _a = node.exportClause.elements; _i < _a.length; _i++) { var specifier = _a[_i]; @@ -72185,15 +58272,9 @@ var ts; return ts.singleOrMany(statements); } else { - // export * from "mod"; return ts.setTextRange(ts.createStatement(createExportStarHelper(context, moduleKind !== ts.ModuleKind.AMD ? createRequireCall(node) : generatedName)), node); } } - /** - * Visits an ExportAssignment node. - * - * @param node The node to visit. - */ function visitExportAssignment(node) { if (node.isExportEquals) { return undefined; @@ -72201,35 +58282,23 @@ var ts; var statements; var original = node.original; if (original && hasAssociatedEndOfDeclarationMarker(original)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); - deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true); + deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), node, true); } else { - statements = appendExportStatement(statements, ts.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true); + statements = appendExportStatement(statements, ts.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), node, true); } return ts.singleOrMany(statements); } - /** - * Visits a FunctionDeclaration node. - * - * @param node The node to visit. - */ function visitFunctionDeclaration(node) { var statements; - if (ts.hasModifier(node, 1 /* Export */)) { - statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration( - /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), - /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), - /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), - /*location*/ node), - /*original*/ node)); + if (ts.hasModifier(node, 1)) { + statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), node), node)); } else { statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context)); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } @@ -72238,23 +58307,15 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits a ClassDeclaration node. - * - * @param node The node to visit. - */ function visitClassDeclaration(node) { var statements; - if (ts.hasModifier(node, 1 /* Export */)) { - statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createClassDeclaration( - /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), - /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node)); + if (ts.hasModifier(node, 1)) { + statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createClassDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node)); } else { statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context)); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } @@ -72263,19 +58324,12 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits a VariableStatement node. - * - * @param node The node to visit. - */ function visitVariableStatement(node) { var statements; var variables; var expressions; - if (ts.hasModifier(node, 1 /* Export */)) { + if (ts.hasModifier(node, 1)) { var modifiers = void 0; - // If we're exporting these variables, then these just become assignments to 'exports.x'. - // We only want to emit assignments for variables with initializers. for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var variable = _a[_i]; if (ts.isIdentifier(variable.name) && ts.isLocalName(variable.name)) { @@ -72299,7 +58353,6 @@ var ts; statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context)); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node); } @@ -72311,72 +58364,35 @@ var ts; function createAllExportExpressions(name, value, location) { var exportedNames = getExports(name); if (exportedNames) { - // For each additional export of the declaration, apply an export assignment. var expression = ts.isExportName(name) ? value : ts.createAssignment(name, value); for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) { var exportName = exportedNames_1[_i]; - // Mark the node to prevent triggering substitution. - ts.setEmitFlags(expression, 4 /* NoSubstitution */); - expression = createExportExpression(exportName, expression, /*location*/ location); + ts.setEmitFlags(expression, 4); + expression = createExportExpression(exportName, expression, location); } return expression; } return ts.createAssignment(name, value); } - /** - * Transforms an exported variable with an initializer into an expression. - * - * @param node The node to transform. - */ function transformInitializedVariable(node) { if (ts.isBindingPattern(node.name)) { - return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), - /*visitor*/ undefined, context, 0 /* All */, - /*needsValue*/ false, createAllExportExpressions); + return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), undefined, context, 0, false, createAllExportExpressions); } else { - return ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), node.name), - /*location*/ node.name), ts.visitNode(node.initializer, moduleExpressionElementVisitor)); + return ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), node.name), node.name), ts.visitNode(node.initializer, moduleExpressionElementVisitor)); } } - /** - * Visits a MergeDeclarationMarker used as a placeholder for the beginning of a merged - * and transformed declaration. - * - * @param node The node to visit. - */ function visitMergeDeclarationMarker(node) { - // For an EnumDeclaration or ModuleDeclaration that merges with a preceeding - // declaration we do not emit a leading variable declaration. To preserve the - // begin/end semantics of the declararation and to properly handle exports - // we wrapped the leading variable declaration in a `MergeDeclarationMarker`. - // - // To balance the declaration, add the exports of the elided variable - // statement. - if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214 /* VariableStatement */) { + if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original); } return node; } - /** - * Determines whether a node has an associated EndOfDeclarationMarker. - * - * @param node The node to test. - */ function hasAssociatedEndOfDeclarationMarker(node) { - return (ts.getEmitFlags(node) & 4194304 /* HasEndOfDeclarationMarker */) !== 0; + return (ts.getEmitFlags(node) & 4194304) !== 0; } - /** - * Visits a DeclarationMarker used as a placeholder for the end of a transformed - * declaration. - * - * @param node The node to visit. - */ function visitEndOfDeclarationMarker(node) { - // For some transformations we emit an `EndOfDeclarationMarker` to mark the actual - // end of the transformed declaration. We use this marker to emit any deferred exports - // of the declaration. var id = ts.getOriginalNodeId(node); var statements = deferredExports[id]; if (statements) { @@ -72385,15 +58401,6 @@ var ts; } return node; } - /** - * Appends the exports of an ImportDeclaration to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfImportDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; @@ -72408,10 +58415,10 @@ var ts; var namedBindings = importClause.namedBindings; if (namedBindings) { switch (namedBindings.kind) { - case 246 /* NamespaceImport */: + case 246: statements = appendExportsOfDeclaration(statements, namedBindings); break; - case 247 /* NamedImports */: + case 247: for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) { var importBinding = _a[_i]; statements = appendExportsOfDeclaration(statements, importBinding); @@ -72421,30 +58428,12 @@ var ts; } return statements; } - /** - * Appends the exports of an ImportEqualsDeclaration to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfImportEqualsDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } return appendExportsOfDeclaration(statements, decl); } - /** - * Appends the exports of a VariableStatement to a statement list, returning the statement - * list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param node The VariableStatement whose exports are to be recorded. - */ function appendExportsOfVariableStatement(statements, node) { if (currentModuleInfo.exportEquals) { return statements; @@ -72455,15 +58444,6 @@ var ts; } return statements; } - /** - * Appends the exports of a VariableDeclaration or BindingElement to a statement list, - * returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfBindingElement(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; @@ -72481,136 +58461,72 @@ var ts; } return statements; } - /** - * Appends the exports of a ClassDeclaration or FunctionDeclaration to a statement list, - * returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfHoistedDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } - if (ts.hasModifier(decl, 1 /* Export */)) { - var exportName = ts.hasModifier(decl, 512 /* Default */) ? ts.createIdentifier("default") : ts.getDeclarationName(decl); - statements = appendExportStatement(statements, exportName, ts.getLocalName(decl), /*location*/ decl); + if (ts.hasModifier(decl, 1)) { + var exportName = ts.hasModifier(decl, 512) ? ts.createIdentifier("default") : ts.getDeclarationName(decl); + statements = appendExportStatement(statements, exportName, ts.getLocalName(decl), decl); } if (decl.name) { statements = appendExportsOfDeclaration(statements, decl); } return statements; } - /** - * Appends the exports of a declaration to a statement list, returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration to export. - */ function appendExportsOfDeclaration(statements, decl) { var name = ts.getDeclarationName(decl); var exportSpecifiers = currentModuleInfo.exportSpecifiers.get(ts.idText(name)); if (exportSpecifiers) { for (var _i = 0, exportSpecifiers_1 = exportSpecifiers; _i < exportSpecifiers_1.length; _i++) { var exportSpecifier = exportSpecifiers_1[_i]; - statements = appendExportStatement(statements, exportSpecifier.name, name, /*location*/ exportSpecifier.name); + statements = appendExportStatement(statements, exportSpecifier.name, name, exportSpecifier.name); } } return statements; } - /** - * Appends the down-level representation of an export to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param exportName The name of the export. - * @param expression The expression to export. - * @param location The location to use for source maps and comments for the export. - * @param allowComments Whether to allow comments on the export. - */ function appendExportStatement(statements, exportName, expression, location, allowComments) { statements = ts.append(statements, createExportStatement(exportName, expression, location, allowComments)); return statements; } function createUnderscoreUnderscoreESModule() { var statement; - if (languageVersion === 0 /* ES3 */) { - statement = ts.createStatement(createExportExpression(ts.createIdentifier("__esModule"), ts.createLiteral(/*value*/ true))); + if (languageVersion === 0) { + statement = ts.createStatement(createExportExpression(ts.createIdentifier("__esModule"), ts.createLiteral(true))); } else { - statement = ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), - /*typeArguments*/ undefined, [ + statement = ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [ ts.createIdentifier("exports"), ts.createLiteral("__esModule"), ts.createObjectLiteral([ - ts.createPropertyAssignment("value", ts.createLiteral(/*value*/ true)) + ts.createPropertyAssignment("value", ts.createLiteral(true)) ]) ])); } - ts.setEmitFlags(statement, 1048576 /* CustomPrologue */); + ts.setEmitFlags(statement, 1048576); return statement; } - /** - * Creates a call to the current file's export function to export a value. - * - * @param name The bound name of the export. - * @param value The exported value. - * @param location The location to use for source maps and comments for the export. - * @param allowComments An optional value indicating whether to emit comments for the statement. - */ function createExportStatement(name, value, location, allowComments) { var statement = ts.setTextRange(ts.createStatement(createExportExpression(name, value)), location); ts.startOnNewLine(statement); if (!allowComments) { - ts.setEmitFlags(statement, 1536 /* NoComments */); + ts.setEmitFlags(statement, 1536); } return statement; } - /** - * Creates a call to the current file's export function to export a value. - * - * @param name The bound name of the export. - * @param value The exported value. - * @param location The location to use for source maps and comments for the export. - */ function createExportExpression(name, value, location) { return ts.setTextRange(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(name)), value), location); } - // - // Modifier Visitors - // - /** - * Visit nodes to elide module-specific modifiers. - * - * @param node The node to visit. - */ function modifierVisitor(node) { - // Elide module-specific modifiers. switch (node.kind) { - case 84 /* ExportKeyword */: - case 79 /* DefaultKeyword */: + case 84: + case 79: return undefined; } return node; } - // - // Emit Notification - // - /** - * Hook for node emit notifications. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emit A callback used to emit the node in the printer. - */ function onEmitNode(hint, node, emitCallback) { - if (node.kind === 274 /* SourceFile */) { + if (node.kind === 274) { currentSourceFile = node; currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)]; noSubstitution = []; @@ -72623,21 +58539,12 @@ var ts; previousOnEmitNode(hint, node, emitCallback); } } - // - // Substitutions - // - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (node.id && noSubstitution[node.id]) { return node; } - if (hint === 1 /* Expression */) { + if (hint === 1) { return substituteExpression(node); } else if (ts.isShorthandPropertyAssignment(node)) { @@ -72645,18 +58552,10 @@ var ts; } return node; } - /** - * Substitution for a ShorthandPropertyAssignment whose declaration name is an imported - * or exported symbol. - * - * @param node The node to substitute. - */ function substituteShorthandPropertyAssignment(node) { var name = node.name; var exportedOrImportedName = substituteExpressionIdentifier(name); if (exportedOrImportedName !== name) { - // A shorthand property with an assignment initializer is probably part of a - // destructuring assignment if (node.objectAssignmentInitializer) { var initializer = ts.createAssignment(exportedOrImportedName, node.objectAssignmentInitializer); return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node); @@ -72665,31 +58564,20 @@ var ts; } return node; } - /** - * Substitution for an Expression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteExpression(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return substituteExpressionIdentifier(node); - case 200 /* BinaryExpression */: + case 200: return substituteBinaryExpression(node); - case 199 /* PostfixUnaryExpression */: - case 198 /* PrefixUnaryExpression */: + case 199: + case 198: return substituteUnaryExpression(node); } return node; } - /** - * Substitution for an Identifier expression that may contain an imported or exported - * symbol. - * - * @param node The node to substitute. - */ function substituteExpressionIdentifier(node) { - if (ts.getEmitFlags(node) & 4096 /* HelperName */) { + if (ts.getEmitFlags(node) & 4096) { var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile); if (externalHelpersModuleName) { return ts.createPropertyAccess(externalHelpersModuleName, node); @@ -72698,39 +58586,23 @@ var ts; } if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) { var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node)); - if (exportContainer && exportContainer.kind === 274 /* SourceFile */) { - return ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(node)), - /*location*/ node); + if (exportContainer && exportContainer.kind === 274) { + return ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(node)), node); } var importDeclaration = resolver.getReferencedImportDeclaration(node); if (importDeclaration) { if (ts.isImportClause(importDeclaration)) { - return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), node); } else if (ts.isImportSpecifier(importDeclaration)) { var name = importDeclaration.propertyName || importDeclaration.name; - return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(name)), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(name)), node); } } } return node; } - /** - * Substitution for a BinaryExpression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteBinaryExpression(node) { - // When we see an assignment expression whose left-hand side is an exported symbol, - // we should ensure all exports of that symbol are updated with the correct value. - // - // - We do not substitute generated identifiers for any reason. - // - We do not substitute identifiers tagged with the LocalName flag. - // - We do not substitute identifiers that were originally the name of an enum or - // namespace due to how they are transformed in TypeScript. - // - We only substitute identifiers that are exported at the top level. if (ts.isAssignmentOperator(node.operatorToken.kind) && ts.isIdentifier(node.left) && !ts.isGeneratedIdentifier(node.left) @@ -72738,48 +58610,30 @@ var ts; && !ts.isDeclarationNameOfEnumOrNamespace(node.left)) { var exportedNames = getExports(node.left); if (exportedNames) { - // For each additional export of the declaration, apply an export assignment. var expression = node; for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) { var exportName = exportedNames_2[_i]; - // Mark the node to prevent triggering this rule again. noSubstitution[ts.getNodeId(expression)] = true; - expression = createExportExpression(exportName, expression, /*location*/ node); + expression = createExportExpression(exportName, expression, node); } return expression; } } return node; } - /** - * Substitution for a UnaryExpression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteUnaryExpression(node) { - // When we see a prefix or postfix increment expression whose operand is an exported - // symbol, we should ensure all exports of that symbol are updated with the correct - // value. - // - // - We do not substitute generated identifiers for any reason. - // - We do not substitute identifiers tagged with the LocalName flag. - // - We do not substitute identifiers that were originally the name of an enum or - // namespace due to how they are transformed in TypeScript. - // - We only substitute identifiers that are exported at the top level. - if ((node.operator === 43 /* PlusPlusToken */ || node.operator === 44 /* MinusMinusToken */) + if ((node.operator === 43 || node.operator === 44) && ts.isIdentifier(node.operand) && !ts.isGeneratedIdentifier(node.operand) && !ts.isLocalName(node.operand) && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) { var exportedNames = getExports(node.operand); if (exportedNames) { - var expression = node.kind === 199 /* PostfixUnaryExpression */ - ? ts.setTextRange(ts.createBinary(node.operand, ts.createToken(node.operator === 43 /* PlusPlusToken */ ? 59 /* PlusEqualsToken */ : 60 /* MinusEqualsToken */), ts.createLiteral(1)), - /*location*/ node) + var expression = node.kind === 199 + ? ts.setTextRange(ts.createBinary(node.operand, ts.createToken(node.operator === 43 ? 59 : 60), ts.createLiteral(1)), node) : node; for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) { var exportName = exportedNames_3[_i]; - // Mark the node to prevent triggering this rule again. noSubstitution[ts.getNodeId(expression)] = true; expression = createExportExpression(exportName, expression); } @@ -72788,11 +58642,6 @@ var ts; } return node; } - /** - * Gets the additional exports of a name. - * - * @param name The name. - */ function getExports(name) { if (!ts.isGeneratedIdentifier(name)) { var valueDeclaration = resolver.getReferencedImportDeclaration(name) @@ -72805,7 +58654,6 @@ var ts; } } ts.transformModule = transformModule; - // emit output for the __export helper function var exportStarHelper = { name: "typescript:export-star", scoped: true, @@ -72814,29 +58662,25 @@ var ts; function createExportStarHelper(context, module) { var compilerOptions = context.getCompilerOptions(); return compilerOptions.importHelpers - ? ts.createCall(ts.getHelperName("__exportStar"), /*typeArguments*/ undefined, [module, ts.createIdentifier("exports")]) - : ts.createCall(ts.createIdentifier("__export"), /*typeArguments*/ undefined, [module]); + ? ts.createCall(ts.getHelperName("__exportStar"), undefined, [module, ts.createIdentifier("exports")]) + : ts.createCall(ts.createIdentifier("__export"), undefined, [module]); } - // emit helper for dynamic import var dynamicImportUMDHelper = { name: "typescript:dynamicimport-sync-require", scoped: true, text: "\n var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";" }; - // emit helper for `import * as Name from "foo"` var importStarHelper = { name: "typescript:commonjsimportstar", scoped: false, text: "\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};" }; - // emit helper for `import Name from "foo"` var importDefaultHelper = { name: "typescript:commonjsimportdefault", scoped: false, text: "\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};" }; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function transformSystemModule(context) { @@ -72848,78 +58692,48 @@ var ts; var previousOnEmitNode = context.onEmitNode; context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; - context.enableSubstitution(71 /* Identifier */); // Substitutes expression identifiers for imported symbols. - context.enableSubstitution(271 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols - context.enableSubstitution(200 /* BinaryExpression */); // Substitutes assignments to exported symbols. - context.enableSubstitution(198 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols. - context.enableSubstitution(199 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols. - context.enableEmitNotification(274 /* SourceFile */); // Restore state when substituting nodes in a file. - var moduleInfoMap = []; // The ExternalModuleInfo for each file. - var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found. - var exportFunctionsMap = []; // The export function associated with a source file. - var noSubstitutionMap = []; // Set of nodes for which substitution rules should be ignored for each file. - var currentSourceFile; // The current file. - var moduleInfo; // ExternalModuleInfo for the current file. - var exportFunction; // The export function for the current file. - var contextObject; // The context object for the current file. + context.enableSubstitution(71); + context.enableSubstitution(271); + context.enableSubstitution(200); + context.enableSubstitution(198); + context.enableSubstitution(199); + context.enableEmitNotification(274); + var moduleInfoMap = []; + var deferredExports = []; + var exportFunctionsMap = []; + var noSubstitutionMap = []; + var currentSourceFile; + var moduleInfo; + var exportFunction; + var contextObject; var hoistedStatements; var enclosingBlockScopedContainer; - var noSubstitution; // Set of nodes for which substitution rules should be ignored. + var noSubstitution; return ts.chainBundle(transformSourceFile); - /** - * Transforms the module aspects of a SourceFile. - * - * @param node The SourceFile node. - */ function transformSourceFile(node) { - if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864 /* ContainsDynamicImport */)) { + if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864)) { return node; } var id = ts.getOriginalNodeId(node); currentSourceFile = node; enclosingBlockScopedContainer = node; - // System modules have the following shape: - // - // System.register(['dep-1', ... 'dep-n'], function(exports) {/* module body function */}) - // - // The parameter 'exports' here is a callback '(name: string, value: T) => T' that - // is used to publish exported values. 'exports' returns its 'value' argument so in - // most cases expressions that mutate exported values can be rewritten as: - // - // expr -> exports('name', expr) - // - // 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, compilerOptions); - // Make sure that the name of the 'exports' function does not conflict with - // existing identifiers. exportFunction = ts.createUniqueName("exports"); exportFunctionsMap[id] = exportFunction; 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, - /*name*/ undefined, - /*typeParameters*/ undefined, [ - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, exportFunction), - ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, contextObject) - ], - /*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 + var moduleBodyFunction = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ + ts.createParameter(undefined, undefined, undefined, exportFunction), + ts.createParameter(undefined, undefined, undefined, contextObject) + ], undefined, moduleBodyBlock); var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions); var dependencies = ts.createArrayLiteral(ts.map(dependencyGroups, function (dependencyGroup) { return dependencyGroup.name; })); var updated = ts.setEmitFlags(ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([ - ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("System"), "register"), - /*typeArguments*/ undefined, moduleName + ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("System"), "register"), undefined, moduleName ? [moduleName, dependencies, moduleBodyFunction] : [dependencies, moduleBodyFunction])) - ]), node.statements)), 1024 /* NoTrailingComments */); + ]), node.statements)), 1024); if (!(compilerOptions.outFile || compilerOptions.out)) { ts.moveEmitHelpers(updated, moduleBodyBlock, function (helper) { return !helper.scoped; }); } @@ -72935,11 +58749,6 @@ var ts; enclosingBlockScopedContainer = undefined; return ts.aggregateTransformFlags(updated); } - /** - * Collects the dependency groups for this files imports. - * - * @param externalImports The imports for the file. - */ function collectDependencyGroups(externalImports) { var groupIndices = ts.createMap(); var dependencyGroups = []; @@ -72950,7 +58759,6 @@ var ts; var text = externalModuleName.text; var groupIndex = groupIndices.get(text); if (groupIndex !== undefined) { - // deduplicate/group entries in dependency list by the dependency name dependencyGroups[groupIndex].externalImports.push(externalImport); } else { @@ -72964,124 +58772,42 @@ var ts; } return dependencyGroups; } - /** - * Adds the statements for the module body function for the source file. - * - * @param node The source file for the module. - * @param dependencyGroups The grouped dependencies of the module. - */ function createSystemModuleBody(node, dependencyGroups) { - // Shape of the body in system modules: - // - // function (exports) { - // - // - // - // return { - // setters: [ - // - // ], - // execute: function() { - // - // } - // } - // - // } - // - // i.e: - // - // import {x} from 'file1' - // var y = 1; - // export function foo() { return y + x(); } - // console.log(y); - // - // Will be transformed to: - // - // function(exports) { - // function foo() { return y + file_1.x(); } - // exports("foo", foo); - // var file_1, y; - // return { - // setters: [ - // function(v) { file_1 = v } - // ], - // execute(): function() { - // y = 1; - // console.log(y); - // } - // }; - // } var statements = []; - // We start a new lexical environment in this function body, but *not* in the - // body of the execute function. This allows us to emit temporary declarations - // only in the outer module body and not in the inner one. startLexicalEnvironment(); - // Add any prologue directives. var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile)); var statementOffset = ts.addPrologue(statements, node.statements, ensureUseStrict, sourceElementVisitor); - // var __moduleName = context_1 && context_1.id; - statements.push(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration("__moduleName", - /*type*/ undefined, ts.createLogicalAnd(contextObject, ts.createPropertyAccess(contextObject, "id"))) + statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration("__moduleName", undefined, ts.createLogicalAnd(contextObject, ts.createPropertyAccess(contextObject, "id"))) ]))); - // Visit the synthetic external helpers import declaration if present ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement); - // 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 - // setters. This allows us to reduce the number of times we need to loop through the - // statements of the source file. var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset); - // Emit early exports for function declarations. ts.addRange(statements, hoistedStatements); - // We emit hoisted variables early to align roughly with our previous emit output. - // Two key differences in this approach are: - // - Temporary variables will appear at the top rather than at the bottom of the file ts.prependStatements(statements, endLexicalEnvironment()); - var exportStarFunction = addExportStarIfNeeded(statements); // TODO: GH#18217 + var exportStarFunction = addExportStarIfNeeded(statements); var moduleObject = ts.createObjectLiteral([ ts.createPropertyAssignment("setters", createSettersArray(exportStarFunction, dependencyGroups)), - ts.createPropertyAssignment("execute", ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, - /*parameters*/ [], - /*type*/ undefined, ts.createBlock(executeStatements, /*multiLine*/ true))) + ts.createPropertyAssignment("execute", ts.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, ts.createBlock(executeStatements, true))) ]); moduleObject.multiLine = true; statements.push(ts.createReturn(moduleObject)); - return ts.createBlock(statements, /*multiLine*/ true); + return ts.createBlock(statements, true); } - /** - * Adds an exportStar function to a statement list if it is needed for the file. - * - * @param statements A statement list. - */ function addExportStarIfNeeded(statements) { if (!moduleInfo.hasExportStarsToExportValues) { return; } - // when resolving exports local exported entries/indirect exported entries in the module - // should always win over entries with similar names that were added via star exports - // to support this we store names of local/indirect exported entries in a set. - // this set is used to filter names brought by star expors. - // local names set should only be added if we have anything exported if (!moduleInfo.exportedNames && moduleInfo.exportSpecifiers.size === 0) { - // no exported declarations (export var ...) or export specifiers (export {x}) - // check if we have any non star export declarations. var hasExportDeclarationWithExportClause = false; for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) { var externalImport = _a[_i]; - if (externalImport.kind === 250 /* ExportDeclaration */ && externalImport.exportClause) { + if (externalImport.kind === 250 && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } } if (!hasExportDeclarationWithExportClause) { - // we still need to emit exportStar helper - var exportStarFunction_1 = createExportStarFunction(/*localNames*/ undefined); + var exportStarFunction_1 = createExportStarFunction(undefined); statements.push(exportStarFunction_1); return exportStarFunction_1.name; } @@ -73093,42 +58819,30 @@ var ts; if (exportedLocalName.escapedText === "default") { continue; } - // write name of exported declaration, i.e 'export var x...' exportedNames.push(ts.createPropertyAssignment(ts.createLiteral(exportedLocalName), ts.createTrue())); } } for (var _d = 0, _e = moduleInfo.externalImports; _d < _e.length; _d++) { var externalImport = _e[_d]; - if (externalImport.kind !== 250 /* ExportDeclaration */) { + if (externalImport.kind !== 250) { continue; } if (!externalImport.exportClause) { - // export * from ... continue; } for (var _f = 0, _g = externalImport.exportClause.elements; _f < _g.length; _f++) { var element = _g[_f]; - // write name of indirectly exported entry, i.e. 'export {x} from ...' exportedNames.push(ts.createPropertyAssignment(ts.createLiteral(ts.idText(element.name || element.propertyName)), ts.createTrue())); } } var exportedNamesStorageRef = ts.createUniqueName("exportedNames"); - statements.push(ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(exportedNamesStorageRef, - /*type*/ undefined, ts.createObjectLiteral(exportedNames, /*multiline*/ true)) + statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(exportedNamesStorageRef, undefined, ts.createObjectLiteral(exportedNames, true)) ]))); var exportStarFunction = createExportStarFunction(exportedNamesStorageRef); statements.push(exportStarFunction); return exportStarFunction.name; } - /** - * Creates an exportStar function for the file, with an optional set of excluded local - * names. - * - * @param localNames An optional reference to an object containing a set of excluded local - * names. - */ function createExportStarFunction(localNames) { var exportStarFunction = ts.createUniqueName("exportStar"); var m = ts.createIdentifier("m"); @@ -73136,135 +58850,79 @@ var ts; var exports = ts.createIdentifier("exports"); var condition = ts.createStrictInequality(n, ts.createLiteral("default")); if (localNames) { - condition = ts.createLogicalAnd(condition, ts.createLogicalNot(ts.createCall(ts.createPropertyAccess(localNames, "hasOwnProperty"), - /*typeArguments*/ undefined, [n]))); + condition = ts.createLogicalAnd(condition, ts.createLogicalNot(ts.createCall(ts.createPropertyAccess(localNames, "hasOwnProperty"), undefined, [n]))); } - return ts.createFunctionDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, exportStarFunction, - /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, m)], - /*type*/ undefined, ts.createBlock([ - ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList([ - ts.createVariableDeclaration(exports, - /*type*/ undefined, ts.createObjectLiteral([])) + return ts.createFunctionDeclaration(undefined, undefined, undefined, exportStarFunction, undefined, [ts.createParameter(undefined, undefined, undefined, m)], undefined, ts.createBlock([ + ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(exports, undefined, ts.createObjectLiteral([])) ])), ts.createForIn(ts.createVariableDeclarationList([ - ts.createVariableDeclaration(n, /*type*/ undefined) + ts.createVariableDeclaration(n, undefined) ]), m, ts.createBlock([ - ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 1 /* SingleLine */) + ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 1) ])), - ts.createStatement(ts.createCall(exportFunction, - /*typeArguments*/ undefined, [exports])) - ], /*multiline*/ true)); + ts.createStatement(ts.createCall(exportFunction, undefined, [exports])) + ], true)); } - /** - * Creates an array setter callbacks for each dependency group. - * - * @param exportStarFunction A reference to an exportStarFunction for the file. - * @param dependencyGroups An array of grouped dependencies. - */ function createSettersArray(exportStarFunction, dependencyGroups) { var setters = []; for (var _i = 0, dependencyGroups_1 = dependencyGroups; _i < dependencyGroups_1.length; _i++) { var group_1 = dependencyGroups_1[_i]; - // derive a unique name for parameter from the first named entry in the group var localName = ts.forEach(group_1.externalImports, function (i) { return ts.getLocalNameForExternalImport(i, currentSourceFile); }); var parameterName = localName ? ts.getGeneratedNameForNode(localName) : ts.createUniqueName(""); var statements = []; for (var _a = 0, _b = group_1.externalImports; _a < _b.length; _a++) { var entry = _b[_a]; - var importVariableName = ts.getLocalNameForExternalImport(entry, currentSourceFile); // TODO: GH#18217 + var importVariableName = ts.getLocalNameForExternalImport(entry, currentSourceFile); switch (entry.kind) { - case 244 /* ImportDeclaration */: + case 244: if (!entry.importClause) { - // 'import "..."' case - // module is imported only for side-effects, no emit required break; } - // falls through - case 243 /* ImportEqualsDeclaration */: + case 243: ts.Debug.assert(importVariableName !== undefined); - // save import into the local statements.push(ts.createStatement(ts.createAssignment(importVariableName, parameterName))); break; - case 250 /* ExportDeclaration */: + case 250: ts.Debug.assert(importVariableName !== undefined); if (entry.exportClause) { - // export {a, b as c} from 'foo' - // - // emit as: - // - // exports_({ - // "a": _["a"], - // "c": _["b"] - // }); var properties = []; for (var _c = 0, _d = entry.exportClause.elements; _c < _d.length; _c++) { var e = _d[_c]; properties.push(ts.createPropertyAssignment(ts.createLiteral(ts.idText(e.name)), ts.createElementAccess(parameterName, ts.createLiteral(ts.idText(e.propertyName || e.name))))); } - statements.push(ts.createStatement(ts.createCall(exportFunction, - /*typeArguments*/ undefined, [ts.createObjectLiteral(properties, /*multiline*/ true)]))); + statements.push(ts.createStatement(ts.createCall(exportFunction, undefined, [ts.createObjectLiteral(properties, true)]))); } else { - // export * from 'foo' - // - // emit as: - // - // exportStar(foo_1_1); - statements.push(ts.createStatement(ts.createCall(exportStarFunction, - /*typeArguments*/ undefined, [parameterName]))); + statements.push(ts.createStatement(ts.createCall(exportStarFunction, undefined, [parameterName]))); } break; } } - setters.push(ts.createFunctionExpression( - /*modifiers*/ undefined, - /*asteriskToken*/ undefined, - /*name*/ undefined, - /*typeParameters*/ undefined, [ts.createParameter(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, parameterName)], - /*type*/ undefined, ts.createBlock(statements, /*multiLine*/ true))); + setters.push(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, ts.createBlock(statements, true))); } - return ts.createArrayLiteral(setters, /*multiLine*/ true); + return ts.createArrayLiteral(setters, true); } - // - // Top-level Source Element Visitors - // - /** - * Visit source elements at the top-level of a module. - * - * @param node The node to visit. - */ function sourceElementVisitor(node) { switch (node.kind) { - case 244 /* ImportDeclaration */: + case 244: return visitImportDeclaration(node); - case 243 /* ImportEqualsDeclaration */: + case 243: return visitImportEqualsDeclaration(node); - case 250 /* ExportDeclaration */: - // ExportDeclarations are elided as they are handled via - // `appendExportsOfDeclaration`. + case 250: return undefined; - case 249 /* ExportAssignment */: + case 249: return visitExportAssignment(node); default: return nestedElementVisitor(node); } } - /** - * Visits an ImportDeclaration node. - * - * @param node The node to visit. - */ function visitImportDeclaration(node) { var statements; if (node.importClause) { - hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile)); // TODO: GH#18217 + hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile)); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node); } @@ -73273,17 +58931,11 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits an ImportEqualsDeclaration node. - * - * @param node The node to visit. - */ function visitImportEqualsDeclaration(node) { ts.Debug.assert(ts.isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer."); var statements; - hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile)); // TODO: GH#18217 + hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile)); if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node); } @@ -73292,43 +58944,28 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits an ExportAssignment node. - * - * @param node The node to visit. - */ function visitExportAssignment(node) { if (node.isExportEquals) { - // Elide `export=` as it is illegal in a SystemJS module. return undefined; } var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression); var original = node.original; if (original && hasAssociatedEndOfDeclarationMarker(original)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); - deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), expression, /*allowComments*/ true); + deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), expression, true); } else { - return createExportStatement(ts.createIdentifier("default"), expression, /*allowComments*/ true); + return createExportStatement(ts.createIdentifier("default"), expression, true); } } - /** - * Visits a FunctionDeclaration, hoisting it to the outer module body function. - * - * @param node The node to visit. - */ function visitFunctionDeclaration(node) { - if (ts.hasModifier(node, 1 /* Export */)) { - hoistedStatements = ts.append(hoistedStatements, ts.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), - /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), - /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock))); + if (ts.hasModifier(node, 1)) { + hoistedStatements = ts.append(hoistedStatements, ts.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock))); } else { hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context)); } if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } @@ -73337,22 +58974,12 @@ var ts; } return undefined; } - /** - * Visits a ClassDeclaration, hoisting its name to the outer module body function. - * - * @param node The node to visit. - */ function visitClassDeclaration(node) { var statements; - // Hoist the name of the class declaration to the outer module body function. var name = ts.getLocalName(node); hoistVariableDeclaration(name); - // Rewrite the class declaration into an assignment of a class expression. - statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.createAssignment(name, ts.setTextRange(ts.createClassExpression( - /*modifiers*/ undefined, node.name, - /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node)); + statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.createAssignment(name, ts.setTextRange(ts.createClassExpression(undefined, node.name, undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node)); if (hasAssociatedEndOfDeclarationMarker(node)) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } @@ -73361,18 +58988,12 @@ var ts; } return ts.singleOrMany(statements); } - /** - * Visits a variable statement, hoisting declared names to the top-level module body. - * Each declaration is rewritten into an assignment expression. - * - * @param node The node to visit. - */ function visitVariableStatement(node) { if (!shouldHoistVariableDeclarationList(node.declarationList)) { return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement); } var expressions; - var isExportedDeclaration = ts.hasModifier(node, 1 /* Export */); + var isExportedDeclaration = ts.hasModifier(node, 1); var isMarkedDeclaration = hasAssociatedEndOfDeclarationMarker(node); for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var variable = _a[_i]; @@ -73388,20 +59009,14 @@ var ts; statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.inlineExpressions(expressions)), node)); } if (isMarkedDeclaration) { - // Defer exports until we encounter an EndOfDeclarationMarker node var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node, isExportedDeclaration); } else { - statements = appendExportsOfVariableStatement(statements, node, /*exportSelf*/ false); + statements = appendExportsOfVariableStatement(statements, node, false); } return ts.singleOrMany(statements); } - /** - * Hoists the declared names of a VariableDeclaration or BindingElement. - * - * @param node The declaration to hoist. - */ function hoistBindingElement(node) { if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { @@ -73415,103 +59030,41 @@ var ts; hoistVariableDeclaration(ts.getSynthesizedClone(node.name)); } } - /** - * Determines whether a VariableDeclarationList should be hoisted. - * - * @param node The node to test. - */ function shouldHoistVariableDeclarationList(node) { - // hoist only non-block scoped declarations or block scoped declarations parented by source file - return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0 - && (enclosingBlockScopedContainer.kind === 274 /* SourceFile */ - || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0); + return (ts.getEmitFlags(node) & 2097152) === 0 + && (enclosingBlockScopedContainer.kind === 274 + || (ts.getOriginalNode(node).flags & 3) === 0); } - /** - * Transform an initialized variable declaration into an expression. - * - * @param node The node to transform. - * @param isExportedDeclaration A value indicating whether the variable is exported. - */ function transformInitializedVariable(node, isExportedDeclaration) { var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment; return ts.isBindingPattern(node.name) - ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, - /*needsValue*/ false, createAssignment) + ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, false, createAssignment) : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name; } - /** - * Creates an assignment expression for an exported variable declaration. - * - * @param name The name of the variable. - * @param value The value of the variable's initializer. - * @param location The source map location for the assignment. - */ function createExportedVariableAssignment(name, value, location) { - return createVariableAssignment(name, value, location, /*isExportedDeclaration*/ true); + return createVariableAssignment(name, value, location, true); } - /** - * Creates an assignment expression for a non-exported variable declaration. - * - * @param name The name of the variable. - * @param value The value of the variable's initializer. - * @param location The source map location for the assignment. - */ function createNonExportedVariableAssignment(name, value, location) { - return createVariableAssignment(name, value, location, /*isExportedDeclaration*/ false); + return createVariableAssignment(name, value, location, false); } - /** - * Creates an assignment expression for a variable declaration. - * - * @param name The name of the variable. - * @param value The value of the variable's initializer. - * @param location The source map location for the assignment. - * @param isExportedDeclaration A value indicating whether the variable is exported. - */ function createVariableAssignment(name, value, location, isExportedDeclaration) { hoistVariableDeclaration(ts.getSynthesizedClone(name)); return isExportedDeclaration ? createExportExpression(name, preventSubstitution(ts.setTextRange(ts.createAssignment(name, value), location))) : preventSubstitution(ts.setTextRange(ts.createAssignment(name, value), location)); } - /** - * Visits a MergeDeclarationMarker used as a placeholder for the beginning of a merged - * and transformed declaration. - * - * @param node The node to visit. - */ function visitMergeDeclarationMarker(node) { - // For an EnumDeclaration or ModuleDeclaration that merges with a preceeding - // declaration we do not emit a leading variable declaration. To preserve the - // begin/end semantics of the declararation and to properly handle exports - // we wrapped the leading variable declaration in a `MergeDeclarationMarker`. - // - // To balance the declaration, we defer the exports of the elided variable - // statement until we visit this declaration's `EndOfDeclarationMarker`. - if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214 /* VariableStatement */) { + if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214) { var id = ts.getOriginalNodeId(node); - var isExportedDeclaration = ts.hasModifier(node.original, 1 /* Export */); + var isExportedDeclaration = ts.hasModifier(node.original, 1); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration); } return node; } - /** - * Determines whether a node has an associated EndOfDeclarationMarker. - * - * @param node The node to test. - */ function hasAssociatedEndOfDeclarationMarker(node) { - return (ts.getEmitFlags(node) & 4194304 /* HasEndOfDeclarationMarker */) !== 0; + return (ts.getEmitFlags(node) & 4194304) !== 0; } - /** - * Visits a DeclarationMarker used as a placeholder for the end of a transformed - * declaration. - * - * @param node The node to visit. - */ function visitEndOfDeclarationMarker(node) { - // For some transformations we emit an `EndOfDeclarationMarker` to mark the actual - // end of the transformed declaration. We use this marker to emit any deferred exports - // of the declaration. var id = ts.getOriginalNodeId(node); var statements = deferredExports[id]; if (statements) { @@ -73526,15 +59079,6 @@ var ts; } return node; } - /** - * Appends the exports of an ImportDeclaration to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfImportDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; @@ -73549,10 +59093,10 @@ var ts; var namedBindings = importClause.namedBindings; if (namedBindings) { switch (namedBindings.kind) { - case 246 /* NamespaceImport */: + case 246: statements = appendExportsOfDeclaration(statements, namedBindings); break; - case 247 /* NamedImports */: + case 247: for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) { var importBinding = _a[_i]; statements = appendExportsOfDeclaration(statements, importBinding); @@ -73562,32 +59106,12 @@ var ts; } return statements; } - /** - * Appends the export of an ImportEqualsDeclaration to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfImportEqualsDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; } return appendExportsOfDeclaration(statements, decl); } - /** - * Appends the exports of a VariableStatement to a statement list, returning the statement - * list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param node The VariableStatement whose exports are to be recorded. - * @param exportSelf A value indicating whether to also export each VariableDeclaration of - * `nodes` declaration list. - */ function appendExportsOfVariableStatement(statements, node, exportSelf) { if (moduleInfo.exportEquals) { return statements; @@ -73600,16 +59124,6 @@ var ts; } return statements; } - /** - * Appends the exports of a VariableDeclaration or BindingElement to a statement list, - * returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - * @param exportSelf A value indicating whether to also export the declaration itself. - */ function appendExportsOfBindingElement(statements, decl, exportSelf) { if (moduleInfo.exportEquals) { return statements; @@ -73632,22 +59146,13 @@ var ts; } return statements; } - /** - * Appends the exports of a ClassDeclaration or FunctionDeclaration to a statement list, - * returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration whose exports are to be recorded. - */ function appendExportsOfHoistedDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; } var excludeName; - if (ts.hasModifier(decl, 1 /* Export */)) { - var exportName = ts.hasModifier(decl, 512 /* Default */) ? ts.createLiteral("default") : decl.name; + if (ts.hasModifier(decl, 1)) { + var exportName = ts.hasModifier(decl, 512) ? ts.createLiteral("default") : decl.name; statements = appendExportStatement(statements, exportName, ts.getLocalName(decl)); excludeName = ts.getTextOfIdentifierOrLiteral(exportName); } @@ -73656,15 +59161,6 @@ var ts; } return statements; } - /** - * Appends the exports of a declaration to a statement list, returning the statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param decl The declaration to export. - * @param excludeName An optional name to exclude from exports. - */ function appendExportsOfDeclaration(statements, decl, excludeName) { if (moduleInfo.exportEquals) { return statements; @@ -73681,104 +59177,67 @@ var ts; } return statements; } - /** - * Appends the down-level representation of an export to a statement list, returning the - * statement list. - * - * @param statements A statement list to which the down-level export statements are to be - * appended. If `statements` is `undefined`, a new array is allocated if statements are - * appended. - * @param exportName The name of the export. - * @param expression The expression to export. - * @param allowComments Whether to allow comments on the export. - */ function appendExportStatement(statements, exportName, expression, allowComments) { statements = ts.append(statements, createExportStatement(exportName, expression, allowComments)); return statements; } - /** - * Creates a call to the current file's export function to export a value. - * - * @param name The bound name of the export. - * @param value The exported value. - * @param allowComments An optional value indicating whether to emit comments for the statement. - */ function createExportStatement(name, value, allowComments) { var statement = ts.createStatement(createExportExpression(name, value)); ts.startOnNewLine(statement); if (!allowComments) { - ts.setEmitFlags(statement, 1536 /* NoComments */); + ts.setEmitFlags(statement, 1536); } return statement; } - /** - * Creates a call to the current file's export function to export a value. - * - * @param name The bound name of the export. - * @param value The exported value. - */ function createExportExpression(name, value) { var exportName = ts.isIdentifier(name) ? ts.createLiteral(name) : name; - ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536 /* NoComments */); - return ts.setCommentRange(ts.createCall(exportFunction, /*typeArguments*/ undefined, [exportName, value]), value); + ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536); + return ts.setCommentRange(ts.createCall(exportFunction, undefined, [exportName, value]), value); } - // - // Top-Level or Nested Source Element Visitors - // - /** - * Visit nested elements at the top-level of a module. - * - * @param node The node to visit. - */ function nestedElementVisitor(node) { switch (node.kind) { - case 214 /* VariableStatement */: + case 214: return visitVariableStatement(node); - case 234 /* FunctionDeclaration */: + case 234: return visitFunctionDeclaration(node); - case 235 /* ClassDeclaration */: + case 235: return visitClassDeclaration(node); - case 220 /* ForStatement */: + case 220: return visitForStatement(node); - case 221 /* ForInStatement */: + case 221: return visitForInStatement(node); - case 222 /* ForOfStatement */: + case 222: return visitForOfStatement(node); - case 218 /* DoStatement */: + case 218: return visitDoStatement(node); - case 219 /* WhileStatement */: + case 219: return visitWhileStatement(node); - case 228 /* LabeledStatement */: + case 228: return visitLabeledStatement(node); - case 226 /* WithStatement */: + case 226: return visitWithStatement(node); - case 227 /* SwitchStatement */: + case 227: return visitSwitchStatement(node); - case 241 /* CaseBlock */: + case 241: return visitCaseBlock(node); - case 266 /* CaseClause */: + case 266: return visitCaseClause(node); - case 267 /* DefaultClause */: + case 267: return visitDefaultClause(node); - case 230 /* TryStatement */: + case 230: return visitTryStatement(node); - case 269 /* CatchClause */: + case 269: return visitCatchClause(node); - case 213 /* Block */: + case 213: return visitBlock(node); - case 303 /* MergeDeclarationMarker */: + case 303: return visitMergeDeclarationMarker(node); - case 304 /* EndOfDeclarationMarker */: + case 304: return visitEndOfDeclarationMarker(node); default: return destructuringAndImportCallVisitor(node); } } - /** - * Visits the body of a ForStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitForStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73786,11 +59245,6 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - /** - * Visits the body of a ForInStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitForInStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73798,11 +59252,6 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - /** - * Visits the body of a ForOfStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitForOfStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73810,27 +59259,16 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - /** - * Determines whether to hoist the initializer of a ForStatement, ForInStatement, or - * ForOfStatement. - * - * @param node The node to test. - */ function shouldHoistForInitializer(node) { return ts.isVariableDeclarationList(node) && shouldHoistVariableDeclarationList(node); } - /** - * Visits the initializer of a ForStatement, ForInStatement, or ForOfStatement - * - * @param node The node to visit. - */ function visitForInitializer(node) { if (shouldHoistForInitializer(node)) { var expressions = void 0; for (var _i = 0, _a = node.declarations; _i < _a.length; _i++) { var variable = _a[_i]; - expressions = ts.append(expressions, transformInitializedVariable(variable, /*isExportedDeclaration*/ false)); + expressions = ts.append(expressions, transformInitializedVariable(variable, false)); if (!variable.initializer) { hoistBindingElement(variable); } @@ -73841,51 +59279,21 @@ var ts; return ts.visitEachChild(node, nestedElementVisitor, context); } } - /** - * Visits the body of a DoStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitDoStatement(node) { return ts.updateDo(node, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression)); } - /** - * Visits the body of a WhileStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitWhileStatement(node) { return ts.updateWhile(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } - /** - * Visits the body of a LabeledStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitLabeledStatement(node) { return ts.updateLabel(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } - /** - * Visits the body of a WithStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitWithStatement(node) { return ts.updateWith(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } - /** - * Visits the body of a SwitchStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitSwitchStatement(node) { return ts.updateSwitch(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock)); } - /** - * Visits the body of a CaseBlock to hoist declarations. - * - * @param node The node to visit. - */ function visitCaseBlock(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73893,35 +59301,15 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - /** - * Visits the body of a CaseClause to hoist declarations. - * - * @param node The node to visit. - */ function visitCaseClause(node) { return ts.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement)); } - /** - * Visits the body of a DefaultClause to hoist declarations. - * - * @param node The node to visit. - */ function visitDefaultClause(node) { return ts.visitEachChild(node, nestedElementVisitor, context); } - /** - * Visits the body of a TryStatement to hoist declarations. - * - * @param node The node to visit. - */ function visitTryStatement(node) { return ts.visitEachChild(node, nestedElementVisitor, context); } - /** - * Visits the body of a CatchClause to hoist declarations. - * - * @param node The node to visit. - */ function visitCatchClause(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73929,11 +59317,6 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - /** - * Visits the body of a Block to hoist declarations. - * - * @param node The node to visit. - */ function visitBlock(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; @@ -73941,23 +59324,15 @@ var ts; enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } - // - // Destructuring Assignment Visitors - // - /** - * Visit nodes to flatten destructuring assignments to exported symbols. - * - * @param node The node to visit. - */ function destructuringAndImportCallVisitor(node) { - if (node.transformFlags & 1024 /* DestructuringAssignment */ - && node.kind === 200 /* BinaryExpression */) { + if (node.transformFlags & 1024 + && node.kind === 200) { return visitDestructuringAssignment(node); } else if (ts.isImportCall(node)) { return visitImportCallExpression(node); } - else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 67108864 /* ContainsDynamicImport */)) { + else if ((node.transformFlags & 2048) || (node.transformFlags & 67108864)) { return ts.visitEachChild(node, destructuringAndImportCallVisitor, context); } else { @@ -73965,38 +59340,16 @@ var ts; } } function visitImportCallExpression(node) { - // import("./blah") - // emit as - // System.register([], function (_export, _context) { - // return { - // setters: [], - // execute: () => { - // _context.import('./blah'); - // } - // }; - // }); - return ts.createCall(ts.createPropertyAccess(contextObject, ts.createIdentifier("import")), - /*typeArguments*/ undefined, ts.some(node.arguments) ? [ts.visitNode(node.arguments[0], destructuringAndImportCallVisitor)] : []); + return ts.createCall(ts.createPropertyAccess(contextObject, ts.createIdentifier("import")), undefined, ts.some(node.arguments) ? [ts.visitNode(node.arguments[0], destructuringAndImportCallVisitor)] : []); } - /** - * Visits a DestructuringAssignment to flatten destructuring to exported symbols. - * - * @param node The node to visit. - */ function visitDestructuringAssignment(node) { if (hasExportedReferenceInDestructuringTarget(node.left)) { - return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, - /*needsValue*/ true); + return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, true); } return ts.visitEachChild(node, destructuringAndImportCallVisitor, context); } - /** - * Determines whether the target of a destructuring assigment refers to an exported symbol. - * - * @param node The destructuring target. - */ function hasExportedReferenceInDestructuringTarget(node) { - if (ts.isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) { + if (ts.isAssignmentExpression(node, true)) { return hasExportedReferenceInDestructuringTarget(node.left); } else if (ts.isSpreadElement(node)) { @@ -74016,40 +59369,22 @@ var ts; } else if (ts.isIdentifier(node)) { var container = resolver.getReferencedExportContainer(node); - return container !== undefined && container.kind === 274 /* SourceFile */; + return container !== undefined && container.kind === 274; } else { return false; } } - // - // Modifier Visitors - // - /** - * Visit nodes to elide module-specific modifiers. - * - * @param node The node to visit. - */ function modifierVisitor(node) { switch (node.kind) { - case 84 /* ExportKeyword */: - case 79 /* DefaultKeyword */: + case 84: + case 79: return undefined; } return node; } - // - // Emit Notification - // - /** - * Hook for node emit notifications. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emitCallback A callback used to emit the node in the printer. - */ function onEmitNode(hint, node, emitCallback) { - if (node.kind === 274 /* SourceFile */) { + if (node.kind === 274) { var id = ts.getOriginalNodeId(node); currentSourceFile = node; moduleInfo = moduleInfoMap[id]; @@ -74068,127 +59403,75 @@ var ts; previousOnEmitNode(hint, node, emitCallback); } } - // - // Substitutions - // - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (isSubstitutionPrevented(node)) { return node; } - if (hint === 1 /* Expression */) { + if (hint === 1) { return substituteExpression(node); } - else if (hint === 4 /* Unspecified */) { + else if (hint === 4) { return substituteUnspecified(node); } return node; } - /** - * Substitute the node, if necessary. - * - * @param node The node to substitute. - */ function substituteUnspecified(node) { switch (node.kind) { - case 271 /* ShorthandPropertyAssignment */: + case 271: return substituteShorthandPropertyAssignment(node); } return node; } - /** - * Substitution for a ShorthandPropertyAssignment whose name that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteShorthandPropertyAssignment(node) { var name = node.name; if (!ts.isGeneratedIdentifier(name) && !ts.isLocalName(name)) { var importDeclaration = resolver.getReferencedImportDeclaration(name); if (importDeclaration) { if (ts.isImportClause(importDeclaration)) { - return ts.setTextRange(ts.createPropertyAssignment(ts.getSynthesizedClone(name), ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default"))), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAssignment(ts.getSynthesizedClone(name), ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default"))), node); } else if (ts.isImportSpecifier(importDeclaration)) { - return ts.setTextRange(ts.createPropertyAssignment(ts.getSynthesizedClone(name), ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name))), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAssignment(ts.getSynthesizedClone(name), ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name))), node); } } } return node; } - /** - * Substitute the expression, if necessary. - * - * @param node The node to substitute. - */ function substituteExpression(node) { switch (node.kind) { - case 71 /* Identifier */: + case 71: return substituteExpressionIdentifier(node); - case 200 /* BinaryExpression */: + case 200: return substituteBinaryExpression(node); - case 198 /* PrefixUnaryExpression */: - case 199 /* PostfixUnaryExpression */: + case 198: + case 199: return substituteUnaryExpression(node); } return node; } - /** - * Substitution for an Identifier expression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteExpressionIdentifier(node) { - if (ts.getEmitFlags(node) & 4096 /* HelperName */) { + if (ts.getEmitFlags(node) & 4096) { 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. - // - // - We do not substitute generated identifiers for any reason. - // - We do not substitute identifiers tagged with the LocalName flag. if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) { var importDeclaration = resolver.getReferencedImportDeclaration(node); if (importDeclaration) { if (ts.isImportClause(importDeclaration)) { - return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), node); } else if (ts.isImportSpecifier(importDeclaration)) { - return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name)), - /*location*/ node); + return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name)), node); } } } return node; } - /** - * Substitution for a BinaryExpression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteBinaryExpression(node) { - // When we see an assignment expression whose left-hand side is an exported symbol, - // we should ensure all exports of that symbol are updated with the correct value. - // - // - We do not substitute generated identifiers for any reason. - // - We do not substitute identifiers tagged with the LocalName flag. - // - We do not substitute identifiers that were originally the name of an enum or - // namespace due to how they are transformed in TypeScript. - // - We only substitute identifiers that are exported at the top level. if (ts.isAssignmentOperator(node.operatorToken.kind) && ts.isIdentifier(node.left) && !ts.isGeneratedIdentifier(node.left) @@ -74196,7 +59479,6 @@ var ts; && !ts.isDeclarationNameOfEnumOrNamespace(node.left)) { var exportedNames = getExports(node.left); if (exportedNames) { - // For each additional export of the declaration, apply an export assignment. var expression = node; for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) { var exportName = exportedNames_4[_i]; @@ -74207,37 +59489,23 @@ var ts; } return node; } - /** - * Substitution for a UnaryExpression that may contain an imported or exported symbol. - * - * @param node The node to substitute. - */ function substituteUnaryExpression(node) { - // When we see a prefix or postfix increment expression whose operand is an exported - // symbol, we should ensure all exports of that symbol are updated with the correct - // value. - // - // - We do not substitute generated identifiers for any reason. - // - We do not substitute identifiers tagged with the LocalName flag. - // - We do not substitute identifiers that were originally the name of an enum or - // namespace due to how they are transformed in TypeScript. - // - We only substitute identifiers that are exported at the top level. - if ((node.operator === 43 /* PlusPlusToken */ || node.operator === 44 /* MinusMinusToken */) + if ((node.operator === 43 || node.operator === 44) && ts.isIdentifier(node.operand) && !ts.isGeneratedIdentifier(node.operand) && !ts.isLocalName(node.operand) && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) { var exportedNames = getExports(node.operand); if (exportedNames) { - var expression = node.kind === 199 /* PostfixUnaryExpression */ + var expression = node.kind === 199 ? ts.setTextRange(ts.createPrefix(node.operator, node.operand), node) : node; for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) { var exportName = exportedNames_5[_i]; expression = createExportExpression(exportName, preventSubstitution(expression)); } - if (node.kind === 199 /* PostfixUnaryExpression */) { - expression = node.operator === 43 /* PlusPlusToken */ + if (node.kind === 199) { + expression = node.operator === 43 ? ts.createSubtract(preventSubstitution(expression), ts.createLiteral(1)) : ts.createAdd(preventSubstitution(expression), ts.createLiteral(1)); } @@ -74246,19 +59514,14 @@ var ts; } return node; } - /** - * Gets the exports of a name. - * - * @param name The name. - */ function getExports(name) { var exportedNames; if (!ts.isGeneratedIdentifier(name)) { var valueDeclaration = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); if (valueDeclaration) { - var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false); - if (exportContainer && exportContainer.kind === 274 /* SourceFile */) { + var exportContainer = resolver.getReferencedExportContainer(name, false); + if (exportContainer && exportContainer.kind === 274) { exportedNames = ts.append(exportedNames, ts.getDeclarationName(valueDeclaration)); } exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]); @@ -74266,29 +59529,18 @@ var ts; } return exportedNames; } - /** - * Prevent substitution of a node for this transformer. - * - * @param node The node which should not be substituted. - */ function preventSubstitution(node) { if (noSubstitution === undefined) noSubstitution = []; noSubstitution[ts.getNodeId(node)] = true; return node; } - /** - * Determines whether a node should not be substituted. - * - * @param node The node to test. - */ function isSubstitutionPrevented(node) { return noSubstitution && node.id && noSubstitution[node.id]; } } ts.transformSystemModule = transformSystemModule; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function transformES2015Module(context) { @@ -74297,8 +59549,8 @@ var ts; var previousOnSubstituteNode = context.onSubstituteNode; context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; - context.enableEmitNotification(274 /* SourceFile */); - context.enableSubstitution(71 /* Identifier */); + context.enableEmitNotification(274); + context.enableSubstitution(71); var currentSourceFile; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { @@ -74310,10 +59562,8 @@ var ts; if (externalHelpersModuleName) { var statements = []; var statementOffset = ts.addPrologue(statements, node.statements); - var tslibImport = ts.createImportDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, ts.createImportClause(/*name*/ undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)); - ts.addEmitFlags(tslibImport, 67108864 /* NeverApplyImportHelper */); + var tslibImport = ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)); + ts.addEmitFlags(tslibImport, 67108864); ts.append(statements, tslibImport); ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset)); return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements)); @@ -74326,28 +59576,16 @@ var ts; } function visitor(node) { switch (node.kind) { - case 243 /* ImportEqualsDeclaration */: - // Elide `import=` as it is not legal with --module ES6 + case 243: return undefined; - case 249 /* ExportAssignment */: + case 249: return visitExportAssignment(node); } return node; } function visitExportAssignment(node) { - // Elide `export=` as it is not legal with --module ES6 return node.isExportEquals ? undefined : node; } - // - // Emit Notification - // - /** - * Hook for node emit. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emit A callback used to emit the node in the printer. - */ function onEmitNode(hint, node, emitCallback) { if (ts.isSourceFile(node)) { currentSourceFile = node; @@ -74358,24 +59596,15 @@ var ts; previousOnEmitNode(hint, node, emitCallback); } } - // - // Substitutions - // - /** - * Hooks node substitutions. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to substitute. - */ function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); - if (ts.isIdentifier(node) && hint === 1 /* Expression */) { + if (ts.isIdentifier(node) && hint === 1) { return substituteExpressionIdentifier(node); } return node; } function substituteExpressionIdentifier(node) { - if (ts.getEmitFlags(node) & 4096 /* HelperName */) { + if (ts.getEmitFlags(node) & 4096) { var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile); if (externalHelpersModuleName) { return ts.createPropertyAccess(externalHelpersModuleName, node); @@ -74386,7 +59615,6 @@ var ts; } ts.transformES2015Module = transformES2015Module; })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { function canProduceDiagnostics(node) { @@ -74429,16 +59657,16 @@ var ts; } : undefined; } function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (ts.hasModifier(node, 32 /* Static */)) { + if (ts.hasModifier(node, 32)) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.kind === 235) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; @@ -74458,16 +59686,16 @@ var ts; } : undefined; } function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (ts.hasModifier(node, 32 /* Static */)) { + if (ts.hasModifier(node, 32)) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.kind === 235) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_private_name_1; @@ -74491,7 +59719,7 @@ var ts; return getReturnTypeVisibilityError; } else if (ts.isParameter(node)) { - if (ts.isParameterPropertyDeclaration(node) && ts.hasModifier(node.parent, 8 /* Private */)) { + if (ts.isParameterPropertyDeclaration(node) && ts.hasModifier(node.parent, 8)) { return getVariableDeclarationTypeVisibilityError; } return getParameterDeclarationTypeVisibilityError; @@ -74512,34 +59740,30 @@ var ts; return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]); } function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (node.kind === 232 /* VariableDeclaration */ || node.kind === 182 /* BindingElement */) { + if (node.kind === 232 || node.kind === 182) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; } - // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit - // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all. - else if (node.kind === 152 /* PropertyDeclaration */ || node.kind === 151 /* PropertySignature */ || - (node.kind === 149 /* Parameter */ && ts.hasModifier(node.parent, 8 /* Private */))) { - // TODO(jfreeman): Deal with computed properties in error reporting. - if (ts.hasModifier(node, 32 /* Static */)) { + else if (node.kind === 152 || node.kind === 151 || + (node.kind === 149 && ts.hasModifier(node.parent, 8))) { + if (ts.hasModifier(node, 32)) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.kind === 235 /* ClassDeclaration */ || node.kind === 149 /* Parameter */) { + else if (node.parent.kind === 235 || node.kind === 149) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; } else { - // Interfaces cannot have types that cannot be named return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; @@ -74556,10 +59780,8 @@ var ts; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (node.kind === 157 /* SetAccessor */) { - // Getters can infer the return type from the returned expression, but setters cannot, so the - // "_from_external_module_1_but_cannot_be_named" case cannot occur. - if (ts.hasModifier(node, 32 /* Static */)) { + if (node.kind === 157) { + if (ts.hasModifier(node, 32)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1; @@ -74571,16 +59793,16 @@ var ts; } } else { - if (ts.hasModifier(node, 32 /* Static */)) { + if (ts.hasModifier(node, 32)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1; } else { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1; @@ -74595,50 +59817,46 @@ var ts; function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { - case 159 /* ConstructSignature */: - // Interfaces cannot have return types that cannot be named + case 159: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; break; - case 158 /* CallSignature */: - // Interfaces cannot have return types that cannot be named + case 158: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; break; - case 160 /* IndexSignature */: - // Interfaces cannot have return types that cannot be named + case 160: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; break; - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - if (ts.hasModifier(node, 32 /* Static */)) { + case 154: + case 153: + if (ts.hasModifier(node, 32)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; } - else if (node.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.kind === 235) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; } else { - // Interfaces cannot have return types that cannot be named diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; } break; - case 234 /* FunctionDeclaration */: + case 234: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; @@ -74661,54 +59879,50 @@ var ts; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { - case 155 /* Constructor */: + case 155: return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; - case 159 /* ConstructSignature */: - case 164 /* ConstructorType */: - // Interfaces cannot have parameter types that cannot be named + case 159: + case 164: return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - case 158 /* CallSignature */: - // Interfaces cannot have parameter types that cannot be named + case 158: return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - case 160 /* IndexSignature */: - // Interfaces cannot have parameter types that cannot be named + case 160: return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1; - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - if (ts.hasModifier(node.parent, 32 /* Static */)) { + case 154: + case 153: + if (ts.hasModifier(node.parent, 32)) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 235) { return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; } else { - // Interfaces cannot have parameter types that cannot be named return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; } - case 234 /* FunctionDeclaration */: - case 163 /* FunctionType */: + case 234: + case 163: return symbolAccessibilityResult.errorModuleName ? - symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? + symbolAccessibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; @@ -74717,37 +59931,36 @@ var ts; } } function getTypeParameterConstraintVisibilityError() { - // Type parameter constraints are named by user so we should always be able to name it var diagnosticMessage; switch (node.parent.kind) { - case 235 /* ClassDeclaration */: + case 235: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 236 /* InterfaceDeclaration */: + case 236: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 159 /* ConstructSignature */: + case 159: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 158 /* CallSignature */: + case 158: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - if (ts.hasModifier(node.parent, 32 /* Static */)) { + case 154: + case 153: + if (ts.hasModifier(node.parent, 32)) { diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.parent.kind === 235 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 235) { diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; } else { diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; } break; - case 234 /* FunctionDeclaration */: + case 234: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; - case 237 /* TypeAliasDeclaration */: + case 237: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1; break; default: @@ -74761,15 +59974,12 @@ var ts; } function getHeritageClauseVisibilityError() { var diagnosticMessage; - // Heritage clause is written by user so it can always be named - if (node.parent.parent.kind === 235 /* ClassDeclaration */) { - // Class or Interface implemented/extended is inaccessible - diagnosticMessage = node.parent.token === 108 /* ImplementsKeyword */ ? + if (node.parent.parent.kind === 235) { + diagnosticMessage = node.parent.token === 108 ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1; } else { - // interface is inaccessible diagnosticMessage = ts.Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; } return { @@ -74795,30 +60005,23 @@ var ts; } ts.createGetSymbolAccessibilityDiagnosticForNode = createGetSymbolAccessibilityDiagnosticForNode; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function getDeclarationDiagnostics(host, resolver, file) { if (file && ts.isSourceFileJavaScript(file)) { - return []; // No declaration diagnostics for js for now + return []; } var compilerOptions = host.getCompilerOptions(); - var result = ts.transformNodes(resolver, host, compilerOptions, file ? [file] : ts.filter(host.getSourceFiles(), ts.isSourceFileNotJavaScript), [transformDeclarations], /*allowDtsFiles*/ false); + var result = ts.transformNodes(resolver, host, compilerOptions, file ? [file] : ts.filter(host.getSourceFiles(), ts.isSourceFileNotJavaScript), [transformDeclarations], false); return result.diagnostics; } ts.getDeclarationDiagnostics = getDeclarationDiagnostics; - var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | - 2048 /* WriteClassExpressionAsTypeLiteral */ | - 4096 /* UseTypeOfFunction */ | - 8 /* UseStructuralFallback */ | - 524288 /* AllowEmptyTuple */ | - 4 /* GenerateNamesForShadowedTypeParams */; - /** - * Transforms a ts file into a .d.ts file - * This process requires type information, which is retrieved through the emit resolver. Because of this, - * in many places this transformer assumes it will be operating on parse tree nodes directly. - * This means that _no transforms should be allowed to occur before this one_. - */ + var declarationEmitNodeBuilderFlags = 1024 | + 2048 | + 4096 | + 8 | + 524288 | + 4; function transformDeclarations(context) { var throwDiagnostic = function () { return ts.Debug.fail("Diagnostic emitted without context"); }; var getSymbolAccessibilityDiagnostic = throwDiagnostic; @@ -74864,8 +60067,7 @@ var ts; refs.set("" + ts.getOriginalNodeId(container), container); } function handleSymbolAccessibilityError(symbolAccessibilityResult) { - if (symbolAccessibilityResult.accessibility === 0 /* Accessible */) { - // Add aliases back onto the possible imports list if they're not there so we can try them again with updated visibility info + if (symbolAccessibilityResult.accessibility === 0) { if (symbolAccessibilityResult && symbolAccessibilityResult.aliasesToMakeVisible) { if (!lateMarkedStatements) { lateMarkedStatements = symbolAccessibilityResult.aliasesToMakeVisible; @@ -74877,10 +60079,8 @@ var ts; } } } - // TODO: Do all these accessibility checks inside/after the first pass in the checker when declarations are enabled, if possible } else { - // Report error var errorInfo = getSymbolAccessibilityDiagnostic(symbolAccessibilityResult); if (errorInfo) { if (errorInfo.typeName) { @@ -74893,9 +60093,9 @@ var ts; } } function trackSymbol(symbol, enclosingDeclaration, meaning) { - if (symbol.flags & 262144 /* TypeParameter */) + if (symbol.flags & 262144) return; - handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true)); + handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true)); recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportPrivateInBaseOfClassExpression(propertyName) { @@ -74914,16 +60114,16 @@ var ts; } } function transformRoot(node) { - if (node.kind === 274 /* SourceFile */ && (node.isDeclarationFile || ts.isSourceFileJavaScript(node))) { + if (node.kind === 274 && (node.isDeclarationFile || ts.isSourceFileJavaScript(node))) { return node; } - if (node.kind === 275 /* Bundle */) { + if (node.kind === 275) { isBundledEmit = true; var refs_1 = ts.createMap(); var hasNoDefaultLib_1 = false; var bundle = ts.createBundle(ts.map(node.sourceFiles, function (sourceFile) { if (sourceFile.isDeclarationFile || ts.isSourceFileJavaScript(sourceFile)) - return undefined; // Omit declaration files from bundle results, too // TODO: GH#18217 + return undefined; hasNoDefaultLib_1 = hasNoDefaultLib_1 || sourceFile.hasNoDefaultLib; currentSourceFile = sourceFile; enclosingDeclaration = sourceFile; @@ -74935,29 +60135,28 @@ var ts; resultHasScopeMarker = false; collectReferences(sourceFile, refs_1); if (ts.isExternalModule(sourceFile)) { - resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules) + resultHasExternalModuleIndicator = false; needsDeclare = false; var statements_5 = ts.visitNodes(sourceFile.statements, visitDeclarationStatements); - var newFile = ts.updateSourceFileNode(sourceFile, [ts.createModuleDeclaration([], [ts.createModifier(124 /* DeclareKeyword */)], ts.createLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), ts.createModuleBlock(ts.setTextRange(ts.createNodeArray(transformAndReplaceLatePaintedStatements(statements_5)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []); + var newFile = ts.updateSourceFileNode(sourceFile, [ts.createModuleDeclaration([], [ts.createModifier(124)], ts.createLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), ts.createModuleBlock(ts.setTextRange(ts.createNodeArray(transformAndReplaceLatePaintedStatements(statements_5)), sourceFile.statements)))], true, [], [], false, []); return newFile; } needsDeclare = true; var updated = ts.visitNodes(sourceFile.statements, visitDeclarationStatements); - return ts.updateSourceFileNode(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []); + return ts.updateSourceFileNode(sourceFile, transformAndReplaceLatePaintedStatements(updated), true, [], [], false, []); }), ts.mapDefined(node.prepends, function (prepend) { - if (prepend.kind === 277 /* InputFiles */) { + if (prepend.kind === 277) { return ts.createUnparsedSourceFile(prepend.declarationText, prepend.declarationMapText); } })); bundle.syntheticFileReferences = []; bundle.syntheticTypeReferences = getFileReferencesForUsedTypeReferences(); bundle.hasNoDefaultLib = hasNoDefaultLib_1; - var outputFilePath_1 = ts.getDirectoryPath(ts.normalizeSlashes(ts.getOutputPathsFor(node, host, /*forceDtsPaths*/ true).declarationFilePath)); + var outputFilePath_1 = ts.getDirectoryPath(ts.normalizeSlashes(ts.getOutputPathsFor(node, host, true).declarationFilePath)); var referenceVisitor_1 = mapReferencesIntoArray(bundle.syntheticFileReferences, outputFilePath_1); refs_1.forEach(referenceVisitor_1); return bundle; } - // Single source file needsDeclare = true; needsScopeFixMarker = false; resultHasScopeMarker = false; @@ -74972,22 +60171,21 @@ var ts; necessaryTypeRefernces = undefined; refs = collectReferences(currentSourceFile, ts.createMap()); var references = []; - var outputFilePath = ts.getDirectoryPath(ts.normalizeSlashes(ts.getOutputPathsFor(node, host, /*forceDtsPaths*/ true).declarationFilePath)); + var outputFilePath = ts.getDirectoryPath(ts.normalizeSlashes(ts.getOutputPathsFor(node, host, true).declarationFilePath)); var referenceVisitor = mapReferencesIntoArray(references, outputFilePath); var statements = ts.visitNodes(node.statements, visitDeclarationStatements); var combinedStatements = ts.setTextRange(ts.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), node.statements); refs.forEach(referenceVisitor); var emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax); if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) { - combinedStatements = ts.setTextRange(ts.createNodeArray(combinedStatements.concat([ts.createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, ts.createNamedExports([]), /*moduleSpecifier*/ undefined)])), combinedStatements); + combinedStatements = ts.setTextRange(ts.createNodeArray(combinedStatements.concat([ts.createExportDeclaration(undefined, undefined, ts.createNamedExports([]), undefined)])), combinedStatements); } - var updated = ts.updateSourceFileNode(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib); + var updated = ts.updateSourceFileNode(node, combinedStatements, true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib); return updated; function getFileReferencesForUsedTypeReferences() { return necessaryTypeRefernces ? ts.mapDefined(ts.arrayFrom(necessaryTypeRefernces.keys()), getFileReferenceForTypeName) : []; } function getFileReferenceForTypeName(typeName) { - // Elide type references for which we have imports if (emittedImports) { for (var _i = 0, emittedImports_1 = emittedImports; _i < emittedImports_1.length; _i++) { var importStatement = emittedImports_1[_i]; @@ -75007,18 +60205,17 @@ var ts; function mapReferencesIntoArray(references, outputFilePath) { return function (file) { var declFileName; - if (file.isDeclarationFile) { // Neither decl files or js should have their refs changed + if (file.isDeclarationFile) { declFileName = file.fileName; } else { if (isBundledEmit && ts.contains(node.sourceFiles, file)) - return; // Omit references to files which are being merged - var paths = ts.getOutputPathsFor(file, host, /*forceDtsPaths*/ true); + return; + var paths = ts.getOutputPathsFor(file, host, true); declFileName = paths.declarationFilePath || paths.jsFilePath; } if (declFileName) { - var fileName = ts.getRelativePathToDirectoryOrUrl(outputFilePath, declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, - /*isAbsolutePathAnUrl*/ false); + var fileName = ts.getRelativePathToDirectoryOrUrl(outputFilePath, declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); if (ts.startsWith(fileName, "./") && ts.hasExtension(fileName)) { fileName = fileName.substring(2); } @@ -75039,11 +60236,11 @@ var ts; return ret; } function filterBindingPatternInitializers(name) { - if (name.kind === 71 /* Identifier */) { + if (name.kind === 71) { return name; } else { - if (name.kind === 181 /* ArrayBindingPattern */) { + if (name.kind === 181) { return ts.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement)); } else { @@ -75051,7 +60248,7 @@ var ts; } } function visitBindingElement(elem) { - if (elem.kind === 206 /* OmittedExpression */) { + if (elem.kind === 206) { return elem; } return ts.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined); @@ -75063,45 +60260,39 @@ var ts; oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(p); } - var newParam = ts.updateParameter(p, - /*decorators*/ undefined, maskModifiers(p, modifierMask), p.dotDotDotToken, filterBindingPatternInitializers(p.name), resolver.isOptionalParameter(p) ? (p.questionToken || ts.createToken(55 /* QuestionToken */)) : undefined, ensureType(p, p.type, /*ignorePrivate*/ true), // Ignore private param props, since this type is going straight back into a param - ensureNoInitializer(p)); + var newParam = ts.updateParameter(p, undefined, maskModifiers(p, modifierMask), p.dotDotDotToken, filterBindingPatternInitializers(p.name), resolver.isOptionalParameter(p) ? (p.questionToken || ts.createToken(55)) : undefined, ensureType(p, p.type, true), ensureNoInitializer(p)); if (!suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = oldDiag; } return newParam; } function shouldPrintWithInitializer(node) { - return canHaveLiteralInitializer(node) && resolver.isLiteralConstDeclaration(ts.getParseTreeNode(node)); // TODO: Make safe + return canHaveLiteralInitializer(node) && resolver.isLiteralConstDeclaration(ts.getParseTreeNode(node)); } function ensureNoInitializer(node) { if (shouldPrintWithInitializer(node)) { - return resolver.createLiteralConstValue(ts.getParseTreeNode(node)); // TODO: Make safe + return resolver.createLiteralConstValue(ts.getParseTreeNode(node)); } return undefined; } function ensureType(node, type, ignorePrivate) { - if (!ignorePrivate && ts.hasModifier(node, 8 /* Private */)) { - // Private nodes emit no types (except private parameter properties, whose parameter types are actually visible) + if (!ignorePrivate && ts.hasModifier(node, 8)) { return; } if (shouldPrintWithInitializer(node)) { - // Literal const declarations will have an initializer ensured rather than a type return; } - var shouldUseResolverType = node.kind === 149 /* Parameter */ && + var shouldUseResolverType = node.kind === 149 && (resolver.isRequiredInitializedParameter(node) || resolver.isOptionalUninitializedParameterProperty(node)); if (type && !shouldUseResolverType) { return ts.visitNode(type, visitDeclarationSubtree); } if (!ts.getParseTreeNode(node)) { - return type ? ts.visitNode(type, visitDeclarationSubtree) : ts.createKeywordTypeNode(119 /* AnyKeyword */); + return type ? ts.visitNode(type, visitDeclarationSubtree) : ts.createKeywordTypeNode(119); } - if (node.kind === 157 /* SetAccessor */) { - // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now - // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that) - return ts.createKeywordTypeNode(119 /* AnyKeyword */); + if (node.kind === 157) { + return ts.createKeywordTypeNode(119); } errorNameNode = node.name; var oldDiag; @@ -75109,12 +60300,12 @@ var ts; oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node); } - if (node.kind === 232 /* VariableDeclaration */ || node.kind === 182 /* BindingElement */) { + if (node.kind === 232 || node.kind === 182) { return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker)); } - if (node.kind === 149 /* Parameter */ - || node.kind === 152 /* PropertyDeclaration */ - || node.kind === 151 /* PropertySignature */) { + if (node.kind === 149 + || node.kind === 152 + || node.kind === 151) { if (!node.initializer) return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType)); return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker)); @@ -75125,26 +60316,25 @@ var ts; if (!suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = oldDiag; } - return returnValue || ts.createKeywordTypeNode(119 /* AnyKeyword */); + return returnValue || ts.createKeywordTypeNode(119); } } function isDeclarationAndNotVisible(node) { node = ts.getParseTreeNode(node); switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 239 /* ModuleDeclaration */: - case 236 /* InterfaceDeclaration */: - case 235 /* ClassDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 238 /* EnumDeclaration */: + case 234: + case 239: + case 236: + case 235: + case 237: + case 238: return !resolver.isDeclarationVisible(node); - // The following should be doing their own visibility checks based on filtering their members - case 232 /* VariableDeclaration */: + case 232: return !getBindingNameVisible(node); - case 243 /* ImportEqualsDeclaration */: - case 244 /* ImportDeclaration */: - case 250 /* ExportDeclaration */: - case 249 /* ExportAssignment */: + case 243: + case 244: + case 250: + case 249: return false; } return false; @@ -75154,7 +60344,6 @@ var ts; return false; } if (ts.isBindingPattern(elem.name)) { - // If any child binding pattern element has been marked visible (usually by collect linked aliases), then this is visible return ts.some(elem.name.elements, getBindingNameVisible); } else { @@ -75162,17 +60351,17 @@ var ts; } } function updateParamsList(node, params, modifierMask) { - if (ts.hasModifier(node, 8 /* Private */)) { - return undefined; // TODO: GH#18217 + if (ts.hasModifier(node, 8)) { + return undefined; } var newParams = ts.map(params, function (p) { return ensureParameter(p, modifierMask); }); if (!newParams) { - return undefined; // TODO: GH#18217 + return undefined; } return ts.createNodeArray(newParams, params.hasTrailingComma); } function ensureTypeParams(node, params) { - return ts.hasModifier(node, 8 /* Private */) ? undefined : ts.visitNodes(params, visitDeclarationSubtree); + return ts.hasModifier(node, 8) ? undefined : ts.visitNodes(params, visitDeclarationSubtree); } function isEnclosingDeclaration(node) { return ts.isSourceFile(node) @@ -75197,9 +60386,9 @@ var ts; } function rewriteModuleSpecifier(parent, input) { if (!input) - return undefined; // TODO: GH#18217 - resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 239 /* ModuleDeclaration */ && parent.kind !== 179 /* ImportType */); - if (input.kind === 9 /* StringLiteral */ && isBundledEmit) { + return undefined; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 239 && parent.kind !== 179); + if (input.kind === 9 && isBundledEmit) { var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent); if (newName) { return ts.createLiteral(newName); @@ -75210,11 +60399,9 @@ var ts; function transformImportEqualsDeclaration(decl) { if (!resolver.isDeclarationVisible(decl)) return; - if (decl.moduleReference.kind === 254 /* ExternalModuleReference */) { - // Rewrite external module names if necessary + if (decl.moduleReference.kind === 254) { var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl); - return ts.updateImportEqualsDeclaration(decl, - /*decorators*/ undefined, decl.modifiers, decl.name, ts.updateExternalModuleReference(decl.moduleReference, rewriteModuleSpecifier(decl, specifier))); + return ts.updateImportEqualsDeclaration(decl, undefined, decl.modifiers, decl.name, ts.updateExternalModuleReference(decl.moduleReference, rewriteModuleSpecifier(decl, specifier))); } else { var oldDiag = getSymbolAccessibilityDiagnostic; @@ -75226,55 +60413,30 @@ var ts; } function transformImportDeclaration(decl) { if (!decl.importClause) { - // import "mod" - possibly needed for side effects? (global interface patches, module augmentations, etc) - return ts.updateImportDeclaration(decl, - /*decorators*/ undefined, decl.modifiers, decl.importClause, rewriteModuleSpecifier(decl, decl.moduleSpecifier)); + return ts.updateImportDeclaration(decl, undefined, decl.modifiers, decl.importClause, rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } - // The `importClause` visibility corresponds to the default's visibility. var visibleDefaultBinding = decl.importClause && decl.importClause.name && resolver.isDeclarationVisible(decl.importClause) ? decl.importClause.name : undefined; if (!decl.importClause.namedBindings) { - // No named bindings (either namespace or list), meaning the import is just default or should be elided - return visibleDefaultBinding && ts.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, - /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); + return visibleDefaultBinding && ts.updateImportDeclaration(decl, undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } - if (decl.importClause.namedBindings.kind === 246 /* NamespaceImport */) { - // Namespace import (optionally with visible default) - var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined; - return visibleDefaultBinding || namedBindings ? ts.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined; + if (decl.importClause.namedBindings.kind === 246) { + var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : undefined; + return visibleDefaultBinding || namedBindings ? ts.updateImportDeclaration(decl, undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined; } - // Named imports (optionally with visible default) var bindingList = ts.mapDefined(decl.importClause.namedBindings.elements, function (b) { return resolver.isDeclarationVisible(b) ? b : undefined; }); if ((bindingList && bindingList.length) || visibleDefaultBinding) { - return ts.updateImportDeclaration(decl, - /*decorators*/ undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, bindingList && bindingList.length ? ts.updateNamedImports(decl.importClause.namedBindings, bindingList) : undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); + return ts.updateImportDeclaration(decl, undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, bindingList && bindingList.length ? ts.updateNamedImports(decl.importClause.namedBindings, bindingList) : undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } - // Nothing visible } function transformAndReplaceLatePaintedStatements(statements) { - // This is a `while` loop because `handleSymbolAccessibilityError` can see additional import aliases marked as visible during - // error handling which must now be included in the output and themselves checked for errors. - // For example: - // ``` - // module A { - // export module Q {} - // import B = Q; - // import C = B; - // export import D = C; - // } - // ``` - // In such a scenario, only Q and D are initially visible, but we don't consider imports as private names - instead we say they if they are referenced they must - // be recorded. So while checking D's visibility we mark C as visible, then we must check C which in turn marks B, completing the chain of - // dependent imports and allowing a valid declaration file output. Today, this dependent alias marking only happens for internal import aliases. while (ts.length(lateMarkedStatements)) { var i = lateMarkedStatements.shift(); if (!ts.isLateVisibilityPaintedStatement(i)) { return ts.Debug.fail("Late replaced statement was found which is not handled by the declaration transformer!: " + (ts.SyntaxKind ? ts.SyntaxKind[i.kind] : i.kind)); } - var result = transformTopLevelDeclaration(i, /*privateDeclaration*/ true); + var result = transformTopLevelDeclaration(i, true); lateStatementReplacementMap.set("" + ts.getOriginalNodeId(i), result); } - // And lastly, we need to get the final form of all those indetermine import declarations from before and add them to the output list - // (and remove them from the set to examine for outter declarations) return ts.visitNodes(statements, visitLateVisibilityMarkedStatements); function visitLateVisibilityMarkedStatements(statement) { if (ts.isLateVisibilityPaintedStatement(statement)) { @@ -75284,7 +60446,6 @@ var ts; lateStatementReplacementMap.delete(key); if (result && ts.isSourceFile(statement.parent)) { if (ts.isArray(result) ? ts.some(result, needsScopeMarker) : needsScopeMarker(result)) { - // Top-level declarations in .d.ts files are always considered exported even without a modifier unless there's an export assignment or specifier needsScopeFixMarker = true; } if (ts.isArray(result) ? ts.some(result, isExternalModuleIndicator) : isExternalModuleIndicator(result)) { @@ -75298,11 +60459,10 @@ var ts; } } function isExternalModuleIndicator(result) { - // Exported top-level member indicates moduleness - return ts.isAnyImportOrReExport(result) || ts.isExportAssignment(result) || ts.hasModifier(result, 1 /* Export */); + return ts.isAnyImportOrReExport(result) || ts.isExportAssignment(result) || ts.hasModifier(result, 1); } function needsScopeMarker(result) { - return !ts.isAnyImportOrReExport(result) && !ts.isExportAssignment(result) && !ts.hasModifier(result, 1 /* Export */) && !ts.isAmbientModule(result); + return !ts.isAnyImportOrReExport(result) && !ts.isExportAssignment(result) && !ts.hasModifier(result, 1) && !ts.isAmbientModule(result); } function visitDeclarationSubtree(input) { if (shouldStripInternal(input)) @@ -75314,10 +60474,8 @@ var ts; return; } } - // Elide implementation signatures from overload sets if (ts.isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; - // Elide semicolon class statements if (ts.isSemicolonClassElement(input)) return; var previousEnclosingDeclaration; @@ -75326,12 +60484,11 @@ var ts; enclosingDeclaration = input; } var oldDiag = getSymbolAccessibilityDiagnostic; - // Emit methods which are private as properties with no type information if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) { - if (ts.hasModifier(input, 8 /* Private */)) { + if (ts.hasModifier(input, 8)) { if (input.symbol && input.symbol.declarations && input.symbol.declarations[0] !== input) - return; // Elide all but the first overload - return cleanup(ts.createProperty(/*decorators*/ undefined, ensureModifiers(input), input.name, /*questionToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined)); + return; + return cleanup(ts.createProperty(undefined, ensureModifiers(input), input.name, undefined, undefined, undefined)); } } var canProdiceDiagnostic = ts.canProduceDiagnostics(input); @@ -75342,84 +60499,75 @@ var ts; checkEntityNameVisibility(input.exprName, enclosingDeclaration); } var oldWithinObjectLiteralType = suppressNewDiagnosticContexts; - var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 166 /* TypeLiteral */ || input.kind === 177 /* MappedType */) && input.parent.kind !== 237 /* TypeAliasDeclaration */); + var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 166 || input.kind === 177) && input.parent.kind !== 237); if (shouldEnterSuppressNewDiagnosticsContextContext) { - // We stop making new diagnostic contexts within object literal types. Unless it's an object type on the RHS of a type alias declaration. Then we do. suppressNewDiagnosticContexts = true; } if (isProcessedComponent(input)) { switch (input.kind) { - case 207 /* ExpressionWithTypeArguments */: { + case 207: { if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) { checkEntityNameVisibility(input.expression, enclosingDeclaration); } var node = ts.visitEachChild(input, visitDeclarationSubtree, context); return cleanup(ts.updateExpressionWithTypeArguments(node, ts.parenthesizeTypeParameters(node.typeArguments), node.expression)); } - case 162 /* TypeReference */: { + case 162: { checkEntityNameVisibility(input.typeName, enclosingDeclaration); var node = ts.visitEachChild(input, visitDeclarationSubtree, context); return cleanup(ts.updateTypeReferenceNode(node, node.typeName, ts.parenthesizeTypeParameters(node.typeArguments))); } - case 159 /* ConstructSignature */: + case 159: return cleanup(ts.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type))); - case 155 /* Constructor */: { - var isPrivate = ts.hasModifier(input, 8 /* Private */); - // A constructor declaration may not have a type annotation - var ctor = ts.createSignatureDeclaration(155 /* Constructor */, isPrivate ? undefined : ensureTypeParams(input, input.typeParameters), - // TODO: GH#18217 - isPrivate ? undefined : updateParamsList(input, input.parameters, 0 /* None */), - /*type*/ undefined); + case 155: { + var isPrivate = ts.hasModifier(input, 8); + var ctor = ts.createSignatureDeclaration(155, isPrivate ? undefined : ensureTypeParams(input, input.typeParameters), isPrivate ? undefined : updateParamsList(input, input.parameters, 0), undefined); ctor.modifiers = ts.createNodeArray(ensureModifiers(input)); return cleanup(ctor); } - case 154 /* MethodDeclaration */: { - var sig = ts.createSignatureDeclaration(153 /* MethodSignature */, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)); + case 154: { + var sig = ts.createSignatureDeclaration(153, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)); sig.name = input.name; sig.modifiers = ts.createNodeArray(ensureModifiers(input)); sig.questionToken = input.questionToken; return cleanup(sig); } - case 156 /* GetAccessor */: { + case 156: { var newNode = ensureAccessor(input); return cleanup(newNode); } - case 157 /* SetAccessor */: { + case 157: { var newNode = ensureAccessor(input); return cleanup(newNode); } - case 152 /* PropertyDeclaration */: - return cleanup(ts.updateProperty(input, - /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, !ts.hasModifier(input, 8 /* Private */) ? ensureType(input, input.type) : undefined, ensureNoInitializer(input))); - case 151 /* PropertySignature */: - return cleanup(ts.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, !ts.hasModifier(input, 8 /* Private */) ? ensureType(input, input.type) : undefined, ensureNoInitializer(input))); - case 153 /* MethodSignature */: { + case 152: + return cleanup(ts.updateProperty(input, undefined, ensureModifiers(input), input.name, input.questionToken, !ts.hasModifier(input, 8) ? ensureType(input, input.type) : undefined, ensureNoInitializer(input))); + case 151: + return cleanup(ts.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, !ts.hasModifier(input, 8) ? ensureType(input, input.type) : undefined, ensureNoInitializer(input))); + case 153: { return cleanup(ts.updateMethodSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), input.name, input.questionToken)); } - case 158 /* CallSignature */: { + case 158: { return cleanup(ts.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type))); } - case 160 /* IndexSignature */: { - return cleanup(ts.updateIndexSignature(input, - /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || ts.createKeywordTypeNode(119 /* AnyKeyword */))); + case 160: { + return cleanup(ts.updateIndexSignature(input, undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || ts.createKeywordTypeNode(119))); } - case 232 /* VariableDeclaration */: { + case 232: { if (ts.isBindingPattern(input.name)) { return recreateBindingPattern(input.name); } shouldEnterSuppressNewDiagnosticsContextContext = true; - suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types + suppressNewDiagnosticContexts = true; return cleanup(ts.updateVariableDeclaration(input, input.name, ensureType(input, input.type), ensureNoInitializer(input))); } - case 148 /* TypeParameter */: { + case 148: { if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) { - return cleanup(ts.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined)); + return cleanup(ts.updateTypeParameterDeclaration(input, input.name, undefined, undefined)); } return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context)); } - case 171 /* ConditionalType */: { - // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration - // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type. + case 171: { var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree); var extendsType = ts.visitNode(input.extendsType, visitDeclarationSubtree); var oldEnclosingDecl = enclosingDeclaration; @@ -75429,13 +60577,13 @@ var ts; var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree); return cleanup(ts.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType)); } - case 163 /* FunctionType */: { + case 163: { return cleanup(ts.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree))); } - case 164 /* ConstructorType */: { + case 164: { return cleanup(ts.updateConstructorTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree))); } - case 179 /* ImportType */: { + case 179: { if (!ts.isLiteralImportTypeNode(input)) return cleanup(input); return cleanup(ts.updateImportTypeNode(input, ts.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf)); @@ -75464,32 +60612,28 @@ var ts; } } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 154 /* MethodDeclaration */ && ts.hasModifier(node.parent, 8 /* Private */); + return node.parent.kind === 154 && ts.hasModifier(node.parent, 8); } function visitDeclarationStatements(input) { if (!isPreservedDeclarationStatement(input)) { - // return undefined for unmatched kinds to omit them from the tree return; } if (shouldStripInternal(input)) return; switch (input.kind) { - case 250 /* ExportDeclaration */: { + case 250: { if (ts.isSourceFile(input.parent)) { resultHasExternalModuleIndicator = true; resultHasScopeMarker = true; } - // Always visible if the parent node isn't dropped for being not visible - // Rewrite external module names if necessary - return ts.updateExportDeclaration(input, /*decorators*/ undefined, input.modifiers, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier)); + return ts.updateExportDeclaration(input, undefined, input.modifiers, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier)); } - case 249 /* ExportAssignment */: { - // Always visible if the parent node isn't dropped for being not visible + case 249: { if (ts.isSourceFile(input.parent)) { resultHasExternalModuleIndicator = true; resultHasScopeMarker = true; } - if (input.expression.kind === 71 /* Identifier */) { + if (input.expression.kind === 71) { return input; } else { @@ -75498,14 +60642,13 @@ var ts; diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0, errorNode: input }); }; - var varDecl = ts.createVariableDeclaration(newId, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined); - var statement = ts.createVariableStatement(needsDeclare ? [ts.createModifier(124 /* DeclareKeyword */)] : [], ts.createVariableDeclarationList([varDecl], 2 /* Const */)); + var varDecl = ts.createVariableDeclaration(newId, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined); + var statement = ts.createVariableStatement(needsDeclare ? [ts.createModifier(124)] : [], ts.createVariableDeclarationList([varDecl], 2)); return [statement, ts.updateExportAssignment(input, input.decorators, input.modifiers, newId)]; } } } var result = transformTopLevelDeclaration(input); - // Don't actually transform yet; just leave as original node - will be elided/swapped by late pass lateStatementReplacementMap.set("" + ts.getOriginalNodeId(input), result); return input; } @@ -75513,16 +60656,15 @@ var ts; if (shouldStripInternal(input)) return; switch (input.kind) { - case 243 /* ImportEqualsDeclaration */: { + case 243: { return transformImportEqualsDeclaration(input); } - case 244 /* ImportDeclaration */: { + case 244: { return transformImportDeclaration(input); } } if (ts.isDeclaration(input) && isDeclarationAndNotVisible(input)) return; - // Elide implementation signatures from overload sets if (ts.isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; var previousEnclosingDeclaration; @@ -75537,45 +60679,36 @@ var ts; } var previousNeedsDeclare = needsDeclare; switch (input.kind) { - case 237 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all - return cleanup(ts.updateTypeAliasDeclaration(input, - /*decorators*/ undefined, ensureModifiers(input, isPrivate), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode))); - case 236 /* InterfaceDeclaration */: { - return cleanup(ts.updateInterfaceDeclaration(input, - /*decorators*/ undefined, ensureModifiers(input, isPrivate), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree))); + case 237: + return cleanup(ts.updateTypeAliasDeclaration(input, undefined, ensureModifiers(input, isPrivate), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode))); + case 236: { + return cleanup(ts.updateInterfaceDeclaration(input, undefined, ensureModifiers(input, isPrivate), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree))); } - case 234 /* FunctionDeclaration */: { - // Generators lose their generator-ness, excepting their return type - return cleanup(ts.updateFunctionDeclaration(input, - /*decorators*/ undefined, ensureModifiers(input, isPrivate), - /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), - /*body*/ undefined)); + case 234: { + return cleanup(ts.updateFunctionDeclaration(input, undefined, ensureModifiers(input, isPrivate), undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined)); } - case 239 /* ModuleDeclaration */: { + case 239: { needsDeclare = false; var inner = input.body; - if (inner && inner.kind === 240 /* ModuleBlock */) { + if (inner && inner.kind === 240) { var statements = ts.visitNodes(inner.statements, visitDeclarationStatements); var body = ts.updateModuleBlock(inner, transformAndReplaceLatePaintedStatements(statements)); needsDeclare = previousNeedsDeclare; var mods = ensureModifiers(input, isPrivate); - return cleanup(ts.updateModuleDeclaration(input, - /*decorators*/ undefined, mods, ts.isExternalModuleAugmentation(input) ? rewriteModuleSpecifier(input, input.name) : input.name, body)); + return cleanup(ts.updateModuleDeclaration(input, undefined, mods, ts.isExternalModuleAugmentation(input) ? rewriteModuleSpecifier(input, input.name) : input.name, body)); } else { needsDeclare = previousNeedsDeclare; var mods = ensureModifiers(input, isPrivate); needsDeclare = false; ts.visitNode(inner, visitDeclarationStatements); - // eagerly transform nested namespaces (the nesting doesn't need any elision or painting done) - var id = "" + ts.getOriginalNodeId(inner); // TODO: GH#18217 + var id = "" + ts.getOriginalNodeId(inner); var body = lateStatementReplacementMap.get(id); lateStatementReplacementMap.delete(id); - return cleanup(ts.updateModuleDeclaration(input, - /*decorators*/ undefined, mods, input.name, body)); + return cleanup(ts.updateModuleDeclaration(input, undefined, mods, input.name, body)); } } - case 235 /* ClassDeclaration */: { + case 235: { var modifiers = ts.createNodeArray(ensureModifiers(input, isPrivate)); var typeParameters = ensureTypeParams(input, input.typeParameters); var ctor = ts.getFirstConstructorWithBody(input); @@ -75583,15 +60716,13 @@ var ts; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { - if (!ts.hasModifier(param, 92 /* ParameterPropertyModifier */)) + if (!ts.hasModifier(param, 92)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param); - if (param.name.kind === 71 /* Identifier */) { - return preserveJsDoc(ts.createProperty( - /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param); + if (param.name.kind === 71) { + return preserveJsDoc(ts.createProperty(undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param); } else { - // Pattern - this is currently an error, but we emit declarations for it somewhat correctly return walkBindingPattern(param.name); } function walkBindingPattern(pattern) { @@ -75604,10 +60735,7 @@ var ts; elems = ts.concatenate(elems, walkBindingPattern(elem.name)); } elems = elems || []; - elems.push(ts.createProperty( - /*decorators*/ undefined, ensureModifiers(param), elem.name, - /*questionToken*/ undefined, ensureType(elem, /*type*/ undefined), - /*initializer*/ undefined)); + elems.push(ts.createProperty(undefined, ensureModifiers(param), elem.name, undefined, ensureType(elem, undefined), undefined)); } return elems; } @@ -75616,49 +60744,44 @@ var ts; } var members = ts.createNodeArray(ts.concatenate(parameterProperties, ts.visitNodes(input.members, visitDeclarationSubtree))); var extendsClause_1 = ts.getClassExtendsHeritageClauseElement(input); - if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 95 /* NullKeyword */) { - // We must add a temporary declaration for the extends clause expression - var newId_1 = ts.createOptimisticUniqueName(ts.unescapeLeadingUnderscores(input.name.escapedText) + "_base"); // TODO: GH#18217 + if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 95) { + var newId_1 = ts.createOptimisticUniqueName(ts.unescapeLeadingUnderscores(input.name.escapedText) + "_base"); getSymbolAccessibilityDiagnostic = function () { return ({ diagnosticMessage: ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1, errorNode: extendsClause_1, typeName: input.name }); }; - var varDecl = ts.createVariableDeclaration(newId_1, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined); - var statement = ts.createVariableStatement(needsDeclare ? [ts.createModifier(124 /* DeclareKeyword */)] : [], ts.createVariableDeclarationList([varDecl], 2 /* Const */)); + var varDecl = ts.createVariableDeclaration(newId_1, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined); + var statement = ts.createVariableStatement(needsDeclare ? [ts.createModifier(124)] : [], ts.createVariableDeclarationList([varDecl], 2)); var heritageClauses = ts.createNodeArray(ts.map(input.heritageClauses, function (clause) { - if (clause.token === 85 /* ExtendsKeyword */) { + if (clause.token === 85) { var oldDiag_2 = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]); var newClause = ts.updateHeritageClause(clause, ts.map(clause.types, function (t) { return ts.updateExpressionWithTypeArguments(t, ts.visitNodes(t.typeArguments, visitDeclarationSubtree), newId_1); })); getSymbolAccessibilityDiagnostic = oldDiag_2; return newClause; } - return ts.updateHeritageClause(clause, ts.visitNodes(ts.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 95 /* NullKeyword */; })), visitDeclarationSubtree)); + return ts.updateHeritageClause(clause, ts.visitNodes(ts.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 95; })), visitDeclarationSubtree)); })); - return [statement, cleanup(ts.updateClassDeclaration(input, - /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217 + return [statement, cleanup(ts.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); - return cleanup(ts.updateClassDeclaration(input, - /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members)); + return cleanup(ts.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members)); } } - case 214 /* VariableStatement */: { + case 214: { return cleanup(transformVariableStatement(input, isPrivate)); } - case 238 /* EnumDeclaration */: { - return cleanup(ts.updateEnumDeclaration(input, /*decorators*/ undefined, ts.createNodeArray(ensureModifiers(input, isPrivate)), input.name, ts.createNodeArray(ts.mapDefined(input.members, function (m) { + case 238: { + return cleanup(ts.updateEnumDeclaration(input, undefined, ts.createNodeArray(ensureModifiers(input, isPrivate)), input.name, ts.createNodeArray(ts.mapDefined(input.members, function (m) { if (shouldStripInternal(m)) return; - // Rewrite enum values to their constants, if available var constValue = resolver.getConstantValue(m); return preserveJsDoc(ts.updateEnumMember(m, m.name, constValue !== undefined ? ts.createLiteral(constValue) : undefined), m); })))); } } - // Anything left unhandled is an error, so this should be unreachable return ts.Debug.assertNever(input, "Unhandled top-level node in declaration emit: " + ts.SyntaxKind[input.kind]); function cleanup(node) { if (isEnclosingDeclaration(input)) { @@ -75667,7 +60790,7 @@ var ts; if (canProdiceDiagnostic) { getSymbolAccessibilityDiagnostic = oldDiag; } - if (input.kind === 239 /* ModuleDeclaration */) { + if (input.kind === 239) { needsDeclare = previousNeedsDeclare; } if (node === input) { @@ -75688,7 +60811,7 @@ var ts; return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); })); } function recreateBindingElement(e) { - if (e.kind === 206 /* OmittedExpression */) { + if (e.kind === 206) { return; } if (e.name) { @@ -75698,7 +60821,7 @@ var ts; return recreateBindingPattern(e.name); } else { - return ts.createVariableDeclaration(e.name, ensureType(e, /*type*/ undefined), /*initializer*/ undefined); + return ts.createVariableDeclaration(e.name, ensureType(e, undefined), undefined); } } } @@ -75709,7 +60832,7 @@ var ts; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNodeName(node); } errorNameNode = node.name; - ts.Debug.assert(resolver.isLateBound(ts.getParseTreeNode(node))); // Should only be called with dynamic names + ts.Debug.assert(resolver.isLateBound(ts.getParseTreeNode(node))); var decl = node; var entityName = decl.name.expression; checkEntityNameVisibility(entityName, enclosingDeclaration); @@ -75740,12 +60863,12 @@ var ts; return ts.createModifiersFromModifierFlags(newFlags); } function ensureModifierFlags(node, privateDeclaration) { - var mask = 3071 /* All */ ^ (4 /* Public */ | 256 /* Async */); // No async modifiers in declaration files - var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */; - var parentIsFile = node.parent.kind === 274 /* SourceFile */; + var mask = 3071 ^ (4 | 256); + var additions = (needsDeclare && !isAlwaysType(node)) ? 2 : 0; + var parentIsFile = node.parent.kind === 274; if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) { - mask ^= ((privateDeclaration || (isBundledEmit && parentIsFile) ? 0 : 1 /* Export */) | 512 /* Default */ | 2 /* Ambient */); - additions = 0 /* None */; + mask ^= ((privateDeclaration || (isBundledEmit && parentIsFile) ? 0 : 1) | 512 | 2); + additions = 0; } return maskModifierFlags(node, mask, additions); } @@ -75757,14 +60880,13 @@ var ts; var accessorType = getTypeAnnotationFromAccessor(node); if (!accessorType && accessors.secondAccessor) { accessorType = getTypeAnnotationFromAccessor(accessors.secondAccessor); - // If we end up pulling the type from the second accessor, we also need to change the diagnostic context to get the expected error message getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(accessors.secondAccessor); } - var prop = ts.createProperty(/*decorators*/ undefined, maskModifiers(node, /*mask*/ undefined, (!accessors.setAccessor) ? 64 /* Readonly */ : 0 /* None */), node.name, node.questionToken, ensureType(node, accessorType), /*initializer*/ undefined); + var prop = ts.createProperty(undefined, maskModifiers(node, undefined, (!accessors.setAccessor) ? 64 : 0), node.name, node.questionToken, ensureType(node, accessorType), undefined); var leadingsSyntheticCommentRanges = accessors.secondAccessor && ts.getLeadingCommentRangesOfNode(accessors.secondAccessor, currentSourceFile); if (leadingsSyntheticCommentRanges) { var _loop_10 = function (range) { - if (range.kind === 3 /* MultiLineCommentTrivia */) { + if (range.kind === 3) { var text = currentSourceFile.text.slice(range.pos + 2, range.end - 2); var lines = text.split(/\r\n?|\n/g); if (lines.length > 1) { @@ -75784,92 +60906,90 @@ var ts; } function transformHeritageClauses(nodes) { return ts.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return ts.updateHeritageClause(clause, ts.visitNodes(ts.createNodeArray(ts.filter(clause.types, function (t) { - return ts.isEntityNameExpression(t.expression) || (clause.token === 85 /* ExtendsKeyword */ && t.expression.kind === 95 /* NullKeyword */); + return ts.isEntityNameExpression(t.expression) || (clause.token === 85 && t.expression.kind === 95); })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; })); } } ts.transformDeclarations = transformDeclarations; function isAlwaysType(node) { - if (node.kind === 236 /* InterfaceDeclaration */) { + if (node.kind === 236) { return true; } return false; } - // Elide "public" modifier, as it is the default function maskModifiers(node, modifierMask, modifierAdditions) { return ts.createModifiersFromModifierFlags(maskModifierFlags(node, modifierMask, modifierAdditions)); } function maskModifierFlags(node, modifierMask, modifierAdditions) { - if (modifierMask === void 0) { modifierMask = 3071 /* All */ ^ 4 /* Public */; } - if (modifierAdditions === void 0) { modifierAdditions = 0 /* None */; } + if (modifierMask === void 0) { modifierMask = 3071 ^ 4; } + if (modifierAdditions === void 0) { modifierAdditions = 0; } var flags = (ts.getModifierFlags(node) & modifierMask) | modifierAdditions; - if (flags & 512 /* Default */ && flags & 2 /* Ambient */) { - flags ^= 2 /* Ambient */; // `declare` is never required alongside `default` (and would be an error if printed) + if (flags & 512 && flags & 2) { + flags ^= 2; } return flags; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 156 /* GetAccessor */ - ? accessor.type // Getter - return type + return accessor.kind === 156 + ? accessor.type : accessor.parameters.length > 0 - ? accessor.parameters[0].type // Setter parameter type + ? accessor.parameters[0].type : undefined; } } function canHaveLiteralInitializer(node) { switch (node.kind) { - case 232 /* VariableDeclaration */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 149 /* Parameter */: + case 232: + case 152: + case 151: + case 149: return true; } return false; } function isPreservedDeclarationStatement(node) { switch (node.kind) { - case 234 /* FunctionDeclaration */: - case 239 /* ModuleDeclaration */: - case 243 /* ImportEqualsDeclaration */: - case 236 /* InterfaceDeclaration */: - case 235 /* ClassDeclaration */: - case 237 /* TypeAliasDeclaration */: - case 238 /* EnumDeclaration */: - case 214 /* VariableStatement */: - case 244 /* ImportDeclaration */: - case 250 /* ExportDeclaration */: - case 249 /* ExportAssignment */: + case 234: + case 239: + case 243: + case 236: + case 235: + case 237: + case 238: + case 214: + case 244: + case 250: + case 249: return true; } return false; } function isProcessedComponent(node) { switch (node.kind) { - case 159 /* ConstructSignature */: - case 155 /* Constructor */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 152 /* PropertyDeclaration */: - case 151 /* PropertySignature */: - case 153 /* MethodSignature */: - case 158 /* CallSignature */: - case 160 /* IndexSignature */: - case 232 /* VariableDeclaration */: - case 148 /* TypeParameter */: - case 207 /* ExpressionWithTypeArguments */: - case 162 /* TypeReference */: - case 171 /* ConditionalType */: - case 163 /* FunctionType */: - case 164 /* ConstructorType */: - case 179 /* ImportType */: + case 159: + case 155: + case 154: + case 156: + case 157: + case 152: + case 151: + case 153: + case 158: + case 160: + case 232: + case 148: + case 207: + case 162: + case 171: + case 163: + case 164: + case 179: return true; } return false; } })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { function getModuleTransformer(moduleKind) { @@ -75883,18 +61003,6 @@ var ts; return ts.transformModule; } } - var TransformationState; - (function (TransformationState) { - TransformationState[TransformationState["Uninitialized"] = 0] = "Uninitialized"; - TransformationState[TransformationState["Initialized"] = 1] = "Initialized"; - TransformationState[TransformationState["Completed"] = 2] = "Completed"; - TransformationState[TransformationState["Disposed"] = 3] = "Disposed"; - })(TransformationState || (TransformationState = {})); - var SyntaxKindFeatureFlags; - (function (SyntaxKindFeatureFlags) { - SyntaxKindFeatureFlags[SyntaxKindFeatureFlags["Substitution"] = 1] = "Substitution"; - SyntaxKindFeatureFlags[SyntaxKindFeatureFlags["EmitNotifications"] = 2] = "EmitNotifications"; - })(SyntaxKindFeatureFlags || (SyntaxKindFeatureFlags = {})); function getTransformers(compilerOptions, customTransformers) { var jsx = compilerOptions.jsx; var languageVersion = ts.getEmitScriptTarget(compilerOptions); @@ -75902,44 +61010,32 @@ var ts; var transformers = []; ts.addRange(transformers, customTransformers && customTransformers.before); transformers.push(ts.transformTypeScript); - if (jsx === 2 /* React */) { + if (jsx === 2) { transformers.push(ts.transformJsx); } - if (languageVersion < 6 /* ESNext */) { + if (languageVersion < 6) { transformers.push(ts.transformESNext); } - if (languageVersion < 4 /* ES2017 */) { + if (languageVersion < 4) { transformers.push(ts.transformES2017); } - if (languageVersion < 3 /* ES2016 */) { + if (languageVersion < 3) { transformers.push(ts.transformES2016); } - if (languageVersion < 2 /* ES2015 */) { + if (languageVersion < 2) { transformers.push(ts.transformES2015); transformers.push(ts.transformGenerators); } transformers.push(getModuleTransformer(moduleKind)); - // The ES5 transformer is last so that it can substitute expressions like `exports.default` - // for ES3. - if (languageVersion < 1 /* ES5 */) { + if (languageVersion < 1) { transformers.push(ts.transformES5); } ts.addRange(transformers, customTransformers && customTransformers.after); return transformers; } ts.getTransformers = getTransformers; - /** - * Transforms an array of SourceFiles by passing them through each transformer. - * - * @param resolver The emit resolver provided by the checker. - * @param host The emit host object used to interact with the file system. - * @param options Compiler options to surface in the `TransformationContext`. - * @param nodes An array of nodes to transform. - * @param transforms An array of `TransformerFactory` callbacks. - * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files. - */ function transformNodes(resolver, host, options, nodes, transformers, allowDtsFiles) { - var enabledSyntaxKindFeatures = new Array(305 /* Count */); + var enabledSyntaxKindFeatures = new Array(305); var lexicalEnvironmentVariableDeclarations; var lexicalEnvironmentFunctionDeclarations; var lexicalEnvironmentVariableDeclarationsStack = []; @@ -75949,10 +61045,8 @@ var ts; var emitHelpers; var onSubstituteNode = function (_, node) { return node; }; var onEmitNode = function (hint, node, callback) { return callback(hint, node); }; - var state = 0 /* Uninitialized */; + var state = 0; var diagnostics = []; - // The transformation context is provided to each transformer as part of transformer - // initialization. var context = { getCompilerOptions: function () { return options; }, getEmitResolver: function () { return resolver; }, @@ -75971,13 +61065,13 @@ var ts; isEmitNotificationEnabled: isEmitNotificationEnabled, get onSubstituteNode() { return onSubstituteNode; }, set onSubstituteNode(value) { - ts.Debug.assert(state < 1 /* Initialized */, "Cannot modify transformation hooks after initialization has completed."); + ts.Debug.assert(state < 1, "Cannot modify transformation hooks after initialization has completed."); ts.Debug.assert(value !== undefined, "Value must not be 'undefined'"); onSubstituteNode = value; }, get onEmitNode() { return onEmitNode; }, set onEmitNode(value) { - ts.Debug.assert(state < 1 /* Initialized */, "Cannot modify transformation hooks after initialization has completed."); + ts.Debug.assert(state < 1, "Cannot modify transformation hooks after initialization has completed."); ts.Debug.assert(value !== undefined, "Value must not be 'undefined'"); onEmitNode = value; }, @@ -75985,20 +61079,15 @@ var ts; diagnostics.push(diag); } }; - // Ensure the parse tree is clean before applying transformations for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { var node = nodes_4[_i]; ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node))); } ts.performance.mark("beforeTransform"); - // Chain together and initialize each transformer. var transformation = ts.chain.apply(void 0, transformers)(context); - // prevent modification of transformation hooks. - state = 1 /* Initialized */; - // Transform each node. + state = 1; var transformed = ts.map(nodes, allowDtsFiles ? transformation : transformRoot); - // prevent modification of the lexical environment. - state = 2 /* Completed */; + state = 2; ts.performance.mark("afterTransform"); ts.performance.measure("transformTime", "beforeTransform", "afterTransform"); return { @@ -76011,55 +61100,28 @@ var ts; function transformRoot(node) { return node && (!ts.isSourceFile(node) || !node.isDeclarationFile) ? transformation(node) : node; } - /** - * Enables expression substitutions in the pretty printer for the provided SyntaxKind. - */ function enableSubstitution(kind) { - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); - enabledSyntaxKindFeatures[kind] |= 1 /* Substitution */; + ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); + enabledSyntaxKindFeatures[kind] |= 1; } - /** - * Determines whether expression substitutions are enabled for the provided node. - */ function isSubstitutionEnabled(node) { - return (enabledSyntaxKindFeatures[node.kind] & 1 /* Substitution */) !== 0 - && (ts.getEmitFlags(node) & 4 /* NoSubstitution */) === 0; + return (enabledSyntaxKindFeatures[node.kind] & 1) !== 0 + && (ts.getEmitFlags(node) & 4) === 0; } - /** - * Emits a node with possible substitution. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emitCallback The callback used to emit the node or its substitute. - */ function substituteNode(hint, node) { - ts.Debug.assert(state < 3 /* Disposed */, "Cannot substitute a node after the result is disposed."); + ts.Debug.assert(state < 3, "Cannot substitute a node after the result is disposed."); return node && isSubstitutionEnabled(node) && onSubstituteNode(hint, node) || node; } - /** - * Enables before/after emit notifications in the pretty printer for the provided SyntaxKind. - */ function enableEmitNotification(kind) { - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); - enabledSyntaxKindFeatures[kind] |= 2 /* EmitNotifications */; + ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); + enabledSyntaxKindFeatures[kind] |= 2; } - /** - * Determines whether before/after emit notifications should be raised in the pretty - * printer when it emits a node. - */ function isEmitNotificationEnabled(node) { - return (enabledSyntaxKindFeatures[node.kind] & 2 /* EmitNotifications */) !== 0 - || (ts.getEmitFlags(node) & 2 /* AdviseOnEmitNode */) !== 0; + return (enabledSyntaxKindFeatures[node.kind] & 2) !== 0 + || (ts.getEmitFlags(node) & 2) !== 0; } - /** - * Emits a node with possible emit notification. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emitCallback The callback used to emit the node. - */ function emitNodeWithNotification(hint, node, emitCallback) { - ts.Debug.assert(state < 3 /* Disposed */, "Cannot invoke TransformationResult callbacks after the result is disposed."); + ts.Debug.assert(state < 3, "Cannot invoke TransformationResult callbacks after the result is disposed."); if (node) { if (isEmitNotificationEnabled(node)) { onEmitNode(hint, node, emitCallback); @@ -76069,13 +61131,10 @@ var ts; } } } - /** - * Records a hoisted variable declaration for the provided name within a lexical environment. - */ function hoistVariableDeclaration(name) { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); - var decl = ts.setEmitFlags(ts.createVariableDeclaration(name), 64 /* NoNestedSourceMaps */); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); + var decl = ts.setEmitFlags(ts.createVariableDeclaration(name), 64); if (!lexicalEnvironmentVariableDeclarations) { lexicalEnvironmentVariableDeclarations = [decl]; } @@ -76083,12 +61142,9 @@ var ts; lexicalEnvironmentVariableDeclarations.push(decl); } } - /** - * Records a hoisted function declaration within a lexical environment. - */ function hoistFunctionDeclaration(func) { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); if (!lexicalEnvironmentFunctionDeclarations) { lexicalEnvironmentFunctionDeclarations = [func]; } @@ -76096,45 +61152,31 @@ var ts; lexicalEnvironmentFunctionDeclarations.push(func); } } - /** - * Starts a new lexical environment. Any existing hoisted variable or function declarations - * are pushed onto a stack, and the related storage variables are reset. - */ function startLexicalEnvironment() { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); 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] = lexicalEnvironmentVariableDeclarations; lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFunctionDeclarations; lexicalEnvironmentStackOffset++; lexicalEnvironmentVariableDeclarations = undefined; lexicalEnvironmentFunctionDeclarations = undefined; } - /** Suspends the current lexical environment, usually after visiting a parameter list. */ function suspendLexicalEnvironment() { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); 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(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); ts.Debug.assert(lexicalEnvironmentSuspended, "Lexical environment is not suspended."); lexicalEnvironmentSuspended = false; } - /** - * Ends a lexical environment. The previous set of hoisted declarations are restored and - * any hoisted declarations added in this environment are returned. - */ function endLexicalEnvironment() { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed."); ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended."); var statements; if (lexicalEnvironmentVariableDeclarations || lexicalEnvironmentFunctionDeclarations) { @@ -76142,8 +61184,7 @@ var ts; statements = lexicalEnvironmentFunctionDeclarations.slice(); } if (lexicalEnvironmentVariableDeclarations) { - var statement = ts.createVariableStatement( - /*modifiers*/ undefined, ts.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations)); + var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations)); if (!statements) { statements = [statement]; } @@ -76152,7 +61193,6 @@ var ts; } } } - // Restore the previous lexical environment. lexicalEnvironmentStackOffset--; lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset]; lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset]; @@ -76163,26 +61203,24 @@ var ts; return statements; } function requestEmitHelper(helper) { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the transformation context during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the transformation context during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); ts.Debug.assert(!helper.scoped, "Cannot request a scoped emit helper."); emitHelpers = ts.append(emitHelpers, helper); } function readEmitHelpers() { - ts.Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the transformation context during initialization."); - ts.Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + ts.Debug.assert(state > 0, "Cannot modify the transformation context during initialization."); + ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); var helpers = emitHelpers; emitHelpers = undefined; return helpers; } function dispose() { - if (state < 3 /* Disposed */) { - // Clean up emit nodes on parse tree + if (state < 3) { for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { var node = nodes_5[_i]; ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node))); } - // Release references to external entries for GC purposes. lexicalEnvironmentVariableDeclarations = undefined; lexicalEnvironmentVariableDeclarationsStack = undefined; lexicalEnvironmentFunctionDeclarations = undefined; @@ -76190,17 +61228,14 @@ var ts; onSubstituteNode = undefined; onEmitNode = undefined; emitHelpers = undefined; - // Prevent further use of the transformation result. - state = 3 /* Disposed */; + state = 3; } } } ts.transformNodes = transformNodes; })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { - // Used for initialize lastEncodedSourceMapSpan and reset lastEncodedSourceMapSpan when updateLastEncodedAndRecordedSpans var defaultLastEncodedSourceMapSpan = { emittedLine: 1, emittedColumn: 1, @@ -76213,14 +61248,11 @@ var ts; var extendedDiagnostics = compilerOptions.extendedDiagnostics; var currentSource; var currentSourceText; - var sourceMapDir; // The directory in which sourcemap will be - // Current source map file and its index in the sources list + var sourceMapDir; var sourceMapSourceIndex; - // Last recorded and encoded spans var lastRecordedSourceMapSpan; var lastEncodedSourceMapSpan; var lastEncodedNameIndex; - // Source map data var sourceMapData; var sourceMapDataList; var disabled = !(compilerOptions.sourceMap || compilerOptions.inlineSourceMap); @@ -76237,21 +61269,11 @@ var ts; getText: getText, getSourceMappingURL: getSourceMappingURL, }; - /** - * Skips trivia such as comments and white-space that can optionally overriden by the source map source - */ function skipSourceTrivia(pos) { return currentSource.skipTrivia ? currentSource.skipTrivia(pos) : ts.skipTrivia(currentSourceText, pos); } - /** - * Initialize the SourceMapWriter for a new output file. - * - * @param filePath The path to the generated output file. - * @param sourceMapFilePath The path to the output source map file. - * @param sourceFileOrBundle The input source file or bundle for the program. - */ function initialize(filePath, sourceMapFilePath, sourceFileOrBundle, outputSourceMapDataList) { - if (disabled || ts.fileExtensionIs(filePath, ".json" /* Json */)) { + if (disabled || ts.fileExtensionIs(filePath, ".json")) { return; } if (sourceMapData) { @@ -76260,13 +61282,10 @@ var ts; sourceMapDataList = outputSourceMapDataList; currentSource = undefined; currentSourceText = undefined; - // Current source map file and its index in the sources list sourceMapSourceIndex = -1; - // Last recorded and encoded spans lastRecordedSourceMapSpan = undefined; lastEncodedSourceMapSpan = defaultLastEncodedSourceMapSpan; lastEncodedNameIndex = 0; - // Initialize source map data completedSections = []; sectionStartLine = 1; sectionStartColumn = 1; @@ -76282,26 +61301,18 @@ var ts; sourceMapSourcesContent: compilerOptions.inlineSources ? [] : undefined, sourceMapDecodedMappings: [] }; - // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the - // relative paths of the sources list in the sourcemap sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); - if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) { + if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) { sourceMapData.sourceMapSourceRoot += ts.directorySeparator; } if (compilerOptions.mapRoot) { sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); - if (sourceFileOrBundle.kind === 274 /* SourceFile */) { // emitting single module file - // For modules or multiple emit files the mapRoot will have directory structure like the sources - // So if src\a.ts and src\lib\b.ts are compiled together user would be moving the maps into mapRoot\a.js.map and mapRoot\lib\b.js.map + if (sourceFileOrBundle.kind === 274) { sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFileOrBundle, host, sourceMapDir)); } if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { - // The relative paths are relative to the common directory sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir); - sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(filePath)), // get the relative sourceMapDir path based on jsFilePath - ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), // this is where user expects to see sourceMap - host.getCurrentDirectory(), host.getCanonicalFileName, - /*isAbsolutePathAnUrl*/ true); + sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(filePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), host.getCurrentDirectory(), host.getCanonicalFileName, true); } else { sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); @@ -76311,14 +61322,10 @@ var ts; sourceMapDir = ts.getDirectoryPath(ts.normalizePath(filePath)); } } - /** - * Reset the SourceMapWriter to an empty state. - */ function reset() { if (disabled) { return; } - // Record source map data for the test harness. if (sourceMapDataList) { sourceMapDataList.push(sourceMapData); } @@ -76353,7 +61360,7 @@ var ts; } function generateMap() { if (completedSections.length) { - captureSectionalSpanIfNeeded(/*reset*/ false); + captureSectionalSpanIfNeeded(false); return { version: 3, file: sourceMapData.sourceMapFile, @@ -76364,35 +61371,26 @@ var ts; return captureSection(); } } - // Encoding for sourcemap span function encodeLastRecordedSourceMapSpan() { if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { return; } var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn; - // Line/Comma delimiters if (lastEncodedSourceMapSpan.emittedLine === lastRecordedSourceMapSpan.emittedLine) { - // Emit comma to separate the entry if (sourceMapData.sourceMapMappings) { sourceMapData.sourceMapMappings += ","; } } else { - // Emit line delimiters for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) { sourceMapData.sourceMapMappings += ";"; } prevEncodedEmittedColumn = 1; } - // 1. Relative Column 0 based sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn); - // 2. Relative sourceIndex sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex); - // 3. Relative sourceLine 0 based sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine); - // 4. Relative sourceColumn 0 based sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn); - // 5. Relative namePosition 0 based if (lastRecordedSourceMapSpan.nameIndex >= 0) { ts.Debug.assert(false, "We do not support name index right now, Make sure to update updateLastEncodedAndRecordedSpans when we start using this"); sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex); @@ -76401,14 +61399,6 @@ var ts; lastEncodedSourceMapSpan = lastRecordedSourceMapSpan; sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan); } - /** - * Emits a mapping. - * - * If the position is synthetic (undefined or a negative value), no mapping will be - * created. - * - * @param pos The position. - */ function emitPos(pos) { if (disabled || ts.positionIsSynthesized(pos) || isJsonSourceMapSource(currentSource)) { return; @@ -76417,21 +61407,17 @@ var ts; ts.performance.mark("beforeSourcemap"); } var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSource, pos); - // Convert the location to be one-based. sourceLinePos.line++; sourceLinePos.character++; var emittedLine = writer.getLine() - sectionStartLine + 1; var emittedColumn = emittedLine === 0 ? (writer.getColumn() - sectionStartColumn + 1) : writer.getColumn(); - // If this location wasn't recorded or the location in source is going backwards, record the span if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine !== emittedLine || lastRecordedSourceMapSpan.emittedColumn !== emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { - // Encode the last recordedSpan before assigning new encodeLastRecordedSourceMapSpan(); - // New span lastRecordedSourceMapSpan = { emittedLine: emittedLine, emittedColumn: emittedColumn, @@ -76441,7 +61427,6 @@ var ts; }; } else { - // Take the new pos instead since there is no change in emittedLine and column since last location lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; @@ -76452,34 +61437,26 @@ var ts; } } function captureSectionalSpanIfNeeded(reset) { - if (lastRecordedSourceMapSpan && lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { // If we've recorded some spans, save them + if (lastRecordedSourceMapSpan && lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { completedSections.push({ offset: { line: sectionStartLine - 1, column: sectionStartColumn - 1 }, map: captureSection() }); if (reset) { resetSectionalData(); } } } - /** - * Emits a node with possible leading and trailing source maps. - * - * @param hint A hint as to the intended usage of the node. - * @param node The node to emit. - * @param emitCallback The callback used to emit the node. - */ function emitNodeWithSourceMap(hint, node, emitCallback) { if (disabled || ts.isInJsonFile(node)) { return emitCallback(hint, node); } if (node) { if (ts.isUnparsedSource(node) && node.sourceMapText !== undefined) { - captureSectionalSpanIfNeeded(/*reset*/ true); + captureSectionalSpanIfNeeded(true); var text = node.sourceMapText; var parsed = void 0; try { parsed = JSON.parse(text); } catch (_a) { - // empty } var offset = { line: writer.getLine() - 1, column: writer.getColumn() - 1 }; completedSections.push(parsed @@ -76489,7 +61466,6 @@ var ts; } : { offset: offset, - // This is just passes the buck on sourcemaps we don't really understand, instead of issuing an error (which would be difficult this late) url: "data:application/json;charset=utf-8;base64," + ts.base64encode(ts.sys, text) }); var emitResult = emitCallback(hint, node); @@ -76500,7 +61476,7 @@ var ts; return emitResult; } var emitNode = node.emitNode; - var emitFlags = emitNode && emitNode.flags || 0 /* None */; + var emitFlags = emitNode && emitNode.flags || 0; var range = emitNode && emitNode.sourceMapRange; var _b = range || node, pos = _b.pos, end = _b.end; var source = range && range.source; @@ -76509,14 +61485,14 @@ var ts; source = undefined; if (source) setSourceFile(source); - if (node.kind !== 300 /* NotEmittedStatement */ - && (emitFlags & 16 /* NoLeadingSourceMap */) === 0 + if (node.kind !== 300 + && (emitFlags & 16) === 0 && pos >= 0) { emitPos(skipSourceTrivia(pos)); } if (source) setSourceFile(oldSource); - if (emitFlags & 64 /* NoNestedSourceMaps */) { + if (emitFlags & 64) { disabled = true; emitCallback(hint, node); disabled = false; @@ -76526,8 +61502,8 @@ var ts; } if (source) setSourceFile(source); - if (node.kind !== 300 /* NotEmittedStatement */ - && (emitFlags & 32 /* NoTrailingSourceMap */) === 0 + if (node.kind !== 300 + && (emitFlags & 32) === 0 && end >= 0) { emitPos(end); } @@ -76535,41 +61511,28 @@ var ts; setSourceFile(oldSource); } } - /** - * Emits a token of a node with possible leading and trailing source maps. - * - * @param node The node containing the token. - * @param token The token to emit. - * @param tokenStartPos The start pos of the token. - * @param emitCallback The callback used to emit the token. - */ function emitTokenWithSourceMap(node, token, writer, tokenPos, emitCallback) { if (disabled || ts.isInJsonFile(node)) { return emitCallback(token, writer, tokenPos); } var emitNode = node && node.emitNode; - var emitFlags = emitNode && emitNode.flags || 0 /* None */; + var emitFlags = emitNode && emitNode.flags || 0; var range = emitNode && emitNode.tokenSourceMapRanges && emitNode.tokenSourceMapRanges[token]; tokenPos = skipSourceTrivia(range ? range.pos : tokenPos); - if ((emitFlags & 128 /* NoTokenLeadingSourceMaps */) === 0 && tokenPos >= 0) { + if ((emitFlags & 128) === 0 && tokenPos >= 0) { emitPos(tokenPos); } tokenPos = emitCallback(token, writer, tokenPos); if (range) tokenPos = range.end; - if ((emitFlags & 256 /* NoTokenTrailingSourceMaps */) === 0 && tokenPos >= 0) { + if ((emitFlags & 256) === 0 && tokenPos >= 0) { emitPos(tokenPos); } return tokenPos; } function isJsonSourceMapSource(sourceFile) { - return ts.fileExtensionIs(sourceFile.fileName, ".json" /* Json */); + return ts.fileExtensionIs(sourceFile.fileName, ".json"); } - /** - * Set the current source file. - * - * @param sourceFile The source file. - */ function setSourceFile(sourceFile) { if (disabled) { return; @@ -76579,42 +61542,30 @@ var ts; if (isJsonSourceMapSource(sourceFile)) { return; } - // Add the file to tsFilePaths - // If sourceroot option: Use the relative path corresponding to the common directory path - // otherwise source locations relative to map file location var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; - var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, currentSource.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, - /*isAbsolutePathAnUrl*/ true); + var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, currentSource.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true); sourceMapSourceIndex = sourceMapData.sourceMapSources.indexOf(source); if (sourceMapSourceIndex === -1) { sourceMapSourceIndex = sourceMapData.sourceMapSources.length; sourceMapData.sourceMapSources.push(source); - // The one that can be used from program to get the actual source file sourceMapData.inputSourceFileNames.push(currentSource.fileName); if (compilerOptions.inlineSources) { sourceMapData.sourceMapSourcesContent.push(currentSource.text); } } } - /** - * Gets the text for the source map. - */ function getText() { if (disabled || isJsonSourceMapSource(currentSource)) { - return undefined; // TODO: GH#18217 + return undefined; } encodeLastRecordedSourceMapSpan(); return JSON.stringify(generateMap()); } - /** - * Gets the SourceMappingURL for the source map. - */ function getSourceMappingURL() { if (disabled || isJsonSourceMapSource(currentSource)) { - return undefined; // TODO: GH#18217 + return undefined; } if (compilerOptions.inlineSourceMap) { - // Encode the sourceMap into the sourceMap url var base64SourceMapText = ts.base64encode(ts.sys, getText()); return sourceMapData.jsSourceMappingURL = "data:application/json;base64," + base64SourceMapText; } @@ -76632,24 +61583,17 @@ var ts; throw TypeError(inValue + ": not a 64 based value"); } function base64VLQFormatEncode(inValue) { - // Add a new least significant bit that has the sign of the value. - // if negative number the least significant bit that gets added to the number has value 1 - // else least significant bit value that gets added is 0 - // eg. -1 changes to binary : 01 [1] => 3 - // +1 changes to binary : 01 [0] => 2 if (inValue < 0) { inValue = ((-inValue) << 1) + 1; } else { inValue = inValue << 1; } - // Encode 5 bits at a time starting from least significant bits var encodedStr = ""; do { - var currentDigit = inValue & 31; // 11111 + var currentDigit = inValue & 31; inValue = inValue >> 5; if (inValue > 0) { - // There are still more digits to decode, set the msb (6th bit) currentDigit = currentDigit | 32; } encodedStr = encodedStr + base64FormatEncode(currentDigit); @@ -76657,7 +61601,6 @@ var ts; return encodedStr; } })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { function createCommentWriter(printerOptions, emitPos) { @@ -76693,24 +61636,18 @@ var ts; var emitFlags = emitNode && emitNode.flags || 0; var _a = emitNode && emitNode.commentRange || node, pos = _a.pos, end = _a.end; if ((pos < 0 && end < 0) || (pos === end)) { - // Both pos and end are synthesized, so just emit the node without comments. emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback); } else { if (extendedDiagnostics) { ts.performance.mark("preEmitNodeWithComment"); } - var isEmittedNode = node.kind !== 300 /* NotEmittedStatement */; - // We have to explicitly check that the node is JsxText because if the compilerOptions.jsx is "preserve" we will not do any transformation. - // It is expensive to walk entire tree just to set one kind of node to have no comments. - var skipLeadingComments = pos < 0 || (emitFlags & 512 /* NoLeadingComments */) !== 0 || node.kind === 10 /* JsxText */; - var skipTrailingComments = end < 0 || (emitFlags & 1024 /* NoTrailingComments */) !== 0 || node.kind === 10 /* JsxText */; - // Emit leading comments if the position is not synthesized and the node - // has not opted out from emitting leading comments. + var isEmittedNode = node.kind !== 300; + var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0 || node.kind === 10; + var skipTrailingComments = end < 0 || (emitFlags & 1024) !== 0 || node.kind === 10; if (!skipLeadingComments) { emitLeadingComments(pos, isEmittedNode); } - // Save current container state on the stack. var savedContainerPos = containerPos; var savedContainerEnd = containerEnd; var savedDeclarationListContainerEnd = declarationListContainerEnd; @@ -76719,9 +61656,7 @@ var ts; } if (!skipTrailingComments) { containerEnd = end; - // To avoid invalid comment emit in a down-level binding pattern, we - // keep track of the last declaration list container's end - if (node.kind === 233 /* VariableDeclarationList */) { + if (node.kind === 233) { declarationListContainerEnd = end; } } @@ -76732,12 +61667,9 @@ var ts; if (extendedDiagnostics) { ts.performance.mark("postEmitNodeWithComment"); } - // Restore previous container state. containerPos = savedContainerPos; containerEnd = savedContainerEnd; declarationListContainerEnd = savedDeclarationListContainerEnd; - // Emit trailing comments if the position is not synthesized and the node - // has not opted out from emitting leading comments and is an emitted node. if (!skipTrailingComments && isEmittedNode) { emitTrailingComments(end); } @@ -76771,11 +61703,11 @@ var ts; } } function emitLeadingSynthesizedComment(comment) { - if (comment.kind === 2 /* SingleLineCommentTrivia */) { + if (comment.kind === 2) { writer.writeLine(); } writeSynthesizedComment(comment); - if (comment.hasTrailingNewLine || comment.kind === 2 /* SingleLineCommentTrivia */) { + if (comment.hasTrailingNewLine || comment.kind === 2) { writer.writeLine(); } else { @@ -76793,16 +61725,16 @@ var ts; } function writeSynthesizedComment(comment) { var text = formatSynthesizedComment(comment); - var lineMap = comment.kind === 3 /* MultiLineCommentTrivia */ ? ts.computeLineStarts(text) : undefined; + var lineMap = comment.kind === 3 ? ts.computeLineStarts(text) : undefined; ts.writeCommentRange(text, lineMap, writer, 0, text.length, newLine); } function formatSynthesizedComment(comment) { - return comment.kind === 3 /* MultiLineCommentTrivia */ + return comment.kind === 3 ? "/*" + comment.text + "*/" : "//" + comment.text; } function emitNodeWithNestedComments(hint, node, emitFlags, emitCallback) { - if (emitFlags & 2048 /* NoNestedComments */) { + if (emitFlags & 2048) { disabled = true; emitCallback(hint, node); disabled = false; @@ -76817,15 +61749,15 @@ var ts; } var pos = detachedRange.pos, end = detachedRange.end; var emitFlags = ts.getEmitFlags(node); - var skipLeadingComments = pos < 0 || (emitFlags & 512 /* NoLeadingComments */) !== 0; - var skipTrailingComments = disabled || end < 0 || (emitFlags & 1024 /* NoTrailingComments */) !== 0; + var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0; + var skipTrailingComments = disabled || end < 0 || (emitFlags & 1024) !== 0; if (!skipLeadingComments) { emitDetachedCommentsAndUpdateCommentsInfo(detachedRange); } if (extendedDiagnostics) { ts.performance.measure("commentTime", "preEmitBodyWithDetachedComments"); } - if (emitFlags & 2048 /* NoNestedComments */ && !disabled) { + if (emitFlags & 2048 && !disabled) { disabled = true; emitCallback(node); disabled = false; @@ -76837,7 +61769,7 @@ var ts; ts.performance.mark("beginEmitBodyWithDetachedCommetns"); } if (!skipTrailingComments) { - emitLeadingComments(detachedRange.end, /*isEmittedNode*/ true); + emitLeadingComments(detachedRange.end, true); if (hasWrittenComment && !writer.isAtStartOfLine()) { writer.writeLine(); } @@ -76852,14 +61784,6 @@ var ts; forEachLeadingCommentToEmit(pos, emitLeadingComment); } else if (pos === 0) { - // If the node will not be emitted in JS, remove all the comments(normal, pinned and ///) associated with the node, - // unless it is a triple slash comment at the top of the file. - // For Example: - // /// - // declare var x; - // /// - // interface F {} - // The first /// will NOT be removed while the second one will be removed even though both node will not be emitted forEachLeadingCommentToEmit(pos, emitTripleSlashLeadingComment); } } @@ -76881,7 +61805,6 @@ var ts; ts.emitNewLineBeforeLeadingCommentOfPosition(currentLineMap, writer, rangePos, commentPos); hasWrittenComment = true; } - // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space if (emitPos) emitPos(commentPos); ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine); @@ -76890,7 +61813,7 @@ var ts; if (hasTrailingNewLine) { writer.writeLine(); } - else if (kind === 3 /* MultiLineCommentTrivia */) { + else if (kind === 3) { writer.write(" "); } } @@ -76898,7 +61821,7 @@ var ts; if (disabled || pos === -1) { return; } - emitLeadingComments(pos, /*isEmittedNode*/ true); + emitLeadingComments(pos, true); } function emitTrailingComments(pos) { forEachTrailingCommentToEmit(pos, emitTrailingComment); @@ -76906,7 +61829,6 @@ var ts; function emitTrailingComment(commentPos, commentEnd, _kind, hasTrailingNewLine) { if (!shouldWriteComment(currentText, commentPos)) return; - // trailing comments are emitted at space/*trailing comment1 */space/*trailing comment2*/ if (!writer.isAtStartOfLine()) { writer.write(" "); } @@ -76932,7 +61854,6 @@ var ts; } } function emitTrailingCommentOfPosition(commentPos, commentEnd, _kind, hasTrailingNewLine) { - // trailing comments of a position are emitted at /*trailing comment1 */space/*trailing comment*/space if (emitPos) emitPos(commentPos); ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine); @@ -76946,18 +61867,16 @@ var ts; } } function forEachLeadingCommentToEmit(pos, cb) { - // Emit the leading comments only if the container's pos doesn't match because the container should take care of emitting these comments if (containerPos === -1 || pos !== containerPos) { if (hasDetachedComments(pos)) { forEachLeadingCommentWithoutDetachedComments(cb); } else { - ts.forEachLeadingCommentRange(currentText, pos, cb, /*state*/ pos); + ts.forEachLeadingCommentRange(currentText, pos, cb, pos); } } } function forEachTrailingCommentToEmit(end, cb) { - // Emit the trailing comments only if the container's end doesn't match because the container should take care of emitting these comments if (containerEnd === -1 || (end !== containerEnd && end !== declarationListContainerEnd)) { ts.forEachTrailingCommentRange(currentText, end, cb); } @@ -76981,7 +61900,6 @@ var ts; return detachedCommentsInfo !== undefined && ts.last(detachedCommentsInfo).nodePos === pos; } function forEachLeadingCommentWithoutDetachedComments(cb) { - // get the leading comments from detachedPos var pos = ts.last(detachedCommentsInfo).detachedCommentEndPos; if (detachedCommentsInfo.length - 1) { detachedCommentsInfo.pop(); @@ -76989,7 +61907,7 @@ var ts; else { detachedCommentsInfo = undefined; } - ts.forEachLeadingCommentRange(currentText, pos, cb, /*state*/ pos); + ts.forEachLeadingCommentRange(currentText, pos, cb, pos); } function emitDetachedCommentsAndUpdateCommentsInfo(range) { var currentDetachedCommentInfo = ts.emitDetachedComments(currentText, currentLineMap, writer, writeComment, range, newLine, disabled); @@ -77011,11 +61929,6 @@ var ts; if (emitPos) emitPos(commentEnd); } - /** - * Determine if the given comment is a triple-slash - * - * @return true if the comment is a triple-slash comment else false - */ function isTripleSlashComment(commentPos, commentEnd) { return ts.isRecognizedTripleSlashComment(currentText, commentPos, commentEnd); } @@ -77026,16 +61939,6 @@ var ts; (function (ts) { var infoExtension = ".tsbundleinfo"; var brackets = createBracketsMap(); - /*@internal*/ - /** - * Iterates over the source files that are expected to have an emit output. - * - * @param host An EmitHost. - * @param action The action to execute. - * @param sourceFilesOrTargetSourceFile - * If an array, the full list of source files to emit. - * Else, calls `getSourceFilesToEmit` with the (optional) target source file to determine the list of source files to emit. - */ function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, emitOnlyDtsFiles) { if (emitOnlyDtsFiles === void 0) { emitOnlyDtsFiles = false; } var sourceFiles = ts.isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : ts.getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile); @@ -77060,13 +61963,12 @@ var ts; } } ts.forEachEmittedFile = forEachEmittedFile; - /*@internal*/ function getOutputPathsFor(sourceFile, host, forceDtsPaths) { var options = host.getCompilerOptions(); - if (sourceFile.kind === 275 /* Bundle */) { + if (sourceFile.kind === 275) { var jsFilePath = options.outFile || options.out; var sourceMapFilePath = getSourceMapFilePath(jsFilePath, options); - var declarationFilePath = (forceDtsPaths || options.declaration) ? ts.removeFileExtension(jsFilePath) + ".d.ts" /* Dts */ : undefined; + var declarationFilePath = (forceDtsPaths || options.declaration) ? ts.removeFileExtension(jsFilePath) + ".d.ts" : undefined; var declarationMapPath = ts.getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined; var bundleInfoPath = options.references && jsFilePath ? (ts.removeFileExtension(jsFilePath) + infoExtension) : undefined; return { jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath, declarationMapPath: declarationMapPath, bundleInfoPath: bundleInfoPath }; @@ -77074,7 +61976,6 @@ var ts; else { var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, getOutputExtension(sourceFile, options)); var sourceMapFilePath = ts.isJsonSourceFile(sourceFile) ? undefined : getSourceMapFilePath(jsFilePath, options); - // For legacy reasons (ie, we have baselines capturing the behavior), js files don't report a .d.ts output path - this would only matter if `declaration` and `allowJs` were both on, which is currently an error var isJs = ts.isSourceFileJavaScript(sourceFile); var declarationFilePath = ((forceDtsPaths || options.declaration) && !isJs) ? ts.getDeclarationEmitOutputFilePath(sourceFile, host) : undefined; var declarationMapPath = ts.getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined; @@ -77091,30 +61992,23 @@ var ts; totalLength: -1 }; } - // JavaScript files are always LanguageVariant.JSX, as JSX syntax is allowed in .js files also. - // So for JavaScript files, '.jsx' is only emitted if the input was '.jsx', and JsxEmit.Preserve. - // For TypeScript, the only time to emit with a '.jsx' extension, is on JSX input, and JsxEmit.Preserve - /* @internal */ function getOutputExtension(sourceFile, options) { if (ts.isJsonSourceFile(sourceFile)) { - return ".json" /* Json */; + return ".json"; } - if (options.jsx === 1 /* Preserve */) { + if (options.jsx === 1) { if (ts.isSourceFileJavaScript(sourceFile)) { - if (ts.fileExtensionIs(sourceFile.fileName, ".jsx" /* Jsx */)) { - return ".jsx" /* Jsx */; + if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) { + return ".jsx"; } } - else if (sourceFile.languageVariant === 1 /* JSX */) { - // TypeScript source file preserving JSX syntax - return ".jsx" /* Jsx */; + else if (sourceFile.languageVariant === 1) { + return ".jsx"; } } - return ".js" /* Js */; + return ".js"; } ts.getOutputExtension = getOutputExtension; - /*@internal*/ - // targetSourceFile is when users only want one file in entire project to be emitted. This is used in compileOnSave feature function emitFiles(resolver, host, targetSourceFile, emitOnlyDtsFiles, transformers, declarationTransformers) { var compilerOptions = host.getCompilerOptions(); var sourceMapDataList = (compilerOptions.sourceMap || compilerOptions.inlineSourceMap || ts.getAreDeclarationMapsEnabled(compilerOptions)) ? [] : undefined; @@ -77131,7 +62025,6 @@ var ts; }); var bundleInfo = createDefaultBundleInfo(); var emitSkipped = false; - // Emit each output file ts.performance.mark("beforePrint"); forEachEmittedFile(host, emitSourceFileOrBundle, ts.getSourceFilesToEmit(host, targetSourceFile), emitOnlyDtsFiles); ts.performance.measure("printTime", "beforePrint"); @@ -77161,7 +62054,6 @@ var ts; } } function emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath, bundleInfoPath) { - // Make sure not to write js file and source map file if any of them cannot be written if (host.isEmitBlocked(jsFilePath) || compilerOptions.noEmit || compilerOptions.emitDeclarationOnly) { emitSkipped = true; return; @@ -77169,25 +62061,18 @@ var ts; if (emitOnlyDtsFiles) { return; } - // Transform the source files - var transform = ts.transformNodes(resolver, host, compilerOptions, [sourceFileOrBundle], transformers, /*allowDtsFiles*/ false); - // Create a printer to print the nodes + var transform = ts.transformNodes(resolver, host, compilerOptions, [sourceFileOrBundle], transformers, false); var printer = createPrinter(__assign({}, compilerOptions, { noEmitHelpers: compilerOptions.noEmitHelpers }), { - // resolver hooks hasGlobalName: resolver.hasGlobalName, - // transform hooks onEmitNode: transform.emitNodeWithNotification, substituteNode: transform.substituteNode, - // sourcemap hooks onEmitSourceMapOfNode: sourceMap.emitNodeWithSourceMap, onEmitSourceMapOfToken: sourceMap.emitTokenWithSourceMap, onEmitSourceMapOfPosition: sourceMap.emitPos, - // emitter hooks onSetSourceFile: setSourceFile, }); ts.Debug.assert(transform.transformed.length === 1, "Should only see one output from the transform"); printSourceFileOrBundle(jsFilePath, sourceMapFilePath, transform.transformed[0], bundleInfoPath, printer, sourceMap); - // Clean up emit nodes on parse tree transform.dispose(); } function emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath) { @@ -77195,10 +62080,9 @@ var ts; return; } var sourceFiles = ts.isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles; - // Setup and perform the transformation to retrieve declarations from the input files var nonJsFiles = ts.filter(sourceFiles, ts.isSourceFileNotJavaScript); var inputListOrBundle = (compilerOptions.outFile || compilerOptions.out) ? [ts.createBundle(nonJsFiles, !ts.isSourceFile(sourceFileOrBundle) ? sourceFileOrBundle.prepends : undefined)] : nonJsFiles; - var declarationTransform = ts.transformNodes(resolver, host, compilerOptions, inputListOrBundle, ts.concatenate([ts.transformDeclarations], declarationTransformers), /*allowDtsFiles*/ false); + var declarationTransform = ts.transformNodes(resolver, host, compilerOptions, inputListOrBundle, ts.concatenate([ts.transformDeclarations], declarationTransformers), false); if (ts.length(declarationTransform.diagnostics)) { for (var _a = 0, _b = declarationTransform.diagnostics; _a < _b.length; _a++) { var diagnostic = _b[_a]; @@ -77206,14 +62090,11 @@ var ts; } } var declarationPrinter = createPrinter(__assign({}, compilerOptions, { onlyPrintJsDocStyle: true, noEmitHelpers: true }), { - // resolver hooks hasGlobalName: resolver.hasGlobalName, - // sourcemap hooks onEmitSourceMapOfNode: declarationSourceMap.emitNodeWithSourceMap, onEmitSourceMapOfToken: declarationSourceMap.emitTokenWithSourceMap, onEmitSourceMapOfPosition: declarationSourceMap.emitPos, onSetSourceFile: setSourceFileForDeclarationSourceMaps, - // transform hooks onEmitNode: declarationTransform.emitNodeWithNotification, substituteNode: declarationTransform.substituteNode, }); @@ -77221,13 +62102,13 @@ var ts; emitSkipped = emitSkipped || declBlocked; if (!declBlocked || emitOnlyDtsFiles) { ts.Debug.assert(declarationTransform.transformed.length === 1, "Should only see one output from the decl transform"); - printSourceFileOrBundle(declarationFilePath, declarationMapPath, declarationTransform.transformed[0], /* bundleInfopath*/ undefined, declarationPrinter, declarationSourceMap); + printSourceFileOrBundle(declarationFilePath, declarationMapPath, declarationTransform.transformed[0], undefined, declarationPrinter, declarationSourceMap); } declarationTransform.dispose(); } function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, bundleInfoPath, printer, mapRecorder) { - var bundle = sourceFileOrBundle.kind === 275 /* Bundle */ ? sourceFileOrBundle : undefined; - var sourceFile = sourceFileOrBundle.kind === 274 /* SourceFile */ ? sourceFileOrBundle : undefined; + var bundle = sourceFileOrBundle.kind === 275 ? sourceFileOrBundle : undefined; + var sourceFile = sourceFileOrBundle.kind === 274 ? sourceFileOrBundle : undefined; var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile]; mapRecorder.initialize(jsFilePath, sourceMapFilePath || "", sourceFileOrBundle, sourceMapDataList); if (bundle) { @@ -77239,20 +62120,16 @@ var ts; writer.writeLine(); var sourceMappingURL = mapRecorder.getSourceMappingURL(); if (sourceMappingURL) { - writer.write("//# " + "sourceMappingURL" + "=" + sourceMappingURL); // Sometimes tools can sometimes see this line as a source mapping url comment + writer.write("//# " + "sourceMappingURL" + "=" + sourceMappingURL); } - // Write the source map if (sourceMapFilePath) { - ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, mapRecorder.getText(), /*writeByteOrderMark*/ false, sourceFiles); + ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, mapRecorder.getText(), false, sourceFiles); } - // Write the output file ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles); - // Write bundled offset information if applicable if (bundleInfoPath) { bundleInfo.totalLength = writer.getTextPos(); - ts.writeFile(host, emitterDiagnostics, bundleInfoPath, JSON.stringify(bundleInfo, undefined, 2), /*writeByteOrderMark*/ false); + ts.writeFile(host, emitterDiagnostics, bundleInfoPath, JSON.stringify(bundleInfo, undefined, 2), false); } - // Reset state mapRecorder.reset(); writer.clear(); bundleInfo = createDefaultBundleInfo(); @@ -77265,13 +62142,6 @@ var ts; } } ts.emitFiles = emitFiles; - var PipelinePhase; - (function (PipelinePhase) { - PipelinePhase[PipelinePhase["Notification"] = 0] = "Notification"; - PipelinePhase[PipelinePhase["Comments"] = 1] = "Comments"; - PipelinePhase[PipelinePhase["SourceMaps"] = 2] = "SourceMaps"; - PipelinePhase[PipelinePhase["Emit"] = 3] = "Emit"; - })(PipelinePhase || (PipelinePhase = {})); function createPrinter(printerOptions, handlers) { if (printerOptions === void 0) { printerOptions = {}; } if (handlers === void 0) { handlers = {}; } @@ -77280,13 +62150,13 @@ var ts; var comments = ts.createCommentWriter(printerOptions, onEmitSourceMapOfPosition); var emitNodeWithComments = comments.emitNodeWithComments, emitBodyWithDetachedComments = comments.emitBodyWithDetachedComments, emitTrailingCommentsOfPosition = comments.emitTrailingCommentsOfPosition, emitLeadingCommentsOfPosition = comments.emitLeadingCommentsOfPosition; var currentSourceFile; - var nodeIdToGeneratedName; // Map of generated names for specific nodes. - var autoGeneratedIdToGeneratedName; // Map of generated names for temp and loop variables. - var generatedNames; // Set of names generated by the NameGenerator. - var tempFlagsStack; // Stack of enclosing name generation scopes. - var tempFlags; // TempFlags for the current name generation scope. - var reservedNamesStack; // Stack of TempFlags reserved in enclosing name generation scopes. - var reservedNames; // TempFlags to reserve in nested name generation scopes. + var nodeIdToGeneratedName; + var autoGeneratedIdToGeneratedName; + var generatedNames; + var tempFlagsStack; + var tempFlags; + var reservedNamesStack; + var reservedNames; var writer; var ownWriter; var write = writeBase; @@ -77303,12 +62173,10 @@ var ts; var isOwnFileEmit; reset(); return { - // public API printNode: printNode, printList: printList, printFile: printFile, printBundle: printBundle, - // internal API writeNode: writeNode, writeList: writeList, writeFile: writeFile, @@ -77316,20 +62184,20 @@ var ts; }; function printNode(hint, node, sourceFile) { switch (hint) { - case 0 /* SourceFile */: + case 0: ts.Debug.assert(ts.isSourceFile(node), "Expected a SourceFile node."); break; - case 2 /* IdentifierName */: + case 2: ts.Debug.assert(ts.isIdentifier(node), "Expected an Identifier node."); break; - case 1 /* Expression */: + case 1: ts.Debug.assert(ts.isExpression(node), "Expected an Expression node."); break; } switch (node.kind) { - case 274 /* SourceFile */: return printFile(node); - case 275 /* Bundle */: return printBundle(node); - case 276 /* UnparsedSource */: return printUnparsedSource(node); + case 274: return printFile(node); + case 275: return printBundle(node); + case 276: return printUnparsedSource(node); } writeNode(hint, node, sourceFile, beginPrint()); return endPrint(); @@ -77377,7 +62245,7 @@ var ts; emitSyntheticTripleSlashReferencesIfNeeded(bundle); for (var _a = 0, _b = bundle.prepends; _a < _b.length; _a++) { var prepend = _b[_a]; - print(4 /* Unspecified */, prepend, /*sourceFile*/ undefined); + print(4, prepend, undefined); writeLine(); } if (bundleInfo) { @@ -77385,7 +62253,7 @@ var ts; } for (var _c = 0, _d = bundle.sourceFiles; _c < _d.length; _c++) { var sourceFile = _d[_c]; - print(0 /* SourceFile */, sourceFile, sourceFile); + print(0, sourceFile, sourceFile); } reset(); writer = previousWriter; @@ -77393,7 +62261,7 @@ var ts; function writeUnparsedSource(unparsed, output) { var previousWriter = writer; setWriter(output); - print(4 /* Unspecified */, unparsed, /*sourceFile*/ undefined); + print(4, unparsed, undefined); reset(); writer = previousWriter; } @@ -77403,7 +62271,7 @@ var ts; setWriter(output); emitShebangIfNeeded(sourceFile); emitPrologueDirectivesIfNeeded(sourceFile); - print(0 /* SourceFile */, sourceFile, sourceFile); + print(0, sourceFile, sourceFile); reset(); writer = previousWriter; } @@ -77419,7 +62287,7 @@ var ts; if (sourceFile) { setSourceFile(sourceFile); } - var pipelinePhase = getPipelinePhase(0 /* Notification */, hint); + var pipelinePhase = getPipelinePhase(0, hint); pipelinePhase(hint, node); } function setSourceFile(sourceFile) { @@ -77430,7 +62298,7 @@ var ts; } } function setWriter(output) { - writer = output; // TODO: GH#18217 + writer = output; comments.setWriter(output); } function reset() { @@ -77438,47 +62306,45 @@ var ts; autoGeneratedIdToGeneratedName = []; generatedNames = ts.createMap(); tempFlagsStack = []; - tempFlags = 0 /* Auto */; + tempFlags = 0; reservedNamesStack = []; comments.reset(); - setWriter(/*output*/ undefined); + setWriter(undefined); } function emit(node) { if (!node) return; - var pipelinePhase = getPipelinePhase(0 /* Notification */, 4 /* Unspecified */); - pipelinePhase(4 /* Unspecified */, node); + var pipelinePhase = getPipelinePhase(0, 4); + pipelinePhase(4, node); } function emitIdentifierName(node) { if (!node) return; - var pipelinePhase = getPipelinePhase(0 /* Notification */, 2 /* IdentifierName */); - pipelinePhase(2 /* IdentifierName */, node); + var pipelinePhase = getPipelinePhase(0, 2); + pipelinePhase(2, node); } function emitExpression(node) { if (!node) return; - var pipelinePhase = getPipelinePhase(0 /* Notification */, 1 /* Expression */); - pipelinePhase(1 /* Expression */, node); + var pipelinePhase = getPipelinePhase(0, 1); + pipelinePhase(1, node); } function getPipelinePhase(phase, hint) { switch (phase) { - case 0 /* Notification */: + case 0: if (onEmitNode) { return pipelineEmitWithNotification; } - // falls through - case 1 /* Comments */: - if (emitNodeWithComments && hint !== 0 /* SourceFile */) { + case 1: + if (emitNodeWithComments && hint !== 0) { return pipelineEmitWithComments; } return pipelineEmitWithoutComments; - case 2 /* SourceMaps */: - if (onEmitSourceMapOfNode && hint !== 0 /* SourceFile */ && hint !== 2 /* IdentifierName */) { + case 2: + if (onEmitSourceMapOfNode && hint !== 0 && hint !== 2) { return pipelineEmitWithSourceMap; } - // falls through - case 3 /* Emit */: + case 3: return pipelineEmitWithHint; default: return ts.Debug.assertNever(phase, "Unexpected value for PipelinePhase: " + phase); @@ -77488,365 +62354,341 @@ var ts; return getPipelinePhase(currentPhase + 1, hint); } function pipelineEmitWithNotification(hint, node) { - ts.Debug.assertDefined(onEmitNode)(hint, node, getNextPipelinePhase(0 /* Notification */, hint)); + ts.Debug.assertDefined(onEmitNode)(hint, node, getNextPipelinePhase(0, hint)); } function pipelineEmitWithComments(hint, node) { ts.Debug.assertDefined(emitNodeWithComments); - ts.Debug.assert(hint !== 0 /* SourceFile */); - emitNodeWithComments(hint, trySubstituteNode(hint, node), getNextPipelinePhase(1 /* Comments */, hint)); + ts.Debug.assert(hint !== 0); + emitNodeWithComments(hint, trySubstituteNode(hint, node), getNextPipelinePhase(1, hint)); } function pipelineEmitWithoutComments(hint, node) { - var pipelinePhase = getNextPipelinePhase(1 /* Comments */, hint); + var pipelinePhase = getNextPipelinePhase(1, hint); pipelinePhase(hint, trySubstituteNode(hint, node)); } function pipelineEmitWithSourceMap(hint, node) { - ts.Debug.assert(hint !== 0 /* SourceFile */ && hint !== 2 /* IdentifierName */); + ts.Debug.assert(hint !== 0 && hint !== 2); ts.Debug.assertDefined(onEmitSourceMapOfNode)(hint, node, pipelineEmitWithHint); } function pipelineEmitWithHint(hint, node) { - if (hint === 0 /* SourceFile */) + if (hint === 0) return emitSourceFile(ts.cast(node, ts.isSourceFile)); - if (hint === 2 /* IdentifierName */) + if (hint === 2) return emitIdentifier(ts.cast(node, ts.isIdentifier)); - if (hint === 3 /* MappedTypeParameter */) + if (hint === 3) return emitMappedTypeParameter(ts.cast(node, ts.isTypeParameterDeclaration)); - if (hint === 4 /* Unspecified */) { + if (hint === 4) { if (ts.isKeyword(node.kind)) return writeTokenNode(node, writeKeyword); switch (node.kind) { - // Pseudo-literals - case 14 /* TemplateHead */: - case 15 /* TemplateMiddle */: - case 16 /* TemplateTail */: + case 14: + case 15: + case 16: return emitLiteral(node); - case 276 /* UnparsedSource */: + case 276: return emitUnparsedSource(node); - // Identifiers - case 71 /* Identifier */: + case 71: return emitIdentifier(node); - // Parse tree nodes - // Names - case 146 /* QualifiedName */: + case 146: return emitQualifiedName(node); - case 147 /* ComputedPropertyName */: + case 147: return emitComputedPropertyName(node); - // Signature elements - case 148 /* TypeParameter */: + case 148: return emitTypeParameter(node); - case 149 /* Parameter */: + case 149: return emitParameter(node); - case 150 /* Decorator */: + case 150: return emitDecorator(node); - // Type members - case 151 /* PropertySignature */: + case 151: return emitPropertySignature(node); - case 152 /* PropertyDeclaration */: + case 152: return emitPropertyDeclaration(node); - case 153 /* MethodSignature */: + case 153: return emitMethodSignature(node); - case 154 /* MethodDeclaration */: + case 154: return emitMethodDeclaration(node); - case 155 /* Constructor */: + case 155: return emitConstructor(node); - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 156: + case 157: return emitAccessorDeclaration(node); - case 158 /* CallSignature */: + case 158: return emitCallSignature(node); - case 159 /* ConstructSignature */: + case 159: return emitConstructSignature(node); - case 160 /* IndexSignature */: + case 160: return emitIndexSignature(node); - // Types - case 161 /* TypePredicate */: + case 161: return emitTypePredicate(node); - case 162 /* TypeReference */: + case 162: return emitTypeReference(node); - case 163 /* FunctionType */: + case 163: return emitFunctionType(node); - case 284 /* JSDocFunctionType */: + case 284: return emitJSDocFunctionType(node); - case 164 /* ConstructorType */: + case 164: return emitConstructorType(node); - case 165 /* TypeQuery */: + case 165: return emitTypeQuery(node); - case 166 /* TypeLiteral */: + case 166: return emitTypeLiteral(node); - case 167 /* ArrayType */: + case 167: return emitArrayType(node); - case 168 /* TupleType */: + case 168: return emitTupleType(node); - case 169 /* UnionType */: + case 169: return emitUnionType(node); - case 170 /* IntersectionType */: + case 170: return emitIntersectionType(node); - case 171 /* ConditionalType */: + case 171: return emitConditionalType(node); - case 172 /* InferType */: + case 172: return emitInferType(node); - case 173 /* ParenthesizedType */: + case 173: return emitParenthesizedType(node); - case 207 /* ExpressionWithTypeArguments */: + case 207: return emitExpressionWithTypeArguments(node); - case 174 /* ThisType */: + case 174: return emitThisType(); - case 175 /* TypeOperator */: + case 175: return emitTypeOperator(node); - case 176 /* IndexedAccessType */: + case 176: return emitIndexedAccessType(node); - case 177 /* MappedType */: + case 177: return emitMappedType(node); - case 178 /* LiteralType */: + case 178: return emitLiteralType(node); - case 179 /* ImportType */: + case 179: return emitImportTypeNode(node); - case 279 /* JSDocAllType */: + case 279: write("*"); return; - case 280 /* JSDocUnknownType */: + case 280: write("?"); return; - case 281 /* JSDocNullableType */: + case 281: return emitJSDocNullableType(node); - case 282 /* JSDocNonNullableType */: + case 282: return emitJSDocNonNullableType(node); - case 283 /* JSDocOptionalType */: + case 283: return emitJSDocOptionalType(node); - case 285 /* JSDocVariadicType */: + case 285: return emitJSDocVariadicType(node); - // Binding patterns - case 180 /* ObjectBindingPattern */: + case 180: return emitObjectBindingPattern(node); - case 181 /* ArrayBindingPattern */: + case 181: return emitArrayBindingPattern(node); - case 182 /* BindingElement */: + case 182: return emitBindingElement(node); - // Misc - case 211 /* TemplateSpan */: + case 211: return emitTemplateSpan(node); - case 212 /* SemicolonClassElement */: + case 212: return emitSemicolonClassElement(); - // Statements - case 213 /* Block */: + case 213: return emitBlock(node); - case 214 /* VariableStatement */: + case 214: return emitVariableStatement(node); - case 215 /* EmptyStatement */: + case 215: return emitEmptyStatement(); - case 216 /* ExpressionStatement */: + case 216: return emitExpressionStatement(node); - case 217 /* IfStatement */: + case 217: return emitIfStatement(node); - case 218 /* DoStatement */: + case 218: return emitDoStatement(node); - case 219 /* WhileStatement */: + case 219: return emitWhileStatement(node); - case 220 /* ForStatement */: + case 220: return emitForStatement(node); - case 221 /* ForInStatement */: + case 221: return emitForInStatement(node); - case 222 /* ForOfStatement */: + case 222: return emitForOfStatement(node); - case 223 /* ContinueStatement */: + case 223: return emitContinueStatement(node); - case 224 /* BreakStatement */: + case 224: return emitBreakStatement(node); - case 225 /* ReturnStatement */: + case 225: return emitReturnStatement(node); - case 226 /* WithStatement */: + case 226: return emitWithStatement(node); - case 227 /* SwitchStatement */: + case 227: return emitSwitchStatement(node); - case 228 /* LabeledStatement */: + case 228: return emitLabeledStatement(node); - case 229 /* ThrowStatement */: + case 229: return emitThrowStatement(node); - case 230 /* TryStatement */: + case 230: return emitTryStatement(node); - case 231 /* DebuggerStatement */: + case 231: return emitDebuggerStatement(node); - // Declarations - case 232 /* VariableDeclaration */: + case 232: return emitVariableDeclaration(node); - case 233 /* VariableDeclarationList */: + case 233: return emitVariableDeclarationList(node); - case 234 /* FunctionDeclaration */: + case 234: return emitFunctionDeclaration(node); - case 235 /* ClassDeclaration */: + case 235: return emitClassDeclaration(node); - case 236 /* InterfaceDeclaration */: + case 236: return emitInterfaceDeclaration(node); - case 237 /* TypeAliasDeclaration */: + case 237: return emitTypeAliasDeclaration(node); - case 238 /* EnumDeclaration */: + case 238: return emitEnumDeclaration(node); - case 239 /* ModuleDeclaration */: + case 239: return emitModuleDeclaration(node); - case 240 /* ModuleBlock */: + case 240: return emitModuleBlock(node); - case 241 /* CaseBlock */: + case 241: return emitCaseBlock(node); - case 242 /* NamespaceExportDeclaration */: + case 242: return emitNamespaceExportDeclaration(node); - case 243 /* ImportEqualsDeclaration */: + case 243: return emitImportEqualsDeclaration(node); - case 244 /* ImportDeclaration */: + case 244: return emitImportDeclaration(node); - case 245 /* ImportClause */: + case 245: return emitImportClause(node); - case 246 /* NamespaceImport */: + case 246: return emitNamespaceImport(node); - case 247 /* NamedImports */: + case 247: return emitNamedImports(node); - case 248 /* ImportSpecifier */: + case 248: return emitImportSpecifier(node); - case 249 /* ExportAssignment */: + case 249: return emitExportAssignment(node); - case 250 /* ExportDeclaration */: + case 250: return emitExportDeclaration(node); - case 251 /* NamedExports */: + case 251: return emitNamedExports(node); - case 252 /* ExportSpecifier */: + case 252: return emitExportSpecifier(node); - case 253 /* MissingDeclaration */: + case 253: return; - // Module references - case 254 /* ExternalModuleReference */: + case 254: return emitExternalModuleReference(node); - // JSX (non-expression) - case 10 /* JsxText */: + case 10: return emitJsxText(node); - case 257 /* JsxOpeningElement */: - case 260 /* JsxOpeningFragment */: + case 257: + case 260: return emitJsxOpeningElementOrFragment(node); - case 258 /* JsxClosingElement */: - case 261 /* JsxClosingFragment */: + case 258: + case 261: return emitJsxClosingElementOrFragment(node); - case 262 /* JsxAttribute */: + case 262: return emitJsxAttribute(node); - case 263 /* JsxAttributes */: + case 263: return emitJsxAttributes(node); - case 264 /* JsxSpreadAttribute */: + case 264: return emitJsxSpreadAttribute(node); - case 265 /* JsxExpression */: + case 265: return emitJsxExpression(node); - // Clauses - case 266 /* CaseClause */: + case 266: return emitCaseClause(node); - case 267 /* DefaultClause */: + case 267: return emitDefaultClause(node); - case 268 /* HeritageClause */: + case 268: return emitHeritageClause(node); - case 269 /* CatchClause */: + case 269: return emitCatchClause(node); - // Property assignments - case 270 /* PropertyAssignment */: + case 270: return emitPropertyAssignment(node); - case 271 /* ShorthandPropertyAssignment */: + case 271: return emitShorthandPropertyAssignment(node); - case 272 /* SpreadAssignment */: + case 272: return emitSpreadAssignment(node); - // Enum - case 273 /* EnumMember */: + case 273: return emitEnumMember(node); - // JSDoc nodes (ignored) - // Transformation nodes (ignored) } if (ts.isExpression(node)) { - hint = 1 /* Expression */; - node = trySubstituteNode(1 /* Expression */, node); + hint = 1; + node = trySubstituteNode(1, node); } else if (ts.isToken(node)) { return writeTokenNode(node, writePunctuation); } } - if (hint === 1 /* Expression */) { + if (hint === 1) { switch (node.kind) { - // Literals - case 8 /* NumericLiteral */: + case 8: return emitNumericLiteral(node); - case 9 /* StringLiteral */: - case 12 /* RegularExpressionLiteral */: - case 13 /* NoSubstitutionTemplateLiteral */: + case 9: + case 12: + case 13: return emitLiteral(node); - // Identifiers - case 71 /* Identifier */: + case 71: return emitIdentifier(node); - // Reserved words - case 86 /* FalseKeyword */: - case 95 /* NullKeyword */: - case 97 /* SuperKeyword */: - case 101 /* TrueKeyword */: - case 99 /* ThisKeyword */: - case 91 /* ImportKeyword */: + case 86: + case 95: + case 97: + case 101: + case 99: + case 91: writeTokenNode(node, writeKeyword); return; - // Expressions - case 183 /* ArrayLiteralExpression */: + case 183: return emitArrayLiteralExpression(node); - case 184 /* ObjectLiteralExpression */: + case 184: return emitObjectLiteralExpression(node); - case 185 /* PropertyAccessExpression */: + case 185: return emitPropertyAccessExpression(node); - case 186 /* ElementAccessExpression */: + case 186: return emitElementAccessExpression(node); - case 187 /* CallExpression */: + case 187: return emitCallExpression(node); - case 188 /* NewExpression */: + case 188: return emitNewExpression(node); - case 189 /* TaggedTemplateExpression */: + case 189: return emitTaggedTemplateExpression(node); - case 190 /* TypeAssertionExpression */: + case 190: return emitTypeAssertionExpression(node); - case 191 /* ParenthesizedExpression */: + case 191: return emitParenthesizedExpression(node); - case 192 /* FunctionExpression */: + case 192: return emitFunctionExpression(node); - case 193 /* ArrowFunction */: + case 193: return emitArrowFunction(node); - case 194 /* DeleteExpression */: + case 194: return emitDeleteExpression(node); - case 195 /* TypeOfExpression */: + case 195: return emitTypeOfExpression(node); - case 196 /* VoidExpression */: + case 196: return emitVoidExpression(node); - case 197 /* AwaitExpression */: + case 197: return emitAwaitExpression(node); - case 198 /* PrefixUnaryExpression */: + case 198: return emitPrefixUnaryExpression(node); - case 199 /* PostfixUnaryExpression */: + case 199: return emitPostfixUnaryExpression(node); - case 200 /* BinaryExpression */: + case 200: return emitBinaryExpression(node); - case 201 /* ConditionalExpression */: + case 201: return emitConditionalExpression(node); - case 202 /* TemplateExpression */: + case 202: return emitTemplateExpression(node); - case 203 /* YieldExpression */: + case 203: return emitYieldExpression(node); - case 204 /* SpreadElement */: + case 204: return emitSpreadExpression(node); - case 205 /* ClassExpression */: + case 205: return emitClassExpression(node); - case 206 /* OmittedExpression */: + case 206: return; - case 208 /* AsExpression */: + case 208: return emitAsExpression(node); - case 209 /* NonNullExpression */: + case 209: return emitNonNullExpression(node); - case 210 /* MetaProperty */: + case 210: return emitMetaProperty(node); - // JSX - case 255 /* JsxElement */: + case 255: return emitJsxElement(node); - case 256 /* JsxSelfClosingElement */: + case 256: return emitJsxSelfClosingElement(node); - case 259 /* JsxFragment */: + case 259: return emitJsxFragment(node); - // Transformation nodes - case 301 /* PartiallyEmittedExpression */: + case 301: return emitPartiallyEmittedExpression(node); - case 302 /* CommaListExpression */: + case 302: return emitCommaList(node); } } @@ -77863,7 +62705,7 @@ var ts; } function emitHelpers(node) { var helpersEmitted = false; - var bundle = node.kind === 275 /* Bundle */ ? node : undefined; + var bundle = node.kind === 275 ? node : undefined; if (bundle && moduleKind === ts.ModuleKind.None) { return; } @@ -77878,13 +62720,8 @@ var ts; 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.get(helper.name)) { continue; @@ -77893,7 +62730,6 @@ var ts; } } else if (bundle) { - // Skip the helper if it is scoped and we are emitting bundled helpers continue; } if (typeof helper.text === "string") { @@ -77908,52 +62744,34 @@ var ts; } return helpersEmitted; } - // - // Literals/Pseudo-literals - // - // SyntaxKind.NumericLiteral function emitNumericLiteral(node) { emitLiteral(node); } - // SyntaxKind.StringLiteral - // SyntaxKind.RegularExpressionLiteral - // SyntaxKind.NoSubstitutionTemplateLiteral - // SyntaxKind.TemplateHead - // SyntaxKind.TemplateMiddle - // SyntaxKind.TemplateTail function emitLiteral(node) { var text = getLiteralTextOfNode(node); if ((printerOptions.sourceMap || printerOptions.inlineSourceMap) - && (node.kind === 9 /* StringLiteral */ || ts.isTemplateLiteralKind(node.kind))) { + && (node.kind === 9 || ts.isTemplateLiteralKind(node.kind))) { writeLiteral(text); } else { - // Quick info expects all literals to be called with writeStringLiteral, as there's no specific type for numberLiterals writeStringLiteral(text); } } - // SyntaxKind.UnparsedSource function emitUnparsedSource(unparsed) { writer.rawWrite(unparsed.text); } - // - // Identifiers - // function emitIdentifier(node) { var writeText = node.symbol ? writeSymbol : write; - writeText(getTextOfNode(node, /*includeTrivia*/ false), node.symbol); - emitList(node, node.typeArguments, 26896 /* TypeParameters */); // Call emitList directly since it could be an array of TypeParameterDeclarations _or_ type arguments + writeText(getTextOfNode(node, false), node.symbol); + emitList(node, node.typeArguments, 26896); } - // - // Names - // function emitQualifiedName(node) { emitEntityName(node.left); writePunctuation("."); emit(node.right); } function emitEntityName(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { emitExpression(node); } else { @@ -77965,9 +62783,6 @@ var ts; emitExpression(node.expression); writePunctuation("]"); } - // - // Signature elements - // function emitTypeParameter(node) { emit(node.name); if (node.constraint) { @@ -77989,22 +62804,18 @@ var ts; emit(node.dotDotDotToken); emitNodeWithWriter(node.name, writeParameter); emit(node.questionToken); - if (node.parent && node.parent.kind === 284 /* JSDocFunctionType */ && !node.name) { + if (node.parent && node.parent.kind === 284 && !node.name) { emit(node.type); } else { emitTypeAnnotation(node.type); } - // The comment position has to fallback to any present node within the parameterdeclaration because as it turns out, the parser can make parameter declarations with _just_ an initializer. emitInitializer(node.initializer, node.type ? node.type.end : node.questionToken ? node.questionToken.end : node.name ? node.name.end : node.modifiers ? node.modifiers.end : node.decorators ? node.decorators.end : node.pos, node); } function emitDecorator(decorator) { writePunctuation("@"); emitExpression(decorator.expression); } - // - // Type members - // function emitPropertySignature(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); @@ -78051,7 +62862,7 @@ var ts; function emitAccessorDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); - writeKeyword(node.kind === 156 /* GetAccessor */ ? "get" : "set"); + writeKeyword(node.kind === 156 ? "get" : "set"); writeSpace(); emit(node.name); emitSignatureAndBody(node, emitSignatureHead); @@ -78088,9 +62899,6 @@ var ts; function emitSemicolonClassElement() { writeSemicolon(); } - // - // Types - // function emitTypePredicate(node) { emit(node.parameterName); writeSpace(); @@ -78149,8 +62957,8 @@ var ts; } function emitTypeLiteral(node) { writePunctuation("{"); - var flags = ts.getEmitFlags(node) & 1 /* SingleLine */ ? 384 /* SingleLineTypeLiteralMembers */ : 16449 /* MultiLineTypeLiteralMembers */; - emitList(node, node.members, flags | 262144 /* NoSpaceIfEmpty */); + var flags = ts.getEmitFlags(node) & 1 ? 384 : 16449; + emitList(node, node.members, flags | 262144); writePunctuation("}"); } function emitArrayType(node) { @@ -78164,14 +62972,14 @@ var ts; } function emitTupleType(node) { writePunctuation("["); - emitList(node, node.elementTypes, 272 /* TupleTypeElements */); + emitList(node, node.elementTypes, 272); writePunctuation("]"); } function emitUnionType(node) { - emitList(node, node.types, 260 /* UnionTypeConstituents */); + emitList(node, node.types, 260); } function emitIntersectionType(node) { - emitList(node, node.types, 264 /* IntersectionTypeConstituents */); + emitList(node, node.types, 264); } function emitConditionalType(node) { emit(node.checkType); @@ -78215,7 +63023,7 @@ var ts; function emitMappedType(node) { var emitFlags = ts.getEmitFlags(node); writePunctuation("{"); - if (emitFlags & 1 /* SingleLine */) { + if (emitFlags & 1) { writeSpace(); } else { @@ -78224,18 +63032,18 @@ var ts; } if (node.readonlyToken) { emit(node.readonlyToken); - if (node.readonlyToken.kind !== 132 /* ReadonlyKeyword */) { + if (node.readonlyToken.kind !== 132) { writeKeyword("readonly"); } writeSpace(); } writePunctuation("["); - var pipelinePhase = getPipelinePhase(0 /* Notification */, 3 /* MappedTypeParameter */); - pipelinePhase(3 /* MappedTypeParameter */, node.typeParameter); + var pipelinePhase = getPipelinePhase(0, 3); + pipelinePhase(3, node.typeParameter); writePunctuation("]"); if (node.questionToken) { emit(node.questionToken); - if (node.questionToken.kind !== 55 /* QuestionToken */) { + if (node.questionToken.kind !== 55) { writePunctuation("?"); } } @@ -78243,7 +63051,7 @@ var ts; writeSpace(); emit(node.type); writeSemicolon(); - if (emitFlags & 1 /* SingleLine */) { + if (emitFlags & 1) { writeSpace(); } else { @@ -78270,17 +63078,14 @@ var ts; } emitTypeArguments(node, node.typeArguments); } - // - // Binding patterns - // function emitObjectBindingPattern(node) { writePunctuation("{"); - emitList(node, node.elements, 262576 /* ObjectBindingPatternElements */); + emitList(node, node.elements, 262576); writePunctuation("}"); } function emitArrayBindingPattern(node) { writePunctuation("["); - emitList(node, node.elements, 262448 /* ArrayBindingPatternElements */); + emitList(node, node.elements, 262448); writePunctuation("]"); } function emitBindingElement(node) { @@ -78293,23 +63098,20 @@ var ts; emit(node.name); emitInitializer(node.initializer, node.name.end, node); } - // - // Expressions - // function emitArrayLiteralExpression(node) { var elements = node.elements; - var preferNewLine = node.multiLine ? 32768 /* PreferNewLine */ : 0 /* None */; - emitExpressionList(node, elements, 4466 /* ArrayLiteralExpressionElements */ | preferNewLine); + var preferNewLine = node.multiLine ? 32768 : 0; + emitExpressionList(node, elements, 4466 | preferNewLine); } function emitObjectLiteralExpression(node) { ts.forEach(node.properties, generateMemberNames); - var indentedFlag = ts.getEmitFlags(node) & 65536 /* Indented */; + var indentedFlag = ts.getEmitFlags(node) & 65536; if (indentedFlag) { increaseIndent(); } - var preferNewLine = node.multiLine ? 32768 /* PreferNewLine */ : 0 /* None */; - var allowTrailingComma = currentSourceFile.languageVersion >= 1 /* ES5 */ && !ts.isJsonSourceFile(currentSourceFile) ? 32 /* AllowTrailingComma */ : 0 /* None */; - emitList(node, node.properties, 263122 /* ObjectLiteralExpressionProperties */ | allowTrailingComma | preferNewLine); + var preferNewLine = node.multiLine ? 32768 : 0; + var allowTrailingComma = currentSourceFile.languageVersion >= 1 && !ts.isJsonSourceFile(currentSourceFile) ? 32 : 0; + emitList(node, node.properties, 263122 | allowTrailingComma | preferNewLine); if (indentedFlag) { decreaseIndent(); } @@ -78317,10 +63119,10 @@ var ts; function emitPropertyAccessExpression(node) { var indentBeforeDot = false; var indentAfterDot = false; - if (!(ts.getEmitFlags(node) & 131072 /* NoIndentation */)) { + if (!(ts.getEmitFlags(node) & 131072)) { var dotRangeStart = node.expression.end; var dotRangeEnd = ts.skipTrivia(currentSourceFile.text, node.expression.end) + 1; - var dotToken = ts.createToken(23 /* DotToken */); + var dotToken = ts.createToken(23); dotToken.pos = dotRangeStart; dotToken.end = dotRangeEnd; indentBeforeDot = needsIndentation(node, node.expression, dotToken); @@ -78332,25 +63134,20 @@ var ts; if (shouldEmitDotDot) { writePunctuation("."); } - emitTokenWithComment(23 /* DotToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(23, node.expression.end, writePunctuation, node); increaseIndentIf(indentAfterDot); emit(node.name); decreaseIndentIf(indentBeforeDot, indentAfterDot); } - // 1..toString is a valid property access, emit a dot after the literal - // Also emit a dot if expression is a integer const enum value - it will appear in generated code as numeric literal function needsDotDotForPropertyAccess(expression) { expression = ts.skipPartiallyEmittedExpressions(expression); if (ts.isNumericLiteral(expression)) { - // check if numeric literal is a decimal literal that was originally written with a dot var text = getLiteralTextOfNode(expression); return !expression.numericLiteralFlags - && !ts.stringContains(text, ts.tokenToString(23 /* DotToken */)); + && !ts.stringContains(text, ts.tokenToString(23)); } else if (ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) { - // check if constant enum value is integer var constantValue = ts.getConstantValue(expression); - // isFinite handles cases when constantValue is undefined return typeof constantValue === "number" && isFinite(constantValue) && Math.floor(constantValue) === constantValue && printerOptions.removeComments; @@ -78358,21 +63155,21 @@ var ts; } function emitElementAccessExpression(node) { emitExpression(node.expression); - emitTokenWithComment(21 /* OpenBracketToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(21, node.expression.end, writePunctuation, node); emitExpression(node.argumentExpression); - emitTokenWithComment(22 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node); + emitTokenWithComment(22, node.argumentExpression.end, writePunctuation, node); } function emitCallExpression(node) { emitExpression(node.expression); emitTypeArguments(node, node.typeArguments); - emitExpressionList(node, node.arguments, 1296 /* CallExpressionArguments */); + emitExpressionList(node, node.arguments, 1296); } function emitNewExpression(node) { - emitTokenWithComment(94 /* NewKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(94, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); emitTypeArguments(node, node.typeArguments); - emitExpressionList(node, node.arguments, 9488 /* NewExpressionArguments */); + emitExpressionList(node, node.arguments, 9488); } function emitTaggedTemplateExpression(node) { emitExpression(node.tag); @@ -78387,9 +63184,9 @@ var ts; emitExpression(node.expression); } function emitParenthesizedExpression(node) { - var openParenPos = emitTokenWithComment(19 /* OpenParenToken */, node.pos, writePunctuation, node); + var openParenPos = emitTokenWithComment(19, node.pos, writePunctuation, node); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression ? node.expression.end : openParenPos, writePunctuation, node); + emitTokenWithComment(20, node.expression ? node.expression.end : openParenPos, writePunctuation, node); } function emitFunctionExpression(node) { generateNameIfNeeded(node.name); @@ -78408,22 +63205,22 @@ var ts; emit(node.equalsGreaterThanToken); } function emitDeleteExpression(node) { - emitTokenWithComment(80 /* DeleteKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(80, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitTypeOfExpression(node) { - emitTokenWithComment(103 /* TypeOfKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(103, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitVoidExpression(node) { - emitTokenWithComment(105 /* VoidKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(105, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitAwaitExpression(node) { - emitTokenWithComment(121 /* AwaitKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(121, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } @@ -78435,36 +63232,24 @@ var ts; emitExpression(node.operand); } function shouldEmitWhitespaceBeforeOperand(node) { - // In some cases, we need to emit a space between the operator and the operand. One obvious case - // is when the operator is an identifier, like delete or typeof. We also need to do this for plus - // and minus expressions in certain cases. Specifically, consider the following two cases (parens - // are just for clarity of exposition, and not part of the source code): - // - // (+(+1)) - // (+(++1)) - // - // We need to emit a space in both cases. In the first case, the absence of a space will make - // the resulting expression a prefix increment operation. And in the second, it will make the resulting - // expression a prefix increment whose operand is a plus expression - (++(+x)) - // The same is true of minus of course. var operand = node.operand; - return operand.kind === 198 /* PrefixUnaryExpression */ - && ((node.operator === 37 /* PlusToken */ && (operand.operator === 37 /* PlusToken */ || operand.operator === 43 /* PlusPlusToken */)) - || (node.operator === 38 /* MinusToken */ && (operand.operator === 38 /* MinusToken */ || operand.operator === 44 /* MinusMinusToken */))); + return operand.kind === 198 + && ((node.operator === 37 && (operand.operator === 37 || operand.operator === 43)) + || (node.operator === 38 && (operand.operator === 38 || operand.operator === 44))); } function emitPostfixUnaryExpression(node) { emitExpression(node.operand); writeTokenText(node.operator, writeOperator); } function emitBinaryExpression(node) { - var isCommaOperator = node.operatorToken.kind !== 26 /* CommaToken */; + var isCommaOperator = node.operatorToken.kind !== 26; var indentBeforeOperator = needsIndentation(node, node.left, node.operatorToken); var indentAfterOperator = needsIndentation(node, node.operatorToken, node.right); emitExpression(node.left); increaseIndentIf(indentBeforeOperator, isCommaOperator ? " " : undefined); emitLeadingCommentsOfPosition(node.operatorToken.pos); writeTokenNode(node.operatorToken, writeOperator); - emitTrailingCommentsOfPosition(node.operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts + emitTrailingCommentsOfPosition(node.operatorToken.end, true); increaseIndentIf(indentAfterOperator, " "); emitExpression(node.right); decreaseIndentIf(indentBeforeOperator, indentAfterOperator); @@ -78488,10 +63273,10 @@ var ts; } function emitTemplateExpression(node) { emit(node.head); - emitList(node, node.templateSpans, 131072 /* TemplateExpressionSpans */); + emitList(node, node.templateSpans, 131072); } function emitYieldExpression(node) { - emitTokenWithComment(116 /* YieldKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(116, node.pos, writeKeyword, node); emit(node.asteriskToken); emitExpressionWithLeadingSpace(node.expression); } @@ -78525,24 +63310,18 @@ var ts; writePunctuation("."); emit(node.name); } - // - // Misc - // function emitTemplateSpan(node) { emitExpression(node.expression); emit(node.literal); } - // - // Statements - // function emitBlock(node) { - emitBlockStatements(node, /*forceSingleLine*/ !node.multiLine && isEmptyBlock(node)); + emitBlockStatements(node, !node.multiLine && isEmptyBlock(node)); } function emitBlockStatements(node, forceSingleLine) { - emitTokenWithComment(17 /* OpenBraceToken */, node.pos, writePunctuation, /*contextNode*/ node); - var format = forceSingleLine || ts.getEmitFlags(node) & 1 /* SingleLine */ ? 384 /* SingleLineBlockStatements */ : 65 /* MultiLineBlockStatements */; + emitTokenWithComment(17, node.pos, writePunctuation, node); + var format = forceSingleLine || ts.getEmitFlags(node) & 1 ? 384 : 65; emitList(node, node.statements, format); - emitTokenWithComment(18 /* CloseBraceToken */, node.statements.end, writePunctuation, /*contextNode*/ node, /*indentLeading*/ !!(format & 1 /* MultiLine */)); + emitTokenWithComment(18, node.statements.end, writePunctuation, node, !!(format & 1)); } function emitVariableStatement(node) { emitModifiers(node, node.modifiers); @@ -78559,16 +63338,16 @@ var ts; } } function emitIfStatement(node) { - var openParenPos = emitTokenWithComment(90 /* IfKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(90, node.pos, writeKeyword, node); writeSpace(); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.thenStatement); if (node.elseStatement) { writeLineOrSpace(node); - emitTokenWithComment(82 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node); - if (node.elseStatement.kind === 217 /* IfStatement */) { + emitTokenWithComment(82, node.thenStatement.end, writeKeyword, node); + if (node.elseStatement.kind === 217) { writeSpace(); emit(node.elseStatement); } @@ -78578,14 +63357,14 @@ var ts; } } function emitWhileClause(node, startPos) { - var openParenPos = emitTokenWithComment(106 /* WhileKeyword */, startPos, writeKeyword, node); + var openParenPos = emitTokenWithComment(106, startPos, writeKeyword, node); writeSpace(); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); } function emitDoStatement(node) { - emitTokenWithComment(81 /* DoKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(81, node.pos, writeKeyword, node); emitEmbeddedStatement(node, node.statement); if (ts.isBlock(node.statement)) { writeSpace(); @@ -78601,45 +63380,45 @@ var ts; emitEmbeddedStatement(node, node.statement); } function emitForStatement(node) { - var openParenPos = emitTokenWithComment(88 /* ForKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); - var pos = emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node); + var pos = emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); - pos = emitTokenWithComment(25 /* SemicolonToken */, node.initializer ? node.initializer.end : pos, writeSemicolon, node); + pos = emitTokenWithComment(25, node.initializer ? node.initializer.end : pos, writeSemicolon, node); emitExpressionWithLeadingSpace(node.condition); - pos = emitTokenWithComment(25 /* SemicolonToken */, node.condition ? node.condition.end : pos, writeSemicolon, node); + pos = emitTokenWithComment(25, node.condition ? node.condition.end : pos, writeSemicolon, node); emitExpressionWithLeadingSpace(node.incrementor); - emitTokenWithComment(20 /* CloseParenToken */, node.incrementor ? node.incrementor.end : pos, writePunctuation, node); + emitTokenWithComment(20, node.incrementor ? node.incrementor.end : pos, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForInStatement(node) { - var openParenPos = emitTokenWithComment(88 /* ForKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); writeSpace(); - emitTokenWithComment(92 /* InKeyword */, node.initializer.end, writeKeyword, node); + emitTokenWithComment(92, node.initializer.end, writeKeyword, node); writeSpace(); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForOfStatement(node) { - var openParenPos = emitTokenWithComment(88 /* ForKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); emitWithTrailingSpace(node.awaitModifier); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); writeSpace(); - emitTokenWithComment(145 /* OfKeyword */, node.initializer.end, writeKeyword, node); + emitTokenWithComment(145, node.initializer.end, writeKeyword, node); writeSpace(); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForBinding(node) { if (node !== undefined) { - if (node.kind === 233 /* VariableDeclarationList */) { + if (node.kind === 233) { emit(node); } else { @@ -78648,12 +63427,12 @@ var ts; } } function emitContinueStatement(node) { - emitTokenWithComment(77 /* ContinueKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(77, node.pos, writeKeyword, node); emitWithLeadingSpace(node.label); writeSemicolon(); } function emitBreakStatement(node) { - emitTokenWithComment(72 /* BreakKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(72, node.pos, writeKeyword, node); emitWithLeadingSpace(node.label); writeSemicolon(); } @@ -78676,45 +63455,45 @@ var ts; } pos = writeTokenText(token, writer, pos); if (emitTrailingCommentsOfPosition && isSimilarNode && contextNode.end !== pos) { - emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ true); + emitTrailingCommentsOfPosition(pos, true); } return pos; } function emitReturnStatement(node) { - emitTokenWithComment(96 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node); + emitTokenWithComment(96, node.pos, writeKeyword, node); emitExpressionWithLeadingSpace(node.expression); writeSemicolon(); } function emitWithStatement(node) { - var openParenPos = emitTokenWithComment(107 /* WithKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(107, node.pos, writeKeyword, node); writeSpace(); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitSwitchStatement(node) { - var openParenPos = emitTokenWithComment(98 /* SwitchKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(98, node.pos, writeKeyword, node); writeSpace(); - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); - emitTokenWithComment(20 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitTokenWithComment(20, node.expression.end, writePunctuation, node); writeSpace(); emit(node.caseBlock); } function emitLabeledStatement(node) { emit(node.label); - emitTokenWithComment(56 /* ColonToken */, node.label.end, writePunctuation, node); + emitTokenWithComment(56, node.label.end, writePunctuation, node); writeSpace(); emit(node.statement); } function emitThrowStatement(node) { - emitTokenWithComment(100 /* ThrowKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(100, node.pos, writeKeyword, node); emitExpressionWithLeadingSpace(node.expression); writeSemicolon(); } function emitTryStatement(node) { - emitTokenWithComment(102 /* TryKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(102, node.pos, writeKeyword, node); writeSpace(); emit(node.tryBlock); if (node.catchClause) { @@ -78723,18 +63502,15 @@ var ts; } if (node.finallyBlock) { writeLineOrSpace(node); - emitTokenWithComment(87 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node); + emitTokenWithComment(87, (node.catchClause || node.tryBlock).end, writeKeyword, node); writeSpace(); emit(node.finallyBlock); } } function emitDebuggerStatement(node) { - writeToken(78 /* DebuggerKeyword */, node.pos, writeKeyword); + writeToken(78, node.pos, writeKeyword); writeSemicolon(); } - // - // Declarations - // function emitVariableDeclaration(node) { emit(node.name); emitTypeAnnotation(node.type); @@ -78743,7 +63519,7 @@ var ts; function emitVariableDeclarationList(node) { writeKeyword(ts.isLet(node) ? "let" : ts.isConst(node) ? "const" : "var"); writeSpace(); - emitList(node, node.declarations, 272 /* VariableDeclarationList */); + emitList(node, node.declarations, 272); } function emitFunctionDeclaration(node) { emitFunctionDeclarationOrExpression(node); @@ -78754,7 +63530,7 @@ var ts; writeKeyword("function"); emit(node.asteriskToken); writeSpace(); - emitIdentifierName(node.name); // TODO: GH#18217 + emitIdentifierName(node.name); emitSignatureAndBody(node, emitSignatureHead); } function emitBlockCallback(_hint, body) { @@ -78764,7 +63540,7 @@ var ts; var body = node.body; if (body) { if (ts.isBlock(body)) { - var indentedFlag = ts.getEmitFlags(node) & 65536 /* Indented */; + var indentedFlag = ts.getEmitFlags(node) & 65536; if (indentedFlag) { increaseIndent(); } @@ -78773,7 +63549,7 @@ var ts; generateNames(node.body); emitSignatureHead(node); if (onEmitNode) { - onEmitNode(4 /* Unspecified */, body, emitBlockCallback); + onEmitNode(4, body, emitBlockCallback); } else { emitBlockFunctionBody(body); @@ -78800,13 +63576,7 @@ var ts; emitTypeAnnotation(node.type); } function shouldEmitBlockFunctionBodyOnSingleLine(body) { - // We must emit a function body as a single-line body in the following case: - // * The body has NodeEmitFlags.SingleLine specified. - // We must emit a function body as a multi-line body in the following cases: - // * 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) & 1 /* SingleLine */) { + if (ts.getEmitFlags(body) & 1) { return true; } if (body.multiLine) { @@ -78815,14 +63585,14 @@ var ts; if (!ts.nodeIsSynthesized(body) && !ts.rangeIsOnSingleLine(body, currentSourceFile)) { return false; } - if (shouldWriteLeadingLineTerminator(body, body.statements, 2 /* PreserveLines */) - || shouldWriteClosingLineTerminator(body, body.statements, 2 /* PreserveLines */)) { + if (shouldWriteLeadingLineTerminator(body, body.statements, 2) + || shouldWriteClosingLineTerminator(body, body.statements, 2)) { return false; } var previousStatement; for (var _a = 0, _b = body.statements; _a < _b.length; _a++) { var statement = _b[_a]; - if (shouldWriteSeparatingLineTerminator(previousStatement, statement, 2 /* PreserveLines */)) { + if (shouldWriteSeparatingLineTerminator(previousStatement, statement, 2)) { return false; } previousStatement = statement; @@ -78843,23 +63613,22 @@ var ts; emitBlockFunctionBody(body); } decreaseIndent(); - writeToken(18 /* CloseBraceToken */, body.statements.end, writePunctuation, body); + writeToken(18, body.statements.end, writePunctuation, body); } function emitBlockFunctionBodyOnSingleLine(body) { - emitBlockFunctionBodyWorker(body, /*emitBlockFunctionBodyOnSingleLine*/ true); + emitBlockFunctionBodyWorker(body, true); } function emitBlockFunctionBodyWorker(body, emitBlockFunctionBodyOnSingleLine) { - // Emit all the prologue directives (like "use strict"). - var statementOffset = emitPrologueDirectives(body.statements, /*startWithNewLine*/ true); + var statementOffset = emitPrologueDirectives(body.statements, true); var pos = writer.getTextPos(); emitHelpers(body); if (statementOffset === 0 && pos === writer.getTextPos() && emitBlockFunctionBodyOnSingleLine) { decreaseIndent(); - emitList(body, body.statements, 384 /* SingleLineFunctionBodyStatements */); + emitList(body, body.statements, 384); increaseIndent(); } else { - emitList(body, body.statements, 1 /* MultiLineFunctionBodyStatements */, statementOffset); + emitList(body, body.statements, 1, statementOffset); } } function emitClassDeclaration(node) { @@ -78874,15 +63643,15 @@ var ts; writeSpace(); emitIdentifierName(node.name); } - var indentedFlag = ts.getEmitFlags(node) & 65536 /* Indented */; + var indentedFlag = ts.getEmitFlags(node) & 65536; if (indentedFlag) { increaseIndent(); } emitTypeParameters(node, node.typeParameters); - emitList(node, node.heritageClauses, 0 /* ClassHeritageClauses */); + emitList(node, node.heritageClauses, 0); writeSpace(); writePunctuation("{"); - emitList(node, node.members, 65 /* ClassMembers */); + emitList(node, node.members, 65); writePunctuation("}"); if (indentedFlag) { decreaseIndent(); @@ -78895,10 +63664,10 @@ var ts; writeSpace(); emit(node.name); emitTypeParameters(node, node.typeParameters); - emitList(node, node.heritageClauses, 256 /* HeritageClauses */); + emitList(node, node.heritageClauses, 256); writeSpace(); writePunctuation("{"); - emitList(node, node.members, 65 /* InterfaceMembers */); + emitList(node, node.members, 65); writePunctuation("}"); } function emitTypeAliasDeclaration(node) { @@ -78921,20 +63690,20 @@ var ts; emit(node.name); writeSpace(); writePunctuation("{"); - emitList(node, node.members, 81 /* EnumMembers */); + emitList(node, node.members, 81); writePunctuation("}"); } function emitModuleDeclaration(node) { emitModifiers(node, node.modifiers); - if (~node.flags & 512 /* GlobalAugmentation */) { - writeKeyword(node.flags & 16 /* Namespace */ ? "namespace" : "module"); + if (~node.flags & 512) { + writeKeyword(node.flags & 16 ? "namespace" : "module"); writeSpace(); } emit(node.name); var body = node.body; if (!body) return writeSemicolon(); - while (body.kind === 239 /* ModuleDeclaration */) { + while (body.kind === 239) { writePunctuation("."); emit(body.name); body = body.body; @@ -78945,27 +63714,27 @@ var ts; function emitModuleBlock(node) { pushNameGenerationScope(node); ts.forEach(node.statements, generateNames); - emitBlockStatements(node, /*forceSingleLine*/ isEmptyBlock(node)); + emitBlockStatements(node, isEmptyBlock(node)); popNameGenerationScope(node); } function emitCaseBlock(node) { - emitTokenWithComment(17 /* OpenBraceToken */, node.pos, writePunctuation, node); - emitList(node, node.clauses, 65 /* CaseBlockClauses */); - emitTokenWithComment(18 /* CloseBraceToken */, node.clauses.end, writePunctuation, node, /*indentLeading*/ true); + emitTokenWithComment(17, node.pos, writePunctuation, node); + emitList(node, node.clauses, 65); + emitTokenWithComment(18, node.clauses.end, writePunctuation, node, true); } function emitImportEqualsDeclaration(node) { emitModifiers(node, node.modifiers); - emitTokenWithComment(91 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); + emitTokenWithComment(91, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); writeSpace(); emit(node.name); writeSpace(); - emitTokenWithComment(58 /* EqualsToken */, node.name.end, writePunctuation, node); + emitTokenWithComment(58, node.name.end, writePunctuation, node); writeSpace(); emitModuleReference(node.moduleReference); writeSemicolon(); } function emitModuleReference(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { emitExpression(node); } else { @@ -78974,12 +63743,12 @@ var ts; } function emitImportDeclaration(node) { emitModifiers(node, node.modifiers); - emitTokenWithComment(91 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); + emitTokenWithComment(91, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); writeSpace(); if (node.importClause) { emit(node.importClause); writeSpace(); - emitTokenWithComment(143 /* FromKeyword */, node.importClause.end, writeKeyword, node); + emitTokenWithComment(143, node.importClause.end, writeKeyword, node); writeSpace(); } emitExpression(node.moduleSpecifier); @@ -78988,15 +63757,15 @@ var ts; function emitImportClause(node) { emit(node.name); if (node.name && node.namedBindings) { - emitTokenWithComment(26 /* CommaToken */, node.name.end, writePunctuation, node); + emitTokenWithComment(26, node.name.end, writePunctuation, node); writeSpace(); } emit(node.namedBindings); } function emitNamespaceImport(node) { - var asPos = emitTokenWithComment(39 /* AsteriskToken */, node.pos, writePunctuation, node); + var asPos = emitTokenWithComment(39, node.pos, writePunctuation, node); writeSpace(); - emitTokenWithComment(118 /* AsKeyword */, asPos, writeKeyword, node); + emitTokenWithComment(118, asPos, writeKeyword, node); writeSpace(); emit(node.name); } @@ -79007,42 +63776,42 @@ var ts; emitImportOrExportSpecifier(node); } function emitExportAssignment(node) { - var nextPos = emitTokenWithComment(84 /* ExportKeyword */, node.pos, writeKeyword, node); + var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); if (node.isExportEquals) { - emitTokenWithComment(58 /* EqualsToken */, nextPos, writeOperator, node); + emitTokenWithComment(58, nextPos, writeOperator, node); } else { - emitTokenWithComment(79 /* DefaultKeyword */, nextPos, writeKeyword, node); + emitTokenWithComment(79, nextPos, writeKeyword, node); } writeSpace(); emitExpression(node.expression); writeSemicolon(); } function emitExportDeclaration(node) { - var nextPos = emitTokenWithComment(84 /* ExportKeyword */, node.pos, writeKeyword, node); + var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); if (node.exportClause) { emit(node.exportClause); } else { - nextPos = emitTokenWithComment(39 /* AsteriskToken */, nextPos, writePunctuation, node); + nextPos = emitTokenWithComment(39, nextPos, writePunctuation, node); } if (node.moduleSpecifier) { writeSpace(); var fromPos = node.exportClause ? node.exportClause.end : nextPos; - emitTokenWithComment(143 /* FromKeyword */, fromPos, writeKeyword, node); + emitTokenWithComment(143, fromPos, writeKeyword, node); writeSpace(); emitExpression(node.moduleSpecifier); } writeSemicolon(); } function emitNamespaceExportDeclaration(node) { - var nextPos = emitTokenWithComment(84 /* ExportKeyword */, node.pos, writeKeyword, node); + var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); - nextPos = emitTokenWithComment(118 /* AsKeyword */, nextPos, writeKeyword, node); + nextPos = emitTokenWithComment(118, nextPos, writeKeyword, node); writeSpace(); - nextPos = emitTokenWithComment(130 /* NamespaceKeyword */, nextPos, writeKeyword, node); + nextPos = emitTokenWithComment(130, nextPos, writeKeyword, node); writeSpace(); emit(node.name); writeSemicolon(); @@ -79055,33 +63824,27 @@ var ts; } function emitNamedImportsOrExports(node) { writePunctuation("{"); - emitList(node, node.elements, 262576 /* NamedImportsOrExportsElements */); + emitList(node, node.elements, 262576); writePunctuation("}"); } function emitImportOrExportSpecifier(node) { if (node.propertyName) { emit(node.propertyName); writeSpace(); - emitTokenWithComment(118 /* AsKeyword */, node.propertyName.end, writeKeyword, node); + emitTokenWithComment(118, node.propertyName.end, writeKeyword, node); writeSpace(); } emit(node.name); } - // - // Module references - // function emitExternalModuleReference(node) { writeKeyword("require"); writePunctuation("("); emitExpression(node.expression); writePunctuation(")"); } - // - // JSX - // function emitJsxElement(node) { emit(node.openingElement); - emitList(node, node.children, 131072 /* JsxElementOrFragmentChildren */); + emitList(node, node.children, 131072); emit(node.closingElement); } function emitJsxSelfClosingElement(node) { @@ -79093,7 +63856,7 @@ var ts; } function emitJsxFragment(node) { emit(node.openingFragment); - emitList(node, node.children, 131072 /* JsxElementOrFragmentChildren */); + emitList(node, node.children, 131072); emit(node.closingFragment); } function emitJsxOpeningElementOrFragment(node) { @@ -79109,7 +63872,7 @@ var ts; } function emitJsxText(node) { commitPendingSemicolon(); - writer.writeLiteral(getTextOfNode(node, /*includeTrivia*/ true)); + writer.writeLiteral(getTextOfNode(node, true)); } function emitJsxClosingElementOrFragment(node) { writePunctuation(""); } function emitJsxAttributes(node) { - emitList(node, node.properties, 131328 /* JsxElementAttributes */); + emitList(node, node.properties, 131328); } function emitJsxAttribute(node) { emit(node.name); - emitNodeWithPrefix("=", writePunctuation, node.initializer, emit); // TODO: GH#18217 + emitNodeWithPrefix("=", writePunctuation, node.initializer, emit); } function emitJsxSpreadAttribute(node) { writePunctuation("{..."); @@ -79139,41 +63902,36 @@ var ts; } } function emitJsxTagName(node) { - if (node.kind === 71 /* Identifier */) { + if (node.kind === 71) { emitExpression(node); } else { emit(node); } } - // - // Clauses - // function emitCaseClause(node) { - emitTokenWithComment(73 /* CaseKeyword */, node.pos, writeKeyword, node); + emitTokenWithComment(73, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end); } function emitDefaultClause(node) { - var pos = emitTokenWithComment(79 /* DefaultKeyword */, node.pos, writeKeyword, node); + var pos = emitTokenWithComment(79, node.pos, writeKeyword, node); emitCaseOrDefaultClauseRest(node, node.statements, pos); } function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) { var emitAsSingleStatement = statements.length === 1 && - ( - // treat synthesized nodes as located on the same line for emit purposes - ts.nodeIsSynthesized(parentNode) || + (ts.nodeIsSynthesized(parentNode) || ts.nodeIsSynthesized(statements[0]) || ts.rangeStartPositionsAreOnSameLine(parentNode, statements[0], currentSourceFile)); - var format = 81985 /* CaseOrDefaultClauseStatements */; + var format = 81985; if (emitAsSingleStatement) { - writeToken(56 /* ColonToken */, colonPos, writePunctuation, parentNode); + writeToken(56, colonPos, writePunctuation, parentNode); writeSpace(); - format &= ~(1 /* MultiLine */ | 64 /* Indented */); + format &= ~(1 | 64); } else { - emitTokenWithComment(56 /* ColonToken */, colonPos, writePunctuation, parentNode); + emitTokenWithComment(56, colonPos, writePunctuation, parentNode); } emitList(parentNode, statements, format); } @@ -79181,35 +63939,25 @@ var ts; writeSpace(); writeTokenText(node.token, writeKeyword); writeSpace(); - emitList(node, node.types, 272 /* HeritageClauseTypes */); + emitList(node, node.types, 272); } function emitCatchClause(node) { - var openParenPos = emitTokenWithComment(74 /* CatchKeyword */, node.pos, writeKeyword, node); + var openParenPos = emitTokenWithComment(74, node.pos, writeKeyword, node); writeSpace(); if (node.variableDeclaration) { - emitTokenWithComment(19 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitTokenWithComment(19, openParenPos, writePunctuation, node); emit(node.variableDeclaration); - emitTokenWithComment(20 /* CloseParenToken */, node.variableDeclaration.end, writePunctuation, node); + emitTokenWithComment(20, node.variableDeclaration.end, writePunctuation, node); writeSpace(); } emit(node.block); } - // - // Property assignments - // function emitPropertyAssignment(node) { emit(node.name); writePunctuation(":"); writeSpace(); - // This is to ensure that we emit comment in the following case: - // For example: - // obj = { - // id: /*comment1*/ ()=>void - // } - // "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 (emitTrailingCommentsOfPosition && (ts.getEmitFlags(initializer) & 512 /* NoLeadingComments */) === 0) { + if (emitTrailingCommentsOfPosition && (ts.getEmitFlags(initializer) & 512) === 0) { var commentRange = ts.getCommentRange(initializer); emitTrailingCommentsOfPosition(commentRange.pos); } @@ -79230,22 +63978,14 @@ var ts; emitExpression(node.expression); } } - // - // Enum - // function emitEnumMember(node) { emit(node.name); emitInitializer(node.initializer, node.name.end, node); } - // - // Top-level nodes - // function emitSourceFile(node) { writeLine(); var statements = node.statements; if (emitBodyWithDetachedComments) { - // Emit detached comment if there are no prologue directives or if the first node is synthesized. - // The synthesized node will have no leading comment so some comments may be missed. var shouldEmitDetachedComment = statements.length === 0 || !ts.isPrologueDirective(statements[0]) || ts.nodeIsSynthesized(statements[0]); @@ -79302,20 +64042,15 @@ var ts; emitHelpers(node); var index = ts.findIndex(statements, function (statement) { return !ts.isPrologueDirective(statement); }); emitTripleSlashDirectivesIfNeeded(node); - emitList(node, statements, 1 /* MultiLine */, index === -1 ? statements.length : index); + emitList(node, statements, 1, index === -1 ? statements.length : index); popNameGenerationScope(node); } - // Transformation nodes function emitPartiallyEmittedExpression(node) { emitExpression(node.expression); } function emitCommaList(node) { - emitExpressionList(node, node.elements, 272 /* CommaListElements */); + emitExpressionList(node, node.elements, 272); } - /** - * Emits any prologue directives at the start of a Statement list, returning the - * number of prologue directives written to the output. - */ function emitPrologueDirectives(statements, startWithNewLine, seenPrologueDirectives) { for (var i = 0; i < statements.length; i++) { var statement = statements[i]; @@ -79332,7 +64067,6 @@ var ts; } } else { - // return index of the first non prologue directive return i; } } @@ -79348,7 +64082,7 @@ var ts; for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) { var sourceFile = _b[_a]; setSourceFile(sourceFile); - emitPrologueDirectives(sourceFile.statements, /*startWithNewLine*/ true, seenPrologueDirectives); + emitPrologueDirectives(sourceFile.statements, true, seenPrologueDirectives); } } } @@ -79364,16 +64098,12 @@ var ts; else { for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) { var sourceFile = _b[_a]; - // Emit only the first encountered shebang if (emitShebangIfNeeded(sourceFile)) { break; } } } } - // - // Helpers - // function emitNodeWithWriter(node, writer) { if (!node) return; @@ -79384,7 +64114,7 @@ var ts; } function emitModifiers(node, modifiers) { if (modifiers && modifiers.length) { - emitList(node, modifiers, 131328 /* Modifiers */); + emitList(node, modifiers, 131328); writeSpace(); } } @@ -79398,7 +64128,7 @@ var ts; function emitInitializer(node, equalCommentStartPos, container) { if (node) { writeSpace(); - emitTokenWithComment(58 /* EqualsToken */, equalCommentStartPos, writeOperator, container); + emitTokenWithComment(58, equalCommentStartPos, writeOperator, container); writeSpace(); emitExpression(node); } @@ -79428,7 +64158,7 @@ var ts; } } function emitEmbeddedStatement(parent, node) { - if (ts.isBlock(node) || ts.getEmitFlags(parent) & 1 /* SingleLine */) { + if (ts.isBlock(node) || ts.getEmitFlags(parent) & 1) { writeSpace(); emit(node); } @@ -79440,65 +64170,65 @@ var ts; } } function emitDecorators(parentNode, decorators) { - emitList(parentNode, decorators, 24577 /* Decorators */); + emitList(parentNode, decorators, 24577); } function emitTypeArguments(parentNode, typeArguments) { - emitList(parentNode, typeArguments, 26896 /* TypeArguments */); + emitList(parentNode, typeArguments, 26896); } function emitTypeParameters(parentNode, typeParameters) { - if (ts.isFunctionLike(parentNode) && parentNode.typeArguments) { // Quick info uses type arguments in place of type parameters on instantiated signatures + if (ts.isFunctionLike(parentNode) && parentNode.typeArguments) { return emitTypeArguments(parentNode, parentNode.typeArguments); } - emitList(parentNode, typeParameters, 26896 /* TypeParameters */); + emitList(parentNode, typeParameters, 26896); } function emitParameters(parentNode, parameters) { - emitList(parentNode, parameters, 1296 /* Parameters */); + emitList(parentNode, parameters, 1296); } function canEmitSimpleArrowHead(parentNode, parameters) { var parameter = ts.singleOrUndefined(parameters); return parameter - && parameter.pos === parentNode.pos // may not have parsed tokens between parent and parameter - && !(ts.isArrowFunction(parentNode) && parentNode.type) // arrow function may not have return type annotation - && !ts.some(parentNode.decorators) // parent may not have decorators - && !ts.some(parentNode.modifiers) // parent may not have modifiers - && !ts.some(parentNode.typeParameters) // parent may not have type parameters - && !ts.some(parameter.decorators) // parameter may not have decorators - && !ts.some(parameter.modifiers) // parameter may not have modifiers - && !parameter.dotDotDotToken // parameter may not be rest - && !parameter.questionToken // parameter may not be optional - && !parameter.type // parameter may not have a type annotation - && !parameter.initializer // parameter may not have an initializer - && ts.isIdentifier(parameter.name); // parameter name must be identifier + && parameter.pos === parentNode.pos + && !(ts.isArrowFunction(parentNode) && parentNode.type) + && !ts.some(parentNode.decorators) + && !ts.some(parentNode.modifiers) + && !ts.some(parentNode.typeParameters) + && !ts.some(parameter.decorators) + && !ts.some(parameter.modifiers) + && !parameter.dotDotDotToken + && !parameter.questionToken + && !parameter.type + && !parameter.initializer + && ts.isIdentifier(parameter.name); } function emitParametersForArrow(parentNode, parameters) { if (canEmitSimpleArrowHead(parentNode, parameters)) { - emitList(parentNode, parameters, 1296 /* Parameters */ & ~1024 /* Parenthesis */); + emitList(parentNode, parameters, 1296 & ~1024); } else { emitParameters(parentNode, parameters); } } function emitParametersForIndexSignature(parentNode, parameters) { - emitList(parentNode, parameters, 4432 /* IndexSignatureParameters */); + emitList(parentNode, parameters, 4432); } function emitList(parentNode, children, format, start, count) { emitNodeList(emit, parentNode, children, format, start, count); } function emitExpressionList(parentNode, children, format, start, count) { - emitNodeList(emitExpression, parentNode, children, format, start, count); // TODO: GH#18217 + emitNodeList(emitExpression, parentNode, children, format, start, count); } function writeDelimiter(format) { - switch (format & 28 /* DelimitersMask */) { - case 0 /* None */: + switch (format & 28) { + case 0: break; - case 16 /* CommaDelimited */: + case 16: writePunctuation(","); break; - case 4 /* BarDelimited */: + case 4: writeSpace(); writePunctuation("|"); break; - case 8 /* AmpersandDelimited */: + case 8: writeSpace(); writePunctuation("&"); break; @@ -79508,11 +64238,11 @@ var ts; if (start === void 0) { start = 0; } if (count === void 0) { count = children ? children.length - start : 0; } var isUndefined = children === undefined; - if (isUndefined && format & 8192 /* OptionalIfUndefined */) { + if (isUndefined && format & 8192) { return; } var isEmpty = children === undefined || start >= children.length || count === 0; - if (isEmpty && format & 16384 /* OptionalIfEmpty */) { + if (isEmpty && format & 16384) { if (onBeforeEmitNodeArray) { onBeforeEmitNodeArray(children); } @@ -79521,73 +64251,57 @@ var ts; } return; } - if (format & 7680 /* BracketsMask */) { + if (format & 7680) { writePunctuation(getOpeningBracket(format)); if (isEmpty && !isUndefined) { - // TODO: GH#18217 - emitTrailingCommentsOfPosition(children.pos, /*prefixSpace*/ true); // Emit comments within empty bracketed lists + emitTrailingCommentsOfPosition(children.pos, true); } } if (onBeforeEmitNodeArray) { onBeforeEmitNodeArray(children); } if (isEmpty) { - // Write a line terminator if the parent node was multi-line - if (format & 1 /* MultiLine */) { + if (format & 1) { writeLine(); } - else if (format & 128 /* SpaceBetweenBraces */ && !(format & 262144 /* NoSpaceIfEmpty */)) { + else if (format & 128 && !(format & 262144)) { writeSpace(); } } else { - // Write the opening line terminator or leading whitespace. - var mayEmitInterveningComments = (format & 131072 /* NoInterveningComments */) === 0; + var mayEmitInterveningComments = (format & 131072) === 0; var shouldEmitInterveningComments = mayEmitInterveningComments; - if (shouldWriteLeadingLineTerminator(parentNode, children, format)) { // TODO: GH#18217 + if (shouldWriteLeadingLineTerminator(parentNode, children, format)) { writeLine(); shouldEmitInterveningComments = false; } - else if (format & 128 /* SpaceBetweenBraces */) { + else if (format & 128) { writeSpace(); } - // Increase the indent, if requested. - if (format & 64 /* Indented */) { + if (format & 64) { increaseIndent(); } - // Emit each child. var previousSibling = void 0; var shouldDecreaseIndentAfterEmit = false; for (var i = 0; i < count; i++) { var child = children[start + i]; - // Write the delimiter if this is not the first node. if (previousSibling) { - // i.e - // function commentedParameters( - // /* Parameter a */ - // a - // /* End of parameter a */ -> this comment isn't considered to be trailing comment of parameter "a" due to newline - // , - if (format & 28 /* DelimitersMask */ && previousSibling.end !== parentNode.end) { + if (format & 28 && previousSibling.end !== parentNode.end) { emitLeadingCommentsOfPosition(previousSibling.end); } writeDelimiter(format); - // Write either a line terminator or whitespace to separate the elements. if (shouldWriteSeparatingLineTerminator(previousSibling, child, format)) { - // If a synthesized node in a single-line list starts on a new - // line, we should increase the indent. - if ((format & (3 /* LinesMask */ | 64 /* Indented */)) === 0 /* SingleLine */) { + if ((format & (3 | 64)) === 0) { increaseIndent(); shouldDecreaseIndentAfterEmit = true; } writeLine(); shouldEmitInterveningComments = false; } - else if (previousSibling && format & 256 /* SpaceBetweenSiblings */) { + else if (previousSibling && format & 256) { writeSpace(); } } - // Emit this child. if (shouldEmitInterveningComments) { if (emitTrailingCommentsOfPosition) { var commentRange = ts.getCommentRange(child); @@ -79604,39 +64318,29 @@ var ts; } previousSibling = child; } - // Write a trailing comma, if requested. - var hasTrailingComma = (format & 32 /* AllowTrailingComma */) && children.hasTrailingComma; - if (format & 16 /* CommaDelimited */ && hasTrailingComma) { + var hasTrailingComma = (format & 32) && children.hasTrailingComma; + if (format & 16 && hasTrailingComma) { writePunctuation(","); } - // Emit any trailing comment of the last element in the list - // i.e - // var array = [... - // 2 - // /* end of element 2 */ - // ]; - if (previousSibling && format & 28 /* DelimitersMask */ && previousSibling.end !== parentNode.end && !(ts.getEmitFlags(previousSibling) & 1024 /* NoTrailingComments */)) { + if (previousSibling && format & 28 && previousSibling.end !== parentNode.end && !(ts.getEmitFlags(previousSibling) & 1024)) { emitLeadingCommentsOfPosition(previousSibling.end); } - // Decrease the indent, if requested. - if (format & 64 /* Indented */) { + if (format & 64) { decreaseIndent(); } - // Write the closing line terminator or closing whitespace. if (shouldWriteClosingLineTerminator(parentNode, children, format)) { writeLine(); } - else if (format & 128 /* SpaceBetweenBraces */) { + else if (format & 128) { writeSpace(); } } if (onAfterEmitNodeArray) { onAfterEmitNodeArray(children); } - if (format & 7680 /* BracketsMask */) { + if (format & 7680) { if (isEmpty && !isUndefined) { - // TODO: GH#18217 - emitLeadingCommentsOfPosition(children.end); // Emit leading comments within empty lists + emitLeadingCommentsOfPosition(children.end); } writePunctuation(getClosingBracket(format)); } @@ -79725,7 +64429,7 @@ var ts; return pos < 0 ? pos : pos + tokenString.length; } function writeLineOrSpace(node) { - if (ts.getEmitFlags(node) & 1 /* SingleLine */) { + if (ts.getEmitFlags(node) & 1) { writeSpace(); } else { @@ -79754,10 +64458,6 @@ var ts; write(valueToWriteWhenNotIndenting); } } - // Helper function to decrease the indent if we previously indented. Allows multiple - // previous indent values to be considered at a time. This also allows caller to just - // call this once, passing in all their appropriate indent values, instead of needing - // to call this helper function multiple times. function decreaseIndentIf(value1, value2) { if (value1) { decreaseIndent(); @@ -79767,11 +64467,11 @@ var ts; } } function shouldWriteLeadingLineTerminator(parentNode, children, format) { - if (format & 1 /* MultiLine */) { + if (format & 1) { return true; } - if (format & 2 /* PreserveLines */) { - if (format & 32768 /* PreferNewLine */) { + if (format & 2) { + if (format & 32768) { return true; } var firstChild = children[0]; @@ -79790,10 +64490,10 @@ var ts; } } function shouldWriteSeparatingLineTerminator(previousNode, nextNode, format) { - if (format & 1 /* MultiLine */) { + if (format & 1) { return true; } - else if (format & 2 /* PreserveLines */) { + else if (format & 2) { if (previousNode === undefined || nextNode === undefined) { return false; } @@ -79809,11 +64509,11 @@ var ts; } } function shouldWriteClosingLineTerminator(parentNode, children, format) { - if (format & 1 /* MultiLine */) { - return (format & 65536 /* NoTrailingNewLine */) === 0; + if (format & 1) { + return (format & 65536) === 0; } - else if (format & 2 /* PreserveLines */) { - if (format & 32768 /* PreferNewLine */) { + else if (format & 2) { + if (format & 32768) { return true; } var lastChild = ts.lastOrUndefined(children); @@ -79835,17 +64535,16 @@ var ts; if (ts.nodeIsSynthesized(node)) { var startsOnNewLine = ts.getStartsOnNewLine(node); if (startsOnNewLine === undefined) { - return (format & 32768 /* PreferNewLine */) !== 0; + return (format & 32768) !== 0; } return startsOnNewLine; } - return (format & 32768 /* PreferNewLine */) !== 0; + return (format & 32768) !== 0; } function needsIndentation(parent, node1, node2) { parent = skipSynthesizedParentheses(parent); node1 = skipSynthesizedParentheses(node1); node2 = skipSynthesizedParentheses(node2); - // Always use a newline for synthesized code if the synthesizer desires it. if (ts.getStartsOnNewLine(node2)) { return true; } @@ -79859,7 +64558,7 @@ var ts; && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile); } function skipSynthesizedParentheses(node) { - while (node.kind === 191 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) { + while (node.kind === 191 && ts.nodeIsSynthesized(node)) { node = node.expression; } return node; @@ -79871,7 +64570,7 @@ var ts; else if (ts.isIdentifier(node) && (ts.nodeIsSynthesized(node) || !node.parent || !currentSourceFile || (node.parent && currentSourceFile && ts.getSourceFileOfNode(node) !== ts.getOriginalNode(currentSourceFile)))) { return ts.idText(node); } - else if (node.kind === 9 /* StringLiteral */ && node.textSourceNode) { + else if (node.kind === 9 && node.textSourceNode) { return getTextOfNode(node.textSourceNode, includeTrivia); } else if (ts.isLiteralExpression(node) && (ts.nodeIsSynthesized(node) || !node.parent)) { @@ -79880,10 +64579,10 @@ var ts; return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node, includeTrivia); } function getLiteralTextOfNode(node) { - if (node.kind === 9 /* StringLiteral */ && node.textSourceNode) { + if (node.kind === 9 && node.textSourceNode) { var textSourceNode = node.textSourceNode; if (ts.isIdentifier(textSourceNode)) { - return ts.getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? + return ts.getEmitFlags(node) & 16777216 ? "\"" + ts.escapeString(getTextOfNode(textSourceNode)) + "\"" : "\"" + ts.escapeNonAsciiString(getTextOfNode(textSourceNode)) + "\""; } @@ -79893,22 +64592,16 @@ var ts; } return ts.getLiteralText(node, currentSourceFile); } - /** - * Push a new name generation scope. - */ function pushNameGenerationScope(node) { - if (node && ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) { + if (node && ts.getEmitFlags(node) & 524288) { return; } tempFlagsStack.push(tempFlags); tempFlags = 0; reservedNamesStack.push(reservedNames); } - /** - * Pop the current name generation scope. - */ function popNameGenerationScope(node) { - if (node && ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) { + if (node && ts.getEmitFlags(node) & 524288) { return; } tempFlags = tempFlagsStack.pop(); @@ -79924,81 +64617,81 @@ var ts; if (!node) return; switch (node.kind) { - case 213 /* Block */: + case 213: ts.forEach(node.statements, generateNames); break; - case 228 /* LabeledStatement */: - case 226 /* WithStatement */: - case 218 /* DoStatement */: - case 219 /* WhileStatement */: + case 228: + case 226: + case 218: + case 219: generateNames(node.statement); break; - case 217 /* IfStatement */: + case 217: generateNames(node.thenStatement); generateNames(node.elseStatement); break; - case 220 /* ForStatement */: - case 222 /* ForOfStatement */: - case 221 /* ForInStatement */: + case 220: + case 222: + case 221: generateNames(node.initializer); generateNames(node.statement); break; - case 227 /* SwitchStatement */: + case 227: generateNames(node.caseBlock); break; - case 241 /* CaseBlock */: + case 241: ts.forEach(node.clauses, generateNames); break; - case 266 /* CaseClause */: - case 267 /* DefaultClause */: + case 266: + case 267: ts.forEach(node.statements, generateNames); break; - case 230 /* TryStatement */: + case 230: generateNames(node.tryBlock); generateNames(node.catchClause); generateNames(node.finallyBlock); break; - case 269 /* CatchClause */: + case 269: generateNames(node.variableDeclaration); generateNames(node.block); break; - case 214 /* VariableStatement */: + case 214: generateNames(node.declarationList); break; - case 233 /* VariableDeclarationList */: + case 233: ts.forEach(node.declarations, generateNames); break; - case 232 /* VariableDeclaration */: - case 149 /* Parameter */: - case 182 /* BindingElement */: - case 235 /* ClassDeclaration */: + case 232: + case 149: + case 182: + case 235: generateNameIfNeeded(node.name); break; - case 234 /* FunctionDeclaration */: + case 234: generateNameIfNeeded(node.name); - if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) { + if (ts.getEmitFlags(node) & 524288) { ts.forEach(node.parameters, generateNames); generateNames(node.body); } break; - case 180 /* ObjectBindingPattern */: - case 181 /* ArrayBindingPattern */: + case 180: + case 181: ts.forEach(node.elements, generateNames); break; - case 244 /* ImportDeclaration */: + case 244: generateNames(node.importClause); break; - case 245 /* ImportClause */: + case 245: generateNameIfNeeded(node.name); generateNames(node.namedBindings); break; - case 246 /* NamespaceImport */: + case 246: generateNameIfNeeded(node.name); break; - case 247 /* NamedImports */: + case 247: ts.forEach(node.elements, generateNames); break; - case 248 /* ImportSpecifier */: + case 248: generateNameIfNeeded(node.propertyName || node.name); break; } @@ -80007,12 +64700,12 @@ var ts; if (!node) return; switch (node.kind) { - case 270 /* PropertyAssignment */: - case 271 /* ShorthandPropertyAssignment */: - case 152 /* PropertyDeclaration */: - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 270: + case 271: + case 152: + case 154: + case 156: + case 157: generateNameIfNeeded(node.name); break; } @@ -80027,18 +64720,11 @@ var ts; } } } - /** - * Generate the text for a generated identifier. - */ function generateName(name) { - if ((name.autoGenerateFlags & 7 /* KindMask */) === 4 /* Node */) { - // Node names generate unique names based on their original node - // and are cached based on that node's id. + if ((name.autoGenerateFlags & 7) === 4) { return generateNameCached(getNodeForGeneratedName(name), name.autoGenerateFlags); } else { - // Auto, Loop, and Unique names are cached based on their unique - // autoGenerateId. var autoGenerateId = name.autoGenerateId; return autoGeneratedIdToGeneratedName[autoGenerateId] || (autoGeneratedIdToGeneratedName[autoGenerateId] = makeName(name)); } @@ -80047,44 +64733,28 @@ var ts; var nodeId = ts.getNodeId(node); return nodeIdToGeneratedName[nodeId] || (nodeIdToGeneratedName[nodeId] = generateNameForNode(node, flags)); } - /** - * Returns a value indicating whether a name is unique globally, within the current file, - * or within the NameGenerator. - */ function isUniqueName(name) { return isFileLevelUniqueName(name) && !generatedNames.has(name) && !(reservedNames && reservedNames.has(name)); } - /** - * Returns a value indicating whether a name is unique globally or within the current file. - */ function isFileLevelUniqueName(name) { return currentSourceFile ? ts.isFileLevelUniqueName(currentSourceFile, name, hasGlobalName) : true; } - /** - * Returns a value indicating whether a name is unique within a container. - */ function isUniqueLocalName(name, container) { for (var node = container; ts.isNodeDescendantOf(node, container); node = node.nextContainer) { if (node.locals) { var local = node.locals.get(ts.escapeLeadingUnderscores(name)); - // We conservatively include alias symbols to cover cases where they're emitted as locals - if (local && local.flags & (67216319 /* Value */ | 1048576 /* ExportValue */ | 2097152 /* Alias */)) { + if (local && local.flags & (67216319 | 1048576 | 2097152)) { return false; } } } return true; } - /** - * Return the next available name in the pattern _a ... _z, _0, _1, ... - * TempFlags._i or TempFlags._n may be used to express a preference for that dedicated name. - * Note that names generated by makeTempVariableName and makeUniqueName will never conflict. - */ function makeTempVariableName(flags, reservedInNestedScopes) { if (flags && !(tempFlags & flags)) { - var name = flags === 268435456 /* _i */ ? "_i" : "_n"; + var name = flags === 268435456 ? "_i" : "_n"; if (isUniqueName(name)) { tempFlags |= flags; if (reservedInNestedScopes) { @@ -80094,12 +64764,11 @@ var ts; } } while (true) { - var count = tempFlags & 268435455 /* CountMask */; + var count = tempFlags & 268435455; tempFlags++; - // Skip over 'i' and 'n' if (count !== 8 && count !== 13) { var name = count < 26 - ? "_" + String.fromCharCode(97 /* a */ + count) + ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); if (isUniqueName(name)) { if (reservedInNestedScopes) { @@ -80110,13 +64779,6 @@ var ts; } } } - /** - * Generate a name that is unique within the current file and doesn't conflict with any names - * in global scope. The name is formed by adding an '_n' suffix to the specified base name, - * where n is a positive integer. Note that names generated by makeTempVariableName and - * makeUniqueName are guaranteed to never conflict. - * If `optimistic` is set, the first instance will use 'baseName' verbatim instead of 'baseName_1' - */ function makeUniqueName(baseName, checkFn, optimistic, scoped) { if (checkFn === void 0) { checkFn = isUniqueName; } if (optimistic) { @@ -80130,8 +64792,7 @@ var ts; return baseName; } } - // Find the first unique 'name_n', where n is a positive number - if (baseName.charCodeAt(baseName.length - 1) !== 95 /* _ */) { + if (baseName.charCodeAt(baseName.length - 1) !== 95) { baseName += "_"; } var i = 1; @@ -80150,34 +64811,21 @@ var ts; } } function makeFileLevelOptmiisticUniqueName(name) { - return makeUniqueName(name, isFileLevelUniqueName, /*optimistic*/ true); + return makeUniqueName(name, isFileLevelUniqueName, true); } - /** - * Generates a unique name for a ModuleDeclaration or EnumDeclaration. - */ function generateNameForModuleOrEnum(node) { var name = getTextOfNode(node.name); - // Use module/enum name itself if it is unique, otherwise make a unique variation return isUniqueLocalName(name, node) ? name : makeUniqueName(name); } - /** - * Generates a unique name for an ImportDeclaration or ExportDeclaration. - */ function generateNameForImportOrExportDeclaration(node) { - var expr = ts.getExternalModuleName(node); // TODO: GH#18217 + var expr = ts.getExternalModuleName(node); var baseName = ts.isStringLiteral(expr) ? ts.makeIdentifierFromModuleName(expr.text) : "module"; return makeUniqueName(baseName); } - /** - * Generates a unique name for a default export. - */ function generateNameForExportDefault() { return makeUniqueName("default"); } - /** - * Generates a unique name for a class expression. - */ function generateNameForClassExpression() { return makeUniqueName("class"); } @@ -80185,95 +64833,75 @@ var ts; if (ts.isIdentifier(node.name)) { return generateNameCached(node.name); } - return makeTempVariableName(0 /* Auto */); + return makeTempVariableName(0); } - /** - * Generates a unique name from a node. - */ function generateNameForNode(node, flags) { switch (node.kind) { - case 71 /* Identifier */: - return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */)); - case 239 /* ModuleDeclaration */: - case 238 /* EnumDeclaration */: + case 71: + return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16), !!(flags & 8)); + case 239: + case 238: return generateNameForModuleOrEnum(node); - case 244 /* ImportDeclaration */: - case 250 /* ExportDeclaration */: + case 244: + case 250: return generateNameForImportOrExportDeclaration(node); - case 234 /* FunctionDeclaration */: - case 235 /* ClassDeclaration */: - case 249 /* ExportAssignment */: + case 234: + case 235: + case 249: return generateNameForExportDefault(); - case 205 /* ClassExpression */: + case 205: return generateNameForClassExpression(); - case 154 /* MethodDeclaration */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: + case 154: + case 156: + case 157: return generateNameForMethodOrAccessor(node); default: - return makeTempVariableName(0 /* Auto */); + return makeTempVariableName(0); } } - /** - * Generates a unique identifier for a node. - */ function makeName(name) { - switch (name.autoGenerateFlags & 7 /* KindMask */) { - case 1 /* Auto */: - return makeTempVariableName(0 /* Auto */, !!(name.autoGenerateFlags & 8 /* ReservedInNestedScopes */)); - case 2 /* Loop */: - return makeTempVariableName(268435456 /* _i */, !!(name.autoGenerateFlags & 8 /* ReservedInNestedScopes */)); - case 3 /* Unique */: - return makeUniqueName(ts.idText(name), (name.autoGenerateFlags & 32 /* FileLevel */) ? isFileLevelUniqueName : isUniqueName, !!(name.autoGenerateFlags & 16 /* Optimistic */), !!(name.autoGenerateFlags & 8 /* ReservedInNestedScopes */)); + switch (name.autoGenerateFlags & 7) { + case 1: + return makeTempVariableName(0, !!(name.autoGenerateFlags & 8)); + case 2: + return makeTempVariableName(268435456, !!(name.autoGenerateFlags & 8)); + case 3: + return makeUniqueName(ts.idText(name), (name.autoGenerateFlags & 32) ? isFileLevelUniqueName : isUniqueName, !!(name.autoGenerateFlags & 16), !!(name.autoGenerateFlags & 8)); } return ts.Debug.fail("Unsupported GeneratedIdentifierKind."); } - /** - * Gets the node from which a name should be generated. - */ function getNodeForGeneratedName(name) { var autoGenerateId = name.autoGenerateId; var node = name; var original = node.original; while (original) { node = original; - // if "node" is a different generated name (having a different - // "autoGenerateId"), use it and stop traversing. if (ts.isIdentifier(node) - && !!(node.autoGenerateFlags & 4 /* Node */) + && !!(node.autoGenerateFlags & 4) && node.autoGenerateId !== autoGenerateId) { break; } original = node.original; } - // otherwise, return the original node for the source; return node; } } ts.createPrinter = createPrinter; function createBracketsMap() { var brackets = []; - brackets[512 /* Braces */] = ["{", "}"]; - brackets[1024 /* Parenthesis */] = ["(", ")"]; - brackets[2048 /* AngleBrackets */] = ["<", ">"]; - brackets[4096 /* SquareBrackets */] = ["[", "]"]; + brackets[512] = ["{", "}"]; + brackets[1024] = ["(", ")"]; + brackets[2048] = ["<", ">"]; + brackets[4096] = ["[", "]"]; return brackets; } function getOpeningBracket(format) { - return brackets[format & 7680 /* BracketsMask */][0]; + return brackets[format & 7680][0]; } function getClosingBracket(format) { - return brackets[format & 7680 /* BracketsMask */][1]; + return brackets[format & 7680][1]; } - // Flags enum to track count of temp variables and a few dedicated names - var TempFlags; - (function (TempFlags) { - TempFlags[TempFlags["Auto"] = 0] = "Auto"; - TempFlags[TempFlags["CountMask"] = 268435455] = "CountMask"; - TempFlags[TempFlags["_i"] = 268435456] = "_i"; - })(TempFlags || (TempFlags = {})); })(ts || (ts = {})); -/* @internal */ var ts; (function (ts) { function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames) { @@ -80309,17 +64937,12 @@ var ts; } function createCachedFileSystemEntries(rootDir, rootDirPath) { var resultFromHost = { - files: ts.map(host.readDirectory(rootDir, /*extensions*/ undefined, /*exclude*/ undefined, /*include*/ ["*.*"]), getBaseNameOfFileName) || [], + files: ts.map(host.readDirectory(rootDir, undefined, undefined, ["*.*"]), getBaseNameOfFileName) || [], directories: host.getDirectories(rootDir) || [] }; cachedReadDirectoryResult.set(ts.ensureTrailingDirectorySeparator(rootDirPath), resultFromHost); return resultFromHost; } - /** - * If the readDirectory result was already cached, it returns that - * Otherwise gets result from host and caches it. - * The host request is done under try catch block to avoid caching incorrect result - */ function tryReadDirectory(rootDir, rootDirPath) { rootDirPath = ts.ensureTrailingDirectorySeparator(rootDirPath); var cachedResult = getCachedFileSystemEntries(rootDirPath); @@ -80330,7 +64953,6 @@ var ts; return createCachedFileSystemEntries(rootDir, rootDirPath); } catch (_e) { - // If there is exception to read directories, dont cache the result and direct the calls to host ts.Debug.assert(!cachedReadDirectoryResult.has(ts.ensureTrailingDirectorySeparator(rootDirPath))); return undefined; } @@ -80355,7 +64977,7 @@ var ts; var path = toPath(fileName); var result = getCachedFileSystemEntriesForBaseDir(path); if (result) { - updateFilesOfFileSystemEntry(result, getBaseNameOfFileName(fileName), /*fileExists*/ true); + updateFilesOfFileSystemEntry(result, getBaseNameOfFileName(fileName), true); } return host.writeFile(fileName, data, writeByteOrderMark); } @@ -80374,7 +64996,7 @@ var ts; var result = getCachedFileSystemEntriesForBaseDir(path); var baseFileName = getBaseNameOfFileName(dirPath); if (result) { - updateFileSystemEntry(result.directories, baseFileName, /*isValid*/ true); + updateFileSystemEntry(result.directories, baseFileName, true); } host.createDirectory(dirPath); } @@ -80404,8 +65026,6 @@ var ts; function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) { var existingResult = getCachedFileSystemEntries(fileOrDirectoryPath); if (existingResult) { - // Just clear the cache for now - // For now just clear the cache, since this could mean that multiple level entries might need to be re-evaluated clearCache(); return undefined; } @@ -80413,10 +65033,7 @@ var ts; if (!parentResult) { return undefined; } - // This was earlier a file (hence not in cached directory contents) - // or we never cached the directory containing it if (!host.directoryExists) { - // Since host doesnt support directory exists, clear the cache as otherwise it might not be same clearCache(); return undefined; } @@ -80426,11 +65043,9 @@ var ts; directoryExists: host.directoryExists(fileOrDirectoryPath) }; if (fsQueryResult.directoryExists || hasEntry(parentResult.directories, baseName)) { - // Folder added or removed, clear the cache instead of updating the folder and its structure clearCache(); } else { - // No need to update the directory structure, just files updateFilesOfFileSystemEntry(parentResult, baseName, fsQueryResult.fileExists); } return fsQueryResult; @@ -80455,51 +65070,31 @@ var ts; var ConfigFileProgramReloadLevel; (function (ConfigFileProgramReloadLevel) { ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["None"] = 0] = "None"; - /** Update the file name list from the disk */ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; - /** Reload completely by re-reading contents of config file from disk and updating program */ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); - /** - * Updates the existing missing file watches with the new set of missing files after new program is created - */ function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) { var missingFilePaths = program.getMissingFilePaths(); var newMissingFilePathMap = ts.arrayToSet(missingFilePaths); - // Update the missing file paths watcher ts.mutateMap(missingFileWatches, newMissingFilePathMap, { - // Watch the missing files createNewValue: createMissingFileWatch, - // Files that are no longer missing (e.g. because they are no longer required) - // should no longer be watched. onDeleteValue: ts.closeFileWatcher }); } ts.updateMissingFilePathsWatch = updateMissingFilePathsWatch; - /** - * Updates the existing wild card directory watches with the new set of wild card directories from the config file - * after new program is created because the config file was reloaded or program was created first time from the config file - * Note that there is no need to call this function when the program is updated with additional files without reloading config files, - * as wildcard directories wont change unless reloading config file - */ function updateWatchingWildcardDirectories(existingWatchedForWildcards, wildcardDirectories, watchDirectory) { ts.mutateMap(existingWatchedForWildcards, wildcardDirectories, { - // Create new watch and recursive info createNewValue: createWildcardDirectoryWatcher, - // Close existing watch thats not needed any more onDeleteValue: closeFileWatcherOf, - // Close existing watch that doesnt match in the flags onExistingValue: updateWildcardDirectoryWatcher }); function createWildcardDirectoryWatcher(directory, flags) { - // Create new watch and recursive info return { watcher: watchDirectory(directory, flags), flags: flags }; } function updateWildcardDirectoryWatcher(existingWatcher, flags, directory) { - // Watcher needs to be updated if the recursive flags dont match if (existingWatcher.flags === flags) { return; } @@ -80531,13 +65126,13 @@ var ts; var createDirectoryWatcher = getCreateFileWatcher(watchLogLevel, watchDirectory); return { watchFile: function (host, file, callback, pollingInterval, detailInfo1, detailInfo2) { - return createFileWatcher(host, file, callback, pollingInterval, /*passThrough*/ undefined, detailInfo1, detailInfo2, watchFile, log, "FileWatcher", getDetailWatchInfo); + return createFileWatcher(host, file, callback, pollingInterval, undefined, detailInfo1, detailInfo2, watchFile, log, "FileWatcher", getDetailWatchInfo); }, watchFilePath: function (host, file, callback, pollingInterval, path, detailInfo1, detailInfo2) { return createFilePathWatcher(host, file, callback, pollingInterval, path, detailInfo1, detailInfo2, watchFile, log, "FileWatcher", getDetailWatchInfo); }, watchDirectory: function (host, directory, callback, flags, detailInfo1, detailInfo2) { - return createDirectoryWatcher(host, directory, callback, flags, /*passThrough*/ undefined, detailInfo1, detailInfo2, watchDirectory, log, "DirectoryWatcher", getDetailWatchInfo); + return createDirectoryWatcher(host, directory, callback, flags, undefined, detailInfo1, detailInfo2, watchDirectory, log, "DirectoryWatcher", getDetailWatchInfo); } }; function watchFilePath(host, file, callback, pollingInterval, path) { @@ -80548,7 +65143,7 @@ var ts; return host.watchFile(file, callback, pollingInterval); } function watchDirectory(host, directory, callback, flags) { - return host.watchDirectory(directory, callback, (flags & 1 /* Recursive */) !== 0); + return host.watchDirectory(directory, callback, (flags & 1) !== 0); } function getCreateFileWatcher(watchLogLevel, addWatch) { switch (watchLogLevel) { @@ -80605,15 +65200,12 @@ var ts; return ts.normalizePath(referencedFileName); } ts.resolveTripleslashReference = resolveTripleslashReference; - /* @internal */ function computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName) { var commonPathComponents; var failed = ts.forEach(fileNames, function (sourceFile) { - // Each file contributes into common source file path var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile, currentDirectory); - sourcePathComponents.pop(); // The base file name is not part of the common directory path + sourcePathComponents.pop(); if (!commonPathComponents) { - // first file commonPathComponents = sourcePathComponents; return; } @@ -80621,24 +65213,20 @@ var ts; for (var i = 0; i < n; i++) { if (getCanonicalFileName(commonPathComponents[i]) !== getCanonicalFileName(sourcePathComponents[i])) { if (i === 0) { - // Failed to find any common path component return true; } - // New common path found that is 0 -> i-1 commonPathComponents.length = i; break; } } - // If the sourcePathComponents was shorter than the commonPathComponents, truncate to the sourcePathComponents if (sourcePathComponents.length < commonPathComponents.length) { commonPathComponents.length = sourcePathComponents.length; } }); - // A common path can not be found when paths span multiple drives on windows, for example if (failed) { return ""; } - if (!commonPathComponents) { // Can happen when all input files are .d.ts files + if (!commonPathComponents) { return currentDirectory; } return ts.getPathFromPathComponents(commonPathComponents); @@ -80647,8 +65235,6 @@ var ts; function createCompilerHost(options, setParentNodes) { var existingDirectories = ts.createMap(); function getCanonicalFileName(fileName) { - // if underlying system can distinguish between two files whose names differs only in cases then file name already in canonical form. - // otherwise use toLowerCase as a canonical form. return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } function getSourceFile(fileName, languageVersion, onError) { @@ -80689,11 +65275,10 @@ var ts; if (!outputFingerprints) { outputFingerprints = ts.createMap(); } - var hash = ts.sys.createHash(data); // TODO: GH#18217 - var mtimeBefore = ts.sys.getModifiedTime(fileName); // TODO: GH#18217 + var hash = ts.sys.createHash(data); + var mtimeBefore = ts.sys.getModifiedTime(fileName); if (mtimeBefore) { var fingerprint = outputFingerprints.get(fileName); - // If output has not been changed, and the file has no external modification if (fingerprint && fingerprint.byteOrderMark === writeByteOrderMark && fingerprint.hash === hash && @@ -80702,7 +65287,7 @@ var ts; } } ts.sys.writeFile(fileName, data, writeByteOrderMark); - var mtimeAfter = ts.sys.getModifiedTime(fileName); // TODO: GH#18217 + var mtimeAfter = ts.sys.getModifiedTime(fileName); outputFingerprints.set(fileName, { hash: hash, byteOrderMark: writeByteOrderMark, @@ -80776,7 +65361,7 @@ var ts; function formatDiagnostic(diagnostic, host) { var errorMessage = ts.diagnosticCategoryName(diagnostic) + " TS" + diagnostic.code + ": " + flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine()) + host.getNewLine(); if (diagnostic.file) { - var _a = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start), line = _a.line, character = _a.character; // TODO: GH#18217 + var _a = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start), line = _a.line, character = _a.character; var fileName = diagnostic.file.fileName; var relativeFileName = ts.convertToRelativePath(fileName, host.getCurrentDirectory(), function (fileName) { return host.getCanonicalFileName(fileName); }); return relativeFileName + "(" + (line + 1) + "," + (character + 1) + "): " + errorMessage; @@ -80784,7 +65369,6 @@ var ts; return errorMessage; } ts.formatDiagnostic = formatDiagnostic; - /** @internal */ var ForegroundColorEscapeSequences; (function (ForegroundColorEscapeSequences) { ForegroundColorEscapeSequences["Grey"] = "\u001B[90m"; @@ -80805,7 +65389,6 @@ var ts; case ts.DiagnosticCategory.Message: return ForegroundColorEscapeSequences.Blue; } } - /** @internal */ function formatColorAndReset(text, formatStyle) { return formatStyle + text + resetEscapeSequence; } @@ -80823,7 +65406,7 @@ var ts; var context = ""; if (diagnostic.file) { var start = diagnostic.start, length_4 = diagnostic.length, file = diagnostic.file; - var _a = ts.getLineAndCharacterOfPosition(file, start), firstLine = _a.line, firstLineChar = _a.character; // TODO: GH#18217 + var _a = ts.getLineAndCharacterOfPosition(file, start), firstLine = _a.line, firstLineChar = _a.character; var _b = ts.getLineAndCharacterOfPosition(file, start + length_4), lastLine = _b.line, lastLineChar = _b.character; var lastLineInFile = ts.getLineAndCharacterOfPosition(file, file.text.length).line; var relativeFileName = host ? ts.convertToRelativePath(file.fileName, host.getCurrentDirectory(), function (fileName) { return host.getCanonicalFileName(fileName); }) : file.fileName; @@ -80834,8 +65417,6 @@ var ts; } for (var i = firstLine; i <= lastLine; i++) { context += host.getNewLine(); - // If the error spans over 5 lines, we'll only show the first 2 and last 2 lines, - // so we'll skip ahead to the second-to-last line. if (hasMoreThanFiveLines && firstLine + 1 < i && i < lastLine - 1) { context += formatColorAndReset(padLeft(ellipsis, gutterWidth), gutterStyleSequence) + gutterSeparator + host.getNewLine(); i = lastLine - 1; @@ -80843,17 +65424,13 @@ var ts; var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0); var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length; var lineContent = file.text.slice(lineStart, lineEnd); - lineContent = lineContent.replace(/\s+$/g, ""); // trim from end - lineContent = lineContent.replace("\t", " "); // convert tabs to single spaces - // Output the gutter and the actual contents of the line. + lineContent = lineContent.replace(/\s+$/g, ""); + lineContent = lineContent.replace("\t", " "); context += formatColorAndReset(padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator; context += lineContent + host.getNewLine(); - // Output the gutter and the error span for the line using tildes. context += formatColorAndReset(padLeft("", gutterWidth), gutterStyleSequence) + gutterSeparator; context += ForegroundColorEscapeSequences.Red; if (i === firstLine) { - // If we're on the last line, then limit it to the last character of the last line. - // Otherwise, we'll just squiggle the rest of the line, giving 'slice' no end position. var lastCharForLine = i === lastLine ? lastLineChar : undefined; context += lineContent.slice(0, firstLineChar).replace(/\S/g, " "); context += lineContent.slice(firstLineChar, lastCharForLine).replace(/./g, "~"); @@ -80862,7 +65439,6 @@ var ts; context += lineContent.slice(0, lastLineChar).replace(/./g, "~"); } else { - // Squiggle the entire line. context += lineContent.replace(/./g, "~"); } context += resetEscapeSequence; @@ -80928,34 +65504,23 @@ var ts; } return resolutions; } - /** - * Determines if program structure is upto date or needs to be recreated - */ - /* @internal */ function isProgramUptoDate(program, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames) { - // If we haven't created a program yet or have changed automatic type directives, then it is not up-to-date if (!program || hasChangedAutomaticTypeDirectiveNames) { return false; } - // If number of files in the program do not match, it is not up-to-date if (program.getRootFileNames().length !== rootFileNames.length) { return false; } - // If any file is not up-to-date, then the whole program is not up-to-date if (program.getSourceFiles().some(sourceFileNotUptoDate)) { return false; } - // If any of the missing file paths are now created if (program.getMissingFilePaths().some(fileExists)) { return false; } var currentOptions = program.getCompilerOptions(); - // If the compilation settings do no match, then the program is not up-to-date if (!ts.compareDataObjects(currentOptions, newOptions)) { return false; } - // If everything matches but the text of config file is changed, - // error locations can change for program options, so update the program if (currentOptions.configFile && newOptions.configFile) { return currentOptions.configFile.text === newOptions.configFile.text; } @@ -80971,12 +65536,7 @@ var ts; configFileParseResult.errors; } ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics; - /** - * Determined if source file needs to be re-created even if its text hasn't changed - */ function shouldProgramCreateNewSourceFiles(program, newOptions) { - // If any of these options change, we can't reuse old source file even if version match - // The change in options like these could result in change in syntax tree change var oldOptions = program && program.getCompilerOptions(); return oldOptions && (oldOptions.target !== newOptions.target || oldOptions.module !== newOptions.module || @@ -80998,7 +65558,7 @@ var ts; }; } function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) { - var createProgramOptions = ts.isArray(rootNamesOrOptions) ? createCreateProgramOptions(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) : rootNamesOrOptions; // TODO: GH#18217 + var createProgramOptions = ts.isArray(rootNamesOrOptions) ? createCreateProgramOptions(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) : rootNamesOrOptions; var rootNames = createProgramOptions.rootNames, options = createProgramOptions.options, configFileParsingDiagnostics = createProgramOptions.configFileParsingDiagnostics, projectReferences = createProgramOptions.projectReferences; var oldProgram = createProgramOptions.oldProgram; var program; @@ -81014,19 +65574,9 @@ var ts; var cachedDeclarationDiagnosticsForFile = {}; var resolvedTypeReferenceDirectives = ts.createMap(); var fileProcessingDiagnostics = ts.createDiagnosticCollection(); - // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. - // This works as imported modules are discovered recursively in a depth first manner, specifically: - // - For each root file, findSourceFile is called. - // - This calls processImportedModules for each module imported in the source file. - // - This calls resolveModuleNames, and then calls findSourceFile for each resolved module. - // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. - // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. var maxNodeModuleJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 0; var currentNodeModulesDepth = 0; - // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track - // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. var modulesWithElidedImports = ts.createMap(); - // Track source files that are source files found by searching under node_modules, as these shouldn't be compiled. var sourceFilesFoundSearchingNodeModules = ts.createMap(); ts.performance.mark("beforeProgram"); var host = createProgramOptions.host || createCompilerHost(options); @@ -81037,7 +65587,6 @@ var ts; var programDiagnostics = ts.createDiagnosticCollection(); var currentDirectory = host.getCurrentDirectory(); var supportedExtensions = ts.getSupportedExtensions(options); - // Map storing if there is emit blocking diagnostics for given input var hasEmitBlockingDiagnostics = ts.createMap(); var _compilerOptionsObjectLiteralSyntax; var _referencesArrayLiteralSyntax; @@ -81046,7 +65595,6 @@ var ts; var hasInvalidatedResolution = host.hasInvalidatedResolution || ts.returnFalse; if (host.resolveModuleNames) { resolveModuleNamesWorker = function (moduleNames, containingFile, reusedNames) { return host.resolveModuleNames(ts.Debug.assertEachDefined(moduleNames), containingFile, reusedNames).map(function (resolved) { - // An older host may have omitted extension, in which case we should infer it from the file extension of resolvedFileName. if (!resolved || resolved.extension !== undefined) { return resolved; } @@ -81057,7 +65605,7 @@ var ts; } else { moduleResolutionCache = ts.createModuleResolutionCache(currentDirectory, function (x) { return host.getCanonicalFileName(x); }); - var loader_1 = function (moduleName, containingFile) { return ts.resolveModuleName(moduleName, containingFile, options, host, moduleResolutionCache).resolvedModule; }; // TODO: GH#18217 + var loader_1 = function (moduleName, containingFile) { return ts.resolveModuleName(moduleName, containingFile, options, host, moduleResolutionCache).resolvedModule; }; resolveModuleNamesWorker = function (moduleNames, containingFile) { return loadWithLocalCache(ts.Debug.assertEachDefined(moduleNames), containingFile, loader_1); }; } var resolveTypeReferenceDirectiveNamesWorker; @@ -81065,27 +65613,20 @@ var ts; resolveTypeReferenceDirectiveNamesWorker = function (typeDirectiveNames, containingFile) { return host.resolveTypeReferenceDirectives(ts.Debug.assertEachDefined(typeDirectiveNames), containingFile); }; } else { - var loader_2 = function (typesRef, containingFile) { return ts.resolveTypeReferenceDirective(typesRef, containingFile, options, host).resolvedTypeReferenceDirective; }; // TODO: GH#18217 + var loader_2 = function (typesRef, containingFile) { return ts.resolveTypeReferenceDirective(typesRef, containingFile, options, host).resolvedTypeReferenceDirective; }; resolveTypeReferenceDirectiveNamesWorker = function (typeReferenceDirectiveNames, containingFile) { return loadWithLocalCache(ts.Debug.assertEachDefined(typeReferenceDirectiveNames), containingFile, loader_2); }; } - // Map from a stringified PackageId to the source file with that id. - // Only one source file may have a given packageId. Others become redirects (see createRedirectSourceFile). - // `packageIdToSourceFile` is only used while building the program, while `sourceFileToPackageName` and `isSourceFileTargetOfRedirect` are kept around. var packageIdToSourceFile = ts.createMap(); - // Maps from a SourceFile's `.path` to the name of the package it was imported with. var sourceFileToPackageName = ts.createMap(); var redirectTargetsSet = ts.createMap(); var filesByName = ts.createMap(); var missingFilePaths; - // stores 'filename -> file association' ignoring case - // used to track cases when two file names differ only in casing var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createMap() : undefined; - // A parallel array to projectReferences storing the results of reading in the referenced tsconfig files var resolvedProjectReferences = projectReferences ? [] : undefined; var projectReferenceRedirects = ts.createMap(); var shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options); var structuralIsReused = tryReuseStructureFromOldProgram(); - if (structuralIsReused !== 2 /* Completely */) { + if (structuralIsReused !== 2) { processingDefaultLibFiles = []; processingOtherFiles = []; if (projectReferences) { @@ -81096,17 +65637,15 @@ var ts; if (parsedRef) { if (parsedRef.commandLine.options.outFile) { var dtsOutfile = ts.changeExtension(parsedRef.commandLine.options.outFile, ".d.ts"); - processSourceFile(dtsOutfile, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined); + processSourceFile(dtsOutfile, false, false, undefined); } addProjectReferenceRedirects(parsedRef.commandLine, projectReferenceRedirects); } } } - ts.forEach(rootNames, function (name) { return processRootFile(name, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false); }); - // load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders + ts.forEach(rootNames, function (name) { return processRootFile(name, false, false); }); var typeReferences = ts.getAutomaticTypeDirectiveNames(options, host); if (typeReferences.length) { - // This containingFilename needs to match with the one used in managed-side var containingDirectory = options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : host.getCurrentDirectory(); var containingFilename = ts.combinePaths(containingDirectory, "__inferred type names__.ts"); var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); @@ -81114,20 +65653,14 @@ var ts; processTypeReferenceDirective(typeReferences[i], resolutions[i]); } } - // Do not process the default library if: - // - The '--noLib' flag is used. - // - A 'no-default-lib' reference comment is encountered in - // processing the root files. if (!skipDefaultLib) { - // If '--lib' is not specified, include default library file according to '--target' - // otherwise, using options specified in '--lib' instead of '--target' default library file var defaultLibraryFileName = getDefaultLibraryFileName(); if (!options.lib && defaultLibraryFileName) { - processRootFile(defaultLibraryFileName, /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ false); + processRootFile(defaultLibraryFileName, true, false); } else { ts.forEach(options.lib, function (libFileName) { - processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ false); + processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), true, false); }); } } @@ -81137,8 +65670,6 @@ var ts; processingOtherFiles = undefined; } ts.Debug.assert(!!missingFilePaths); - // Release any files we have acquired in the old program but are - // not part of the new program. if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { @@ -81148,7 +65679,6 @@ var ts; } } } - // unconditionally set oldProgram to undefined to prevent it from being captured in closure oldProgram = undefined; program = { getRootFileNames: function () { return rootNames; }, @@ -81195,7 +65725,7 @@ var ts; return ts.compareValues(getDefaultLibFilePriority(a), getDefaultLibFilePriority(b)); } function getDefaultLibFilePriority(a) { - if (ts.containsPath(defaultLibraryPath, a.fileName, /*ignoreCase*/ false)) { + if (ts.containsPath(defaultLibraryPath, a.fileName, false)) { var basename = ts.getBaseFileName(a.fileName); if (basename === "lib.d.ts" || basename === "lib.es6.d.ts") return 0; @@ -81216,21 +65746,16 @@ var ts; if (commonSourceDirectory === undefined) { var emittedFiles = ts.filter(files, function (file) { return ts.sourceFileMayBeEmitted(file, options, isSourceFileFromExternalLibrary); }); if (options.rootDir && checkSourceFilesBelongToPath(emittedFiles, options.rootDir)) { - // If a rootDir is specified use it as the commonSourceDirectory commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, currentDirectory); } else if (options.composite) { - // Project compilations never infer their root from the input source paths - commonSourceDirectory = ts.getDirectoryPath(ts.normalizeSlashes(options.configFilePath)); // TODO: GH#18217 + commonSourceDirectory = ts.getDirectoryPath(ts.normalizeSlashes(options.configFilePath)); checkSourceFilesBelongToPath(emittedFiles, commonSourceDirectory); } else { commonSourceDirectory = computeCommonSourceDirectory(emittedFiles); } if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) { - // Make sure directory path ends with directory separator so this string can directly - // used to replace with "" to get the relative path of the source file and the relative path doesn't - // start with / making it rooted path commonSourceDirectory += ts.directorySeparator; } } @@ -81238,7 +65763,6 @@ var ts; } function getClassifiableNames() { if (!classifiableNames) { - // Initialize a checker so that all our files are bound. getTypeChecker(); classifiableNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { @@ -81249,21 +65773,11 @@ var ts; return classifiableNames; } function resolveModuleNamesReusingOldState(moduleNames, containingFile, file, oldProgramState) { - if (structuralIsReused === 0 /* Not */ && !file.ambientModuleNames.length) { - // If the old program state does not permit reusing resolutions and `file` does not contain locally defined ambient modules, - // the best we can do is fallback to the default logic. + if (structuralIsReused === 0 && !file.ambientModuleNames.length) { return resolveModuleNamesWorker(moduleNames, containingFile); } var oldSourceFile = oldProgramState.program && oldProgramState.program.getSourceFile(containingFile); if (oldSourceFile !== file && file.resolvedModules) { - // `file` was created for the new program. - // - // We only set `file.resolvedModules` via work from the current function, - // so it is defined iff we already called the current function on `file`. - // That call happened no later than the creation of the `file` object, - // which per above occurred during the current program creation. - // Since we assume the filesystem does not change during program creation, - // it is safe to reuse resolutions from the earlier call. var result_4 = []; for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) { var moduleName = moduleNames_1[_i]; @@ -81272,28 +65786,12 @@ var ts; } return result_4; } - // At this point, we know at least one of the following hold: - // - file has local declarations for ambient modules - // - old program state is available - // With this information, we can infer some module resolutions without performing resolution. - /** An ordered list of module names for which we cannot recover the resolution. */ var unknownModuleNames; - /** - * The indexing of elements in this list matches that of `moduleNames`. - * - * Before combining results, result[i] is in one of the following states: - * * undefined: needs to be recomputed, - * * predictedToResolveToAmbientModuleMarker: known to be an ambient module. - * Needs to be reset to undefined before returning, - * * ResolvedModuleFull instance: can be reused. - */ var result; var reusedNames; - /** A transient placeholder used to mark predicted resolution in the result list. */ var predictedToResolveToAmbientModuleMarker = {}; for (var i = 0; i < moduleNames.length; i++) { var moduleName = moduleNames[i]; - // If the source file is unchanged and doesnt have invalidated resolution, reuse the module resolutions if (file === oldSourceFile && !hasInvalidatedResolution(oldSourceFile.path)) { var oldResolvedModule = oldSourceFile && oldSourceFile.resolvedModules.get(moduleName); if (oldResolvedModule) { @@ -81305,10 +65803,6 @@ var ts; continue; } } - // We know moduleName resolves to an ambient module provided that moduleName: - // - is in the list of ambient modules locally declared in the current source file. - // - resolved to an ambient module in the old program whose declaration is in an unmodified file - // (so the same module declaration will land in the new program) var resolvesToAmbientModuleInNonModifiedFile = false; if (ts.contains(file.ambientModuleNames, moduleName)) { resolvesToAmbientModuleInNonModifiedFile = true; @@ -81323,26 +65817,21 @@ var ts; (result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker; } else { - // Resolution failed in the old program, or resolved to an ambient module for which we can't reuse the result. (unknownModuleNames || (unknownModuleNames = [])).push(moduleName); } } var resolutions = unknownModuleNames && unknownModuleNames.length ? resolveModuleNamesWorker(unknownModuleNames, containingFile, reusedNames) : ts.emptyArray; - // Combine results of resolutions and predicted results if (!result) { - // There were no unresolved/ambient resolutions. ts.Debug.assert(resolutions.length === moduleNames.length); return resolutions; } var j = 0; for (var i = 0; i < result.length; i++) { if (result[i]) { - // `result[i]` is either a `ResolvedModuleFull` or a marker. - // If it is the former, we can leave it as is. if (result[i] === predictedToResolveToAmbientModuleMarker) { - result[i] = undefined; // TODO: GH#18217 + result[i] = undefined; } } else { @@ -81352,23 +65841,16 @@ var ts; } ts.Debug.assert(j === resolutions.length); return result; - // If we change our policy of rechecking failed lookups on each program create, - // we should adjust the value returned here. function moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, oldProgramState) { - var resolutionToFile = ts.getResolvedModule(oldProgramState.oldSourceFile, moduleName); // TODO: GH#18217 + var resolutionToFile = ts.getResolvedModule(oldProgramState.oldSourceFile, moduleName); var resolvedFile = resolutionToFile && oldProgramState.program && oldProgramState.program.getSourceFile(resolutionToFile.resolvedFileName); if (resolutionToFile && resolvedFile && !resolvedFile.externalModuleIndicator) { - // In the old program, we resolved to an ambient module that was in the same - // place as we expected to find an actual module file. - // We actually need to return 'false' here even though this seems like a 'true' case - // because the normal module resolution algorithm will find this anyway. return false; } var ambientModule = oldProgramState.program && oldProgramState.program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(moduleName); if (!(ambientModule && ambientModule.declarations)) { return false; } - // at least one of declarations should come from non-modified source file var firstUnmodifiedFile = ts.forEach(ambientModule.declarations, function (d) { var f = ts.getSourceFileOfNode(d); return !ts.contains(oldProgramState.modifiedFilePaths, f.path) && f; @@ -81384,93 +65866,74 @@ var ts; } function tryReuseStructureFromOldProgram() { if (!oldProgram) { - return 0 /* Not */; + return 0; } - // check properties that can affect structure of the program or module resolution strategy - // if any of these properties has changed - structure cannot be reused var oldOptions = oldProgram.getCompilerOptions(); if (ts.changesAffectModuleResolution(oldOptions, options)) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } - ts.Debug.assert(!(oldProgram.structureIsReused & (2 /* Completely */ | 1 /* SafeModules */))); - // there is an old program, check if we can reuse its structure + ts.Debug.assert(!(oldProgram.structureIsReused & (2 | 1))); var oldRootNames = oldProgram.getRootFileNames(); if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } - // Check if any referenced project tsconfig files are different var oldRefs = oldProgram.getProjectReferences(); if (projectReferences) { if (!oldRefs) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } for (var i = 0; i < projectReferences.length; i++) { var oldRef = oldRefs[i]; if (oldRef) { var newRef = parseProjectReferenceConfigFile(projectReferences[i]); if (!newRef || newRef.sourceFile !== oldRef.sourceFile) { - // Resolved project reference has gone missing or changed - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } } else { - // A previously-unresolved reference may be resolved now if (parseProjectReferenceConfigFile(projectReferences[i]) !== undefined) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } } } } else { if (oldRefs) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } } - // check if program source files has changed in the way that can affect structure of the program var newSourceFiles = []; var filePaths = []; var modifiedSourceFiles = []; - oldProgram.structureIsReused = 2 /* Completely */; - // If the missing file paths are now present, it can change the progam structure, - // and hence cant reuse the structure. - // This is same as how we dont reuse the structure if one of the file from old program is now missing + oldProgram.structureIsReused = 2; if (oldProgram.getMissingFilePaths().some(function (missingFilePath) { return host.fileExists(missingFilePath); })) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } var oldSourceFiles = oldProgram.getSourceFiles(); - var SeenPackageName; - (function (SeenPackageName) { - SeenPackageName[SeenPackageName["Exists"] = 0] = "Exists"; - SeenPackageName[SeenPackageName["Modified"] = 1] = "Modified"; - })(SeenPackageName || (SeenPackageName = {})); var seenPackageNames = ts.createMap(); for (var _i = 0, oldSourceFiles_2 = oldSourceFiles; _i < oldSourceFiles_2.length; _i++) { var oldSourceFile = oldSourceFiles_2[_i]; var newSourceFile = host.getSourceFileByPath - ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.resolvedPath || oldSourceFile.path, options.target, /*onError*/ undefined, shouldCreateNewSourceFile) - : host.getSourceFile(oldSourceFile.fileName, options.target, /*onError*/ undefined, shouldCreateNewSourceFile); // TODO: GH#18217 + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.resolvedPath || oldSourceFile.path, options.target, undefined, shouldCreateNewSourceFile) + : host.getSourceFile(oldSourceFile.fileName, options.target, undefined, shouldCreateNewSourceFile); if (!newSourceFile) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } ts.Debug.assert(!newSourceFile.redirectInfo, "Host should not return a redirect source file from `getSourceFile`"); var fileChanged = void 0; if (oldSourceFile.redirectInfo) { - // We got `newSourceFile` by path, so it is actually for the unredirected file. - // This lets us know if the unredirected file has changed. If it has we should break the redirect. if (newSourceFile !== oldSourceFile.redirectInfo.unredirected) { - // Underlying file has changed. Might not redirect anymore. Must rebuild program. - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } fileChanged = false; - newSourceFile = oldSourceFile; // Use the redirect. + newSourceFile = oldSourceFile; } else if (oldProgram.redirectTargetsSet.has(oldSourceFile.path)) { - // If a redirected-to source file changes, the redirect may be broken. if (newSourceFile !== oldSourceFile) { - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } fileChanged = false; } @@ -81481,66 +65944,48 @@ var ts; filePaths.push(newSourceFile.path); var packageName = oldProgram.sourceFileToPackageName.get(oldSourceFile.path); if (packageName !== undefined) { - // If there are 2 different source files for the same package name and at least one of them changes, - // they might become redirects. So we must rebuild the program. var prevKind = seenPackageNames.get(packageName); - var newKind = fileChanged ? 1 /* Modified */ : 0 /* Exists */; - if ((prevKind !== undefined && newKind === 1 /* Modified */) || prevKind === 1 /* Modified */) { - return oldProgram.structureIsReused = 0 /* Not */; + var newKind = fileChanged ? 1 : 0; + if ((prevKind !== undefined && newKind === 1) || prevKind === 1) { + return oldProgram.structureIsReused = 0; } seenPackageNames.set(packageName, newKind); } if (fileChanged) { - // The `newSourceFile` object was created for the new program. if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) { - // 'lib' references has changed. Matches behavior in changesAffectModuleResolution - return oldProgram.structureIsReused = 0 /* Not */; + return oldProgram.structureIsReused = 0; } if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) { - // value of no-default-lib has changed - // this will affect if default library is injected into the list of files - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; } - // check tripleslash references if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) { - // tripleslash references has changed - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; } - // check imports and module augmentations collectExternalModuleReferences(newSourceFile); if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) { - // imports has changed - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; } if (!ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) { - // moduleAugmentations has changed - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; } - if ((oldSourceFile.flags & 1572864 /* PermanentlySetIncrementalFlags */) !== (newSourceFile.flags & 1572864 /* PermanentlySetIncrementalFlags */)) { - // dynamicImport has changed - oldProgram.structureIsReused = 1 /* SafeModules */; + if ((oldSourceFile.flags & 1572864) !== (newSourceFile.flags & 1572864)) { + oldProgram.structureIsReused = 1; } if (!ts.arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) { - // 'types' references has changed - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; } - // tentatively approve the file modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile }); } else if (hasInvalidatedResolution(oldSourceFile.path)) { - // 'module/types' references could have changed - oldProgram.structureIsReused = 1 /* SafeModules */; - // add file to the modified list so that we will resolve it later + oldProgram.structureIsReused = 1; modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile }); } - // if file has passed all checks it should be safe to reuse it newSourceFiles.push(newSourceFile); } - if (oldProgram.structureIsReused !== 2 /* Completely */) { + if (oldProgram.structureIsReused !== 2) { return oldProgram.structureIsReused; } modifiedFilePaths = modifiedSourceFiles.map(function (f) { return f.newFile.path; }); - // try to verify results of module resolution for (var _a = 0, modifiedSourceFiles_1 = modifiedSourceFiles; _a < modifiedSourceFiles_1.length; _a++) { var _b = modifiedSourceFiles_1[_a], oldSourceFile = _b.oldFile, newSourceFile = _b.newFile; var newSourceFilePath = ts.getNormalizedAbsolutePath(newSourceFile.fileName, currentDirectory); @@ -81548,10 +65993,9 @@ var ts; var moduleNames = getModuleNames(newSourceFile); var oldProgramState = { program: oldProgram, oldSourceFile: oldSourceFile, modifiedFilePaths: modifiedFilePaths }; var resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFilePath, newSourceFile, oldProgramState); - // ensure that module resolution results are still correct var resolutionsChanged = ts.hasChangesInResolutions(moduleNames, resolutions, oldSourceFile.resolvedModules, ts.moduleResolutionIsEqualTo); if (resolutionsChanged) { - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; newSourceFile.resolvedModules = ts.zipToMap(moduleNames, resolutions); } else { @@ -81561,10 +66005,9 @@ var ts; if (resolveTypeReferenceDirectiveNamesWorker) { var typesReferenceDirectives = ts.map(newSourceFile.typeReferenceDirectives, function (x) { return x.fileName; }); var resolutions = resolveTypeReferenceDirectiveNamesWorker(typesReferenceDirectives, newSourceFilePath); - // ensure that types resolutions are still correct var resolutionsChanged = ts.hasChangesInResolutions(typesReferenceDirectives, resolutions, oldSourceFile.resolvedTypeReferenceDirectiveNames, ts.typeDirectiveIsEqualTo); if (resolutionsChanged) { - oldProgram.structureIsReused = 1 /* SafeModules */; + oldProgram.structureIsReused = 1; newSourceFile.resolvedTypeReferenceDirectiveNames = ts.zipToMap(typesReferenceDirectives, resolutions); } else { @@ -81572,17 +66015,15 @@ var ts; } } } - if (oldProgram.structureIsReused !== 2 /* Completely */) { + if (oldProgram.structureIsReused !== 2) { return oldProgram.structureIsReused; } if (host.hasChangedAutomaticTypeDirectiveNames) { - return oldProgram.structureIsReused = 1 /* SafeModules */; + return oldProgram.structureIsReused = 1; } missingFilePaths = oldProgram.getMissingFilePaths(); - // update fileName -> file mapping for (var i = 0; i < newSourceFiles.length; i++) { filesByName.set(filePaths[i], newSourceFiles[i]); - // Set the file as found during node modules search if it was found that way in old progra, if (oldProgram.isSourceFileFromExternalLibrary(oldProgram.getSourceFileByPath(filePaths[i]))) { sourceFilesFoundSearchingNodeModules.set(filePaths[i], true); } @@ -81596,7 +66037,7 @@ var ts; resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); sourceFileToPackageName = oldProgram.sourceFileToPackageName; redirectTargetsSet = oldProgram.redirectTargetsSet; - return oldProgram.structureIsReused = 2 /* Completely */; + return oldProgram.structureIsReused = 2; } function getEmitHost(writeFileCallback) { return __assign({ getPrependNodes: getPrependNodes, @@ -81616,12 +66057,11 @@ var ts; var ref = projectReferences[i]; var resolvedRefOpts = resolvedProjectReferences[i].commandLine; if (ref.prepend && resolvedRefOpts && resolvedRefOpts.options) { - // Upstream project didn't have outFile set -- skip (error will have been issued earlier) if (!resolvedRefOpts.options.outFile) continue; var dtsFilename = ts.changeExtension(resolvedRefOpts.options.outFile, ".d.ts"); var js = host.readFile(resolvedRefOpts.options.outFile) || "/* Input file " + resolvedRefOpts.options.outFile + " was missing */\r\n"; - var jsMap = host.readFile(resolvedRefOpts.options.outFile + ".map"); // TODO: try to read sourceMappingUrl comment from the js file + var jsMap = host.readFile(resolvedRefOpts.options.outFile + ".map"); var dts = host.readFile(dtsFilename) || "/* Input file " + dtsFilename + " was missing */\r\n"; var dtsMap = host.readFile(dtsFilename + ".map"); var node = ts.createInputFiles(js, dts, jsMap, dtsMap); @@ -81640,8 +66080,6 @@ var ts; if (!options.noLib) { return false; } - // If '--lib' is not specified, include default library file according to '--target' - // otherwise, using options specified in '--lib' instead of '--target' default library file var equalityComparer = host.useCaseSensitiveFileNames() ? ts.equateStringsCaseSensitive : ts.equateStringsCaseInsensitive; if (!options.lib) { return equalityComparer(file.fileName, getDefaultLibraryFileName()); @@ -81651,13 +66089,13 @@ var ts; } } function getDiagnosticsProducingTypeChecker() { - return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, /*produceDiagnostics:*/ true)); + return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true)); } function dropDiagnosticsProducingTypeChecker() { diagnosticsProducingTypeChecker = undefined; } function getTypeChecker() { - return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, /*produceDiagnostics:*/ false)); + return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false)); } function emit(sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers) { return runWithCancellationToken(function () { return emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers); }); @@ -81671,13 +66109,10 @@ var ts; if (options.noEmit) { return { diagnostics: declarationDiagnostics, sourceMaps: undefined, emittedFiles: undefined, emitSkipped: true }; } - // If the noEmitOnError flag is set, then check if we have any errors so far. If so, - // immediately bail out. Note that we pass 'undefined' for 'sourceFile' so that we - // get any preEmit diagnostics, not just the ones if (options.noEmitOnError) { var diagnostics = program.getOptionsDiagnostics(cancellationToken).concat(program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken)); if (diagnostics.length === 0 && program.getCompilerOptions().declaration) { - declarationDiagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken); + declarationDiagnostics = program.getDeclarationDiagnostics(undefined, cancellationToken); } if (diagnostics.length > 0 || declarationDiagnostics.length > 0) { return { @@ -81689,19 +66124,10 @@ var ts; } } } - // Create the emit resolver outside of the "emitTime" tracking code below. That way - // any cost associated with it (like type checking) are appropriate associated with - // the type-checking counter. - // - // If the -out option is specified, we should not pass the source file to getEmitResolver. - // This is because in the -out scenario all files need to be emitted, and therefore all - // files need to be type checked. And the way to specify that all files need to be type - // checked is to not pass the file to getEmitResolver. var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver((options.outFile || options.out) ? undefined : sourceFile, cancellationToken); ts.performance.mark("beforeEmit"); var transformers = emitOnlyDtsFiles ? [] : ts.getTransformers(options, customTransformers); - var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile, // TODO: GH#18217 - emitOnlyDtsFiles, transformers, customTransformers && customTransformers.afterDeclarations); + var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile, emitOnlyDtsFiles, transformers, customTransformers && customTransformers.afterDeclarations); ts.performance.mark("afterEmit"); ts.performance.measure("Emit", "beforeEmit", "afterEmit"); return emitResult; @@ -81731,7 +66157,6 @@ var ts; } function getDeclarationDiagnostics(sourceFile, cancellationToken) { var options = program.getCompilerOptions(); - // collect diagnostics from the program only once if either no source file was specified or out/outFile is set (bundled emit) if (!sourceFile || options.out || options.outFile) { return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); } @@ -81740,8 +66165,6 @@ var ts; } } function getSyntacticDiagnosticsForFile(sourceFile) { - // For JavaScript files, we report semantic errors for using TypeScript-only - // constructs from within a JavaScript file as syntactic errors. if (ts.isSourceFileJavaScript(sourceFile)) { if (!sourceFile.additionalSyntacticDiagnostics) { sourceFile.additionalSyntacticDiagnostics = getJavaScriptSyntacticDiagnosticsForFile(sourceFile); @@ -81756,15 +66179,6 @@ var ts; } catch (e) { if (e instanceof ts.OperationCanceledException) { - // We were canceled while performing the operation. Because our type checker - // might be a bad state, we need to throw it away. - // - // Note: we are overly aggressive here. We do not actually *have* to throw away - // the "noDiagnosticsTypeChecker". However, for simplicity, i'd like to keep - // the lifetimes of these two TypeCheckers the same. Also, we generally only - // cancel when the user has made a change anyways. And, in that case, we (the - // program instance) will get thrown away anyways. So trying to keep one of - // these type checkers alive doesn't serve much purpose. noDiagnosticsTypeChecker = undefined; diagnosticsProducingTypeChecker = undefined; } @@ -81776,18 +66190,14 @@ var ts; } function getSemanticDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(function () { - // If skipLibCheck is enabled, skip reporting errors if file is a declaration file. - // If skipDefaultLibCheck is enabled, skip reporting errors if file contains a - // '/// ' directive. if (options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib) { return ts.emptyArray; } var typeChecker = getDiagnosticsProducingTypeChecker(); ts.Debug.assert(!!sourceFile.bindDiagnostics); var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options); - // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins) - var includeBindAndCheckDiagnostics = sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ || - sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */; + var includeBindAndCheckDiagnostics = sourceFile.scriptKind === 3 || sourceFile.scriptKind === 4 || + sourceFile.scriptKind === 5 || isCheckJs || sourceFile.scriptKind === 7; var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray; var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray; var fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName); @@ -81812,23 +66222,18 @@ var ts; return getDiagnosticsProducingTypeChecker().getSuggestionDiagnostics(sourceFile, cancellationToken); }); } - /** - * Skip errors if previous line start with '// @ts-ignore' comment, not counting non-empty non-comment lines - */ function shouldReportDiagnostic(diagnostic) { var file = diagnostic.file, start = diagnostic.start; if (file) { var lineStarts = ts.getLineStarts(file); - var line = ts.computeLineAndCharacterOfPosition(lineStarts, start).line; // TODO: GH#18217 + var line = ts.computeLineAndCharacterOfPosition(lineStarts, start).line; while (line > 0) { var previousLineText = file.text.slice(lineStarts[line - 1], lineStarts[line]); var result = ignoreDiagnosticCommentRegEx.exec(previousLineText); if (!result) { - // non-empty line return true; } if (result[3]) { - // @ts-ignore return false; } line--; @@ -81843,68 +66248,64 @@ var ts; walk(sourceFile); return diagnostics; function walk(node) { - // Return directly from the case if the given node doesnt want to visit each child - // Otherwise break to visit each child switch (parent.kind) { - case 149 /* Parameter */: - case 152 /* PropertyDeclaration */: + case 149: + case 152: if (parent.questionToken === node) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?")); return; } - // falls through - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 234 /* FunctionDeclaration */: - case 193 /* ArrowFunction */: - case 232 /* VariableDeclaration */: - // type annotation + case 154: + case 153: + case 155: + case 156: + case 157: + case 192: + case 234: + case 193: + case 232: if (parent.type === node) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.types_can_only_be_used_in_a_ts_file)); return; } } switch (node.kind) { - case 243 /* ImportEqualsDeclaration */: + case 243: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return; - case 249 /* ExportAssignment */: + case 249: if (node.isExportEquals) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return; } break; - case 268 /* HeritageClause */: + case 268: var heritageClause = node; - if (heritageClause.token === 108 /* ImplementsKeyword */) { + if (heritageClause.token === 108) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return; } break; - case 236 /* InterfaceDeclaration */: + case 236: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return; - case 239 /* ModuleDeclaration */: + case 239: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return; - case 237 /* TypeAliasDeclaration */: + case 237: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return; - case 238 /* EnumDeclaration */: + case 238: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return; - case 209 /* NonNullExpression */: + case 209: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.non_null_assertions_can_only_be_used_in_a_ts_file)); return; - case 208 /* AsExpression */: + case 208: diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return; - case 190 /* TypeAssertionExpression */: - ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX. + case 190: + ts.Debug.fail(); } var prevParent = parent; parent = node; @@ -81916,52 +66317,46 @@ var ts; diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning)); } switch (parent.kind) { - case 235 /* ClassDeclaration */: - case 154 /* MethodDeclaration */: - case 153 /* MethodSignature */: - case 155 /* Constructor */: - case 156 /* GetAccessor */: - case 157 /* SetAccessor */: - case 192 /* FunctionExpression */: - case 234 /* FunctionDeclaration */: - case 193 /* ArrowFunction */: - // Check type parameters + case 235: + case 154: + case 153: + case 155: + case 156: + case 157: + case 192: + case 234: + case 193: if (nodes === parent.typeParameters) { diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.type_parameter_declarations_can_only_be_used_in_a_ts_file)); return; } - // falls through - case 214 /* VariableStatement */: - // Check modifiers + case 214: if (nodes === parent.modifiers) { - return checkModifiers(nodes, parent.kind === 214 /* VariableStatement */); + return checkModifiers(nodes, parent.kind === 214); } break; - case 152 /* PropertyDeclaration */: - // Check modifiers of property declaration + case 152: if (nodes === parent.modifiers) { for (var _i = 0, _a = nodes; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 115 /* StaticKeyword */) { + if (modifier.kind !== 115) { diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); } } return; } break; - case 149 /* Parameter */: - // Check modifiers of parameter declaration + case 149: if (nodes === parent.modifiers) { diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.parameter_modifiers_can_only_be_used_in_a_ts_file)); return; } break; - case 187 /* CallExpression */: - case 188 /* NewExpression */: - case 207 /* ExpressionWithTypeArguments */: - case 256 /* JsxSelfClosingElement */: - case 257 /* JsxOpeningElement */: - // Check type arguments + case 187: + case 188: + case 207: + case 256: + case 257: if (nodes === parent.typeArguments) { diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.type_arguments_can_only_be_used_in_a_ts_file)); return; @@ -81977,24 +66372,21 @@ var ts; for (var _i = 0, modifiers_1 = modifiers; _i < modifiers_1.length; _i++) { var modifier = modifiers_1[_i]; switch (modifier.kind) { - case 76 /* ConstKeyword */: + case 76: if (isConstValid) { continue; } - // to report error, - // falls through - case 114 /* PublicKeyword */: - case 112 /* PrivateKeyword */: - case 113 /* ProtectedKeyword */: - case 132 /* ReadonlyKeyword */: - case 124 /* DeclareKeyword */: - case 117 /* AbstractKeyword */: + case 114: + case 112: + case 113: + case 132: + case 124: + case 117: diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); break; - // These are all legal modifiers. - case 115 /* StaticKeyword */: - case 84 /* ExportKeyword */: - case 79 /* DefaultKeyword */: + case 115: + case 84: + case 79: } } } @@ -82002,8 +66394,6 @@ var ts; var start = nodes.pos; return ts.createFileDiagnostic(sourceFile, start, nodes.end - start, message, arg0, arg1, arg2); } - // Since these are syntactic diagnostics, parent might not have been set - // this means the sourceFile cannot be infered from the node function createDiagnosticForNode(node, message, arg0, arg1, arg2) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2); } @@ -82015,7 +66405,6 @@ var ts; function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(function () { var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken); - // Don't actually write any files since we're just getting diagnostics. return ts.getDeclarationDiagnostics(getEmitHost(ts.noop), resolver, sourceFile); }); } @@ -82026,7 +66415,7 @@ var ts; if (cachedResult) { return cachedResult; } - var result = getDiagnostics(sourceFile, cancellationToken) || ts.emptyArray; // TODO: GH#18217 + var result = getDiagnostics(sourceFile, cancellationToken) || ts.emptyArray; if (sourceFile) { if (!cache.perFile) { cache.perFile = ts.createMap(); @@ -82051,15 +66440,15 @@ var ts; return configFileParsingDiagnostics || ts.emptyArray; } function processRootFile(fileName, isDefaultLib, ignoreNoDefaultLib) { - processSourceFile(ts.normalizePath(fileName), isDefaultLib, ignoreNoDefaultLib, /*packageId*/ undefined); + processSourceFile(ts.normalizePath(fileName), isDefaultLib, ignoreNoDefaultLib, undefined); } function fileReferenceIsEqualTo(a, b) { return a.fileName === b.fileName; } function moduleNameIsEqualTo(a, b) { - return a.kind === 71 /* Identifier */ - ? b.kind === 71 /* Identifier */ && a.escapedText === b.escapedText - : b.kind === 9 /* StringLiteral */ && a.text === b.text; + return a.kind === 71 + ? b.kind === 71 && a.escapedText === b.escapedText + : b.kind === 9 && a.text === b.text; } function collectExternalModuleReferences(file) { if (file.imports) { @@ -82067,31 +66456,27 @@ var ts; } var isJavaScriptFile = ts.isSourceFileJavaScript(file); var isExternalModuleFile = ts.isExternalModule(file); - // file.imports may not be undefined if there exists dynamic import var imports; var moduleAugmentations; var ambientModules; - // If we are importing helpers, we need to add a synthetic reference to resolve the - // helpers library. if (options.importHelpers && (options.isolatedModules || isExternalModuleFile) && !file.isDeclarationFile) { - // synthesize 'import "tslib"' declaration var externalHelpersModuleReference = ts.createLiteral(ts.externalHelpersModuleNameText); - var importDecl = ts.createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*importClause*/ undefined, externalHelpersModuleReference); - ts.addEmitFlags(importDecl, 67108864 /* NeverApplyImportHelper */); + var importDecl = ts.createImportDeclaration(undefined, undefined, undefined, externalHelpersModuleReference); + ts.addEmitFlags(importDecl, 67108864); externalHelpersModuleReference.parent = importDecl; importDecl.parent = file; imports = [externalHelpersModuleReference]; } for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var node = _a[_i]; - collectModuleReferences(node, /*inAmbientModule*/ false); - if ((file.flags & 524288 /* PossiblyContainsDynamicImport */) || isJavaScriptFile) { + collectModuleReferences(node, false); + if ((file.flags & 524288) || isJavaScriptFile) { collectDynamicImportOrRequireCalls(node); } } - if ((file.flags & 524288 /* PossiblyContainsDynamicImport */) || isJavaScriptFile) { + if ((file.flags & 524288) || isJavaScriptFile) { collectDynamicImportOrRequireCalls(file.endOfFileToken); } file.imports = imports || ts.emptyArray; @@ -82101,39 +66486,25 @@ var ts; function collectModuleReferences(node, inAmbientModule) { if (ts.isAnyImportOrReExport(node)) { var moduleNameExpr = ts.getExternalModuleName(node); - // TypeScript 1.0 spec (April 2014): 12.1.6 - // An ExternalImportDeclaration in an AmbientExternalModuleDeclaration may reference other external modules - // only through top - level external module names. Relative external module names are not permitted. if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) { imports = ts.append(imports, moduleNameExpr); } } else if (ts.isModuleDeclaration(node)) { - if (ts.isAmbientModule(node) && (inAmbientModule || ts.hasModifier(node, 2 /* Ambient */) || file.isDeclarationFile)) { + if (ts.isAmbientModule(node) && (inAmbientModule || ts.hasModifier(node, 2) || file.isDeclarationFile)) { var nameText = ts.getTextOfIdentifierOrLiteral(node.name); - // Ambient module declarations can be interpreted as augmentations for some existing external modules. - // This will happen in two cases: - // - if current file is external module then module augmentation is a ambient module declaration defined in the top level scope - // - if current file is not external module then module augmentation is an ambient module declaration with non-relative module name - // immediately nested in top level ambient module declaration . if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(nameText))) { (moduleAugmentations || (moduleAugmentations = [])).push(node.name); } else if (!inAmbientModule) { if (file.isDeclarationFile) { - // for global .d.ts files record name of ambient module (ambientModules || (ambientModules = [])).push(nameText); } - // An AmbientExternalModuleDeclaration declares an external module. - // This type of declaration is permitted only in the global module. - // The StringLiteral must specify a top - level external module name. - // Relative external module names are not permitted - // NOTE: body of ambient module is always a module block, if it exists var body = node.body; if (body) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var statement = _a[_i]; - collectModuleReferences(statement, /*inAmbientModule*/ true); + collectModuleReferences(statement, true); } } } @@ -82141,10 +66512,9 @@ var ts; } } function collectDynamicImportOrRequireCalls(node) { - if (ts.isRequireCall(node, /*checkArgumentIsStringLiteralLike*/ true)) { + if (ts.isRequireCall(node, true)) { imports = ts.append(imports, node.arguments[0]); } - // we have to check the argument list has length of 1. We will still have to process these even though we have parsing error. else if (ts.isImportCall(node) && node.arguments.length === 1 && ts.isStringLiteralLike(node.arguments[0])) { imports = ts.append(imports, node.arguments[0]); } @@ -82167,7 +66537,6 @@ var ts; return getSourceFile(ts.combinePaths(defaultLibraryPath, libFileName)); } } - /** This should have similar behavior to 'processSourceFile' without diagnostics or mutation. */ function getSourceFileFromReference(referencingFile, ref) { return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), function (fileName) { return filesByName.get(toPath(fileName)); }); } @@ -82205,14 +66574,12 @@ var ts; } var sourceFileWithAddedExtension = ts.forEach(supportedExtensions, function (extension) { return getSourceFile(fileName + extension); }); if (fail && !sourceFileWithAddedExtension) - fail(ts.Diagnostics.File_0_not_found, fileName + ".ts" /* Ts */); + fail(ts.Diagnostics.File_0_not_found, fileName + ".ts"); return sourceFileWithAddedExtension; } } - /** This has side effects through `findSourceFile`. */ function processSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, packageId, refFile, refPos, refEnd) { - getSourceFileFromReferenceWorker(fileName, function (fileName) { return findSourceFile(fileName, toPath(fileName), isDefaultLib, ignoreNoDefaultLib, refFile, refPos, refEnd, packageId); }, // TODO: GH#18217 - function (diagnostic) { + getSourceFileFromReferenceWorker(fileName, function (fileName) { return findSourceFile(fileName, toPath(fileName), isDefaultLib, ignoreNoDefaultLib, refFile, refPos, refEnd, packageId); }, function (diagnostic) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; @@ -82246,17 +66613,12 @@ var ts; }); return redirect; } - // Get source file from normalized fileName function findSourceFile(fileName, path, isDefaultLib, ignoreNoDefaultLib, refFile, refPos, refEnd, packageId) { if (filesByName.has(path)) { var file_1 = filesByName.get(path); - // try to check if we've already seen this file but with a different casing in path - // NOTE: this only makes sense for case-insensitive file systems if (file_1 && options.forceConsistentCasingInFileNames && ts.getNormalizedAbsolutePath(file_1.fileName, currentDirectory) !== ts.getNormalizedAbsolutePath(fileName, currentDirectory)) { reportFileNamesDifferOnlyInCasingError(fileName, file_1.fileName, refFile, refPos, refEnd); } - // If the file was previously found via a node_modules search, but is now being processed as a root file, - // then everything it sucks in may also be marked incorrectly, and needs to be checked again. if (file_1 && sourceFilesFoundSearchingNodeModules.get(file_1.path) && currentNodeModulesDepth === 0) { sourceFilesFoundSearchingNodeModules.set(file_1.path, false); if (!options.noResolve) { @@ -82267,7 +66629,6 @@ var ts; modulesWithElidedImports.set(file_1.path, false); processImportedModules(file_1); } - // See if we need to reprocess the imports due to prior skipped imports else if (file_1 && modulesWithElidedImports.get(file_1.path)) { if (currentNodeModulesDepth < maxNodeModuleJsDepth) { modulesWithElidedImports.set(file_1.path, false); @@ -82282,15 +66643,9 @@ var ts; if (redirect) { (refFile.redirectedReferences || (refFile.redirectedReferences = [])).push(fileName); fileName = redirect; - // Once we start redirecting to a file, we can potentially come back to it - // via a back-reference from another file in the .d.ts folder. If that happens we'll - // end up trying to add it to the program *again* because we were tracking it via its - // original (un-redirected) name. So we have to map both the original path and the redirected path - // to the source file we're about to find/create redirectedPath = toPath(redirect); } } - // We haven't looked for this file, do so now and cache result var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); @@ -82303,9 +66658,7 @@ var ts; var packageIdKey = ts.packageIdToString(packageId); var fileFromPackageId = packageIdToSourceFile.get(packageIdKey); if (fileFromPackageId) { - // Some other SourceFile already exists with this package name and version. - // Instead of creating a duplicate, just redirect to the existing one. - var dupFile = createRedirectSourceFile(fileFromPackageId, file, fileName, path); // TODO: GH#18217 + var dupFile = createRedirectSourceFile(fileFromPackageId, file, fileName, path); redirectTargetsSet.set(fileFromPackageId.path, true); filesByName.set(path, dupFile); sourceFileToPackageName.set(path, packageId.name); @@ -82313,7 +66666,6 @@ var ts; return dupFile; } else if (file) { - // This is the first source file to have this packageId. packageIdToSourceFile.set(packageIdKey, file); sourceFileToPackageName.set(path, packageId.name); } @@ -82328,7 +66680,6 @@ var ts; file.resolvedPath = toPath(fileName); if (host.useCaseSensitiveFileNames()) { var pathLowerCase = path.toLowerCase(); - // for case-sensitive file systems check if we've already seen some file with similar filename ignoring case var existingFile = filesByNameIgnoreCase.get(pathLowerCase); if (existingFile) { reportFileNamesDifferOnlyInCasingError(fileName, existingFile.fileName, refFile, refPos, refEnd); @@ -82343,7 +66694,6 @@ var ts; processTypeReferenceDirectives(file); } processLibReferenceDirectives(file); - // always process imported modules to record module name resolutions processImportedModules(file); if (isDefaultLib) { processingDefaultLibFiles.push(file); @@ -82356,8 +66706,6 @@ var ts; } function getProjectReferenceRedirect(fileName) { var path = toPath(fileName); - // If this file is produced by a referenced project, we need to rewrite it to - // look in the output folder of the referenced project rather than the input var normalized = ts.getNormalizedAbsolutePath(fileName, path); var result; projectReferenceRedirects.forEach(function (v, k) { @@ -82373,11 +66721,10 @@ var ts; function processReferencedFiles(file, isDefaultLib) { ts.forEach(file.referencedFiles, function (ref) { var referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName); - processSourceFile(referencedFileName, isDefaultLib, /*ignoreNoDefaultLib*/ false, /*packageId*/ undefined, file, ref.pos, ref.end); + processSourceFile(referencedFileName, isDefaultLib, false, undefined, file, ref.pos, ref.end); }); } function processTypeReferenceDirectives(file) { - // We lower-case all type references because npm automatically lowercases all packages. See GH#9824. var typeDirectives = ts.map(file.typeReferenceDirectives, function (ref) { return ref.fileName.toLocaleLowerCase(); }); if (!typeDirectives) { return; @@ -82386,14 +66733,12 @@ var ts; for (var i = 0; i < typeDirectives.length; i++) { var ref = file.typeReferenceDirectives[i]; var resolvedTypeReferenceDirective = resolutions[i]; - // store resolved type directive on the file var fileName = ref.fileName.toLocaleLowerCase(); ts.setResolvedTypeReferenceDirective(file, fileName, resolvedTypeReferenceDirective); processTypeReferenceDirective(fileName, resolvedTypeReferenceDirective, file, ref.pos, ref.end); } } function processTypeReferenceDirective(typeReferenceDirective, resolvedTypeReferenceDirective, refFile, refPos, refEnd) { - // If we already found this library as a primary reference - nothing to do var previousResolution = resolvedTypeReferenceDirectives.get(typeReferenceDirective); if (previousResolution && previousResolution.primary) { return; @@ -82401,32 +66746,25 @@ var ts; var saveResolution = true; if (resolvedTypeReferenceDirective) { if (resolvedTypeReferenceDirective.primary) { - // resolved from the primary path - processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); // TODO: GH#18217 + processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); } else { - // If we already resolved to this file, it must have been a secondary reference. Check file contents - // for sameness and possibly issue an error if (previousResolution) { - // Don't bother reading the file again if it's the same file. if (resolvedTypeReferenceDirective.resolvedFileName !== previousResolution.resolvedFileName) { var otherFileText = host.readFile(resolvedTypeReferenceDirective.resolvedFileName); if (otherFileText !== getSourceFile(previousResolution.resolvedFileName).text) { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, // TODO: GH#18217 - ts.Diagnostics.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict, typeReferenceDirective, resolvedTypeReferenceDirective.resolvedFileName, previousResolution.resolvedFileName)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict, typeReferenceDirective, resolvedTypeReferenceDirective.resolvedFileName, previousResolution.resolvedFileName)); } } - // don't overwrite previous resolution result saveResolution = false; } else { - // First resolution of this library - processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); + processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); } } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); // TODO: GH#18217 + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives.set(typeReferenceDirective, resolvedTypeReferenceDirective); @@ -82437,8 +66775,7 @@ var ts; var libName = libReference.fileName.toLocaleLowerCase(); var libFileName = ts.libMap.get(libName); if (libFileName) { - // we ignore any 'no-default-lib' reference set on this file. - processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), /*isDefaultLib*/ true, /*ignoreNoDefaultLib*/ true); + processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), true, true); } else { var unqualifiedLibName = ts.removeSuffix(ts.removePrefix(libName, "lib."), ".d.ts"); @@ -82466,7 +66803,6 @@ var ts; function processImportedModules(file) { collectExternalModuleReferences(file); if (file.imports.length || file.moduleAugmentations.length) { - // Because global augmentation doesn't have string literal name, we can check for global augmentation as such. var moduleNames = getModuleNames(file); var oldProgramState = { program: oldProgram, oldSourceFile: oldProgram && oldProgram.getSourceFile(file.fileName), modifiedFilePaths: modifiedFilePaths }; var resolutions = resolveModuleNamesReusingOldState(moduleNames, ts.getNormalizedAbsolutePath(file.fileName, currentDirectory), file, oldProgramState); @@ -82484,28 +66820,21 @@ var ts; if (isFromNodeModulesSearch) { currentNodeModulesDepth++; } - // add file to program only if: - // - resolution was successful - // - noResolve is falsy - // - module name comes from the list of imports - // - it's not a top level JavaScript module that exceeded the search max var elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModuleJsDepth; - // Don't add the file if it has a bad extension (e.g. 'tsx' if we don't have '--allowJs') - // This may still end up being an untyped module -- the file won't be included but imports will be allowed. var shouldAddFile = resolvedFileName && !getResolutionDiagnostic(options, resolution) && !options.noResolve && i < file.imports.length && !elideImport && !(isJsFile && !options.allowJs) - && (ts.isInJavaScriptFile(file.imports[i]) || !(file.imports[i].flags & 2097152 /* JSDoc */)); + && (ts.isInJavaScriptFile(file.imports[i]) || !(file.imports[i].flags & 2097152)); if (elideImport) { modulesWithElidedImports.set(file.path, true); } else if (shouldAddFile) { var path = toPath(resolvedFileName); var pos = ts.skipTrivia(file.text, file.imports[i].pos); - findSourceFile(resolvedFileName, path, /*isDefaultLib*/ false, /*ignoreNoDefaultLib*/ false, file, pos, file.imports[i].end, resolution.packageId); + findSourceFile(resolvedFileName, path, false, false, file, pos, file.imports[i].end, resolution.packageId); } if (isFromNodeModulesSearch) { currentNodeModulesDepth--; @@ -82513,7 +66842,6 @@ var ts; } } else { - // no imports - drop cached module resolutions file.resolvedModules = undefined; } } @@ -82545,25 +66873,23 @@ var ts; return allFilesBelongToPath; } function parseProjectReferenceConfigFile(ref) { - // The actual filename (i.e. add "/tsconfig.json" if necessary) - var refPath = resolveProjectReferencePath(host, ref); // TODO: GH#18217 - // An absolute path pointing to the containing directory of the config file + var refPath = resolveProjectReferencePath(host, ref); var basePath = ts.getNormalizedAbsolutePath(ts.getDirectoryPath(refPath), host.getCurrentDirectory()); - var sourceFile = host.getSourceFile(refPath, 100 /* JSON */); + var sourceFile = host.getSourceFile(refPath, 100); if (sourceFile === undefined) { return undefined; } - var commandLine = ts.parseJsonSourceFileConfigFileContent(sourceFile, configParsingHost, basePath, /*existingOptions*/ undefined, refPath); + var commandLine = ts.parseJsonSourceFileConfigFileContent(sourceFile, configParsingHost, basePath, undefined, refPath); return { commandLine: commandLine, sourceFile: sourceFile }; } function addProjectReferenceRedirects(referencedProject, target) { - var rootDir = ts.normalizePath(referencedProject.options.rootDir || ts.getDirectoryPath(referencedProject.options.configFilePath)); // TODO: GH#18217 + var rootDir = ts.normalizePath(referencedProject.options.rootDir || ts.getDirectoryPath(referencedProject.options.configFilePath)); target.set(rootDir, getDeclarationOutputDirectory(referencedProject)); } function getDeclarationOutputDirectory(proj) { return proj.options.declarationDir || proj.options.outDir || - ts.getDirectoryPath(proj.options.configFilePath); // TODO: GH#18217 + ts.getDirectoryPath(proj.options.configFilePath); } function verifyCompilerOptions() { if (options.strictPropertyInitialization && !options.strictNullChecks) { @@ -82622,7 +66948,6 @@ var ts; } } } - // List of collected files is complete; validate exhautiveness if this is a project with a file list if (options.composite && rootNames.length < files.length) { var normalizedRootNames = rootNames.map(function (r) { return ts.normalizePath(r).toLowerCase(); }); var sourceFiles = files.filter(function (f) { return !f.isDeclarationFile; }).map(function (f) { return ts.normalizePath(f.path).toLowerCase(); }); @@ -82642,12 +66967,12 @@ var ts; continue; } if (!ts.hasZeroOrOneAsteriskCharacter(key)) { - createDiagnosticForOptionPaths(/*onKey*/ true, key, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key); + createDiagnosticForOptionPaths(true, key, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key); } if (ts.isArray(options.paths[key])) { var len = options.paths[key].length; if (len === 0) { - createDiagnosticForOptionPaths(/*onKey*/ false, key, ts.Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array, key); + createDiagnosticForOptionPaths(false, key, ts.Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array, key); } for (var i = 0; i < len; i++) { var subst = options.paths[key][i]; @@ -82663,7 +66988,7 @@ var ts; } } else { - createDiagnosticForOptionPaths(/*onKey*/ false, key, ts.Diagnostics.Substitutions_for_pattern_0_should_be_an_array, key); + createDiagnosticForOptionPaths(false, key, ts.Diagnostics.Substitutions_for_pattern_0_should_be_an_array, key); } } } @@ -82679,7 +67004,6 @@ var ts; createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "outFile"); } if (options.mapRoot && !(options.sourceMap || options.declarationMap)) { - // Error to specify --mapRoot without --sourcemap createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "mapRoot", "sourceMap", "declarationMap"); } if (options.declarationDir) { @@ -82699,11 +67023,11 @@ var ts; if (options.noImplicitUseStrict && ts.getStrictOptionValue(options, "alwaysStrict")) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noImplicitUseStrict", "alwaysStrict"); } - var languageVersion = options.target || 0 /* ES3 */; + var languageVersion = options.target || 0; var outFile = options.outFile || options.out; var firstNonAmbientExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) && !f.isDeclarationFile ? f : undefined; }); if (options.isolatedModules) { - if (options.module === ts.ModuleKind.None && languageVersion < 2 /* ES2015 */) { + if (options.module === ts.ModuleKind.None && languageVersion < 2) { createDiagnosticForOptionName(ts.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher, "isolatedModules", "target"); } var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !f.isDeclarationFile ? f : undefined; }); @@ -82712,12 +67036,10 @@ var ts; programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided)); } } - else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 /* ES2015 */ && options.module === ts.ModuleKind.None) { - // We cannot use createDiagnosticFromNode because nodes do not have parents yet + else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 && options.module === ts.ModuleKind.None) { var span = ts.getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - // Cannot specify module gen that isn't amd or system with --out if (outFile) { if (options.module && !(options.module === ts.ModuleKind.AMD || options.module === ts.ModuleKind.System)) { createDiagnosticForOptionName(ts.Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, options.out ? "out" : "outFile", "module"); @@ -82732,14 +67054,10 @@ var ts; createDiagnosticForOptionName(ts.Diagnostics.Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy, "resolveJsonModule"); } } - // there has to be common source directory if user specified --outdir || --sourceRoot - // if user specified --mapRoot, there needs to be common source directory if there would be multiple files being emitted - if (options.outDir || // there is --outDir specified - options.sourceRoot || // there is --sourceRoot specified - options.mapRoot) { // there is --mapRoot specified - // Precalculate and cache the common source directory + if (options.outDir || + options.sourceRoot || + options.mapRoot) { var dir = getCommonSourceDirectory(); - // If we failed to find a good common directory, but outDir is specified and at least one of our files is on a windows drive/URL/other resource, add a failure if (options.outDir && dir === "" && ts.forEach(files, function (file) { return ts.getRootLength(file.fileName) > 1; })) { createDiagnosticForOptionName(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files, "outDir"); } @@ -82773,7 +67091,6 @@ var ts; else if (options.reactNamespace && !ts.isIdentifierText(options.reactNamespace, languageVersion)) { createOptionValueDiagnostic("reactNamespace", ts.Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace); } - // If the emit is enabled make sure that every output file is unique and not overwriting any of the input files if (!options.noEmit && !options.suppressOutputPathCheck) { var emitHost = getEmitHost(); var emitFilesSeen_1 = ts.createMap(); @@ -82784,24 +67101,19 @@ var ts; verifyEmitFilePath(emitFileNames.declarationFilePath, emitFilesSeen_1); }); } - // Verify that all the emit files are unique and don't overwrite input files function verifyEmitFilePath(emitFileName, emitFilesSeen) { if (emitFileName) { var emitFilePath = toPath(emitFileName); - // Report error if the output overwrites input file if (filesByName.has(emitFilePath)) { var chain_2; if (!options.configFilePath) { - // The program is from either an inferred project or an external project - chain_2 = ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.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); + chain_2 = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.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); } chain_2 = ts.chainDiagnosticMessages(chain_2, ts.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file, emitFileName); blockEmittingOfFile(emitFileName, ts.createCompilerDiagnosticFromMessageChain(chain_2)); } var emitFileKey = !host.useCaseSensitiveFileNames() ? emitFilePath.toLocaleLowerCase() : emitFilePath; - // Report error if multiple files write into same file if (emitFilesSeen.has(emitFileKey)) { - // Already seen the same emit file - report error blockEmittingOfFile(emitFileName, ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files, emitFileName)); } else { @@ -82836,7 +67148,7 @@ var ts; for (var _i = 0, pathsSyntax_2 = pathsSyntax; _i < pathsSyntax_2.length; _i++) { var pathProp = pathsSyntax_2[_i]; if (ts.isObjectLiteralExpression(pathProp.initializer) && - createOptionDiagnosticInObjectLiteralSyntax(pathProp.initializer, onKey, key, /*key2*/ undefined, message, arg0)) { + createOptionDiagnosticInObjectLiteralSyntax(pathProp.initializer, onKey, key, undefined, message, arg0)) { needCompilerDiagnostic = false; } } @@ -82855,10 +67167,10 @@ var ts; return getOptionsSyntaxByName("paths") || ts.emptyArray; } function createDiagnosticForOptionName(message, option1, option2, option3) { - createDiagnosticForOption(/*onKey*/ true, option1, option2, message, option1, option2, option3); + createDiagnosticForOption(true, option1, option2, message, option1, option2, option3); } function createOptionValueDiagnostic(option1, message, arg0) { - createDiagnosticForOption(/*onKey*/ false, option1, /*option2*/ undefined, message, arg0); + createDiagnosticForOption(false, option1, undefined, message, arg0); } function createDiagnosticForReference(index, message, arg0, arg1) { var referencesSyntax = getProjectReferencesSyntax(); @@ -82879,9 +67191,9 @@ var ts; } function getProjectReferencesSyntax() { if (_referencesArrayLiteralSyntax === undefined) { - _referencesArrayLiteralSyntax = null; // tslint:disable-line:no-null-keyword + _referencesArrayLiteralSyntax = null; if (options.configFile) { - var jsonObjectLiteral = ts.getTsConfigObjectLiteralExpression(options.configFile); // TODO: GH#18217 + var jsonObjectLiteral = ts.getTsConfigObjectLiteralExpression(options.configFile); for (var _i = 0, _a = ts.getPropertyAssignment(jsonObjectLiteral, "references"); _i < _a.length; _i++) { var prop = _a[_i]; if (ts.isArrayLiteralExpression(prop.initializer)) { @@ -82895,7 +67207,7 @@ var ts; } function getCompilerOptionsObjectLiteralSyntax() { if (_compilerOptionsObjectLiteralSyntax === undefined) { - _compilerOptionsObjectLiteralSyntax = null; // tslint:disable-line:no-null-keyword + _compilerOptionsObjectLiteralSyntax = null; var jsonObjectLiteral = ts.getTsConfigObjectLiteralExpression(options.configFile); if (jsonObjectLiteral) { for (var _i = 0, _a = ts.getPropertyAssignment(jsonObjectLiteral, "compilerOptions"); _i < _a.length; _i++) { @@ -82919,11 +67231,10 @@ var ts; } function createOptionDiagnosticInArrayLiteralSyntax(arrayLiteral, index, message, arg0, arg1, arg2) { if (arrayLiteral.elements.length <= index) { - // Out-of-bounds return false; } programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, arrayLiteral.elements[index], message, arg0, arg1, arg2)); - return false; // TODO: GH#18217 This function always returns `false`!` + return false; } function blockEmittingOfFile(emitFileName, diag) { hasEmitBlockingDiagnostics.set(toPath(emitFileName), true); @@ -82933,38 +67244,32 @@ var ts; if (options.noEmit) { return false; } - // If this is source file, its not emitted file var filePath = toPath(file); if (getSourceFileByPath(filePath)) { return false; } - // If options have --outFile or --out just check that var out = options.outFile || options.out; if (out) { - return isSameFile(filePath, out) || isSameFile(filePath, ts.removeFileExtension(out) + ".d.ts" /* Dts */); + return isSameFile(filePath, out) || isSameFile(filePath, ts.removeFileExtension(out) + ".d.ts"); } - // If declarationDir is specified, return if its a file in that directory if (options.declarationDir && ts.containsPath(options.declarationDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames())) { return true; } - // If --outDir, check if file is in that directory if (options.outDir) { return ts.containsPath(options.outDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames()); } - if (ts.fileExtensionIsOneOf(filePath, ts.supportedJavascriptExtensions) || ts.fileExtensionIs(filePath, ".d.ts" /* Dts */)) { - // Otherwise just check if sourceFile with the name exists + if (ts.fileExtensionIsOneOf(filePath, ts.supportedJavascriptExtensions) || ts.fileExtensionIs(filePath, ".d.ts")) { var filePathWithoutExtension = ts.removeFileExtension(filePath); - return !!getSourceFileByPath((filePathWithoutExtension + ".ts" /* Ts */)) || - !!getSourceFileByPath((filePathWithoutExtension + ".tsx" /* Tsx */)); + return !!getSourceFileByPath((filePathWithoutExtension + ".ts")) || + !!getSourceFileByPath((filePathWithoutExtension + ".tsx")); } return false; } function isSameFile(file1, file2) { - return ts.comparePaths(file1, file2, currentDirectory, !host.useCaseSensitiveFileNames()) === 0 /* EqualTo */; + return ts.comparePaths(file1, file2, currentDirectory, !host.useCaseSensitiveFileNames()) === 0; } } ts.createProgram = createProgram; - /* @internal */ function parseConfigHostFromCompilerHost(host) { return { fileExists: function (f) { return host.fileExists(f); }, @@ -82976,9 +67281,6 @@ var ts; }; } ts.parseConfigHostFromCompilerHost = parseConfigHostFromCompilerHost; - /** - * Returns the target config filename of a project reference - */ function resolveProjectReferencePath(host, ref) { if (!host.fileExists(ref.path)) { return ts.combinePaths(ref.path, "tsconfig.json"); @@ -82986,25 +67288,18 @@ var ts; return ref.path; } ts.resolveProjectReferencePath = resolveProjectReferencePath; - /* @internal */ - /** - * Returns a DiagnosticMessage if we won't include a resolved module due to its extension. - * The DiagnosticMessage's parameters are the imported module name, and the filename it resolved to. - * This returns a diagnostic even if the module will be an untyped module. - */ function getResolutionDiagnostic(options, _a) { var extension = _a.extension; switch (extension) { - case ".ts" /* Ts */: - case ".d.ts" /* Dts */: - case ".json" /* Json */: // Since module is resolved to json file only when --resolveJsonModule, we dont need further check - // These are always allowed. + case ".ts": + case ".d.ts": + case ".json": return undefined; - case ".tsx" /* Tsx */: + case ".tsx": return needJsx(); - case ".jsx" /* Jsx */: + case ".jsx": return needJsx() || needAllowJs(); - case ".js" /* Js */: + case ".js": return needAllowJs(); } function needJsx() { @@ -83020,15 +67315,13 @@ var ts; var res = imports.map(function (i) { return i.text; }); for (var _i = 0, moduleAugmentations_1 = moduleAugmentations; _i < moduleAugmentations_1.length; _i++) { var aug = moduleAugmentations_1[_i]; - if (aug.kind === 9 /* StringLiteral */) { + if (aug.kind === 9) { res.push(aug.text); } - // Do nothing if it's an Identifier; we don't need to do module resolution for `declare global`. } return res; } })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers) { @@ -83041,18 +67334,11 @@ var ts; } ts.getFileEmitOutput = getFileEmitOutput; })(ts || (ts = {})); -/*@internal*/ (function (ts) { var BuilderState; (function (BuilderState) { - /** - * Gets the referenced files for a file from the program with values for the keys as referenced file's path to be true - */ function getReferencedFiles(program, sourceFile, getCanonicalFileName) { var referencedFiles; - // We need to use a set here since the code can contain the same import twice, - // but that will only be one dependency. - // To avoid invernal conversion, the key of the referencedFiles map must be of type Path if (sourceFile.imports && sourceFile.imports.length > 0) { var checker = program.getTypeChecker(); for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) { @@ -83067,7 +67353,6 @@ var ts; } } var sourceFileDirectory = ts.getDirectoryPath(sourceFile.path); - // Handle triple slash references if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) { for (var _b = 0, _c = sourceFile.referencedFiles; _b < _c.length; _b++) { var referencedFile = _c[_b]; @@ -83075,13 +67360,12 @@ var ts; addReferencedFile(referencedPath); } } - // Handle type reference directives if (sourceFile.resolvedTypeReferenceDirectiveNames) { sourceFile.resolvedTypeReferenceDirectiveNames.forEach(function (resolvedTypeReferenceDirective) { if (!resolvedTypeReferenceDirective) { return; } - var fileName = resolvedTypeReferenceDirective.resolvedFileName; // TODO: GH#18217 + var fileName = resolvedTypeReferenceDirective.resolvedFileName; var typeFilePath = ts.toPath(fileName, sourceFileDirectory, getCanonicalFileName); addReferencedFile(typeFilePath); }); @@ -83094,22 +67378,15 @@ var ts; referencedFiles.set(referencedPath, true); } } - /** - * Returns true if oldState is reusable, that is the emitKind = module/non module has not changed - */ function canReuseOldState(newReferencedMap, oldState) { return oldState && !oldState.referencedMap === !newReferencedMap; } BuilderState.canReuseOldState = canReuseOldState; - /** - * Creates the state of file references and signature for the new program from oldState if it is safe - */ function create(newProgram, getCanonicalFileName, oldState) { var fileInfos = ts.createMap(); var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? ts.createMap() : undefined; var hasCalledUpdateShapeSignature = ts.createMap(); var useOldState = canReuseOldState(referencedMap, oldState); - // Create the reference map, and set the file infos for (var _i = 0, _a = newProgram.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; var version_1 = sourceFile.version; @@ -83131,14 +67408,7 @@ var ts; }; } BuilderState.create = create; - /** - * Gets the files affected by the path from the program - */ function getFilesAffectedBy(state, programOfThisState, path, cancellationToken, computeHash, cacheToUpdateSignature) { - // Since the operation could be cancelled, the signatures are always stored in the cache - // They will be commited once it is safe to use them - // eg when calling this api from tsserver, if there is no cancellation of the operation - // In the other cases the affected files signatures are commited only after the iteration through the result is complete var signatureCache = cacheToUpdateSignature || ts.createMap(); var sourceFile = programOfThisState.getSourceFileByPath(path); if (!sourceFile) { @@ -83149,16 +67419,11 @@ var ts; } var result = (state.referencedMap ? getFilesAffectedByUpdatedShapeWhenModuleEmit : getFilesAffectedByUpdatedShapeWhenNonModuleEmit)(state, programOfThisState, sourceFile, signatureCache, cancellationToken, computeHash); if (!cacheToUpdateSignature) { - // Commit all the signatures in the signature cache updateSignaturesFromCache(state, signatureCache); } return result; } BuilderState.getFilesAffectedBy = getFilesAffectedBy; - /** - * Updates the signatures from the cache into state's fileinfo signatures - * This should be called whenever it is safe to commit the state of the builder - */ function updateSignaturesFromCache(state, signatureCache) { signatureCache.forEach(function (signature, path) { state.fileInfos.get(path).signature = signature; @@ -83166,12 +67431,8 @@ var ts; }); } BuilderState.updateSignaturesFromCache = updateSignaturesFromCache; - /** - * Returns if the shape of the signature has changed since last emit - */ function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash) { ts.Debug.assert(!!sourceFile); - // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate if (state.hasCalledUpdateShapeSignature.has(sourceFile.path) || cacheToUpdateSignature.has(sourceFile.path)) { return false; } @@ -83184,32 +67445,26 @@ var ts; latestSignature = sourceFile.version; } else { - var emitOutput = ts.getFileEmitOutput(programOfThisState, sourceFile, /*emitOnlyDtsFiles*/ true, cancellationToken); + var emitOutput = ts.getFileEmitOutput(programOfThisState, sourceFile, true, cancellationToken); if (emitOutput.outputFiles && emitOutput.outputFiles.length > 0) { latestSignature = computeHash(emitOutput.outputFiles[0].text); } else { - latestSignature = prevSignature; // TODO: GH#18217 + latestSignature = prevSignature; } } cacheToUpdateSignature.set(sourceFile.path, latestSignature); return !prevSignature || latestSignature !== prevSignature; } - /** - * Get all the dependencies of the sourceFile - */ function getAllDependencies(state, programOfThisState, sourceFile) { var _a; var compilerOptions = programOfThisState.getCompilerOptions(); - // With --out or --outFile all outputs go into single file, all files depend on each other if (compilerOptions.outFile || compilerOptions.out) { return getAllFileNames(state, programOfThisState); } - // If this is non module emit, or its a global file, it depends on all the source files if (!state.referencedMap || (!ts.isExternalModule(sourceFile) && !containsOnlyAmbientModules(sourceFile))) { return getAllFileNames(state, programOfThisState); } - // Get the references, traversing deep from the referenceMap var seenMap = ts.createMap(); var queue = [sourceFile.path]; while (queue.length) { @@ -83231,9 +67486,6 @@ var ts; })); } BuilderState.getAllDependencies = getAllDependencies; - /** - * Gets the names of all files from the program - */ function getAllFileNames(state, programOfThisState) { if (!state.allFileNames) { var sourceFiles = programOfThisState.getSourceFiles(); @@ -83241,21 +67493,12 @@ var ts; } return state.allFileNames; } - /** - * Gets the files referenced by the the file path - */ function getReferencedByPaths(state, referencedFilePath) { return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) { var filePath = _a[0], referencesInFile = _a[1]; return referencesInFile.has(referencedFilePath) ? filePath : undefined; })); } - /** - * For script files that contains only ambient external modules, although they are not actually external module files, - * they can only be consumed via importing elements from them. Regular script files cannot consume them. Therefore, - * there are no point to rebuild all script files if these special files have changed. However, if any statement - * in the file is not ambient external module, we treat it as a regular script file. - */ function containsOnlyAmbientModules(sourceFile) { for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; @@ -83265,11 +67508,7 @@ var ts; } return true; } - /** - * Gets all files of the program excluding the default library file - */ function getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, firstSourceFile) { - // Use cached result if (state.allFilesExcludingDefaultLibraryFile) { return state.allFilesExcludingDefaultLibraryFile; } @@ -83289,21 +67528,13 @@ var ts; } } } - /** - * When program emits non modular code, gets the files affected by the sourceFile whose shape has changed - */ function getFilesAffectedByUpdatedShapeWhenNonModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape) { var compilerOptions = programOfThisState.getCompilerOptions(); - // If `--out` or `--outFile` is specified, any new emit will result in re-emitting the entire project, - // so returning the file itself is good enough. if (compilerOptions && (compilerOptions.out || compilerOptions.outFile)) { return [sourceFileWithUpdatedShape]; } return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); } - /** - * When program emits modular code, gets the files affected by the sourceFile whose shape has changed - */ function getFilesAffectedByUpdatedShapeWhenModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape, cacheToUpdateSignature, cancellationToken, computeHash) { if (!ts.isExternalModule(sourceFileWithUpdatedShape) && !containsOnlyAmbientModules(sourceFileWithUpdatedShape)) { return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); @@ -83312,11 +67543,7 @@ var ts; if (compilerOptions && (compilerOptions.isolatedModules || compilerOptions.out || compilerOptions.outFile)) { return [sourceFileWithUpdatedShape]; } - // Now we need to if each file in the referencedBy list has a shape change as well. - // Because if so, its own referencedBy files need to be saved as well to make the - // emitting result consistent with files on disk. var seenFileNamesMap = ts.createMap(); - // Start with the paths this file was referenced by seenFileNamesMap.set(sourceFileWithUpdatedShape.path, sourceFileWithUpdatedShape); var queue = getReferencedByPaths(state, sourceFileWithUpdatedShape.path); while (queue.length > 0) { @@ -83324,28 +67551,20 @@ var ts; if (!seenFileNamesMap.has(currentPath)) { var currentSourceFile = programOfThisState.getSourceFileByPath(currentPath); seenFileNamesMap.set(currentPath, currentSourceFile); - if (currentSourceFile && updateShapeSignature(state, programOfThisState, currentSourceFile, cacheToUpdateSignature, cancellationToken, computeHash)) { // TODO: GH#18217 - queue.push.apply(// TODO: GH#18217 - queue, getReferencedByPaths(state, currentPath)); + if (currentSourceFile && updateShapeSignature(state, programOfThisState, currentSourceFile, cacheToUpdateSignature, cancellationToken, computeHash)) { + queue.push.apply(queue, getReferencedByPaths(state, currentPath)); } } } - // Return array of values that needs emit - // Return array of values that needs emit return ts.arrayFrom(ts.mapDefinedIterator(seenFileNamesMap.values(), function (value) { return value; })); } })(BuilderState = ts.BuilderState || (ts.BuilderState = {})); })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { function hasSameKeys(map1, map2) { - // Has same size and every key is present in both maps return map1 === map2 || map1 !== undefined && map2 !== undefined && map1.size === map2.size && !ts.forEachKey(map1, function (key) { return !map2.has(key); }); } - /** - * Create the state so that we can iterate on changedFiles/affected files - */ function createBuilderProgramState(newProgram, getCanonicalFileName, oldState) { var state = ts.BuilderState.create(newProgram, getCanonicalFileName, oldState); state.program = newProgram; @@ -83357,37 +67576,27 @@ var ts; var useOldState = ts.BuilderState.canReuseOldState(state.referencedMap, oldState); var canCopySemanticDiagnostics = useOldState && oldState.semanticDiagnosticsPerFile && !!state.semanticDiagnosticsPerFile; if (useOldState) { - // Verify the sanity of old state if (!oldState.currentChangedFilePath) { ts.Debug.assert(!oldState.affectedFiles && (!oldState.currentAffectedFilesSignatures || !oldState.currentAffectedFilesSignatures.size), "Cannot reuse if only few affected files of currentChangedFile were iterated"); } if (canCopySemanticDiagnostics) { ts.Debug.assert(!ts.forEachKey(oldState.changedFilesSet, function (path) { return oldState.semanticDiagnosticsPerFile.has(path); }), "Semantic diagnostics shouldnt be available for changed files"); } - // Copy old state's changed files set ts.copyEntries(oldState.changedFilesSet, state.changedFilesSet); } - // Update changed files and copy semantic diagnostics if we can var referencedMap = state.referencedMap; var oldReferencedMap = useOldState ? oldState.referencedMap : undefined; state.fileInfos.forEach(function (info, sourceFilePath) { var oldInfo; var newReferences; - // if not using old state, every file is changed if (!useOldState || - // File wasnt present in old state !(oldInfo = oldState.fileInfos.get(sourceFilePath)) || - // versions dont match oldInfo.version !== info.version || - // Referenced files changed !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) || - // Referenced file was deleted in the new program newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) { - // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated state.changedFilesSet.set(sourceFilePath, true); } else if (canCopySemanticDiagnostics) { - // Unchanged file copy diagnostics var diagnostics = oldState.semanticDiagnosticsPerFile.get(sourceFilePath); if (diagnostics) { state.semanticDiagnosticsPerFile.set(sourceFilePath, diagnostics); @@ -83396,28 +67605,18 @@ var ts; }); return state; } - /** - * Verifies that source file is ok to be used in calls that arent handled by next - */ function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) { ts.Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.path)); } - /** - * This function returns the next affected file to be processed. - * Note that until doneAffected is called it would keep reporting same result - * This is to allow the callers to be able to actually remove affected file only when the operation is complete - * eg. if during diagnostics check cancellation token ends up cancelling the request, the affected file should be retained - */ function getNextAffectedFile(state, cancellationToken, computeHash) { while (true) { var affectedFiles = state.affectedFiles; if (affectedFiles) { var seenAffectedFiles = state.seenAffectedFiles, semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile; - var affectedFilesIndex = state.affectedFilesIndex; // TODO: GH#18217 + var affectedFilesIndex = state.affectedFilesIndex; while (affectedFilesIndex < affectedFiles.length) { var affectedFile = affectedFiles[affectedFilesIndex]; if (!seenAffectedFiles.has(affectedFile.path)) { - // Set the next affected file as seen and remove the cached semantic diagnostics state.affectedFilesIndex = affectedFilesIndex; semanticDiagnosticsPerFile.delete(affectedFile.path); return affectedFile; @@ -83425,28 +67624,21 @@ var ts; seenAffectedFiles.set(affectedFile.path, true); affectedFilesIndex++; } - // Remove the changed file from the change set state.changedFilesSet.delete(state.currentChangedFilePath); state.currentChangedFilePath = undefined; - // Commit the changes in file signature ts.BuilderState.updateSignaturesFromCache(state, state.currentAffectedFilesSignatures); state.currentAffectedFilesSignatures.clear(); state.affectedFiles = undefined; } - // Get next changed file var nextKey = state.changedFilesSet.keys().next(); if (nextKey.done) { - // Done return undefined; } - // With --out or --outFile all outputs go into single file - // so operations are performed directly on program, return program var compilerOptions = state.program.getCompilerOptions(); if (compilerOptions.outFile || compilerOptions.out) { ts.Debug.assert(!state.semanticDiagnosticsPerFile); return state.program; } - // Get next batch of affected files state.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures || ts.createMap(); state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, state.program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures); state.currentChangedFilePath = nextKey.value; @@ -83455,10 +67647,6 @@ var ts; state.seenAffectedFiles = state.seenAffectedFiles || ts.createMap(); } } - /** - * This is called after completing operation on the next affected file. - * The operations here are postponed to ensure that cancellation during the iteration is handled correctly - */ function doneWithAffectedFile(state, affected) { if (affected === state.program) { state.changedFilesSet.clear(); @@ -83468,25 +67656,16 @@ var ts; state.affectedFilesIndex++; } } - /** - * Returns the result with affected file - */ function toAffectedFileResult(state, result, affected) { doneWithAffectedFile(state, affected); return { result: result, affected: affected }; } - /** - * Gets the semantic diagnostics either from cache if present, or otherwise from program and caches it - * Note that it is assumed that the when asked about semantic diagnostics, the file has been taken out of affected files/changed file set - */ function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken) { var path = sourceFile.path; var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path); - // Report the semantic diagnostics from the cache if we already have those diagnostics present if (cachedDiagnostics) { return cachedDiagnostics; } - // Diagnostics werent cached, get them from program, and cache the result var diagnostics = state.program.getSemanticDiagnostics(sourceFile, cancellationToken); state.semanticDiagnosticsPerFile.set(path, diagnostics); return diagnostics; @@ -83523,24 +67702,16 @@ var ts; ts.getBuilderCreationParameters = getBuilderCreationParameters; function createBuilderProgram(kind, _a) { var newProgram = _a.newProgram, host = _a.host, oldProgram = _a.oldProgram, configFileParsingDiagnostics = _a.configFileParsingDiagnostics; - // Return same program if underlying program doesnt change var oldState = oldProgram && oldProgram.getState(); if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { - newProgram = undefined; // TODO: GH#18217 + newProgram = undefined; oldState = undefined; return oldProgram; } - /** - * Create the canonical file name for identity - */ var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames()); - /** - * Computing hash to for signature verification - */ var computeHash = host.createHash || ts.identity; var state = createBuilderProgramState(newProgram, getCanonicalFileName, oldState); - // To ensure that we arent storing any references to old program or new program without state - newProgram = undefined; // TODO: GH#18217 + newProgram = undefined; oldProgram = undefined; oldState = undefined; var result = { @@ -83568,38 +67739,17 @@ var ts; ts.notImplemented(); } return result; - /** - * Emits the next affected file's emit result (EmitResult and sourceFiles emitted) or returns undefined if iteration is complete - * The first of writeFile if provided, writeFile of BuilderProgramHost if provided, writeFile of compiler host - * in that order would be used to write the files - */ function emitNextAffectedFile(writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) { var affected = getNextAffectedFile(state, cancellationToken, computeHash); if (!affected) { - // Done return undefined; } - return toAffectedFileResult(state, - // When whole program is affected, do emit only once (eg when --out or --outFile is specified) - // Otherwise just affected file - state.program.emit(affected === state.program ? undefined : affected, writeFile || host.writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers), affected); + return toAffectedFileResult(state, state.program.emit(affected === state.program ? undefined : affected, writeFile || host.writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers), affected); } - /** - * Emits the JavaScript and declaration files. - * When targetSource file is specified, emits the files corresponding to that source file, - * otherwise for the whole program. - * In case of EmitAndSemanticDiagnosticsBuilderProgram, when targetSourceFile is specified, - * it is assumed that that file is handled from affected file list. If targetSourceFile is not specified, - * it will only emit all the affected files instead of whole program - * - * The first of writeFile if provided, writeFile of BuilderProgramHost if provided, writeFile of compiler host - * in that order would be used to write the files - */ function emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) { if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) { assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile); if (!targetSourceFile) { - // Emit and report any errors we ran into. var sourceMaps = []; var emitSkipped = false; var diagnostics = void 0; @@ -83621,52 +67771,33 @@ var ts; } return state.program.emit(targetSourceFile, writeFile || host.writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers); } - /** - * Return the semantic diagnostics for the next affected file or undefined if iteration is complete - * If provided ignoreSourceFile would be called before getting the diagnostics and would ignore the sourceFile if the returned value was true - */ function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) { while (true) { var affected = getNextAffectedFile(state, cancellationToken, computeHash); if (!affected) { - // Done return undefined; } else if (affected === state.program) { - // When whole program is affected, get all semantic diagnostics (eg when --out or --outFile is specified) - return toAffectedFileResult(state, state.program.getSemanticDiagnostics(/*targetSourceFile*/ undefined, cancellationToken), affected); + return toAffectedFileResult(state, state.program.getSemanticDiagnostics(undefined, cancellationToken), affected); } - // Get diagnostics for the affected file if its not ignored if (ignoreSourceFile && ignoreSourceFile(affected)) { - // Get next affected file doneWithAffectedFile(state, affected); continue; } return toAffectedFileResult(state, getSemanticDiagnosticsOfFile(state, affected, cancellationToken), affected); } } - /** - * Gets the semantic diagnostics from the program corresponding to this state of file (if provided) or whole program - * The semantic diagnostics are cached and managed here - * Note that it is assumed that when asked about semantic diagnostics through this API, - * the file has been taken out of affected files so it is safe to use cache or get from program and cache the diagnostics - * In case of SemanticDiagnosticsBuilderProgram if the source file is not provided, - * it will iterate through all the affected files, to ensure that cache stays valid and yet provide a way to get all semantic diagnostics - */ function getSemanticDiagnostics(sourceFile, cancellationToken) { assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); var compilerOptions = state.program.getCompilerOptions(); if (compilerOptions.outFile || compilerOptions.out) { ts.Debug.assert(!state.semanticDiagnosticsPerFile); - // We dont need to cache the diagnostics just return them from program return state.program.getSemanticDiagnostics(sourceFile, cancellationToken); } if (sourceFile) { return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken); } if (kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram) { - // When semantic builder asks for diagnostics of the whole program, - // ensure that all the affected files are handled var affected = void 0; while (affected = getNextAffectedFile(state, cancellationToken, computeHash)) { doneWithAffectedFile(state, affected); @@ -83694,7 +67825,6 @@ var ts; function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics) { var program = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics).newProgram; return { - // Only return program, all other methods are not implemented getProgram: function () { return program; }, getState: ts.notImplemented, getCompilerOptions: ts.notImplemented, @@ -83712,7 +67842,6 @@ var ts; } ts.createAbstractBuilder = createAbstractBuilder; })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { ts.maxNumberOfFilesToIterateForInvalidation = 256; @@ -83721,35 +67850,23 @@ var ts; var filesWithInvalidatedResolutions; var filesWithInvalidatedNonRelativeUnresolvedImports; var allFilesHaveInvalidatedResolution = false; - var getCurrentDirectory = ts.memoize(function () { return resolutionHost.getCurrentDirectory(); }); // TODO: GH#18217 + var getCurrentDirectory = ts.memoize(function () { return resolutionHost.getCurrentDirectory(); }); var cachedDirectoryStructureHost = resolutionHost.getCachedDirectoryStructureHost(); - // The resolvedModuleNames and resolvedTypeReferenceDirectives are the cache of resolutions per file. - // The key in the map is source file's path. - // The values are Map of resolutions with key being name lookedup. var resolvedModuleNames = ts.createMap(); var perDirectoryResolvedModuleNames = ts.createMap(); var nonRelaticeModuleNameCache = ts.createMap(); var moduleResolutionCache = ts.createModuleResolutionCacheWithMaps(perDirectoryResolvedModuleNames, nonRelaticeModuleNameCache, getCurrentDirectory(), resolutionHost.getCanonicalFileName); var resolvedTypeReferenceDirectives = ts.createMap(); var perDirectoryResolvedTypeReferenceDirectives = ts.createMap(); - /** - * These are the extensions that failed lookup files will have by default, - * any other extension of failed lookup will be store that path in custom failed lookup path - * This helps in not having to comb through all resolutions when files are added/removed - * Note that .d.ts file also has .d.ts extension hence will be part of default extensions - */ - var failedLookupDefaultExtensions = [".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */]; + var failedLookupDefaultExtensions = [".ts", ".tsx", ".js", ".jsx", ".json"]; var customFailedLookupPaths = ts.createMap(); var directoryWatchesOfFailedLookups = ts.createMap(); var rootDir = rootDirForResolution && ts.removeTrailingDirectorySeparator(ts.getNormalizedAbsolutePath(rootDirForResolution, getCurrentDirectory())); - var rootPath = (rootDir && resolutionHost.toPath(rootDir)); // TODO: GH#18217 - // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames + var rootPath = (rootDir && resolutionHost.toPath(rootDir)); var typeRootsWatches = ts.createMap(); return { startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions, finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions, - // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update - // (between startCachingPerDirectoryResolution and finishCachingPerDirectoryResolution) startCachingPerDirectoryResolution: clearPerDirectoryResolutions, finishCachingPerDirectoryResolution: finishCachingPerDirectoryResolution, resolveModuleNames: resolveModuleNames, @@ -83782,8 +67899,6 @@ var ts; resolvedModuleNames.clear(); resolvedTypeReferenceDirectives.clear(); allFilesHaveInvalidatedResolution = false; - // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update - // (between startCachingPerDirectoryResolution and finishCachingPerDirectoryResolution) clearPerDirectoryResolutions(); } function startRecordingFilesWithChangedResolutions() { @@ -83798,13 +67913,11 @@ var ts; if (!filesWithInvalidatedNonRelativeUnresolvedImports) { return false; } - // Invalidated if file has unresolved imports var value = filesWithInvalidatedNonRelativeUnresolvedImports.get(path); return !!value && !!value.length; } function createHasInvalidatedResolution(forceAllFilesAsInvalidated) { if (allFilesHaveInvalidatedResolution || forceAllFilesAsInvalidated) { - // Any file asked would have invalidated resolution filesWithInvalidatedResolutions = undefined; return ts.returnTrue; } @@ -83831,21 +67944,16 @@ var ts; } function resolveModuleName(moduleName, containingFile, compilerOptions, host) { var primaryResult = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host, moduleResolutionCache); - // return result immediately only if global cache support is not enabled or if it is .ts, .tsx or .d.ts if (!resolutionHost.getGlobalCache) { return primaryResult; } - // otherwise try to load typings from @types var globalCache = resolutionHost.getGlobalCache(); if (globalCache !== undefined && !ts.isExternalModuleNameRelative(moduleName) && !(primaryResult.resolvedModule && ts.extensionIsTypeScript(primaryResult.resolvedModule.extension))) { - // create different collection of failed lookup locations for second pass - // if it will fail and we've already found something during the first pass - we don't want to pollute its results var _a = ts.loadModuleFromGlobalCache(moduleName, resolutionHost.projectName, compilerOptions, host, globalCache), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations; if (resolvedModule) { return { resolvedModule: resolvedModule, failedLookupLocations: ts.addRange(primaryResult.failedLookupLocations, failedLookupLocations) }; } } - // Default return the result from the first pass return primaryResult; } function resolveNamesWithLocalCache(names, containingFile, cache, perDirectoryCache, loader, getResolutionWithResolvedFileName, reusedNames, logChanges) { @@ -83864,10 +67972,8 @@ var ts; for (var _i = 0, names_2 = names; _i < names_2.length; _i++) { var name = names_2[_i]; var resolution = resolutionsInFile.get(name); - // Resolution is valid if it is present and not invalidated if (!seenNamesInFile.has(name) && allFilesHaveInvalidatedResolution || !resolution || resolution.isInvalidated || - // If the name is unresolved import that was invalidated, recalculate (hasInvalidatedNonRelativeUnresolvedImport && !ts.isExternalModuleNameRelative(name) && !getResolutionWithResolvedFileName(resolution))) { var existingResolution = resolution; var resolutionInDirectory = perDirectoryResolution.get(name); @@ -83885,15 +67991,13 @@ var ts; } if (logChanges && filesWithChangedSetOfUnresolvedImports && !resolutionIsEqualTo(existingResolution, resolution)) { filesWithChangedSetOfUnresolvedImports.push(path); - // reset log changes to avoid recording the same file multiple times logChanges = false; } } ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated); seenNamesInFile.set(name, true); - resolvedModules.push(getResolutionWithResolvedFileName(resolution)); // TODO: GH#18217 + resolvedModules.push(getResolutionWithResolvedFileName(resolution)); } - // Stop watching and remove the unused name resolutionsInFile.forEach(function (resolution, name) { if (!seenNamesInFile.has(name) && !ts.contains(reusedNames, name)) { stopWatchFailedLookupLocationOfResolution(resolution); @@ -83920,8 +68024,7 @@ var ts; } } function resolveTypeReferenceDirectives(typeDirectiveNames, containingFile) { - return resolveNamesWithLocalCache(typeDirectiveNames, containingFile, resolvedTypeReferenceDirectives, perDirectoryResolvedTypeReferenceDirectives, ts.resolveTypeReferenceDirective, getResolvedTypeReferenceDirective, - /*reusedNames*/ undefined, /*logChanges*/ false); + return resolveNamesWithLocalCache(typeDirectiveNames, containingFile, resolvedTypeReferenceDirectives, perDirectoryResolvedTypeReferenceDirectives, ts.resolveTypeReferenceDirective, getResolvedTypeReferenceDirective, undefined, false); } function resolveModuleNames(moduleNames, containingFile, reusedNames) { return resolveNamesWithLocalCache(moduleNames, containingFile, resolvedModuleNames, perDirectoryResolvedModuleNames, resolveModuleName, getResolvedModule, reusedNames, logChangesWhenResolvingModule); @@ -83936,32 +68039,22 @@ var ts; function isNodeModulesAtTypesDirectory(dirPath) { return ts.endsWith(dirPath, "/node_modules/@types"); } - /** - * Filter out paths like - * "/", "/user", "/user/username", "/user/username/folderAtRoot", - * "c:/", "c:/users", "c:/users/username", "c:/users/username/folderAtRoot", "c:/folderAtRoot" - * @param dirPath - */ function canWatchDirectory(dirPath) { var rootLength = ts.getRootLength(dirPath); if (dirPath.length === rootLength) { - // Ignore "/", "c:/" return false; } var nextDirectorySeparator = dirPath.indexOf(ts.directorySeparator, rootLength); if (nextDirectorySeparator === -1) { - // ignore "/user", "c:/users" or "c:/folderAtRoot" return false; } - if (dirPath.charCodeAt(0) !== 47 /* slash */ && + if (dirPath.charCodeAt(0) !== 47 && dirPath.substr(rootLength, nextDirectorySeparator).search(/users/i) === -1) { - // Paths like c:/folderAtRoot/subFolder are allowed return true; } for (var searchIndex = nextDirectorySeparator + 1, searchLevels = 2; searchLevels > 0; searchLevels--) { searchIndex = dirPath.indexOf(ts.directorySeparator, searchIndex) + 1; if (searchIndex === 0) { - // Folder isnt at expected minimun levels return false; } } @@ -83975,21 +68068,18 @@ var ts; } function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath) { if (isInDirectoryPath(rootPath, failedLookupLocationPath)) { - return { dir: rootDir, dirPath: rootPath }; // TODO: GH#18217 + return { dir: rootDir, dirPath: rootPath }; } return getDirectoryToWatchFromFailedLookupLocationDirectory(ts.getDirectoryPath(ts.getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory())), ts.getDirectoryPath(failedLookupLocationPath)); } function getDirectoryToWatchFromFailedLookupLocationDirectory(dir, dirPath) { - // If directory path contains node module, get the most parent node_modules directory for watching while (ts.stringContains(dirPath, "/node_modules/")) { dir = ts.getDirectoryPath(dir); dirPath = ts.getDirectoryPath(dirPath); } - // If the directory is node_modules use it to watch if (isNodeModulesDirectory(dirPath)) { return filterFSRootDirectoriesToWatch({ dir: dir, dirPath: dirPath }, ts.getDirectoryPath(dirPath)); } - // Use some ancestor of the root directory var subDirectoryPath, subDirectory; if (rootPath !== undefined) { while (!isInDirectoryPath(dirPath, rootPath)) { @@ -84009,7 +68099,6 @@ var ts; return ts.fileExtensionIsOneOf(path, failedLookupDefaultExtensions); } function watchFailedLookupLocationOfResolution(resolution) { - // No need to set the resolution refCount if (!resolution.failedLookupLocations || !resolution.failedLookupLocations.length) { return; } @@ -84025,8 +68114,6 @@ var ts; var failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); var _a = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath), dir = _a.dir, dirPath = _a.dirPath, ignore = _a.ignore; if (!ignore) { - // If the failed lookup location path is not one of the supported extensions, - // store it in the custom path if (!isPathWithDefaultFailedLookupExtension(failedLookupLocationPath)) { var refCount = customFailedLookupPaths.get(failedLookupLocationPath) || 0; customFailedLookupPaths.set(failedLookupLocationPath, refCount + 1); @@ -84040,7 +68127,7 @@ var ts; } } if (setAtRoot) { - setDirectoryWatcher(rootDir, rootPath); // TODO: GH#18217 + setDirectoryWatcher(rootDir, rootPath); } } function setDirectoryWatcher(dir, dirPath) { @@ -84091,23 +68178,20 @@ var ts; } function removeDirectoryWatcher(dirPath) { var dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); - // Do not close the watcher yet since it might be needed by other failed lookup locations. dirWatcher.refCount--; } function createDirectoryWatcher(directory, dirPath) { return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, function (fileOrDirectory) { var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); if (cachedDirectoryStructureHost) { - // Since the file existence changed, update the sourceFiles cache cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } if (!allFilesHaveInvalidatedResolution && invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath)) { resolutionHost.onInvalidatedResolution(); } - }, 1 /* Recursive */); + }, 1); } function removeResolutionsOfFileFromCache(cache, filePath) { - // Deleted file, stop watching failed lookups for all the resolutions in the file var resolutions = cache.get(filePath); if (resolutions) { resolutions.forEach(stopWatchFailedLookupLocationOfResolution); @@ -84133,7 +68217,6 @@ var ts; } seenInDir.set(name, true); if (!resolution.isInvalidated && isInvalidatedResolution(resolution, getResolutionWithResolvedFileName)) { - // Mark the file as needing re-evaluation of module resolution instead of using it blindly. resolution.isInvalidated = true; (filesWithInvalidatedResolutions || (filesWithInvalidatedResolutions = ts.createMap())).set(containingFilePath, true); } @@ -84145,8 +68228,6 @@ var ts; return resolvedModuleNames.size > maxSize || resolvedTypeReferenceDirectives.size > maxSize; } function invalidateResolutions(isInvalidatedResolution) { - // If more than maxNumberOfFilesToIterateForInvalidation present, - // just invalidated all files and recalculate the resolutions for files instead if (hasReachedResolutionIterationLimit()) { allFilesHaveInvalidatedResolution = true; return; @@ -84156,11 +68237,9 @@ var ts; } function invalidateResolutionOfFile(filePath) { removeResolutionsOfFile(filePath); - invalidateResolutions( - // Resolution is invalidated if the resulting file name is same as the deleted file path - function (resolution, getResolutionWithResolvedFileName) { + invalidateResolutions(function (resolution, getResolutionWithResolvedFileName) { var result = getResolutionWithResolvedFileName(resolution); - return !!result && resolutionHost.toPath(result.resolvedFileName) === filePath; // TODO: GH#18217 + return !!result && resolutionHost.toPath(result.resolvedFileName) === filePath; }); } function setFilesWithInvalidatedNonRelativeUnresolvedImports(filesMap) { @@ -84170,17 +68249,12 @@ var ts; function invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, isCreatingWatchedDirectory) { var isChangedFailedLookupLocation; if (isCreatingWatchedDirectory) { - // Watching directory is created - // Invalidate any resolution has failed lookup in this directory isChangedFailedLookupLocation = function (location) { return isInDirectoryPath(fileOrDirectoryPath, resolutionHost.toPath(location)); }; } else { - // Some file or directory in the watching directory is created - // Return early if it does not have any of the watching extension or not the custom failed lookup path var dirOfFileOrDirectory = ts.getDirectoryPath(fileOrDirectoryPath); if (isNodeModulesAtTypesDirectory(fileOrDirectoryPath) || isNodeModulesDirectory(fileOrDirectoryPath) || isNodeModulesAtTypesDirectory(dirOfFileOrDirectory) || isNodeModulesDirectory(dirOfFileOrDirectory)) { - // Invalidate any resolution from this directory isChangedFailedLookupLocation = function (location) { var locationPath = resolutionHost.toPath(location); return locationPath === fileOrDirectoryPath || ts.startsWith(resolutionHost.toPath(location), fileOrDirectoryPath); @@ -84190,19 +68264,15 @@ var ts; if (!isPathWithDefaultFailedLookupExtension(fileOrDirectoryPath) && !customFailedLookupPaths.has(fileOrDirectoryPath)) { return false; } - // Ignore emits from the program if (ts.isEmittedFileOfProgram(resolutionHost.getCurrentProgram(), fileOrDirectoryPath)) { return false; } - // Resolution need to be invalidated if failed lookup location is same as the file or directory getting created isChangedFailedLookupLocation = function (location) { return resolutionHost.toPath(location) === fileOrDirectoryPath; }; } } var hasChangedFailedLookupLocation = function (resolution) { return ts.some(resolution.failedLookupLocations, isChangedFailedLookupLocation); }; var invalidatedFilesCount = filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size; - invalidateResolutions( - // Resolution is invalidated if the resulting file name is same as the deleted file path - hasChangedFailedLookupLocation); + invalidateResolutions(hasChangedFailedLookupLocation); return allFilesHaveInvalidatedResolution || filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size !== invalidatedFilesCount; } function closeTypeRootsWatch() { @@ -84219,39 +68289,24 @@ var ts; return !ignore && directoryWatchesOfFailedLookups.has(dirPath) ? dirPath : undefined; } function createTypeRootsWatch(typeRootPath, typeRoot) { - // Create new watch and recursive info return resolutionHost.watchTypeRootsDirectory(typeRoot, function (fileOrDirectory) { var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); if (cachedDirectoryStructureHost) { - // Since the file existence changed, update the sourceFiles cache cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } - // For now just recompile - // We could potentially store more data here about whether it was/would be really be used or not - // and with that determine to trigger compilation but for now this is enough resolutionHost.onChangedAutomaticTypeDirectiveNames(); - // Since directory watchers invoked are flaky, the failed lookup location events might not be triggered - // So handle to failed lookup locations here as well to ensure we are invalidating resolutions var dirPath = getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath); if (dirPath && invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath)) { resolutionHost.onInvalidatedResolution(); } - }, 1 /* Recursive */); + }, 1); } - /** - * Watches the types that would get added as part of getAutomaticTypeDirectiveNames - * To be called when compiler options change - */ function updateTypeRootsWatch() { var options = resolutionHost.getCompilationSettings(); if (options.types) { - // No need to do any watch since resolution cache is going to handle the failed lookups - // for the types added by this closeTypeRootsWatch(); return; } - // we need to assume the directories exist to ensure that we can get all the type root directories that get included - // But filter directories that are at root level to say directory doesnt exist, so that we arent watching them var typeRoots = ts.getEffectiveTypeRoots(options, { directoryExists: directoryExistsForTypeRootWatch, getCurrentDirectory: getCurrentDirectory }); if (typeRoots) { ts.mutateMap(typeRootsWatches, ts.arrayToMap(typeRoots, function (tr) { return resolutionHost.toPath(tr); }), { @@ -84263,11 +68318,6 @@ var ts; closeTypeRootsWatch(); } } - /** - * Use this function to return if directory exists to get type roots to watch - * If we return directory exists then only the paths will be added to type roots - * Hence return true for all directories except root directories which are filtered from watching - */ function directoryExistsForTypeRootWatch(nodeTypesDirectory) { var dir = ts.getDirectoryPath(ts.getDirectoryPath(nodeTypesDirectory)); var dirPath = resolutionHost.toPath(dir); @@ -84276,13 +68326,10 @@ var ts; } ts.createResolutionCache = createResolutionCache; })(ts || (ts = {})); -// Used by importFixes to synthesize import module specifiers. -/* @internal */ var ts; (function (ts) { var moduleSpecifiers; (function (moduleSpecifiers) { - // Note: fromSourceFile is just for usesJsExtensionOnImports function getModuleSpecifier(compilerOptions, fromSourceFile, fromSourceFileName, toFileName, host, preferences) { if (preferences === void 0) { preferences = {}; } var info = getInfo(compilerOptions, fromSourceFile, fromSourceFileName, host); @@ -84290,7 +68337,6 @@ var ts; ts.first(getLocalModuleSpecifiers(toFileName, info, compilerOptions, preferences)); } moduleSpecifiers.getModuleSpecifier = getModuleSpecifier; - // For each symlink/original for a module, returns a list of ways to import that file. function getModuleSpecifiers(moduleSymbol, program, importingSourceFile, host, preferences) { var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol); if (ambient) @@ -84304,7 +68350,6 @@ var ts; }); } moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers; - // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path function getInfo(compilerOptions, importingSourceFile, importingSourceFileName, host) { var moduleResolutionKind = ts.getEmitModuleResolutionKind(compilerOptions); var addJsExtension = usesJsExtensionOnImports(importingSourceFile); @@ -84344,33 +68389,6 @@ var ts; if (isPathRelativeToParent(relativeToBaseUrl)) { return [relativePath]; } - /* - Prefer a relative import over a baseUrl import if it doesn't traverse up to baseUrl. - - Suppose we have: - baseUrl = /base - sourceDirectory = /base/a/b - moduleFileName = /base/foo/bar - Then: - relativePath = ../../foo/bar - getRelativePathNParents(relativePath) = 2 - pathFromSourceToBaseUrl = ../../ - getRelativePathNParents(pathFromSourceToBaseUrl) = 2 - 2 < 2 = false - In this case we should prefer using the baseUrl path "/a/b" instead of the relative path "../../foo/bar". - - Suppose we have: - baseUrl = /base - sourceDirectory = /base/foo/a - moduleFileName = /base/foo/bar - Then: - relativePath = ../a - getRelativePathNParents(relativePath) = 1 - pathFromSourceToBaseUrl = ../../ - getRelativePathNParents(pathFromSourceToBaseUrl) = 2 - 1 < 2 = true - In this case we should prefer using the relative path "../a" instead of the baseUrl path "foo/a". - */ var pathFromSourceToBaseUrl = ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(sourceDirectory, baseUrl, getCanonicalFileName)); var relativeFirst = getRelativePathNParents(relativePath) < getRelativePathNParents(pathFromSourceToBaseUrl); return relativeFirst ? [relativePath, importRelativeToBaseUrl] : [importRelativeToBaseUrl, relativePath]; @@ -84379,13 +68397,9 @@ var ts; var imports = _a.imports; return ts.firstDefined(imports, function (_a) { var text = _a.text; - return ts.pathIsRelative(text) ? ts.fileExtensionIs(text, ".js" /* Js */) : undefined; + return ts.pathIsRelative(text) ? ts.fileExtensionIs(text, ".js") : undefined; }) || false; } - /** - * Looks for a existing imports that use symlinks to this module. - * Only if no symlink is available, the real path will be used. - */ function getAllModulePaths(program, _a) { var fileName = _a.fileName; var symlinks = ts.mapDefined(program.getSourceFiles(), function (sf) { @@ -84448,36 +68462,28 @@ var ts; function tryGetModuleNameFromTypeRoots(options, host, getCanonicalFileName, moduleFileName, addJsExtension) { var roots = ts.getEffectiveTypeRoots(options, host); return ts.firstDefined(roots, function (unNormalizedTypeRoot) { - var typeRoot = ts.toPath(unNormalizedTypeRoot, /*basePath*/ undefined, getCanonicalFileName); + var typeRoot = ts.toPath(unNormalizedTypeRoot, undefined, getCanonicalFileName); if (ts.startsWith(moduleFileName, typeRoot)) { - // For a type definition, we can strip `/index` even with classic resolution. return removeExtensionAndIndexPostFix(moduleFileName.substring(typeRoot.length + 1), ts.ModuleResolutionKind.NodeJs, addJsExtension); } }); } function tryGetModuleNameAsNodeModule(options, moduleFileName, host, getCanonicalFileName, sourceDirectory) { if (ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs) { - // nothing to do here return undefined; } var parts = getNodeModulePathParts(moduleFileName); if (!parts) { return undefined; } - // Simplify the full file path to something that can be resolved by Node. - // If the module could be imported by a directory name, use that directory's name var moduleSpecifier = getDirectoryOrExtensionlessFileName(moduleFileName); - // Get a path that's relative to node_modules or the importing file's path - // if node_modules folder is in this folder or any of its parent folders, no need to keep it. if (!ts.startsWith(sourceDirectory, moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex))) return undefined; - // If the module was found in @types, get the actual Node package name return ts.getPackageNameFromAtTypesDirectory(moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1)); function getDirectoryOrExtensionlessFileName(path) { - // If the file is the main module, it can be imported by the package name var packageRootPath = path.substring(0, parts.packageRootIndex); var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); - if (host.fileExists(packageJsonPath)) { // TODO: GH#18217 + if (host.fileExists(packageJsonPath)) { var packageJsonContent = JSON.parse(host.readFile(packageJsonPath)); if (packageJsonContent) { var mainFileRelative = packageJsonContent.typings || packageJsonContent.types || packageJsonContent.main; @@ -84489,10 +68495,7 @@ var ts; } } } - // We still have a file name - remove the extension var fullModulePathWithoutExtension = ts.removeFileExtension(path); - // If the file is /index, it can be imported by its directory name - // IFF there is not _also_ a file by the same name if (getCanonicalFileName(fullModulePathWithoutExtension.substring(parts.fileNameIndex)) === "/index" && !tryGetAnyFileFromPath(host, fullModulePathWithoutExtension.substring(0, parts.fileNameIndex))) { return fullModulePathWithoutExtension.substring(0, parts.fileNameIndex); } @@ -84500,71 +68503,60 @@ var ts; } } function tryGetAnyFileFromPath(host, path) { - // We check all js, `node` and `json` extensions in addition to TS, since node module resolution would also choose those over the directory - var extensions = ts.getSupportedExtensions({ allowJs: true }, [{ extension: "node", isMixedContent: false }, { extension: "json", isMixedContent: false, scriptKind: 6 /* JSON */ }]); + var extensions = ts.getSupportedExtensions({ allowJs: true }, [{ extension: "node", isMixedContent: false }, { extension: "json", isMixedContent: false, scriptKind: 6 }]); for (var _i = 0, extensions_3 = extensions; _i < extensions_3.length; _i++) { var e = extensions_3[_i]; var fullPath = path + e; - if (host.fileExists(fullPath)) { // TODO: GH#18217 + if (host.fileExists(fullPath)) { return fullPath; } } } function getNodeModulePathParts(fullPath) { - // If fullPath can't be valid module file within node_modules, returns undefined. - // Example of expected pattern: /base/path/node_modules/[@scope/otherpackage/@otherscope/node_modules/]package/[subdirectory/]file.js - // Returns indices: ^ ^ ^ ^ var topLevelNodeModulesIndex = 0; var topLevelPackageNameIndex = 0; var packageRootIndex = 0; var fileNameIndex = 0; - var States; - (function (States) { - States[States["BeforeNodeModules"] = 0] = "BeforeNodeModules"; - States[States["NodeModules"] = 1] = "NodeModules"; - States[States["Scope"] = 2] = "Scope"; - States[States["PackageContent"] = 3] = "PackageContent"; - })(States || (States = {})); var partStart = 0; var partEnd = 0; - var state = 0 /* BeforeNodeModules */; + var state = 0; while (partEnd >= 0) { partStart = partEnd; partEnd = fullPath.indexOf("/", partStart + 1); switch (state) { - case 0 /* BeforeNodeModules */: + case 0: if (fullPath.indexOf("/node_modules/", partStart) === partStart) { topLevelNodeModulesIndex = partStart; topLevelPackageNameIndex = partEnd; - state = 1 /* NodeModules */; + state = 1; } break; - case 1 /* NodeModules */: - case 2 /* Scope */: - if (state === 1 /* NodeModules */ && fullPath.charAt(partStart + 1) === "@") { - state = 2 /* Scope */; + case 1: + case 2: + if (state === 1 && fullPath.charAt(partStart + 1) === "@") { + state = 2; } else { packageRootIndex = partEnd; - state = 3 /* PackageContent */; + state = 3; } break; - case 3 /* PackageContent */: + case 3: if (fullPath.indexOf("/node_modules/", partStart) === partStart) { - state = 1 /* NodeModules */; + state = 1; } else { - state = 3 /* PackageContent */; + state = 3; } break; } } fileNameIndex = partStart; - return state > 1 /* NodeModules */ ? { topLevelNodeModulesIndex: topLevelNodeModulesIndex, topLevelPackageNameIndex: topLevelPackageNameIndex, packageRootIndex: packageRootIndex, fileNameIndex: fileNameIndex } : undefined; + return state > 1 ? { topLevelNodeModulesIndex: topLevelNodeModulesIndex, topLevelPackageNameIndex: topLevelPackageNameIndex, packageRootIndex: packageRootIndex, fileNameIndex: fileNameIndex } : undefined; } function getPathRelativeToRootDirs(path, rootDirs, getCanonicalFileName) { return ts.firstDefined(rootDirs, function (rootDir) { - var relativePath = getRelativePathIfInDirectory(path, rootDir, getCanonicalFileName); // TODO: GH#18217 + var relativePath = getRelativePathIfInDirectory(path, rootDir, getCanonicalFileName); return isPathRelativeToParent(relativePath) ? undefined : relativePath; }); } @@ -84577,7 +68569,7 @@ var ts; : noExtension; } function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) { - var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); + var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, false); return ts.isRootedDiskPath(relativePath) ? undefined : relativePath; } function isPathRelativeToParent(path) { @@ -84585,17 +68577,13 @@ var ts; } })(moduleSpecifiers = ts.moduleSpecifiers || (ts.moduleSpecifiers = {})); })(ts || (ts = {})); -/*@internal*/ var ts; (function (ts) { var sysFormatDiagnosticsHost = ts.sys ? { getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); }, getNewLine: function () { return ts.sys.newLine; }, getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames) - } : undefined; // TODO: GH#18217 - /** - * Create a function that reports error by writing to the system and handles the formating of the diagnostic - */ + } : undefined; function createDiagnosticReporter(system, pretty) { var host = system === ts.sys ? sysFormatDiagnosticsHost : { getCurrentDirectory: function () { return system.getCurrentDirectory(); }, @@ -84609,18 +68597,14 @@ var ts; return function (diagnostic) { diagnostics[0] = diagnostic; system.write(ts.formatDiagnosticsWithColorAndContext(diagnostics, host) + host.getNewLine()); - diagnostics[0] = undefined; // TODO: GH#18217 + diagnostics[0] = undefined; }; } ts.createDiagnosticReporter = createDiagnosticReporter; - /** @internal */ ts.nonClearingMessageCodes = [ ts.Diagnostics.Found_1_error_Watching_for_file_changes.code, ts.Diagnostics.Found_0_errors_Watching_for_file_changes.code ]; - /** - * @returns Whether the screen was cleared. - */ function clearScreenIfNotWatchingForFileChanges(system, diagnostic, options) { if (system.clearScreen && !options.preserveWatchOutput && @@ -84632,7 +68616,6 @@ var ts; } return false; } - /** @internal */ ts.screenStartingMessageCodes = [ ts.Diagnostics.Starting_compilation_in_watch_mode.code, ts.Diagnostics.File_change_detected_Starting_incremental_compilation.code, @@ -84642,9 +68625,6 @@ var ts; ? newLine + newLine : newLine; } - /** - * Create a function that reports watch status by writing to the system and handles the formating of the diagnostic - */ function createWatchStatusReporter(system, pretty) { return pretty ? function (diagnostic, newLine, options) { @@ -84664,26 +68644,19 @@ var ts; }; } ts.createWatchStatusReporter = createWatchStatusReporter; - /** Parses config file using System interface */ function parseConfigFileWithSystem(configFileName, optionsToExtend, system, reportDiagnostic) { var host = system; host.onUnRecoverableConfigFileDiagnostic = function (diagnostic) { return reportUnrecoverableDiagnostic(ts.sys, reportDiagnostic, diagnostic); }; var result = ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host); - host.onUnRecoverableConfigFileDiagnostic = undefined; // TODO: GH#18217 + host.onUnRecoverableConfigFileDiagnostic = undefined; return result; } ts.parseConfigFileWithSystem = parseConfigFileWithSystem; - /** - * Helper that emit files, report diagnostics and lists emitted and/or source files depending on compiler options - */ function emitFilesAndReportErrors(program, reportDiagnostic, writeFileName, reportSummary) { - // First get and report any syntactic errors. var diagnostics = program.getConfigFileParsingDiagnostics().slice(); var configFileParsingDiagnosticsLength = diagnostics.length; ts.addRange(diagnostics, program.getSyntacticDiagnostics()); var reportSemanticDiagnostics = false; - // If we didn't have any syntactic errors, then also try getting the global and - // semantic errors. if (diagnostics.length === configFileParsingDiagnosticsLength) { ts.addRange(diagnostics, program.getOptionsDiagnostics()); ts.addRange(diagnostics, program.getGlobalDiagnostics()); @@ -84691,7 +68664,6 @@ var ts; reportSemanticDiagnostics = true; } } - // Emit and report any errors we ran into. var _a = program.emit(), emittedFiles = _a.emittedFiles, emitSkipped = _a.emitSkipped, emitDiagnostics = _a.diagnostics; ts.addRange(diagnostics, emitDiagnostics); if (reportSemanticDiagnostics) { @@ -84714,21 +68686,15 @@ var ts; reportSummary(diagnostics.filter(function (diagnostic) { return diagnostic.category === ts.DiagnosticCategory.Error; }).length); } if (emitSkipped && diagnostics.length > 0) { - // If the emitter didn't emit anything, then pass that value along. return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } else if (diagnostics.length > 0) { - // The emitter emitted something, inform the caller if that happened in the presence - // of diagnostics or not. return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated; } return ts.ExitStatus.Success; } ts.emitFilesAndReportErrors = emitFilesAndReportErrors; var noopFileWatcher = { close: ts.noop }; - /** - * Creates the watch compiler host that can be extended with config file or root file names and options host - */ function createWatchCompilerHost(system, createProgram, reportDiagnostic, reportWatchStatus) { if (system === void 0) { system = ts.sys; } if (!createProgram) { @@ -84788,16 +68754,10 @@ var ts; emitFilesAndReportErrors(builderProgram, reportDiagnostic, writeFileName, reportSummary); } } - /** - * Report error and exit - */ function reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic) { reportDiagnostic(diagnostic); system.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); } - /** - * Creates the watch compiler host from system for config file in watch mode - */ function createWatchCompilerHostOfConfigFile(configFileName, optionsToExtend, system, createProgram, reportDiagnostic, reportWatchStatus) { var diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); var host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus); @@ -84807,9 +68767,6 @@ var ts; return host; } ts.createWatchCompilerHostOfConfigFile = createWatchCompilerHostOfConfigFile; - /** - * Creates the watch compiler host from system for compiling root files and options in watch mode - */ function createWatchCompilerHostOfFilesAndCompilerOptions(rootFiles, options, system, createProgram, reportDiagnostic, reportWatchStatus) { var host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus); host.rootFiles = rootFiles; @@ -84821,7 +68778,7 @@ var ts; (function (ts) { function createWatchCompilerHost(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus) { if (ts.isArray(rootFilesOrConfigFileName)) { - return ts.createWatchCompilerHostOfFilesAndCompilerOptions(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus); // TODO: GH#18217 + return ts.createWatchCompilerHostOfFilesAndCompilerOptions(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus); } else { return ts.createWatchCompilerHostOfConfigFile(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus); @@ -84831,14 +68788,14 @@ var ts; var initialVersion = 1; function createWatchProgram(host) { var builderProgram; - var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc - var missingFilesMap; // Map of file watchers for the missing files - var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file - var timerToUpdateProgram; // timer callback to recompile the program - var sourceFilesCache = ts.createMap(); // Cache that stores the source file and version info - var missingFilePathsRequestedForRelease; // These paths are held temparirly so that we can remove the entry from source file cache if the file is not tracked by missing files - var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations - var hasChangedAutomaticTypeDirectiveNames = false; // True if the automatic type directives have changed + var reloadLevel; + var missingFilesMap; + var watchedWildcardDirectories; + var timerToUpdateProgram; + var sourceFilesCache = ts.createMap(); + var missingFilePathsRequestedForRelease; + var hasChangedCompilerOptions = false; + var hasChangedAutomaticTypeDirectiveNames = false; var useCaseSensitiveFileNames = host.useCaseSensitiveFileNames(); var currentDirectory = host.getCurrentDirectory(); var getCurrentDirectory = function () { return currentDirectory; }; @@ -84861,7 +68818,6 @@ var ts; getCurrentDirectory: getCurrentDirectory, onUnRecoverableConfigFileDiagnostic: host.onUnRecoverableConfigFileDiagnostic }; - // From tsc we want to get already parsed result and hence check for rootFileNames var newLine = updateNewLine(); reportWatchDiagnostic(ts.Diagnostics.Starting_compilation_in_watch_mode); if (configFileName) { @@ -84878,7 +68834,7 @@ var ts; var trace = host.trace && (function (s) { host.trace(s + newLine); }); var watchLogLevel = trace ? compilerOptions.extendedDiagnostics ? ts.WatchLogLevel.Verbose : compilerOptions.diagnostis ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None; - var writeLog = watchLogLevel !== ts.WatchLogLevel.None ? trace : ts.noop; // TODO: GH#18217 + var writeLog = watchLogLevel !== ts.WatchLogLevel.None ? trace : ts.noop; var _b = ts.getWatchFactory(watchLogLevel, writeLog), watchFile = _b.watchFile, watchFilePath = _b.watchFilePath, watchDirectory = _b.watchDirectory; var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); writeLog("Current directory: " + currentDirectory + " CaseSensitiveFileNames: " + useCaseSensitiveFileNames); @@ -84886,7 +68842,6 @@ var ts; watchFile(host, configFileName, scheduleProgramReload, ts.PollingInterval.High, "Config file"); } var compilerHost = { - // Members for CompilerHost getSourceFile: function (fileName, languageVersion, onError, shouldCreateNewSourceFile) { return getVersionedSourceFileByPath(fileName, toPath(fileName), languageVersion, onError, shouldCreateNewSourceFile); }, getSourceFileByPath: getVersionedSourceFileByPath, getDefaultLibLocation: host.getDefaultLibLocation && (function () { return host.getDefaultLibLocation(); }), @@ -84905,7 +68860,6 @@ var ts; getEnvironmentVariable: host.getEnvironmentVariable ? (function (name) { return host.getEnvironmentVariable(name); }) : (function () { return ""; }), onReleaseOldSourceFile: onReleaseOldSourceFile, createHash: host.createHash && (function (data) { return host.createHash(data); }), - // Members for ResolutionCacheHost toPath: toPath, getCompilationSettings: function () { return compilerOptions; }, watchDirectoryOfFailedLookupLocation: function (dir, cb, flags) { return watchDirectory(host, dir, cb, flags, "Failed Lookup Locations"); }, @@ -84920,12 +68874,9 @@ var ts; getCurrentProgram: getCurrentProgram, writeLog: writeLog }; - // Cache for the module resolution var resolutionCache = ts.createResolutionCache(compilerHost, configFileName ? ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFileName, currentDirectory)) : - currentDirectory, - /*logChangesWhenResolvingModule*/ false); - // Resolve module using host module resolution strategy if provided otherwise use resolution cache to resolve module names + currentDirectory, false); compilerHost.resolveModuleNames = host.resolveModuleNames ? (function (moduleNames, containingFile, reusedNames) { return host.resolveModuleNames(moduleNames, containingFile, reusedNames); }) : (function (moduleNames, containingFile, reusedNames) { return resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames); }); @@ -84934,7 +68885,6 @@ var ts; (function (typeDirectiveNames, containingFile) { return resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile); }); var userProvidedResolution = !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives; synchronizeProgram(); - // Update the wild card directory watch watchConfigFileWildCardDirectories(); return configFileName ? { getCurrentProgram: getCurrentBuilderProgram, getProgram: synchronizeProgram } : @@ -84954,11 +68904,10 @@ var ts; resolutionCache.clear(); } } - // All resolutions are invalid if user provided resolutions var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames)) { if (hasChangedConfigFileParsingErrors) { - builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics); + builderProgram = createProgram(undefined, undefined, compilerHost, builderProgram, configFileParsingDiagnostics); hasChangedConfigFileParsingErrors = false; } } @@ -84971,7 +68920,6 @@ var ts; return builderProgram; } function createNewProgram(program, hasInvalidatedResolution) { - // Compile the program if (watchLogLevel !== ts.WatchLogLevel.None) { writeLog("CreatingProgramWith::"); writeLog(" roots: " + JSON.stringify(rootFileNames)); @@ -84985,17 +68933,11 @@ var ts; compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames; builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics); resolutionCache.finishCachingPerDirectoryResolution(); - // Update watches ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = ts.createMap()), watchMissingFilePath); if (needsUpdateInTypeRootWatch) { resolutionCache.updateTypeRootsWatch(); } if (missingFilePathsRequestedForRelease) { - // These are the paths that program creater told us as not in use any more but were missing on the disk. - // We didnt remove the entry for them from sourceFiles cache so that we dont have to do File IO, - // if there is already watcher for it (for missing files) - // At this point our watches were updated, hence now we know that these paths are not tracked and need to be removed - // so that at later time we have correct result of their presence for (var _i = 0, missingFilePathsRequestedForRelease_1 = missingFilePathsRequestedForRelease; _i < missingFilePathsRequestedForRelease_1.length; _i++) { var missingFilePath = missingFilePathsRequestedForRelease_1[_i]; if (!missingFilesMap.has(missingFilePath)) { @@ -85024,8 +68966,6 @@ var ts; } function fileExists(fileName) { var path = toPath(fileName); - // If file is missing on host from cache, we can definitely say file doesnt exist - // otherwise we need to ensure from the disk if (isFileMissingOnHost(sourceFilesCache.get(path))) { return true; } @@ -85033,11 +68973,9 @@ var ts; } function getVersionedSourceFileByPath(fileName, path, languageVersion, onError, shouldCreateNewSourceFile) { var hostSourceFile = sourceFilesCache.get(path); - // No source file on the host if (isFileMissingOnHost(hostSourceFile)) { return undefined; } - // Create new source file if requested or the versions dont match if (!hostSourceFile || shouldCreateNewSourceFile || !isFilePresentOnHost(hostSourceFile) || hostSourceFile.version.toString() !== hostSourceFile.sourceFile.version) { var sourceFile = getNewSourceFile(); if (hostSourceFile) { @@ -85045,7 +68983,6 @@ var ts; hostSourceFile.version++; } if (sourceFile) { - // Set the source file and create file watcher now that file was present on the disk hostSourceFile.sourceFile = sourceFile; sourceFile.version = hostSourceFile.version.toString(); if (!hostSourceFile.fileWatcher) { @@ -85053,7 +68990,6 @@ var ts; } } else { - // There is no source file on host any more, close the watch, missing file paths will track it if (isFilePresentOnHost(hostSourceFile)) { hostSourceFile.fileWatcher.close(); } @@ -85093,7 +69029,6 @@ var ts; var hostSourceFile = sourceFilesCache.get(path); if (hostSourceFile !== undefined) { if (isFileMissingOnHost(hostSourceFile)) { - // The next version, lets set it as presence unknown file sourceFilesCache.set(path, { version: Number(hostSourceFile) + 1 }); } else { @@ -85107,12 +69042,7 @@ var ts; } function onReleaseOldSourceFile(oldSourceFile, _oldOptions) { var hostSourceFileInfo = sourceFilesCache.get(oldSourceFile.path); - // If this is the source file thats in the cache and new program doesnt need it, - // remove the cached entry. - // Note we arent deleting entry if file became missing in new program or - // there was version update and new source file was created. if (hostSourceFileInfo) { - // record the missing file paths so they can be removed later if watchers arent tracking them if (isFileMissingOnHost(hostSourceFileInfo)) { (missingFilePathsRequestedForRelease || (missingFilePathsRequestedForRelease = [])).push(oldSourceFile.path); } @@ -85130,9 +69060,6 @@ var ts; host.onWatchStatusChange(ts.createCompilerDiagnostic(message), newLine, compilerOptions || optionsToExtendForConfigFile); } } - // Upon detecting a file change, wait for 250ms and then perform a recompilation. This gives batch - // operations (such as saving all modified files in an editor) a chance to complete before we kick - // off a new compilation. function scheduleProgramUpdate() { if (!host.setTimeout || !host.clearTimeout) { return; @@ -85173,7 +69100,6 @@ var ts; hasChangedConfigFileParsingErrors = true; } rootFileNames = result.fileNames; - // Update the program synchronizeProgram(); } function reloadConfigFile() { @@ -85185,27 +69111,24 @@ var ts; parseConfigFile(); hasChangedCompilerOptions = true; synchronizeProgram(); - // Update the wild card directory watch watchConfigFileWildCardDirectories(); } function parseConfigFile() { - setConfigFileParsingResult(ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtendForConfigFile, parseConfigFileHost)); // TODO: GH#18217 + setConfigFileParsingResult(ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtendForConfigFile, parseConfigFileHost)); } function setConfigFileParsingResult(configFileParseResult) { rootFileNames = configFileParseResult.fileNames; compilerOptions = configFileParseResult.options; - configFileSpecs = configFileParseResult.configFileSpecs; // TODO: GH#18217 + configFileSpecs = configFileParseResult.configFileSpecs; configFileParsingDiagnostics = ts.getConfigFileParsingDiagnostics(configFileParseResult); hasChangedConfigFileParsingErrors = true; } function onSourceFileChange(fileName, eventKind, path) { updateCachedSystemWithFile(fileName, path, eventKind); - // Update the source file cache if (eventKind === ts.FileWatcherEventKind.Deleted && sourceFilesCache.get(path)) { resolutionCache.invalidateResolutionOfFile(path); } nextSourceFileVersion(path); - // Update the program scheduleProgramUpdate(); } function updateCachedSystemWithFile(fileName, path, eventKind) { @@ -85221,9 +69144,7 @@ var ts; if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) { missingFilesMap.get(missingFilePath).close(); missingFilesMap.delete(missingFilePath); - // Delete the entry in the source files cache so that new source file is created nextSourceFileVersion(missingFilePath); - // When a missing file is created, we should update the graph. scheduleProgramUpdate(); } } @@ -85239,21 +69160,16 @@ var ts; return watchDirectory(host, directory, function (fileOrDirectory) { ts.Debug.assert(!!configFileName); var fileOrDirectoryPath = toPath(fileOrDirectory); - // Since the file existance changed, update the sourceFiles cache if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } nextSourceFileVersion(fileOrDirectoryPath); - // If the the added or created file or directory is not supported file name, ignore the file - // But when watched directory is added/removed, we need to reload the file list if (fileOrDirectoryPath !== directory && ts.hasExtension(fileOrDirectoryPath) && !ts.isSupportedSourceFileName(fileOrDirectory, compilerOptions)) { writeLog("Project: " + configFileName + " Detected file add/remove of non supported extension: " + fileOrDirectory); return; } - // Reload is pending, do the reload if (reloadLevel !== ts.ConfigFileProgramReloadLevel.Full) { reloadLevel = ts.ConfigFileProgramReloadLevel.Partial; - // Schedule Update the program scheduleProgramUpdate(); } }, flags, "Wild card directories"); @@ -85289,14 +69205,7 @@ var ts; var BuildResultFlags; (function (BuildResultFlags) { BuildResultFlags[BuildResultFlags["None"] = 0] = "None"; - /** - * No errors of any kind occurred during build - */ BuildResultFlags[BuildResultFlags["Success"] = 1] = "Success"; - /** - * None of the .d.ts files emitted by this build were - * different from the existing files on disk - */ BuildResultFlags[BuildResultFlags["DeclarationOutputUnchanged"] = 2] = "DeclarationOutputUnchanged"; BuildResultFlags[BuildResultFlags["ConfigFileErrors"] = 4] = "ConfigFileErrors"; BuildResultFlags[BuildResultFlags["SyntaxErrors"] = 8] = "SyntaxErrors"; @@ -85308,27 +69217,15 @@ var ts; (function (UpToDateStatusType) { UpToDateStatusType[UpToDateStatusType["Unbuildable"] = 0] = "Unbuildable"; UpToDateStatusType[UpToDateStatusType["UpToDate"] = 1] = "UpToDate"; - /** - * The project appears out of date because its upstream inputs are newer than its outputs, - * but all of its outputs are actually newer than the previous identical outputs of its (.d.ts) inputs. - * This means we can Pseudo-build (just touch timestamps), as if we had actually built this project. - */ UpToDateStatusType[UpToDateStatusType["UpToDateWithUpstreamTypes"] = 2] = "UpToDateWithUpstreamTypes"; UpToDateStatusType[UpToDateStatusType["OutputMissing"] = 3] = "OutputMissing"; UpToDateStatusType[UpToDateStatusType["OutOfDateWithSelf"] = 4] = "OutOfDateWithSelf"; UpToDateStatusType[UpToDateStatusType["OutOfDateWithUpstream"] = 5] = "OutOfDateWithUpstream"; UpToDateStatusType[UpToDateStatusType["UpstreamOutOfDate"] = 6] = "UpstreamOutOfDate"; UpToDateStatusType[UpToDateStatusType["UpstreamBlocked"] = 7] = "UpstreamBlocked"; - /** - * Projects with no outputs (i.e. "solution" files) - */ UpToDateStatusType[UpToDateStatusType["ContainerOnly"] = 8] = "ContainerOnly"; })(UpToDateStatusType = ts.UpToDateStatusType || (ts.UpToDateStatusType = {})); - /** - * A FileMap maintains a normalized-key to value relationship - */ function createFileMap() { - // tslint:disable-next-line:no-null-keyword var lookup = ts.createMap(); return { setValue: setValue, @@ -85402,14 +69299,14 @@ var ts; }; } function getOutputDeclarationFileName(inputFileName, configFile) { - var relativePath = ts.getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath), inputFileName, /*ignoreCase*/ true); + var relativePath = ts.getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath), inputFileName, true); var outputPath = ts.resolvePath(configFile.options.declarationDir || configFile.options.outDir || ts.getDirectoryPath(configFile.options.configFilePath), relativePath); - return ts.changeExtension(outputPath, ".d.ts" /* Dts */); + return ts.changeExtension(outputPath, ".d.ts"); } function getOutputJavaScriptFileName(inputFileName, configFile) { - var relativePath = ts.getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath), inputFileName, /*ignoreCase*/ true); + var relativePath = ts.getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath), inputFileName, true); var outputPath = ts.resolvePath(configFile.options.outDir || ts.getDirectoryPath(configFile.options.configFilePath), relativePath); - return ts.changeExtension(outputPath, (ts.fileExtensionIs(inputFileName, ".tsx" /* Tsx */) && configFile.options.jsx === 1 /* Preserve */) ? ".jsx" /* Jsx */ : ".js" /* Js */); + return ts.changeExtension(outputPath, (ts.fileExtensionIs(inputFileName, ".tsx") && configFile.options.jsx === 1) ? ".jsx" : ".js"); } function getOutputFileNames(inputFileName, configFile) { if (configFile.options.outFile) { @@ -85432,7 +69329,7 @@ var ts; var outputs = []; outputs.push(project.options.outFile); if (project.options.declaration) { - var dts = ts.changeExtension(project.options.outFile, ".d.ts" /* Dts */); + var dts = ts.changeExtension(project.options.outFile, ".d.ts"); outputs.push(dts); if (project.options.declarationMap) { outputs.push(dts + ".map"); @@ -85447,7 +69344,7 @@ var ts; var cache = createFileMap(); var configParseHost = ts.parseConfigHostFromCompilerHost(host); function parseConfigFile(configFilePath) { - var sourceFile = host.getSourceFile(configFilePath, 100 /* JSON */); + var sourceFile = host.getSourceFile(configFilePath, 100); if (sourceFile === undefined) { return undefined; } @@ -85468,7 +69365,7 @@ var ts; return date2 > date1 ? date2 : date1; } function isDeclarationFile(fileName) { - return ts.fileExtensionIs(fileName, ".d.ts" /* Dts */); + return ts.fileExtensionIs(fileName, ".d.ts"); } function createBuildContext(options) { var invalidatedProjects = createFileMap(); @@ -85554,10 +69451,8 @@ var ts; ts.printHelp(buildOpts, "--build "); return ts.ExitStatus.Success; } - // Not a flag, parse as filename addProject(arg); } - // Nonsensical combinations if (clean && force) { buildHost.error(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "force"); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; @@ -85575,7 +69470,6 @@ var ts; return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (projects.length === 0) { - // tsc -b invoked with no extra arguments; act as if invoked with "tsc -b ." addProject("."); } var builder = createSolutionBuilder(compilerHost, buildHost, projects, { dry: dry, force: force, verbose: verbose }, system); @@ -85600,10 +69494,6 @@ var ts; } } ts.performBuild = performBuild; - /** - * A SolutionBuilder has an immutable set of rootNames that are the "entry point" projects, but - * can dynamically add/remove other projects based on changes on the rootNames' references - */ function createSolutionBuilder(compilerHost, buildHost, rootNames, defaultOptions, system) { if (!compilerHost.getModifiedTime || !compilerHost.setModifiedTime) { throw new Error("Host must support timestamp APIs"); @@ -85631,26 +69521,22 @@ var ts; throw new Error("System host must support watchFile / watchDirectory / setTimeout if using --watch"); var graph = getGlobalDependencyGraph(); if (!graph.buildQueue) { - // Everything is broken - we don't even know what to watch. Give up. return; } var _loop_12 = function (resolved) { var cfg = configFileCache.parseConfigFile(resolved); if (cfg) { - // Watch this file system.watchFile(resolved, function () { configFileCache.removeKey(resolved); invalidateProjectAndScheduleBuilds(resolved); }); - // Update watchers for wildcard directories if (cfg.configFileSpecs) { ts.updateWatchingWildcardDirectories(existingWatchersForWildcards, ts.createMapFromTemplate(cfg.configFileSpecs.wildcardDirectories), function (dir, flags) { return system.watchDirectory(dir, function () { invalidateProjectAndScheduleBuilds(resolved); - }, !!(flags & 1 /* Recursive */)); + }, !!(flags & 1)); }); } - // Watch input files for (var _i = 0, _a = cfg.fileNames; _i < _a.length; _i++) { var input = _a[_i]; system.watchFile(input, function () { @@ -85700,10 +69586,6 @@ var ts; function invalidateProject(configFileName) { var resolved = resolveProjectName(configFileName); if (resolved === undefined) { - // If this was a rootName, we need to track it as missing. - // Otherwise we can just ignore it and have it possibly surface as an error in any downstream projects, - // if they exist - // TODO: do those things return; } configFileCache.removeKey(resolved); @@ -85713,13 +69595,11 @@ var ts; if (graph) { queueBuildForDownstreamReferences(resolved); } - // Mark all downstream projects of this one needing to be built "later" function queueBuildForDownstreamReferences(root) { debugger; var deps = graph.dependencyMap.getReferencesTo(root); for (var _i = 0, deps_1 = deps; _i < deps_1.length; _i++) { var ref = deps_1[_i]; - // Can skip circular references if (!context.queuedProjects.hasKey(ref)) { context.queuedProjects.setValue(ref, true); queueBuildForDownstreamReferences(ref); @@ -85744,10 +69624,10 @@ var ts; continue; var resolved = resolveProjectName(next); if (!resolved) - continue; // ?? + continue; var proj = configFileCache.parseConfigFile(resolved); if (!proj) - continue; // ? + continue; var status = getUpToDateStatus(proj); verboseReportProjectStatus(next, status); if (status.type === UpToDateStatusType.UpstreamBlocked) { @@ -85774,7 +69654,6 @@ var ts; function getUpToDateStatusWorker(project) { var newestInputFileName = undefined; var newestInputFileTime = minimumDate; - // Get timestamps of input files for (var _i = 0, _a = project.fileNames; _i < _a.length; _i++) { var inputFile = _a[_i]; if (!compilerHost.fileExists(inputFile)) { @@ -85789,14 +69668,12 @@ var ts; newestInputFileTime = inputTime; } } - // Collect the expected outputs of this project var outputs = getAllProjectOutputs(project); if (outputs.length === 0) { return { type: UpToDateStatusType.ContainerOnly }; } - // Now see if all outputs are newer than the newest input var oldestOutputFileName = "(none)"; var oldestOutputFileTime = maximumDate; var newestOutputFileName = "(none)"; @@ -85806,8 +69683,6 @@ var ts; var isOutOfDateWithInputs = false; for (var _b = 0, outputs_1 = outputs; _b < outputs_1.length; _b++) { var output = outputs_1[_b]; - // Output is missing; can stop checking - // Don't immediately return because we can still be upstream-blocked, which is a higher-priority status if (!compilerHost.fileExists(output)) { missingOutputFileName = output; break; @@ -85817,8 +69692,6 @@ var ts; oldestOutputFileTime = outputTime; oldestOutputFileName = output; } - // If an output is older than the newest input, we can stop checking - // Don't immediately return because we can still be upstream-blocked, which is a higher-priority status if (outputTime < newestInputFileTime) { isOutOfDateWithInputs = true; break; @@ -85827,10 +69700,6 @@ var ts; newestOutputFileTime = outputTime; newestOutputFileName = output; } - // Keep track of when the most recent time a .d.ts file was changed. - // In addition to file timestamps, we also keep track of when a .d.ts file - // had its file touched but not had its contents changed - this allows us - // to skip a downstream typecheck if (isDeclarationFile(output)) { var unchangedTime = context.unchangedOutputs.getValueOrUndefined(output); if (unchangedTime !== undefined) { @@ -85849,32 +69718,25 @@ var ts; usesPrepend = usesPrepend || !!(ref.prepend); var resolvedRef = ts.resolveProjectReferencePath(compilerHost, ref); var refStatus = getUpToDateStatus(configFileCache.parseConfigFile(resolvedRef)); - // An upstream project is blocked if (refStatus.type === UpToDateStatusType.Unbuildable) { return { type: UpToDateStatusType.UpstreamBlocked, upstreamProjectName: ref.path }; } - // If the upstream project is out of date, then so are we (someone shouldn't have asked, though?) if (refStatus.type !== UpToDateStatusType.UpToDate) { return { type: UpToDateStatusType.UpstreamOutOfDate, upstreamProjectName: ref.path }; } - // If the upstream project's newest file is older than our oldest output, we - // can't be out of date because of it if (refStatus.newestInputFileTime <= oldestOutputFileTime) { continue; } - // If the upstream project has only change .d.ts files, and we've built - // *after* those files, then we're "psuedo up to date" and eligible for a fast rebuild if (refStatus.newestDeclarationFileContentChangedTime <= oldestOutputFileTime) { pseudoUpToDate = true; continue; } - // We have an output older than an upstream output - we are out of date ts.Debug.assert(oldestOutputFileName !== undefined, "Should have an oldest output filename here"); return { type: UpToDateStatusType.OutOfDateWithUpstream, @@ -85899,7 +69761,6 @@ var ts; if (usesPrepend) { pseudoUpToDate = false; } - // Up to date return { type: pseudoUpToDate ? UpToDateStatusType.UpToDateWithUpstreamTypes : UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: newestDeclarationFileContentChangedTime, @@ -85930,10 +69791,8 @@ var ts; }; function visit(projPath, inCircularContext) { if (inCircularContext === void 0) { inCircularContext = false; } - // Already visited if (permanentMarks[projPath]) return; - // Circular if (temporaryMarks[projPath]) { if (!inCircularContext) { hadError = true; @@ -85976,13 +69835,11 @@ var ts; resultFlags |= BuildResultFlags.DeclarationOutputUnchanged; var configFile = configFileCache.parseConfigFile(proj); if (!configFile) { - // Failed to read the config file resultFlags |= BuildResultFlags.ConfigFileErrors; context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Config file errors" }); return resultFlags; } if (configFile.fileNames.length === 0) { - // Nothing to build - must be a solution file, basically return BuildResultFlags.None; } var programOptions = { @@ -85992,7 +69849,6 @@ var ts; options: configFile.options }; var program = ts.createProgram(programOptions); - // Don't emit anything in the presence of syntactic errors or options diagnostics var syntaxDiagnostics = program.getOptionsDiagnostics().concat(program.getSyntacticDiagnostics()); if (syntaxDiagnostics.length) { resultFlags |= BuildResultFlags.SyntaxErrors; @@ -86003,7 +69859,6 @@ var ts; context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Syntactic errors" }); return resultFlags; } - // Don't emit .d.ts if there are decl file errors if (program.getCompilerOptions().declaration) { var declDiagnostics = program.getDeclarationDiagnostics(); if (declDiagnostics.length) { @@ -86016,7 +69871,6 @@ var ts; return resultFlags; } } - // Same as above but now for semantic diagnostics var semanticDiagnostics = program.getSemanticDiagnostics(); if (semanticDiagnostics.length) { resultFlags |= BuildResultFlags.TypeErrors; @@ -86028,11 +69882,10 @@ var ts; return resultFlags; } var newestDeclarationFileContentChangedTime = minimumDate; - program.emit(/*targetSourceFile*/ undefined, function (fileName, content, writeBom, onError) { + program.emit(undefined, function (fileName, content, writeBom, onError) { var priorChangeTime; if (isDeclarationFile(fileName) && compilerHost.fileExists(fileName)) { if (compilerHost.readFile(fileName) === content) { - // Check for unchanged .d.ts files resultFlags &= ~BuildResultFlags.DeclarationOutputUnchanged; priorChangeTime = compilerHost.getModifiedTime && compilerHost.getModifiedTime(fileName); } @@ -86068,7 +69921,6 @@ var ts; var resolvedNames = resolveProjectNames(configFileNames); if (resolvedNames === undefined) return undefined; - // Get the same graph for cleaning we'd use for building var graph = createDependencyGraph(resolvedNames); if (graph === undefined) return undefined; @@ -86077,7 +69929,6 @@ var ts; var proj = _a[_i]; var parsed = configFileCache.parseConfigFile(proj); if (parsed === undefined) { - // File has gone missing; fine to ignore here continue; } var outputs = getAllProjectOutputs(parsed); @@ -86114,7 +69965,6 @@ var ts; buildHost.message(ts.Diagnostics.A_non_dry_build_would_delete_the_following_files_Colon_0, filesToDelete.map(function (f) { return "\r\n * " + f; }).join("")); return ts.ExitStatus.Success; } - // Do this check later to allow --clean --dry to function even if the host can't delete files if (!compilerHost.deleteFile) { throw new Error("Host does not support deleting files"); } @@ -86166,15 +70016,12 @@ var ts; verboseReportProjectStatus(next, status); var projName = proj.options.configFilePath; if (status.type === UpToDateStatusType.UpToDate && !context.options.force) { - // Up to date, skip if (defaultOptions.dry) { - // In a dry build, inform the user of this fact buildHost.message(ts.Diagnostics.Project_0_is_up_to_date, projName); } continue; } if (status.type === UpToDateStatusType.UpToDateWithUpstreamTypes && !context.options.force) { - // Fake build updateOutputTimestamps(proj); continue; } @@ -86184,7 +70031,6 @@ var ts; continue; } if (status.type === UpToDateStatusType.ContainerOnly) { - // Do nothing continue; } var buildResult = buildSingleProject(next); @@ -86192,9 +70038,6 @@ var ts; } return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } - /** - * Report the build ordering inferred from the current project graph if we're in verbose mode - */ function reportBuildQueue(graph) { if (!context.options.verbose) return; @@ -86209,9 +70052,6 @@ var ts; function relName(path) { return ts.convertToRelativePath(path, compilerHost.getCurrentDirectory(), function (f) { return compilerHost.getCanonicalFileName(f); }); } - /** - * Report the up-to-date status of a project if we're in verbose mode - */ function verboseReportProjectStatus(configFileName, status) { if (!context.options.verbose) return; @@ -86226,7 +70066,6 @@ var ts; if (status.newestInputFileTime !== undefined) { return buildHost.verbose(ts.Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2, relName(configFileName), relName(status.newestInputFileName), relName(status.oldestOutputFileName)); } - // Don't report anything for "up to date because it was already built" -- too verbose break; case UpToDateStatusType.UpToDateWithUpstreamTypes: return buildHost.verbose(ts.Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, relName(configFileName)); @@ -86237,7 +70076,6 @@ var ts; case UpToDateStatusType.Unbuildable: return buildHost.verbose(ts.Diagnostics.Failed_to_parse_file_0_Colon_1, relName(configFileName), status.reason); case UpToDateStatusType.ContainerOnly: - // Don't report status on "solution" projects break; default: ts.assertTypeIsNever(status); @@ -86246,7 +70084,7 @@ var ts; } ts.createSolutionBuilder = createSolutionBuilder; })(ts || (ts = {})); -//# sourceMappingURL=compiler.js.map +//# sourceMappingURL=compiler.release.js.map var ts; (function (ts) { function countLines(program) { diff --git a/scripts/produceLKG.ts b/scripts/produceLKG.ts index 5bf3d3a5785..800234e688a 100644 --- a/scripts/produceLKG.ts +++ b/scripts/produceLKG.ts @@ -6,8 +6,9 @@ import path = require('path'); import removeInternal = require('remove-internal'); import glob = require('glob'); -const source = path.join(__dirname, "../built/local"); -const dest = path.join(__dirname, "../lib"); +const root = path.join(__dirname, ".."); +const source = path.join(root, "built/local"); +const dest = path.join(root, "lib"); const copyright = fs.readFileSync(path.join(__dirname, "../CopyrightNotice.txt"), "utf-8"); async function produceLKG() { @@ -16,6 +17,7 @@ async function produceLKG() { await copyLocalizedDiagnostics(); await buildProtocol(); await copyScriptOutputs(); + await buildTsc(); await copyDeclarationOutputs(); await writeGitAttributes(); } @@ -57,6 +59,10 @@ async function copyScriptOutputs() { await copyWithCopyright("typingsInstaller.js"); } +async function buildTsc() { + await exec(path.join(source, "tsc.js"), [`-b -f ${path.join(root, "src/tsc/tsconfig.release.json")}`]); +} + async function copyDeclarationOutputs() { await copyWithCopyright("typescript.d.ts"); await copyWithCopyright("typescriptServices.d.ts"); diff --git a/src/compiler/tsconfig.release.json b/src/compiler/tsconfig.release.json new file mode 100644 index 00000000000..39ffc791393 --- /dev/null +++ b/src/compiler/tsconfig.release.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outFile": "../../built/local/compiler.release.js", + "removeComments": true, + "preserveConstEnums": false + } +} diff --git a/src/tsc/tsconfig.release.json b/src/tsc/tsconfig.release.json new file mode 100644 index 00000000000..8431a864aae --- /dev/null +++ b/src/tsc/tsconfig.release.json @@ -0,0 +1,17 @@ +{ + "extends": "../tsconfig-base", + "compilerOptions": { + "outFile": "../../lib/tsc.js", + "stripInternal": true, + "preserveConstEnums": false, + "declaration": false, + "declarationMap": false, + "composite": false + }, + "files": [ + "tsc.ts" + ], + "references": [ + { "path": "../compiler/tsconfig.release.json", "prepend": true } + ] +}